Что такое робот? Чувствует, думает, действует
Робот снова и снова чувствует, думает и действует. Узнайте, какая деталь робот-машины за что отвечает, что такое микроконтроллер и как симулятор выполняет ваш настоящий код.
Главное
- Робот снова и снова повторяет три шага: чувствовать, думать, действовать.
- В робот-машине чувствует HC-SR04, думает Arduino Uno, а действуют L298N и два мотора TT.
- Микроконтроллер — это маленький компьютер в одной микросхеме; у Uno это ATmega328P.
- Батарея питает моторы через L298N, а выход 5 В драйвера L298N питает Uno.
- Симулятор компилирует ваш настоящий скетч и выполняет его на эмулированном ATmega328P.
Робот — это машина, которая снова и снова делает три вещи. Он чувствует, что происходит вокруг. Он думает, то есть решает, что делать. Затем он действует: движется или что-то меняет. А после этого снова чувствует, потому что мир вокруг уже изменился. Инженеры-робототехники называют это циклом «чувствовать — думать — действовать».
У игрушечной машинки на пульте управления есть моторы и батарейка. Но чувствует и думает за неё человек. Дайте машинке датчик и маленький компьютер — и она сможет сама принимать решения. Это и есть шаг от машины к роботу.
Робот-машина: кто чувствует, кто думает, кто действует
Все роботы на этом сайте устроены одинаково: это робот-машина CoreEngine. У каждой её детали одна главная задача.
| Деталь | Задача | Что делает в робот-машине |
|---|---|---|
| Ультразвуковой датчик HC-SR04 | Чувствовать | Измеряет расстояние до ближайшего предмета впереди, примерно от 2 см до 4 м |
| Arduino Uno | Думать | Выполняет ваш скетч: читает показания датчика, принимает решения, посылает сигналы |
| Драйвер моторов L298N | Действовать | Превращает слабые сигналы Uno в сильный ток для моторов |
| Два мотор-редуктора TT с колёсами 65 мм | Действовать | Двигают робота; разная скорость колёс с двух сторон заставляет его поворачивать |
| Батарейный отсек на четыре батарейки AA | Питание | Около 6 В для моторов, а через L298N — для Uno и датчика |
| Две акриловые пластины (яруса) и шаровая опора | Корпус | Держат всё вместе; шаровая опора катится спереди |
Чувствовать
HC-SR04 посылает короткий ультразвуковой сигнал — такой высокий, что человек его не слышит. Затем датчик ждёт и слушает эхо. Чем дольше эхо идёт обратно, тем дальше предмет. Датчик не знает, что это за предмет. Он знает только, как далеко тот находится.
У других роботов другие датчики. Датчик линии видит чёрную линию на белом полу, а кнопка может почувствовать столкновение. Два датчика линии помогают роботу, который едет по линии, держаться трассы.
Думать
Arduino Uno читает показания датчика и выполняет ваш скетч — программу, которую вы написали. В скетче записаны правила робота, например: «Если что-то ближе 25 см, сверни в сторону». Uno проверяет эти правила много раз в секунду.
Действовать
Пины Uno выдают только слабые сигналы — около 20 мА каждый. Мотору TT нужно около 0,3 А, когда он везёт робота, и примерно до 1 А, когда он заблокирован. Поэтому Uno посылает свои сигналы драйверу моторов L298N. А L298N подаёт ток батареи на моторы так, чтобы они крутились вперёд или назад, быстро или медленно.
У робота нет руля. Он поворачивает с помощью двух ведущих колёс:
- Оба колеса крутятся вперёд с одинаковой скоростью — робот едет прямо.
- Одно колесо крутится быстрее другого — робот едет по дуге.
- Одно колесо крутится вперёд, а другое назад — робот разворачивается на месте.
Питание
Без энергии ничего не работает. Четыре батарейки AA дают около 6 В. Моторы получают это питание через L298N. Кроме того, у L298N есть небольшой стабилизатор на 5 В. Его выход 5 В питает Uno и датчик.
Один проход цикла
Как работает этот цикл, хорошо видно на роботе, объезжающем препятствия. В его скетче такие числа:
- Чувствовать: измерять расстояние каждые 60 мс, то есть примерно 16 раз в секунду.
- Думать: предмет ближе 25 см?
- Действовать: если нет, ехать вперёд со скоростью 190 (шкала — от 0 до 255). Если ближе, 300 мс ехать назад со скоростью 160, 380 мс разворачиваться вправо со скоростью 170, а затем снова ехать вперёд.
Потом цикл начинается заново, с нового измерения. Робот ни на миг не перестаёт чувствовать — даже когда едет назад и поворачивает. Как скетч этого добивается, показывает урок Программы, которые никогда не ждут.
Что такое микроконтроллер?
Микроконтроллер — это целый маленький компьютер в одной микросхеме. В нём есть процессор, память для программы, память для данных и пины, которые связывают его с внешним миром. Микроконтроллеры есть во многих вещах вокруг вас: в стиральной машине, в микроволновой печи, в пульте от телевизора, в автомобиле.
Микроконтроллер платы Uno — ATmega328P:
| Характеристика | ATmega328P на Uno |
|---|---|
| Тактовая частота | 16 МГц: 16 миллионов тактов в секунду |
| Флеш-память | 32 КБ: хранит ваш скетч, даже когда питание выключено |
| Оперативная память (RAM) | 2 КБ: хранит ваши переменные, пока работает скетч |
| EEPROM | 1 КБ: сохраняет небольшие значения, например настройки, когда питание выключено |
| Пины | D0–D13 (цифровые) и A0–A5 (аналоговые входы) |
У ноутбука памяти в миллионы раз больше. Но плате Uno столько и не нужно: у неё нет ни экрана, ни клавиатуры, ни операционной системы. Она выполняет одну программу — ваш скетч — сразу, как только получает питание.
Программу для платы Arduino называют скетчем. Вы пишете его на C++ в Arduino IDE. Когда вы нажимаете «Загрузить», IDE компилирует скетч в машинный код и записывает его во флеш-память.
Пины связывают скетч с внешним миром. Пин, работающий как выход, выдаёт около 5 В (HIGH) или 0 В (LOW) — например, чтобы включать и выключать светодиод. Пин, работающий как вход, сообщает скетчу, высокое на нём напряжение или низкое. Так скетч получает, например, сигнал от датчика. Подробно о пинах рассказывает урок Arduino Uno: пины и ваша первая программа.
Что делает симулятор
CoreEngine — это симулятор роботов для Windows. В нём вы собираете робота из тех же деталей, из которых состоит настоящая робот-машина, и испытываете его, прежде чем собрать по-настоящему.
- Сборка. Вы делаете корпус из фигур и ставите на него модели настоящих деталей: Arduino Uno, L298N, HC-SR04, моторы TT, батарейный отсек, шаровую опору, сервопривод SG90 и модуль светодиода.
- Подключение. Вы соединяете детали пин к пину, как на настоящем роботе.
- Проверка. Симулятор проверяет ваше подключение. Например, он сообщает, если нет батареи, если у драйвера моторов нет питания, если нет общей земли (GND) или если батарея подключена к пину 5V платы Uno. Последняя ошибка сжигает настоящую плату.
- Код. Вы пишете скетч во встроенной Arduino IDE с кнопками «Проверить» и «Загрузить».
- Запуск. Ваш скетч компилируется с помощью arduino-cli — у него тот же компилятор, что и у Arduino IDE. Затем машинный код выполняется на эмулированном ATmega328P, то есть на программе, которая ведёт себя как настоящий чип. Выполняется та самая программа, которую выполняла бы настоящая Uno, а не упрощённая копия.
- Испытание. Робот ездит по арене с физикой. Вы видите в реальном времени показания расстояния, моторов и батареи, монитор порта (Serial Monitor) с сообщениями вашего скетча и журнал событий.
На столе в Гараже Uno работает от USB ноутбука, и светодиоды загораются. Поэтому проекты со светодиодами можно пробовать без батареи.
Симулятор не заменяет настоящие детали. Он помогает быстро проверять идеи и находить ошибки раньше, чем из-за них испортится деталь.
Как пользоваться сайтом
| Шаг | Что вы делаете |
|---|---|
| 1. Учитесь | Прочитайте урок или проект. В каждом уроке есть главные мысли, вопросы и небольшое задание. |
| 2. Симулируйте | Соберите робота со страницы в CoreEngine: на странице есть его детали, подключение и скетч. Запустите его, измените код и посмотрите, что получится. |
| 3. Найдите детали | В каждом проекте есть список деталей со ссылками на магазины. Маркет показывает, где купить такие же детали. |
| 4. Соберите | Соберите настоящего робота по той же таблице подключения и загрузите тот же скетч. |
| 5. Поделитесь | Покажите другим своего робота, свои изменения в скетче и то, чему вы научились. |
Эти шаги можно повторять сколько угодно. Каждая новая идея снова начинается с шага 1 или шага 2.
Попробуйте прямо сейчас
Откройте робота, объезжающего препятствия, и посмотрите, как он чувствует, думает и действует.
Что вы увидите:
- Робот едет прямо вперёд.
- Когда стена приближается, расстояние на панели показаний в реальном времени уменьшается.
- Когда расстояние становится меньше 25 см, робот ненадолго отъезжает назад, разворачивается вправо и едет дальше.
- Монитор порта выводит новое расстояние примерно каждые 60 мс, даже пока робот поворачивает.
Что дальше
- Arduino Uno: пины и ваша первая программа, затем проект Blink.
- Моторы и драйвер L298N, затем проект «Первый заезд».
- Измеряем расстояние с помощью HC-SR04.
- Программы, которые никогда не ждут: millis() и состояния, затем робот, объезжающий препятствия.
- Робот, который держит дистанцию и едет за вашей рукой.
Проверьте себя
1Какая деталь робот-машины чувствует, какая думает, а какие действуют?
HC-SR04 чувствует, измеряя расстояние, а Arduino Uno думает, выполняя ваш скетч. Действуют драйвер моторов L298N и два мотора TT.
2Зачем между Uno и моторами стоит драйвер моторов?
Пин Uno может безопасно отдать только около 20 мА, а мотору TT нужно примерно до 1 А. L298N переключает на моторы ток батареи.
3Что происходит с вашим скетчем, когда вы нажимаете «Загрузить» в симуляторе?
Он компилируется в машинный код, как для настоящей платы. Затем этот машинный код выполняется на эмулированном ATmega328P внутри робота в симуляторе.
Задание
Соберите в симуляторе робота, объезжающего препятствия (как это сделать, показано на странице проекта), и запустите его на арене. Следите за расстоянием на панели показаний в реальном времени и заметьте, на каком расстоянии робот начинает ехать назад. Затем измените STOP_CM с 25 на 40, загрузите скетч и снова запустите робота. Сравните, где робот поворачивает теперь.
Подсказка
STOP_CM — одна из настроек в начале скетча.