Собираем робота и оживляем плату
Собери робота и проверь каждый установленный узел диагностическим скетчем.
Результат урока
Собранный робот: оба мотора проверены в обе стороны и останавливаются, оба датчика линии реагируют на белое и чёрное. Результаты проверки записаны в журнал.
Ты научишься
- Собрать ходовую часть робота по инструкции и проверить каждый узел.
- Различать перед, зад, левую и правую стороны робота.
- Загрузить программу в Arduino и объяснить, что делают setup() и loop().
- Проверить оба мотора, их остановку и оба датчика линии; отличать команду программы от наблюдаемого результата.
Нужно знать
Ничего — это первый урок.
Понадобится
Зачем этот урок
Весь курс ты будешь работать с одним роботом — своим. Сегодня соберёшь его ходовую часть, установишь «мозг» робота — плату Arduino — и напишешь первую программу. К концу урока ты проверишь каждый установленный узел и запишешь, что он действительно работает.

Пока идёт сборка, батарейный отсек отключён, а USB-кабель не подключён к компьютеру. Батарейный отсек к шилду заранее подключает взрослый. Моторы ты включаешь и выключаешь только выключателем.
Распределите роли
3 минЧто должен делать робот. Сначала роботу нужно правильно выполнять отдельные команды: вращать каждое колесо, останавливаться и сообщать показания датчиков. До самостоятельной поездки проверим каждый узел по очереди, чтобы искать причину ошибки в одном месте.
Что используем и как это работает. Arduino Uno выполняет программу. Драйвер L298P по её сигналам управляет питанием моторов: вывод DIR задаёт направление, PWM — долю времени подачи питания. Мотор превращает электрическую энергию во вращение, а колесо — в движение. Два датчика отражения снизу помогают различать светлую поверхность и чёрную линию.
Как связать измерение с действием. Команда и результат — разные вещи. Надпись в мониторе означает, что программа дошла до печати; вращение проверяем глазами. На подставке проверим оба направления каждого колеса и остановку, затем сравним показания датчиков над белой и чёрной карточками. Так узнаем, как именно собран наш робот.
Вы работаете вдвоём. Один — Пилот: держит детали и отвёртку. Второй — Штурман: читает шаг вслух, подаёт детали и проверяет результат по картинке.
- Решите, кто начинает Пилотом.
- После каждой детали, которая закреплена винтами, меняйтесь ролями.
Каждый знает свою роль. Штурман держит инструкцию, Пилот — инструмент.
Разложи детали
7 минПрежде чем собирать, найди каждую деталь. Так ты не перепутаешь похожие детали и сразу увидишь, если чего-то не хватает.







- Разложи печатные детали в ряд, как на карточках.
- Найди два кронштейна моторов. Они похожи, но зеркальные: положи их рядом и посмотри — полочки смотрят в разные стороны.
- Рядом положи покупные детали: Arduino, шилд моторов, два мотора, шаровую опору, два датчика линии, батарейный отсек и пакеты с крепежом.
Все детали лежат перед тобой. Ты можешь показать оба зеркальных кронштейна.
Подсказка: Не хватает детали
Не заменяй её похожей. Сверь пакет с карточками ещё раз; если детали нет — сообщи взрослому.
Потренируйся на одном винте
4 минПочти все детали робота держатся на винтах и гайках. Соберём одно соединение на столе.
- Возьми винт, две шайбы и гайку из пакета «Тренировка».
- Надень шайбу на винт, проведи винт через две детали, надень вторую шайбу и накрути гайку пальцами.
- Придержи гайку пальцем и затяни винт отвёрткой. Остановись, как только детали перестали шевелиться.

Порядок соединения: винт → шайба → деталь → деталь → шайба → гайка. Детали не болтаются.
Как это устроено: Почему нельзя затягивать изо всех сил
Детали напечатаны из пластика. Если перетянуть винт, пластик продавится или треснет. Признак перетяжки — деталь прогибается или белеет вокруг винта.
Договоритесь, где перед
3 минЧтобы «левое колесо» всегда значило одно и то же, отметим перед робота.
- Положи основу плоско: маленькое квадратное окно — дальше от тебя, длинное прямоугольное — ближе.
- Дальняя сторона — перед. Наклей на неё бумажную стрелку «вперёд».
- Лево и право определяй как водитель, который сидит в роботе и смотрит по стрелке.
На основе есть стрелка «вперёд». Вы оба показываете левую сторону робота одинаково.
Прикрепи кронштейны моторов
8 минКронштейны держат моторы снизу основы.

- Переверни основу так, чтобы стрелка осталась видна сбоку.
- Приложи кронштейны к нижней стороне, как на рисунке. Большие круглые отверстия смотрят наружу — туда будут выходить оси колёс.
- Вставь винты сверху, снизу надень шайбы и гайки. Сначала наживи все винты пальцами, потом затяни.
Два кронштейна стоят друг напротив друга, большие отверстия — снаружи. Кронштейны не качаются.
Установи моторы
8 минОсь мотора — вращающийся стержень, на который надевается колесо. Она должна выйти наружу через отверстие кронштейна.

- Приложи первый мотор к кронштейну изнутри. Ось проходит через большое отверстие наружу.
- Закрепи мотор винтами из пакета «Моторы». Держи мотор рукой, пока затягиваешь.
- Так же установи второй мотор.
- Наклей на провода метки: Л — левый мотор, П — правый. Сверься со стрелкой «вперёд».
Оба мотора держатся крепко, оси смотрят влево и вправо, провода подписаны.
Подсказка: Мотор не встаёт в кронштейн
Не дави и не подпиливай. Проверь, тот ли это кронштейн: может быть, ты взял зеркальный для другой стороны.
Надень колёса
5 мин- Совмести отверстие колеса с осью мотора. Форма отверстия должна совпасть с формой оси.
- Надень колесо, придерживая мотор за корпус. Не бей по колесу.
- Посмотри сбоку: колесо не должно касаться кронштейна или основы.

Два колеса стоят на осях и ничего не задевают.
Добавь заднюю опору и проверь робота
7 минКолёс два, поэтому роботу нужна третья точка опоры сзади — шаровая опора.

- Закрепи шаровую опору снизу у задней стороны основы. Стойки из пакета «Опора» подобраны по высоте.
- Поставь робота на стол. Он должен стоять ровно на двух колёсах и опоре.
- Аккуратно покачай робота. Ничего не должно болтаться.
Робот стоит устойчиво и ровно. Ходовая часть готова.
Установи Arduino
6 минArduino — «мозг» робота. Плата лежит на держателе, чтобы её контакты снизу не касались винтов.

- Закрепи держатель Arduino в центре основы стойками вверх.
- Положи плату на стойки так, чтобы разъём USB был у края и до него можно было дотянуться.
- Закрепи плату винтами. Затягивай их по очереди, понемногу.
Плата лежит ровно и не касается винтов основы. Разъём USB свободен.
Подготовь компьютер
5 минПрограммы для робота пишут в MyRobotica. В ней есть уроки и редактор кода.
- Подключи USB-кабель к Arduino и к компьютеру. Батарейный отсек моторов остаётся отключённым.
- Открой MyRobotica, курс «Робот-курьер» и урок 1.1. Открой учебный проект урока.
- В правой части кнопки Загрузить на робота выбери своего настоящего робота. В Подробнее о связи проверь плату Arduino Uno и её порт.
- В редакторе оставь пустые функции
setup()иloop()и сохрани программу.
На плате горит индикатор питания ON. В MyRobotica открыт учебный проект, выбран настоящий робот с платой Arduino Uno и виден его порт.
Подсказка: Не вижу порт
Отключи и снова подключи кабель. Если порт так и не появился, возможно, кабель только заряжает и не передаёт данные. Попроси другой кабель.
Программы для робота пишут в MyRobotica. В ней есть уроки и редактор кода.
- Подключи USB-кабель к Arduino и к компьютеру. Батарейный отсек моторов остаётся отключённым.
- Открой MyRobotica, курс «Робот-курьер», урок 1.1 и его учебный проект.
- В правой части кнопки Загрузить на робота выбери своего настоящего робота. Открой Подробнее о связи и проверь плату Arduino Uno. Отключи USB-кабель, посмотри, как изменилось состояние связи, и подключи его снова. Запиши имя порта в журнал.
- В редакторе оставь пустые функции
setup()иloop()и сохрани программу.
В MyRobotica открыт учебный проект и выбран настоящий робот с платой Arduino Uno. Имя его порта записано.
Подсказка: Порт так и не появился
Кабель может только заряжать и не передавать данные. Попроси другой кабель.
- Подключи USB-кабель к Arduino и к компьютеру. Батарейный отсек моторов остаётся отключённым.
- В MyRobotica открой курс «Робот-курьер», урок 1.1 и его учебный проект. В правой части кнопки Загрузить на робота выбери своего настоящего робота. Через Подробнее о связи проверь плату Arduino Uno и найди её порт.
- Сохрани программу с пустыми
setup()иloop(), нажми Проверить код, а потом Загрузить на робота. - Запиши в журнал: плату, порт, версию MyRobotica и чем Проверить код отличается от Загрузить на робота — что делает каждая кнопка и нужна ли для неё плата.
Пустой скетч проверен и загружен. В журнале — плата, порт, версия MyRobotica и разница двух кнопок.
Подсказка: Проверить код и Загрузить на робота
Отключи кабель и нажми обе кнопки по очереди. Какая сработала без платы?
Проверь загрузку программы
3 минЗагрузи пустой скетч и прочитай сообщение об успешной загрузке.
void setup() {} void loop() {}
Это проверка платы, USB-связи и загрузки. Она ещё ничего не говорит о моторах, шилде, датчиках и качестве механической сборки. Работоспособность проверим после подключения всех узлов.
Надень шилд и подключи моторы
7 минВыводы Arduino не могут дать моторам достаточно тока. Поэтому моторы подключаются к шилду — плате, которая надевается сверху на Arduino и включает моторы по её командам.
Сначала отключи USB-кабель. Ничего не подключай и не отключай, пока плата под питанием.
- Совмести ножки шилда с гнёздами Arduino и аккуратно надави сверху. Ни одна ножка не должна остаться снаружи или согнуться.
- Подключи провода моторов к клеммам шилда:
| Что подключаем | Куда |
|---|---|
| Левый мотор Пометь провода буквой «Л». | Клеммы канала M2 на шилде |
| Правый мотор Пометь провода буквой «П». | Клеммы канала M1 на шилде |
| Батарейный отсек (через выключатель)взрослый Подключает взрослый. | Клеммы питания моторов на шилде |
- Батарейный отсек с выключателем уже подключён взрослым. Проверь, что выключатель выключен. Если провода отсека не подключены — сам их не подключай, позови взрослого.
Шилд сидит на Arduino ровно. Провода моторов закреплены в клеммах и подписаны.
Установи датчики линии
6 минДатчики линии будут «смотреть» на пол и замечать чёрную линию. Ставим их спереди, поперёк робота.
- Закрепи планку датчиков снизу у переднего края основы на стойках.
- Закрепи на планке два датчика — левый и правый — чувствительной стороной вниз, к полу. Датчики на одинаковой высоте.
- Подключи датчики к шилду по таблице. Буквы у контактов датчика: S — сигнал, V — питание, G — земля.
| Что подключаем | Куда |
|---|---|
| Левый датчик · S (сигнал) | A4 |
| Левый датчик · V (питание) | 5V |
| Левый датчик · G (земля) | GND |
| Правый датчик · S (сигнал) | A5 |
| Правый датчик · V (питание) | 5V |
| Правый датчик · G (земля) | GND |
- Уложи провода так, чтобы они не касались колёс.
Два датчика смотрят вниз, их провода подключены и не свисают к колёсам.
Проверь все узлы робота
14 минТеперь проверим, что каждая часть робота работает: оба колеса и оба датчика. Программа для проверки уже открыта в редакторе справа.
Поставь робота на подставку так, чтобы колёса висели в воздухе и не касались стола. Пока выключатель моторов выключен, колёса крутиться не могут.
Программу писать не нужно — она готова. Ты будешь отправлять ей буквы и цифры, а она будет крутить одно колесо или показывать числа датчиков.
// Программа проверки для робота курса (Arduino Uno + шилд L298P).// Робот стоит на подставке: колёса висят в воздухе.// Колесо крутится со скоростью 120 из 255 около 0,3 секунды.const int LEFT_DIR = 7;const int LEFT_PWM = 6;const int RIGHT_DIR = 4;const int RIGHT_PWM = 5;const int LEFT_SENSOR = A4;const int RIGHT_SENSOR = A5;const int FORWARD = HIGH;const int BACKWARD = LOW;const int TEST_PWM = 120;const unsigned long PULSE_MS = 300;bool running = false;unsigned long startedAt = 0; void reportSensors() { Serial.print("LEFT="); Serial.print(analogRead(LEFT_SENSOR)); Serial.print(" RIGHT="); Serial.println(analogRead(RIGHT_SENSOR));} void beginPulse(int dirPin, int pwmPin, int direction) { digitalWrite(dirPin, direction); analogWrite(pwmPin, TEST_PWM);} // ===== Готовая оболочка — не меняй =====void stopMotors() { analogWrite(LEFT_PWM, 0); analogWrite(RIGHT_PWM, 0); running = false;} void setup() { pinMode(LEFT_PWM, OUTPUT); pinMode(RIGHT_PWM, OUTPUT); stopMotors(); pinMode(LEFT_DIR, OUTPUT); pinMode(RIGHT_DIR, OUTPUT); pinMode(LEFT_SENSOR, INPUT); pinMode(RIGHT_SENSOR, INPUT); Serial.begin(9600); Serial.println("READY: 1=L forward, 2=L backward, 3=R forward, 4=R backward, d=sensors, s=stop");} void loop() { if (running && millis() - startedAt >= PULSE_MS) { stopMotors(); Serial.println("PWM=0; verify physical stop"); } if (!Serial.available()) return; char command = Serial.read(); if (command == 's') { stopMotors(); Serial.println("PWM=0; verify physical stop"); return; } // Пока идёт импульс, новые команды не продлевают и не перезапускают его. if (running) return; if (command == 'd') { reportSensors(); return; } if (command < '1' || command > '4') return; // Удаляем накопленные команды: один ввод не должен запускать очередь движений. while (Serial.available()) Serial.read(); stopMotors(); startedAt = millis(); running = true; if (command == '1') beginPulse(LEFT_DIR, LEFT_PWM, FORWARD); if (command == '2') beginPulse(LEFT_DIR, LEFT_PWM, BACKWARD); if (command == '3') beginPulse(RIGHT_DIR, RIGHT_PWM, FORWARD); if (command == '4') beginPulse(RIGHT_DIR, RIGHT_PWM, BACKWARD); Serial.println("Observe wheel; no automatic hardware PASS");}
Как это устроено: Что делает программа
reportSensorsпечатает два числа: что видит левый и правый датчик.beginPulseвключает одно колесо.- Через 0,3 секунды колесо само останавливается: это делает
stopMotors.
В программе уже готово всё, кроме двух функций в разделе «Твоя часть». Допиши их:
reportSensors— печатает числа левого и правого датчика с подписями;beginPulse— включает выбранный мотор в нужную сторону со скоростьюTEST_PWM. Второй мотор при этом выключен.
Остальную программу не меняй.
// Программа проверки для робота курса (Arduino Uno + шилд L298P).// Робот стоит на подставке: колёса висят в воздухе.// Колесо крутится со скоростью 120 из 255 около 0,3 секунды.const int LEFT_DIR = 7;const int LEFT_PWM = 6;const int RIGHT_DIR = 4;const int RIGHT_PWM = 5;const int LEFT_SENSOR = A4;const int RIGHT_SENSOR = A5;const int FORWARD = HIGH;const int BACKWARD = LOW;const int TEST_PWM = 120;const unsigned long PULSE_MS = 300;bool running = false;unsigned long startedAt = 0; // ===== Твоя часть =====void reportSensors() { // Цель: показать в мониторе подписанные показания левого и правого датчиков.} void beginPulse(int dirPin, int pwmPin, int direction) { // Цель: включить только указанный мотор с указанным направлением и TEST_PWM.} // ===== Готовая оболочка — не меняй =====void stopMotors() { analogWrite(LEFT_PWM, 0); analogWrite(RIGHT_PWM, 0); running = false;} void setup() { pinMode(LEFT_PWM, OUTPUT); pinMode(RIGHT_PWM, OUTPUT); stopMotors(); pinMode(LEFT_DIR, OUTPUT); pinMode(RIGHT_DIR, OUTPUT); pinMode(LEFT_SENSOR, INPUT); pinMode(RIGHT_SENSOR, INPUT); Serial.begin(9600); Serial.println("READY: 1=L forward, 2=L backward, 3=R forward, 4=R backward, d=sensors, s=stop");} void loop() { if (running && millis() - startedAt >= PULSE_MS) { stopMotors(); Serial.println("PWM=0; verify physical stop"); } if (!Serial.available()) return; char command = Serial.read(); if (command == 's') { stopMotors(); Serial.println("PWM=0; verify physical stop"); return; } // Пока идёт импульс, новые команды не продлевают и не перезапускают его. if (running) return; if (command == 'd') { reportSensors(); return; } if (command < '1' || command > '4') return; // Удаляем накопленные команды: один ввод не должен запускать очередь движений. while (Serial.available()) Serial.read(); stopMotors(); startedAt = millis(); running = true; if (command == '1') beginPulse(LEFT_DIR, LEFT_PWM, FORWARD); if (command == '2') beginPulse(LEFT_DIR, LEFT_PWM, BACKWARD); if (command == '3') beginPulse(RIGHT_DIR, RIGHT_PWM, FORWARD); if (command == '4') beginPulse(RIGHT_DIR, RIGHT_PWM, BACKWARD); Serial.println("Observe wheel; no automatic hardware PASS");}
Подсказка: С чего начать
Найди в справке Arduino analogRead, Serial.print, digitalWrite и analogWrite. Сначала проверь датчики — для этого моторы не нужны.
Напиши программу сам. В заготовке есть только номера контактов и выключение моторов.
// Программа проверки для робота курса (Arduino Uno + шилд L298P).// Робот стоит на подставке: колёса висят в воздухе.// Колесо крутится со скоростью 120 из 255 около 0,3 секунды.const int LEFT_DIR = 7;const int LEFT_PWM = 6;const int RIGHT_DIR = 4;const int RIGHT_PWM = 5;const int LEFT_SENSOR = A4;const int RIGHT_SENSOR = A5;const int FORWARD = HIGH;const int BACKWARD = LOW;const int TEST_PWM = 120;const unsigned long PULSE_MS = 300;bool running = false;unsigned long startedAt = 0; // Напиши диагностику по требованиям урока. При включении моторы стоят.void setup() { pinMode(LEFT_PWM, OUTPUT); pinMode(RIGHT_PWM, OUTPUT); analogWrite(LEFT_PWM, 0); analogWrite(RIGHT_PWM, 0);} void loop() {}
Что должна уметь программа:
- работать с монитором порта на скорости 9600;
- по букве
dпечатать подписанные числа обоих датчиков; - по
1и2крутить левое колесо вперёд и назад, по3и4— правое; - каждый раз крутить со скоростью 120 не дольше 300 мс, потом выключать оба мотора;
- по букве
sсразу выключать оба мотора, даже во время вращения; - после включения и кнопки Reset моторы стоят, пока не придёт новая команда;
- лишние нажатия не копятся в очередь и не продлевают вращение.
Подсказка: Как обойтись без delay
Запомни время начала вращения через millis(). В каждом проходе loop() проверяй, не пришла ли s и не прошло ли 300 мс.
Как проверить робота
- Проверь провода. Выключатель моторов выключен. Сверь провода с таблицами подключения: каждый на своём месте и не касается колёс. Колёса крутятся рукой свободно.
- Загрузи программу. Нажми Загрузить на робота. Внизу открой Serial Monitor со скоростью 9600. Появится строка
READY— плата отвечает. Нажми кнопку Reset на плате: колёса стоят. - Проверь датчики. Отправь
dи прочитай два числа. Подложи под левый датчик белую бумагу и отправьd, потом чёрную — и сноваd. Сделай так же с правым датчиком. На белом и чёрном числа должны заметно отличаться. - Проверь колёса. Включи выключатель моторов. Отправь
1и смотри на колёса: коротко крутится только левое колесо вперёд и само останавливается. Потом по очереди отправь2,3и4. - Проверь остановку. Отправь
1и сразуs— колесо останавливается. Выключи выключатель моторов и отправь1ещё раз: колёса не крутятся. - Запиши результат в журнал для каждого узла из таблицы: команду, ответ в Serial Monitor и фактическое вращение или показание датчика. Если узел ещё не проверен, так и запиши: «не проверен». Если что-то не так — выключи выключатель моторов, отключи USB, открой «Если не получилось», исправь и проверь этот узел ещё раз.
| Что проверяем | Что сделать | Хорошо, если |
|---|---|---|
| Плата | Загрузить программу, нажать Reset | Есть READY, колёса стоят |
| Левое колесо | Отправить 1, потом 2 | Крутится только левое: вперёд, потом назад |
| Правое колесо | Отправить 3, потом 4 | Крутится только правое: вперёд, потом назад |
| Левый датчик | d на белом и на чёрном | Числа заметно разные |
| Правый датчик | d на белом и на чёрном | Числа заметно разные |
| Остановка | s и выключатель моторов | Колесо останавливается |
| Что видишь | Что сделать (выключатель моторов выключен) |
|---|---|
| Крутится не то колесо | Поменяй местами провода моторов в клеммах M1 и M2 |
| Колесо крутится назад вместо вперёд | Поменяй местами два провода этого мотора в клемме |
| Колесо не крутится | Проверь, что выключатель включён и провода плотно зажаты в клеммах |
| Число датчика не меняется | Проверь провода S, V, G и высоту датчика над полом |
Нет строки READY | Проверь скорость 9600 и выбранный порт |
| Колесо крутится само после Reset | Проверь, что загружена именно эта программа |
| Ничего не помогает | Позови взрослого и покажи, на каком пункте остановился |
Ты проверил каждое колесо в обе стороны, оба датчика и остановку. Результаты записаны в таблицу.
Запиши результат в журнал
4 мин- Запиши в бортовой журнал дату, имя робота и что получилось сегодня.
- Отметь, какие узлы прошли проверку сразу, а какие ты исправлял.
- Сохрани программу проверки — она пригодится, если робот начнёт вести себя странно.
Робот проверен, результаты записаны в журнал, программа проверки сохранена.
Проверь себя
Выберите ответы для подготовки. Они не сохраняются и не оцениваются на сайте. Пройдите проверку знаний в программе курса или обсудите ответы с преподавателем.
● Основное
★ Средний уровень
★★ Продвинутый уровень
Отвечай на вопросы своего уровня. Нужно верных ответов: Начальный — 4 из 5; Средний — 4 из 5; Продвинутый — 4 из 5. Ответы проверит преподаватель или программа курса.
Итог
Ты собрал ходовую часть робота, установил плату и датчики и написал первую программу. Ты подтвердил работу установленных узлов наблюдениями. Проверка знаний обязательна отдельно. В следующем уроке перейдёшь от отдельных проверок на подставке к управляемому движению.
Как подтвердить результат
Для каждого опыта сохраняй условия, версию программы, наблюдение и вывод. Сравнивая попытки, меняй одну причину за раз; неудачные попытки тоже остаются в журнале. Отметка результата относится к уже выполненным действиям, повторять их ради отметки не нужно. Если результат не получен, запиши расхождение и следующую проверяемую гипотезу. Модель, измерения настоящего робота и объяснение — разные виды доказательств.
Словарь урока
| Arduino | Плата с микроконтроллером — маленьким компьютером, который выполняет твою программу. |
| шилд | Плата, которая надевается сверху на Arduino и добавляет ей возможности. Наш шилд управляет моторами. |
| скетч | Программа для Arduino. |
| функция | Именованный блок команд. setup и loop — функции. |
| светодиод | Маленькая лампочка на плате. Светодиод L подключён к выводу 13. |
| вывод | Контакт платы, которым программа может управлять или с которого может читать сигнал. |
| мс | Миллисекунда — тысячная доля секунды. 1000 мс = 1 секунда. |