Перейти к содержимому
1. Платформа и конструкция

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, крупный шрифт
Правила слоя. Энкодеры считаются в прерываниях. Угол стрелок отсчитывается от положения при включении питания, поэтому перед стартом стрелки ставят на нулевые метки шкал. Для стрелки-ввода нужен энкодер, различающий направление (два канала, A и B); однорядный щелевой энкодер считает любой поворот «вперёд» — с ним стрелку крутят только по часовой. Выход 5-вольтового эха дальномера подключают к ESP32 через делитель напряжения.

Разбор (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 см. Двигать стенку — показания следуют за ней.

Техника безопасности. Аккумулятор стенда — литиевый: не разбирать, не замыкать контакты, заряжать только штатным кабелем и не оставлять зарядку без присмотра. Моторы со стрелками — движущиеся части: не удерживать ось пальцами при работающей программе, длинные волосы убрать. Кабели датчиков не тянуть за провод — только за разъём.

Типичные ошибки

  1. Датчик расстояния слишком низко/высоко — луч уходит под стенку или над ней, показания скачут. Признак: расстояние «прыгает» на десятки см при неподвижной стенке.
  2. Датчик освещённости на 3–4 см от стола — отражение размывается, белое и чёрное почти не различаются. Держите 0,5–1 см.
  3. Хлипкое крепление контроллера — при нажатии кнопки устройство сдвигается, а в Задании 1 это меняет расстояние до стенки и рушит порог. Признак: после нажатий показания «поплыли».
  4. Забыли про -1 у датчика расстояния — программа выводит мусор, когда объект убрали.

Мини-проверка выхода

Чек-лист комплектации (сдаёт каждая команда): (1) устройство содержит все 5 обязательных компонентов регламента; (2) worked example выводит корректные сантиметры на обоих каналах; (3) команда отвечает: «почему датчик расстояния стоит заподлицо с передним краем?»

Уровни сложности