Привет. В этой статье я хочу описать процесс сборки моего первого робота с помощью Arduino. Материал будет полезен другим новичкам вроде меня, желающим сделать какую-нибудь «самоходную тележку».
Статья представляет собой описание этапов работы с моими дополнениями по различным нюансам.
Ссылка на финальный код (скорее всего, не самый идеальный) приведена в конце статьи.
По возможности привлекал к участию своего сына (8 лет).
Что именно с ним работало, а что нет — этому я посвятил часть статьи, возможно, кому-то она будет полезна.
Общее описание робота
Сначала пару слов о самом роботе( идея ).Мне не очень хотелось на старте собирать что-то стандартное.
При этом набор компонентов был вполне стандартным – шасси, двигатели, ультразвуковой датчик, датчик линии, светодиоды, пищалка.
Изначально из этого «супового набора» был придуман робот, охраняющий свою территорию.
Он едет в сторону нарушителя, пересекшего линию круга, а затем возвращается в центр.
Однако в этой версии требовалась нарисованная линия и дополнительные математические вычисления, чтобы всегда оставаться в круге.
Поэтому, немного подумав, я несколько изменил идею и решил сделать робота-охотника.
При старте он вращается вокруг своей оси, выбирая ближайшую цель (человека).
Если «добыча» обнаружена, «охотник» включает мигалку и сирену и начинает движение к ней.
Когда человек уходит/убегает, робот выбирает новую цель и преследует ее и так далее.
Такому роботу не нужен ограниченный круг, и он может работать на открытой местности.
Как видите, это очень похоже на игру в догонялки.
Хоть в итоге робот и не получился достаточно быстрым, он честно взаимодействует с окружающими его людьми.
Особенно нравится детям (правда, иногда кажется, что они вот-вот его растопчут, сердце замирает.).
Я считаю, что это хорошее решение для популяризации технического дизайна.
Структура робота
Итак, с идеей определились, переходим к макет .
Список элементов формируется из того, что должен уметь робот. Здесь все вполне очевидно, поэтому сразу посмотрим на нумерацию:
«Мозги» робота — плата Arduino Uno (1); был в комплекте заказанном из Китая.
Для наших целей вполне достаточно (ориентируемся на количество используемых пинов).
Из этого же комплекта мы взяли готовое шасси (2), на которое крепятся два ведущих колеса (3) и одно заднее (свободно вращающееся) (4).
В комплект также входил готовый батарейный отсек (5).
В передней части робота установлен ультразвуковой датчик (HC-SR04) (6), сзади - драйвер двигателя (L298N) (7), в центре - светодиодная мигалка (8), и немного сбоку находится высокочастотный динамик (9).
На этапе макетирования мы смотрим: - чтобы все подошло - быть уравновешенным - быть рационально размещенным Частично это за нас уже сделали китайские коллеги.
Так, тяжелый аккумуляторный отсек размещен по центру, а ведущие колеса расположены примерно под ним.
Все остальные платы легкие и могут располагаться на периферии.
Нюансы:
- Шасси из комплекта имеет множество заводских дырок, но какая в них логика я так и не понял.
Двигатели и аккумуляторный блок закрепились без проблем, затем началась «подгонка» со сверления новых отверстий для крепления того или иного борта.
- Большим подспорьем стали латунные стойки и другой крепеж из складских помещений (иногда приходилось их доставать).
- Шины от каждой платы я пропустил через зажимы (опять же нашел их на складе).
Очень удобно, все провода лежат хорошо и не болтаются.
Отдельные блоки
Теперь я пройду блоки и я расскажу вам лично о каждом.Батарейный отсек Понятно, что у робота должен быть хороший источник энергии.
Комплектация может отличаться, я выбрал вариант с 4-мя батарейками АА.
В сумме они дают примерно 5 В, и это напряжение можно подать напрямую на вывод 5В платы ардуино (минуя стабилизатор).
Я, конечно, проявил некоторую осторожность, но такое решение вполне работоспособное.
Поскольку питание нужно везде, для удобства я сделал в центре робота два разъема: один «раздает» землю (справа), а второй — 5 В (слева).
Моторы и водитель
Сначала о монтаже двигателей.
Крепление заводское, но выполнено с большими допусками.
Другими словами, двигатели могут раскачиваться на пару миллиметров влево и вправо.
Для нашей задачи это не критично, но местами может дать эффект (робот начнет уходить в сторону).
На всякий случай я поставил двигатели строго параллельно и зафиксировал их клеем.
Для управления двигателями, как я писал выше, используется драйвер L298N. Согласно документации, он имеет три контакта для каждого двигателя: один для изменения скорости и пара контактов для направления вращения.
Здесь есть один важный момент. Получается, что если напряжение питания 5 В, то регулировка скорости просто не работает! То есть либо не крутится вообще, либо крутится на максимум.
Именно эта особенность заставила меня «убить» пару вечеров.
В конце концов я нашел упоминание где-то на одном из форумов.
Вообще говоря, мне нужна была небольшая скорость вращения при повороте робота — чтобы он успевал сканировать пространство.
Но, поскольку из этой идеи ничего не вышло, пришлось сделать иначе: небольшой поворот - стоп - поворот - стоп и т. д. Опять же, не так изящно, но работоспособно.
Добавлю сюда еще, что после каждой погони робот выбирает случайное направление для нового поворота (по часовой стрелке или против часовой стрелки).
Ультразвуковой датчик
Очередная железка, где пришлось искать компромиссное решение.
Ультразвуковой датчик выдает нестабильные цифры на реальных препятствиях.
Собственно, этого и следовало ожидать.
В идеале он работает где-нибудь на соревнованиях, где есть гладкие, ровные и перпендикулярные поверхности, но если перед ним «мелькают» чьи-то ноги, нужно вводить дополнительную обработку.
В качестве такой обработки я поставил медианный фильтр на три счета.
Судя по тестам на реальных детях (при испытаниях ни один ребенок не пострадал!), этого оказалось вполне достаточно для нормализации данных.
Физика здесь проста: мы имеем сигналы, отраженные от необходимый объекты (дающие необходимое расстояние) и отраженные от более удаленных, например, стен.
Последние представляют собой случайные излучения в измерениях вида 45, 46, 230 , 46, 46, 45, 45, 310 , 46. Именно их и отсекает медианный фильтр.
После всей обработки получаем расстояние до ближайшего объекта.
Если оно меньше определенного порогового значения, то включаем сигнализацию и едем прямо на «нарушителя».
Мигалка и сирена Пожалуй, самые простые элементы из всего вышеперечисленного.
Их можно увидеть на фотографиях выше.
Про железо тут писать нечего, так что теперь перейдем к код .
Программа управления
Подробно описывать код не вижу смысла, кому надо — ссылка есть в конце статьи, там всё вполне читабельно.Но было бы неплохо объяснить общую структуру.
Первое, что нам нужно было понять, это то, что робот — это устройство реального времени.
Точнее, запомнить, потому что и раньше, и сейчас я еще работаю в электронике.
Итак, сразу забываем о вызове задерживать() , который любят использовать в примерах скетчей и который просто «замораживает» программу на заданный период времени.
Вместо этого, как советуют опытные люди, вводим таймеры для каждого блока.
Нужный интервал прошел – действие выполнено (увеличили яркость светодиода, включили двигатель и т.д.).
Таймеры могут быть связаны между собой.
Например, твитер работает синхронно с мигалкой.
Это немного упрощает программу.
Естественно, разбиваем все на отдельные функции (мигалки, звук, поворот, движение вперед и так далее).
Если этого не сделать, то не получится разобраться, что откуда и куда приходит.
Нюансы педагогики
Все описанное выше я делал в свободное время по вечерам.Не спеша я потратил на робота около трёх недель.
На этом можно было бы закончить, но я обещала еще рассказать о работе с ребенком.
Что можно сделать в этом возрасте? Работайте по инструкции Мы сначала проверили каждую деталь отдельно — светодиоды, пищалки, моторы, датчики и т. д. Есть большое количество готовых примеров — некоторые прямо в среде разработки, другие можно найти в Интернете.
Это, конечно, меня радует. Берем код, подключаем деталь, убеждаемся в ее работоспособности, затем начинаем менять ее под свою задачу.
Ребенок выполняет соединения по схеме и под моим контролем.
Это хорошо.
Также нужно уметь работать строго по инструкции.
Порядок работы («от частного к общему») Это сложный момент. Нам нужно усвоить, что большой проект («сделать робота») состоит из маленьких задач («подключить датчик», «подключить моторы».
), а те, в свою очередь, состоят из еще более мелких шагов («найти программа», «подключить плату», «скачать прошивку».
).
Выполняя более-менее понятные задачи нижнего уровня, мы «закрываем» задачи среднего уровня, и из них формируется общий результат. Я объяснила, но думаю осознание придет не скоро.
Где-то, наверное, к подростковому возрасту.
Монтаж Сверление, резьба, шурупы, гайки, пайка и запах канифоли – куда бы мы без этого были? Ребенок получил базовый навык «Работа паяльником» - сумел спаять несколько соединений (немного помогла, не скрою).
Не забывайте о пояснении по технике безопасности.
Работа на компьютере Я написал программу для робота, но мне все же удалось добиться некоторых положительных результатов.
Первое: английский.
В школе его только начинали, поэтому мы пытались разобраться, что такое пищалка, мигалка, яркость и другие транслитерации.
По крайней мере, мы это поняли.
Я сознательно не использовал родные английские слова, поскольку мы еще не достигли этого уровня.
Второе: эффективная работа.
Мы научили сочетаниям горячих клавиш и быстрому выполнению стандартных операций.
Периодически, когда мы писали программу, мы с сыном менялись местами, и я говорил, что нужно сделать (замена, поиск и т. д.).
Приходилось повторять снова и снова: «выделить двойным щелчком», «удерживать Shift», «удерживать Ctrl» и так далее.
Процесс обучения здесь не быстрый, но думаю, навыки постепенно будут откладываться «в подкорке».
Скрытый текст Можно сказать, что вышесказанное почти очевидно.
Но, честно говоря, этой осенью мне представилась возможность преподавать информатику в 9 классе в одной школе.
Это ужасно.
Студенты не знают таких элементарных вещей, как Ctrl+Z, Ctrl+C и Ctrl+V, выделение текста с удержанием Shift или двойным щелчком по слову и так далее.
И это несмотря на то, что они учились на третьем курсе информатики.
Вывод делайте сами.
Третье: слепая печать.
Комментарии в коде я доверил набирать ребенку (пусть практикуется).
Мы сразу правильно расположили руки, чтобы пальцы постепенно запоминали расположение клавиш.
Как видите, мы все еще только начинаем.
Мы продолжим оттачивать наши навыки и знания; они пригодятся в жизни.
Кстати, о будущем.
Дальнейшее развитие
Робот сделан, ездит, моргает и пищит. Что теперь? Вдохновленные тем, чего мы достигли, мы планируем совершенствовать его дальше.Есть идея сделать пульт дистанционного управления - как у лунохода.
Было бы интересно, сидя за пультом, управлять движением робота, который едет совсем в другом месте.
Но это будет другая история.
И в конце, собственно, герои этой статьи (видео по клику):
Спасибо за внимание!
→ Ссылка на код
Теги: #Сделай сам или Сделай сам #Разработка робототехники #arduino #Разработка Arduino #arduino uno #Робототехника своими руками #игрушка-робот
-
Облако Для Страховщиков
19 Oct, 24 -
Робот-Канатоходец
19 Oct, 24 -
Gradle: Управление Зависимостями
19 Oct, 24 -
Валидатор Html-Форм
19 Oct, 24