====== 10И Введение в робототехнику ====== ===== Мобильные роботы на базе платы Arduino ===== * https://uchebnik.mos.ru/material/512772?sharing_key=9f41055a-e11d-49c9-a04c-8c7791c6689d мигающий светодиод * https://uchebnik.mos.ru/material/512435?sharing_key=8f5898c3-43bc-40d4-99b5-862287fd3dfb мобильный робот с дистанционным управлением * https://wokwi.com/projects/344891652101374548 мигающий светодиод * https://wokwi.com/projects/291958456169005577 пианино * https://wokwi.com/projects/322062421191557714 дисплей * https://blog.wokwi.com/ БЛОГ * https://uchebnik.mos.ru/material/516814?sharing_key=555d591a-1be3-4684-9167-deee7f693889 мигающий светодиод * https://www.perplexity.ai/search/podkliuchite-k-arduino-knopku-ur5BM33PQm6VpBuV32mBEQ Подключите к Arduino кнопку и три светодиода (макет светофора) и кнопку. Напиши код обработки нажатия кнопки. Каждый раз нажатием по кнопке светофор будет переключаться в следующее состояние. С красного на желтый, с желтого на зеленый, с зеленого на красный, и т.д. ===== КИБЕР-БОЙ ===== ==== Тренировочное задание ==== * [[https://uchebnik.mos.ru/material/3697?menuReferrer=catalogue]] Моделирование роботов * [[https://disk.yandex.ru/d/xwEHbzQcM1avVAg]] Дистанционное управление роботом * [[https://disk.yandex.ru/i/xMA8bQK3cBFnKrg]] Подключение сервопривода (схема) * [[https://disk.yandex.ru/d/xxYwty4bc2qFNWw]] Программа управления сервоприводом * [[https://uchebnik.mos.ru/material/575801?sharing_key=8abe3114-a651-4d76-b836-de4c905f336f]] - **ссылка на робота с манипулятором** * https://uchebnik.mos.ru/material/x581130?sharing_key=25ee8317-0888-402f-bde4-e2305745b89c - **робот с манипулятором и захватом** ==== Первый этап ==== * {{ :этап_1_задание.pdf |этап 1 задание}} * {{ :этап_1_критерии.pdf | этап 1 критерии}} * https://disk.yandex.ru/i/IsDYi906-dPCKw - Кибер-бой этап 1 презентация * {{ :таблица_кодов.xlsx |}} * https://uchebnik.mos.ru/material/3696?menuReferrer=catalogue - **Виртуальная лаборатория** * https://forms.yandex.ru/cloud/673f3a77f47e73ddb3681c59/ форма для отчёта * https://disk.yandex.ru/d/xMVOo3xNf2gTjgw ==== Второй этап ==== * {{ :этап_2_задание.pdf | Этап 2. Задание}} * [[https://uchebnik.mos.ru/material/3695 | Виртуальная лаборатория Технология. Построение логических схем ]] * {{::vl_logika_1.png?400|}} * {{:vl_logika_2.png?400|}} * {{:vl_logika_3.png?400|}} ==== Сумматор двухразрядных чисел ==== {{::сумматор_дв_р_2.png?400|}} * https://disk.yandex.ru/i/x2jP6jmANC6PaPg * https://disk.yandex.ru/i/x4p33r-cuciUcgw * https://disk.yandex.ru/d/xp7SvlJgDh1LHWg * https://disk.yandex.ru/d/xTX6XddD5N9rk8g ===== Третий этап ===== * [[https://uchebnik.mos.ru/material/3697]] - **Виртуальная лаборатория: "Технология. Моделирование роботов**" * [[https://disk.yandex.ru/d/xbNtfVR2eoPMgg]] - ссылка на учебные материалы (задание, критерии оценки, презентация, демонстрация возможного результата) * [[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:%D1%81%D0%B2%D0%B5%D1%82%D0%BE%D0%B4%D0%B8%D0%BE%D0%B4| Светодиод. Характеристики. Схема включения. Подбор резистора]] * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C-%D0%BD%D0%B0%D0%BF%D1%80%D1%8F%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F| Делитель напряжения]] * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0 | Кнопка. Дребезг. Схема подключения]] * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BA%D0%BD%D0%BE%D0%BF%D0%BE%D1%87%D0%BD%D1%8B%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C?s[]=%D0%B4%D1%80%D0%B5%D0%B1%D0%B5%D0%B7%D0%B3 | Учебный пример: кнопочный переключатель]] * [[https://wiki.amperka.ru/%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B8-%D0%B8-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D1%8B:7-%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9-%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80 | Семисегментный индикатор]] * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BF%D1%8C%D0%B5%D0%B7%D0%BE%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D0%BA | Пьезодинамик]] ==== Справочник по функциям C++ для Arduino ==== * [[https://docs.arduino.cc/language-reference/#functions]] * [[https://docs.arduino.cc/language-reference/en/functions/advanced-io/tone/]] - функция для подключения кнопки ==== Виртуальные модели в Workwi ==== * https://wokwi.com/projects/415154760578950145 модель секундомера (недостаток: нет управляющей кнопки и токоограничительных резисторов) * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%D0%BE%D0%BC%D0%B5%D1%80 | Секундомер]] * [[https://wokwi.com/projects/new/arduino-uno]] Симулятор Arduino Uno * [[https://uchebnik.mos.ru/material/534755?sharing_key=a415b923-67ad-4069-a543-131d47f214db| вариант]] * https://wokwi.com/projects/415170812109939713 ====== Программирование микроконтроллеров на Arduino ====== * https://stepik.org/course/69511/syllabus Arduino в online. Быстрый старт !!! * [[https://stepik.org/join-class/75e25fb16581d1a1645b8201775699f76f3370b7 | Ссылка на учебный класс. Знакомство с платформой ARDUINO. 10И]] * [[https://wokwi.com/projects/new/arduino-uno]] **Симулятор Arduino Uno** * https://wiki.amperka.ru/ * https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BC%D0%B0%D1%8F%D1%87%D0%BE%D0%BA * https://www.arduino.cc/reference/cs/language/structure/control-structure/switchcase/ ====== Бегущие огни ====== int pin_0 = 7; int n = 0; void setup() { pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(5, OUTPUT); } void loop() { digitalWrite(pin_0 - n, 1); delay(100); digitalWrite( pin_0 - n, 0); n = (n + 1) % 3; delay(900); } ====== Подключение кнопки с учетом борьбы с дребезгом кнопок ====== * [[https://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BA%D0%BD%D0%BE%D0%BF%D0%BE%D1%87%D0%BD%D1%8B%D0%B9-%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C | Эксперимент 10. Кнопочный переключатель]] * [[https://www.perplexity.ai/search/ty-v-roli-uchitelia-informatik-u4EemCNTTDaPpv4DwDnA3w | Эксперименты с кнопкой]] // switch...case switch (var) { case 1: //do something when var equals 1 break; case 2: //do something when var equals 2 break; default: // if nothing else matches, do the default // default is optional break; } * [[https://wokwi.com/projects/4213320841703188490]] многофункциональная кнопка (ссылка закодирована) * https://www.circuitlab.com/editor/#?id=7pq5wm&from=homepage ====== Дополнительные учебные курсы по Arduino ====== * https://stepik.org/course/55014/syllabus * https://stepik.org/course/102886/syllabus * https://stepik.org/course/108374/syllabus ===== Программирование ТРИК на Python!!! ===== * https://trikset.com/products/trik-controller * https://help.trikset.com/trik/programming-code справочная документация * https://trikset.com/education/methodical методические рекомендации * {{ ::9-4trik_робототехника_01.pdf | Знакомство с Trik Studio}} * УРОКИ: * {{ :trik_studio_01.pdf | 1. Знакомство с Trik Studio. Управление моторами на языке Python}} * {{ :trik_studio_02.pdf | 2. Обратная связь. Энкодеры}} * {{ ::trik_studio_03.pdf | 3. Обратная связь. Датчик расстояния}} * {{ :trik_studio_04.pdf | 4. Регуляторы}} * {{ :trik_studio_05.pdf | 5. Движение по линии}} * {{ :trik_py.zip | Практика. Задачи }} ===== Виртуальные лаборатории МЭШ ===== * https://uchebnik.mos.ru/material/3697?menuReferrer=catalogue Моделирование роботов ====== Алгоритмы и структуры данных на языке программирования Python ====== ===== Ресурсы ===== ==== Яндекс Учебник ==== * https://education.yandex.ru/kids/ Вход для ученика * У03300338 - код школы ==== Международная платформа с элементами игрофикации ==== * https://www.codingame.com/start/ ==== Учебные курсы ==== * https://stepik.org/course/9232/promo Основы программирования на языке Python для школьников * https://education.yandex.ru/ege Персональный ИИ‑помощник для подготовки к ЕГЭ по информатике ===== Программа ===== ==== Работа с исполнителем Робот на языке Python (перемещение робота в среде исполнителя) ==== * Составные условия, операторы (Python), Цикл FOR (Python), Цикл While (Python) * Решение задач с помощью циклов (Python) * Задачи с исполнителем Робот ==== Строки в Python ==== * Индексы и срезы строк * Сравнение строк, методв строк ==== Вещественные числа ==== * Вещественные числа и тип float. Округление ==== Массивы ==== * Массивы и основные операции с ними. Добавление элементов в массив * Индексы элементов массива, срезы.Два типа циклов по массиву. * Задачи поиска элемента в массиве. Решение и разбор задач ==== Методы списков/строк ==== * Методы: join(), split(), index(), count(), pop(), remove(), insert() * Встроенные операторы и функции: in, not in, max, min * Использование массивов для решения задач ==== Функции и модули ==== * Функции, основные понятия. Параметры функций * Стандартная библиотека Python. Модули * Рефакторинг * Рекурсия * Решение задач при помощи рекурсивных функций * Чтение и запись данных в файл на Python ==== Задачи на алгоритмы ==== * Сложность алгоритмов * Двумерные списки (массивы) * Словари и множества * НОД и НОК. Разбор и решение задач * Простые числа и разложение на простые множители * Сортировка. Задачи на сортировку * Делители натурального числа * Переборные алгоритмы * Библиотека itertools для решения переборных и комбинаторных задач * Динамическое программирование ч.1 * Динамическое программирование ч.2 * Кластерный анализ ч.1 * Кластерный анализ ч.1 * Алгоритмические задачи ==== Алгоритмы для исполнителя Черепаха ==== * Алгоритмы для исполнителя Черепаха ч.1 * Алгоритмы для исполнителя Черепаха ч.2 ==== Алгоритмы из Codingame ==== # Автор: Леднёв Алексей a = [i for i in input().split()] k = len(a)*2-1 s = [[0 for i in range(k)]for i in range(k)] for l in range(len(a)) : for i in range(l,k-l) : for j in range(l,k-l) : if i == l or i == k-(l+1) or j == l or j == k-(l+1) : s[i][j] = a[l] for i in s : print(*i) ''' input 1 2 3 output 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 ''' n = int(input()) r = sum([int(input()) for i in range(n)]) print(f'{["Foo", "Bar"][r<0]} & {["Qux", "Baz"][r%2 == 0]}') ==== Codingame ==== **08.10.24** - https://www.codingame.com/clashofcode/clash/38697487e977531a4ba0c9a8720fcabf1c00da5 **10.10.24** - https://www.codingame.com/clashofcode/clash/38727230a4f5fc58f97a519e9ccd26a3800daf1 - https://www.codingame.com/clashofcode/clash/3872749a906852aefa7b48feb28f8ee3fe926cb - https://www.codingame.com/clashofcode/clash/38727726c60aff168bc687f6c523f2a559c135d **15.10.2024** - https://www.codingame.com/clashofcode/clash/3878868eef1d1761ee7dcf5b2443ae163c21d8f - https://www.codingame.com/clashofcode/clash/387890153d02de2ba999832979203a88d25a9d8 **17.10.2024** - https://www.codingame.com/clashofcode/clash/388169731a26aadb3fe1f99acefdd32e27a744e - https://www.codingame.com/clashofcode/clash/388172011426d2bde84c52e0d8186a3c1d00d20 - https://www.codingame.com/clashofcode/clash/388173775d8defecd19ecf643be9346f77d1fbb - https://www.codingame.com/clashofcode/clash/388174749d606a3990891ea0c15dd097e45144e - https://www.codingame.com/clashofcode/clash/38817641f823dea30a9923f1fcd0915a4713944 **22.10.2024** - https://www.codingame.com/clashofcode/clash/38882773ed69ec08c3c131b4ea2deb3585dd3b7 - https://www.codingame.com/clashofcode/clash/3888303b4593ea9edcae98ca9f4269ed98d2290 - https://www.codingame.com/clashofcode/clash/3888322b2ac7ff74811ffdab82f1d111483d91a **24.10.2024** - https://www.codingame.com/clashofcode/clash/389081723b18d5e80676437434bb8c5da3fc51f - https://uchebnik.mos.ru/material/607641?sharing_key=0f8055c9-7135-4651-b22f-6c68bf58df64 !!! 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); } ====== РОБОТ МФТИ ====== [[http://judge.mipt.ru/mipt_cs_on_python3/labs/lab2.html]] РОБОТ * {{ :robot-tasks-master_.zip |}} - Архив с файлами робота (модификация: в файле pyrob/api.py добавлен, приведенный ниже код, упрощающий написание команд (инструкций) управления роботом) 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 **Пример решения первой задачи** {{:2023-10-15_22_50_21-window.png?nolink|}} #!/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()