Инструменты пользователя

Инструменты сайта


10i_2025_algo

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
10i_2025_algo [2025/02/06 16:28]
super_admin [Подключение кнопки с учетом борьбы с дребезгом кнопок]
10i_2025_algo [2025/03/14 16:16] (текущий)
super_admin [Четвёртый этап]
Строка 51: Строка 51:
  
 ===== Третий этап ===== ===== Третий этап =====
-  * [[https://​uchebnik.mos.ru/​material/​3697?​menuReferrer=catalogue]] - **Виртуальная лаборатория:​ "​Технология. Моделирование роботов**"​+  * [[https://​uchebnik.mos.ru/​material/​3697]] - **Виртуальная лаборатория:​ "​Технология. Моделирование роботов**"​
   * [[https://​disk.yandex.ru/​d/​xbNtfVR2eoPMgg]] - ссылка на учебные материалы (задание,​ критерии оценки,​ презентация,​ демонстрация возможного результата)   * [[https://​disk.yandex.ru/​d/​xbNtfVR2eoPMgg]] - ссылка на учебные материалы (задание,​ критерии оценки,​ презентация,​ демонстрация возможного результата)
-  * https://​uchebnik.mos.ru/​material/​x581130?​sharing_key=25ee8317-0888-402f-bde4-e2305745b89c Робот с манипулятором и ИК датчиком (ссылка закодирована).+  * [[https://​uchebnik.mos.ru/​material/​603925?​sharing_key=725feac9-6787-4e7f-bd00-0cdfaa781676]] Пример работы УЗ датчика v1 
 +  * https://​uchebnik.mos.ru/​material/​512435?​sharing_key=36ece898-ef99-40a8-b9ac-98973d7cd87e Робот ​с гусеницами
 +  * 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://​wiki.amperka.ru/​%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:​%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B-%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0 | Основные законы электричества]]   * [[https://​wiki.amperka.ru/​%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:​%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D1%8B-%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0 | Основные законы электричества]]
Строка 279: Строка 286:
  
   - https://​www.codingame.com/​clashofcode/​clash/​389081723b18d5e80676437434bb8c5da3fc51f   - https://​www.codingame.com/​clashofcode/​clash/​389081723b18d5e80676437434bb8c5da3fc51f
 +  - https://​uchebnik.mos.ru/​material/​607641?​sharing_key=0f8055c9-7135-4651-b22f-6c68bf58df64 !!!
 +
 +<code c++>
 +
 +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 > 68){
 +         ​moveForward();​
 +    } else {
 +         ​stopMotors();​
 +         state ++;
 +    }
 +    break;
 +
 +  case 1: // перед первым препятствием:​ левый поворот
 +  case 3: // перед вторым препятствием:​ левый поворот
 +    turnLeft();
 +    delay(2970/​16);​
 +    state ++;
 +    stopMotors();​
 +    break;
 +
 +  case 4: // после второго поворота:​ прямолинейный путь до остановки
 +    moveForward();​
 +    delay(23000/​16);​ // время прямолинейного движения до остановки
 +    state ++;
 +    stopMotors();​
 +    break;
 +
 +  case 5: // после остановки на площадке:​ включить светодиод на 4 секунды
 +    digitalWrite(led_pin,​ 1);
 +    delay(4000/​16);​
 +    digitalWrite(led_pin,​ 0);
 +    state ++;
 +    break;
 +  case 6: // 
 +    stopMotors();​
 +    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>​
 +
 +
 +
 +====== РОБОТ МФТИ ======
 +
 +[[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>​
 +
 +
10i_2025_algo.1738848509.txt.gz · Последние изменения: 2025/02/06 16:28 — super_admin