Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
10i_2025_algo [2025/02/14 16:18] super_admin |
10i_2025_algo [2025/10/07 14:22] (текущий) super_admin [РОБОТ МФТИ] |
||
|---|---|---|---|
| Строка 57: | Строка 57: | ||
| * https://uchebnik.mos.ru/material/603948?sharing_key=29f7b5b6-cca7-4fa5-8184-f551aa76c9d1 v2 Робот с гусеницами и УЗ | * https://uchebnik.mos.ru/material/603948?sharing_key=29f7b5b6-cca7-4fa5-8184-f551aa76c9d1 v2 Робот с гусеницами и УЗ | ||
| + | ===== Четвёртый этап ===== | ||
| + | |||
| + | * [[https://disk.yandex.ru/d/uEbF0xSYLLpxSQ]] материалы, задание | ||
| + | * https://school.mos.ru/vrlabs/electrodynamics/app?link=9frFsPHb5f8ag3Cdk0f5 - вирт. лаб. Эл. дин. | ||
| + | * https://skysmart.ru/articles/physics/parallelnoe-i-posledovatelnoe-soedinenie расчёт сопротивлений | ||
| + | * https://forms.yandex.ru/cloud/67d428835056906066cbd6f4/ - форма для отчёта о проделанной работе. | ||
| + | |||
| + | ===== Пятый этап ===== | ||
| + | |||
| + | * https://uchebnik.mos.ru/material/50a49afd-b7d0-4ecb-983c-daf55c4baed1?sharing_key=5a69757f-6cf3-4d3c-ae8b-efdb42b36549 - пример частично собранного варианта | ||
| + | * [[https://uchebnik.mos.ru/material/cb7d71a7-d539-49af-a8d7-f186dace09bb?menuReferrer=catalogue]] Виртуальная лаборатория: "Теория вероятностей". | ||
| + | * [[https://uchebnik.mos.ru/material/cb7d71a7-d539-49af-a8d7-f186dace09bb]] Виртуальная лаборатория: "Теория вероятностей". | ||
| + | * [[https://uchebnik.mos.ru/material/a78e5946-3746-441c-8645-42005d56b1f0]] Как пользоваться лабораторией «Теория вероятностей» | ||
| + | * [[https://uchebnik.mos.ru/material/684c4222-349f-47aa-a2c6-0e6dec8313bd]] Математический Конструктор | ||
| + | * [[https://uchebnik.mos.ru/material/684c4222-349f-47aa-a2c6-0e6dec8313bd?menuReferrer=catalogue]] Математический Конструктор | ||
| + | * [[https://disk.yandex.ru/d/iNVgpsBiJqXEQQ]] КИБЕР-БОЙ ИТ 5 ЭТАП: ПРЕЗЕНТАЦИЯ, ЗАДАНИЕ, КРИТЕРИИ ОЦЕНКИ | ||
| + | * [[https://proproprogs.ru/files/balak_scool_tp.pdf]] - "Теория вероятностей для школьников", Балакирев | ||
| + | * [[https://stepik.org/course/136024/syllabus]] Добрая теория вероятностей (для ЕГЭ) с Сергеем Балакиревым | ||
| + | * [[https://stepik.org/join-class/f17c4c4039e87ea9a32a1e9bdeabd103b3d8c334]] - Задачи по теории вероятности для 10и: Добрая теория вероятностей (для ЕГЭ) с Сергеем Балакиревым | ||
| + | * [[https://intepra.ru/oge/bernoulli_distribution.html]] - теория | ||
| + | * https://uchebnik.mos.ru/material/b351783a-bb36-4200-96a0-5ea89bb67f23?sharing_key=29483cc3-476b-4022-a606-736f3b0da041 результат | ||
| ==== Вспомогательные ресурсы: ==== | ==== Вспомогательные ресурсы: ==== | ||
| Строка 368: | Строка 389: | ||
| digitalWrite(led_pin, 0); | digitalWrite(led_pin, 0); | ||
| state ++; | state ++; | ||
| + | break; | ||
| + | case 6: // | ||
| + | stopMotors(); | ||
| break; | break; | ||
| default: | default: | ||
| Строка 419: | Строка 443: | ||
| </code> | </code> | ||
| + | |||
| + | |||
| + | |||
| + | ====== РОБОТ МФТИ ====== | ||
| + | |||
| + | [[http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html]] РОБОТ | ||
| + | * {{ :robot-tasks-master_.zip |}} - Архив с файлами робота (модификация: в файле pyrob/api.py добавлен, приведенный ниже код, упрощающий написание команд (инструкций) управления роботом) | ||
| + | |||
| + | <code python> | ||
| + | ml = move_left #Пройти n клеток влево (по умолчанию n = 1) | ||
| + | mr = move_right #Пройти n клеток вправо (по умолчанию n = 1) | ||
| + | mu = move_up #Пройти n клеток вверх (по умолчанию n = 1) | ||
| + | md = move_down #Пройти n клеток вниз (по умолчанию n = 1) | ||
| + | wu = wall_is_above #если сверху стена, возвращает True, иначе — False | ||
| + | wd = wall_is_beneath #если снизу стена, возвращает True, иначе — False | ||
| + | wl = wall_is_on_the_left #если слева стена, возвращает True, иначе — False | ||
| + | wr = wall_is_on_the_right #если справа стена, возвращает True, иначе — False | ||
| + | fill = fill_cell #Закрасить текущую клетку | ||
| + | #cell_is_filled #Возвращает True, если текущая клетка закрашена | ||
| + | #mov #Поместить значение v в регистр r | ||
| + | |||
| + | </code> | ||
| + | |||
| + | **Пример решения первой задачи** | ||
| + | |||
| + | {{:2023-10-15_22_50_21-window.png?nolink|}} | ||
| + | |||
| + | <code python> | ||
| + | #!/usr/bin/python3 | ||
| + | |||
| + | from pyrob.api import * | ||
| + | |||
| + | |||
| + | @task | ||
| + | def task_1_1(): | ||
| + | #pass | ||
| + | mr(2) # Пройти 2 клетки вправо или: move_right(2) | ||
| + | md(1) # Пройти 1 клетку вниз или: move_down(2) | ||
| + | |||
| + | |||
| + | if __name__ == '__main__': | ||
| + | run_tasks() | ||
| + | </code> | ||
| + | |||
| + | |||
| + | <code> | ||
| + | |||
| + | const int LM_s1 = 10; // левый мотор вход 1 | ||
| + | const int LM_s2 = 9; // левый мотор вход 2 | ||
| + | const int RM_s1 = 5; // правый мотор вход 1 | ||
| + | const int RM_s2 = 6; // правый мотор вход 2 | ||
| + | |||
| + | int led_pin = 13; | ||
| + | // Укажем пины для подключения УЗ датчика | ||
| + | int trigPin = 12; | ||
| + | int echoPin = 11; | ||
| + | int s_for_obj = 0; | ||
| + | // текущее состояние системы | ||
| + | int state = 0; // начальное состояние | ||
| + | |||
| + | void setup(){ | ||
| + | Serial.begin(9600); | ||
| + | |||
| + | //правый | ||
| + | pinMode(RM_s1, OUTPUT); | ||
| + | pinMode(RM_s2, OUTPUT); | ||
| + | //левый | ||
| + | pinMode(LM_s1, OUTPUT); | ||
| + | pinMode(LM_s2, OUTPUT); | ||
| + | // УЗ | ||
| + | pinMode(trigPin, OUTPUT); | ||
| + | pinMode(echoPin, INPUT); | ||
| + | // светодиод | ||
| + | pinMode(led_pin, OUTPUT); | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | int dist() // функция для вычисления расстояния | ||
| + | { | ||
| + | int t,s; // локальные переменные время, расстояние | ||
| + | // установить высокий уровень на пине Trig | ||
| + | digitalWrite(trigPin, 1); | ||
| + | // подождать 10 мс | ||
| + | delay(10/16); | ||
| + | digitalWrite(trigPin, 0); | ||
| + | // узнаем время | ||
| + | t = pulseIn(echoPin, 1); | ||
| + | // вычисляем расстояние | ||
| + | s = t * 0.034/2; | ||
| + | return (s); | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | void loop() { | ||
| + | s_for_obj = dist(); | ||
| + | //Serial.println(s_for_obj );// вывод измеренного расстояния в окно сообщений | ||
| + | //delay(20/16); | ||
| + | Serial.println(state); | ||
| + | switch (state) { | ||
| + | case 0: // начальное состояние: вперёд до первого препятствия | ||
| + | case 2: // после первого поворота: вперёд до второго препятствия | ||
| + | if (s_for_obj == 0 || s_for_obj > 50){ | ||
| + | moveForward(); | ||
| + | } else { | ||
| + | stopMotors(); | ||
| + | state ++; | ||
| + | } | ||
| + | break; | ||
| + | |||
| + | case 1: // перед первым препятствием: левый поворот | ||
| + | case 3: // перед вторым препятствием: левый поворот | ||
| + | turnLeft(); | ||
| + | delay(2970/16); | ||
| + | state ++; | ||
| + | stopMotors(); | ||
| + | break; | ||
| + | |||
| + | case 4: // после второго поворота: прямолинейный путь до остановки | ||
| + | moveForward(); | ||
| + | delay(8000/16); // время прямолинейного движения до остановки | ||
| + | state ++; | ||
| + | stopMotors(); | ||
| + | break; | ||
| + | |||
| + | case 5: // после остановки на площадке: включить светодиод на 4 секунды | ||
| + | // ... | ||
| + | break; | ||
| + | default: | ||
| + | stopMotors(); | ||
| + | break; | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | void moveForward() { | ||
| + | //Serial.println("up"); | ||
| + | digitalWrite(LM_s1, 1); | ||
| + | digitalWrite(LM_s2, 0); | ||
| + | digitalWrite(RM_s1, 1); | ||
| + | digitalWrite(RM_s2, 0); | ||
| + | delay(20); | ||
| + | } | ||
| + | |||
| + | void moveBackward() { | ||
| + | //Serial.println("down"); | ||
| + | |||
| + | digitalWrite(LM_s1, 0); | ||
| + | digitalWrite(LM_s2, 1); | ||
| + | digitalWrite(RM_s1, 0); | ||
| + | digitalWrite(RM_s2, 1); | ||
| + | delay(20); | ||
| + | } | ||
| + | |||
| + | void turnLeft() { | ||
| + | digitalWrite(LM_s1, LOW); | ||
| + | digitalWrite(LM_s2, HIGH); | ||
| + | digitalWrite(RM_s1, HIGH); | ||
| + | digitalWrite(RM_s2, LOW); | ||
| + | delay(20); | ||
| + | } | ||
| + | |||
| + | void turnRight() { | ||
| + | digitalWrite(LM_s1, HIGH); | ||
| + | digitalWrite(LM_s2, LOW); | ||
| + | digitalWrite(RM_s1, LOW); | ||
| + | digitalWrite(RM_s2, HIGH); | ||
| + | delay(20); | ||
| + | } | ||
| + | |||
| + | void stopMotors() { | ||
| + | digitalWrite(LM_s1, LOW); | ||
| + | digitalWrite(LM_s2, LOW); | ||
| + | digitalWrite(RM_s1, LOW); | ||
| + | digitalWrite(RM_s2, LOW); | ||
| + | //delay(20); | ||
| + | } | ||
| + | |||
| + | </code> | ||
| + | |||
| + | |||