1. Платформа и конструкция
Занятие 1. Платформа и конструкция под регламент
Цель занятия: обучающиеся собирают стационарное устройство, отвечающее всем требованиям регламента, и выводят первое показание датчика на экран.
Занятие открывается входной диагностикой (10 мин, см. главную страницу модуля) и над-образовательным блоком: знакомство, правила работы в парах, договорённость «код пишет каждый, устройство одно».
Требования регламента к устройству
Регламент (раздел «Описание задания») требует стационарное устройство — оно не ездит, а стоит на рабочем столе перед стартовой линией поля. Обязательная комплектация:
| Компонент | Зачем в задачах | На стенде кабинета (ESP32) |
|---|---|---|
| 2 мотора с энкодерами или сервопривода | ввод чисел поворотом стрелки (компетенция 1.3.3); вывод стрелкой на шкале (компетенция 3) | два мотора с энкодерами: стрелка-ввод и стрелка-вывод |
| Датчик расстояния | пороги, зоны, наличие/высота объекта (1.2–1.3.1) | ультразвуковой дальномер |
| Датчик освещённости | чёрно-белые карточки (1.3.2) | оптический датчик отражения (светодиод + фототранзистор) |
| Экран | вывод переменных и результатов | экран ST7735 + консоль (print) |
| ≥2 датчика касания или 2 кнопки | подтверждение ввода, «по нажатию кнопки вывести…» | две кнопки на стенде |
Serial.println() в консоль страхует, если судья согласен смотреть ноутбук; экран ST7735 показывает число крупно и без ноутбука. На турнире заранее уточните у судьи, какой канал он принимает.Слой железа
Все примеры модуля написаны на C++ для ESP32 (Arduino IDE) и обращаются к железу
только через файл stend.h. Сменили датчик или экран — меняется тело одной функции,
алгоритмы занятий не трогаем.
// stend.h — слой железа стенда «Алгоритмика» (ESP32, Arduino IDE)
enum Btn { BTN_L, BTN_R }; // левая и правая кнопки
enum Led { LED_OFF, LED_GREEN, LED_RED };
void stendBegin(); // выводы, экран, прерывания энкодеров
int distMM(); // УЗ-дальномер, мм; -1, если объекта нет
int reflection(); // оптический датчик, 0..100 % отражения
int dialDeg(); // стрелка-ввод: угол от положения при включении, 0..359
void needleTo(int deg); // стрелка-вывод: угол от метки «0», -180..180
bool pressed(Btn b); // true, пока кнопка нажата
void indicator(Led c); // светодиод-индикатор
void beep(int freq, int ms); // бузер
void screen(const String& text); // экран ST7735, крупный шрифт
Разбор (worked example): «расстояние на экран»
Минимальная программа компетенции 1.1 — эталон, из которого вырастут все решения модуля. Псевдокод:
цикл бесконечно:
d ← показание датчика расстояния (мм)
если d корректно (объект виден):
вывести округлённое d/10 (см) на экран и в консоль
пауза 100 мсC++ (Arduino IDE), стенд кабинета:
#include "stend.h"
void setup() {
Serial.begin(115200);
stendBegin();
}
void loop() {
int d = distMM(); // мм; -1, если объекта нет
if (d > 0) {
int sm = (d + 5) / 10; // регламент требует сантиметры
Serial.printf("Расстояние: %d см\n", sm);
screen(String(sm));
}
delay(100);
}Построчный разбор: distMM() возвращает миллиметры или -1, когда объект вне зоны видимости — проверка d > 0 обязательна, иначе на экран уедет «-0»; (d + 5) / 10 — округление до сантиметра, потому что судья сверяет сантиметры по линейке; пауза 100 мс — чтобы экран не мерцал и датчик не опрашивался вхолостую.
Практика
Собрать основание
Плоская рама из балок: контроллер закреплён горизонтально экраном вверх, кнопки доступны без риска сдвинуть устройство. Проверка: устройство поднимается за раму одной рукой, ничего не отваливается.
Закрепить датчик расстояния «на стенку»
Датчик горизонтально, «глазами» вперёд, по центру короткой стороны, высота оси 5–10 см — чтобы луч попадал в стенку 9×21 см, а не поверх неё. Нос датчика — заподлицо с передним краем рамы: так расстояние «от робота» и «от датчика» совпадают, судья меряет линейкой от переднего края.
Закрепить датчик освещённости «на карточку»
Вертикально вниз, зазор до стола 0,5–1 см — это прямое требование Задания 2 регламента. Сделайте выносной кронштейн сбоку рамы, чтобы карточку 5×5 см было удобно подкладывать, не задевая устройство.
Установить моторы под будущие шкалы
Оба мотора осями вверх или вперёд на жёстких креплениях: один — ввод (стрелку крутит рука), второй — вывод (стрелку крутит программа). Ось не должна задевать раму на полном обороте.
Запустить worked example и проверить
Залить программу, поставить стенку на 15 см — экран и консоль показывают 15 ± 1 см. Двигать стенку — показания следуют за ней.
Типичные ошибки
- Датчик расстояния слишком низко/высоко — луч уходит под стенку или над ней, показания скачут. Признак: расстояние «прыгает» на десятки см при неподвижной стенке.
- Датчик освещённости на 3–4 см от стола — отражение размывается, белое и чёрное почти не различаются. Держите 0,5–1 см.
- Хлипкое крепление контроллера — при нажатии кнопки устройство сдвигается, а в Задании 1 это меняет расстояние до стенки и рушит порог. Признак: после нажатий показания «поплыли».
- Забыли про
-1у датчика расстояния — программа выводит мусор, когда объект убрали.
Мини-проверка выхода
Чек-лист комплектации (сдаёт каждая команда): (1) устройство содержит все 5 обязательных компонентов регламента; (2) worked example выводит корректные сантиметры на обоих каналах; (3) команда отвечает: «почему датчик расстояния стоит заподлицо с передним краем?»