====== 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()