Arduino смарт робот автомобилей
Автомобиль-робот с автопилотом на Arduino Mega 2560
Из таких же комплектующих многие собирают свои автономные роботы-платформы, но мое решение немного отличается от того, что можно найти в интернете. В частности упор был сделан на автономность и перехват управления по Bluetooth.
Распиновка для подключения компонентов
Моторы | Motor Shield L293D | Фары | Arduino Mega 2560 |
П.Л. | М3 | П.Л. | «-» на GND, «+» на Pin 22 |
П.П. | М4 | П.П. | «-» на GND, «+» на Pin 24 |
З.Л. | М1 | З.Л. | «-» на GND, «+» на Pin 34 |
З.П. | М2 | З.П. | «-» на GND, «+» на Pin 35 |
Дальномер HC-SR04 | Arduino Mega 2560 | Bluetooth HC-05 | Arduino Mega 2560 | Buzzer | Arduino Mega 2560 |
Vcc | 5V | VCC | 5V | SIG | Pin A9 |
Trig | Pin 31 | GND | GND | VCC | Pin A8 |
Echo | Pin 30 | TXD | Pin 50 | GND | GND |
Gnd | GND | RXD | Pin 51 |
Сервопривод MG995 | Motor Shield L293D |
тройная клема | SERVO_2 (центральный провод «+» откусываем и запитываем напрямую от «+» Motor Shield; при управлении по Bluetooth — клему снимайте, чтобы серва не дёргалась) |
При подключении телефона к Bluetooth нашего робота вылезет запрос пин-кода. Обычно он «1234». В программе Bluetooth Arduino Bluetooth RC Car доступны два способа управления: клавишами влево-вправо и с помощью гироскопа наклоном телефона.
Механизм работы автопилота таков, что машина едет вперед до тех пор пока до препятствия спереди не будет 30 см, то запускаем алгоритм сканирования препятствия. Двигатели останавливаются, серво-привод начинает вращать ультразвуковой дальномер на 180 градусов с шагом 15 градусов. Если в массиве измерений находятся точки расстояние до которых больше 30 см, то мы определяем с какой стороны эти точки и разворачиваем машину в этом направлении, запускаем двигатели.
Для зашивки программы вам необходимо будет скачать библиотеку AFMotor.
Управление по Bluetuth:
Пример программы для автоматической навигации робота-автомобиля:
Arduino. Проект «Робот-машина RoboCar4W»
Вы понимаете, — втолковывал редактор, — это должно быть занимательно, свежо, полно интересных приключений… Так, чтобы читатель не мог оторваться.
И.Ильф, Е.Петров «Как создавался Робинзон».
Начинать работу с Arduino, как и с любой другой платформой программной или аппаратной, всегда интереснее с какого-нибудь реального проекта. Программисты при этом пишут код выводящий «Hello, world», ардуинисты моргают светодиодом. И все радуются как дети.
Я же решил начать с продвинутого проекта, в том числе с тайной надеждой оторвать молодое поколение от Counter-Strike (не получилось).
Как можно догадаться из названия RoboCar4W, первым проектом стал робот-машина о четырех колесах. Начиная работу я уже имел опыт программирования, умел когда-то давно паять, но совершенно не знал даже распиновки Arduino и документацию совершенно не читал. Все премудрости изучал по ходу пьесы и Гугл в помощь.
Поскольку сам проект принципиально не нов, подобных описаний в сети достаточно, все компоненты известны, то никаких неожиданностей не предполагалось. Поэтому задумка была сформулирована в самых общих чертах и главной целью являлось погружение в «мир вещей» с помощью Arduino, как платформы для быстрого прототипирования. В этом опусе возможно кто-то узнает себя в самом начале пути.
Всё «железо» приобреталось на ebay, и по своему опыту хочу сказать, что проще приобрести сразу стартер кит (ищите по словам Arduino Starter Kit), а не собирать подетально. Да и приедет все сразу вместе. Решено было не мелочиться, купить нормальное шасси, нормальные колеса, нормальные моторы, чтоб было «дорохобохато».
Главный секрет успешных покупок на eBay — покупать у продавцов с высоким рейтингом и при этом внимательно читать описание товара. Об этом есть много статей в интернете.
Какую плату семейства Arduino выбрать?
Я взял Arduino UNO, под нее много проектов с описаниями. Но сейчас бы взял Arduino Mega 2560, у нее больше цифровых и аналогов выводов и полная совместимость по проектам с UNO.
Общее описание проекта
В мире разработки программного обеспечения это называют еще «требования к системе».
Задумка проекта была следующей. Первый вариант машины-робота под названием RoboCar4W должен выполнять незамысловатые действия:
Второй вариант машины должен управляться вручную по bluetooth с Android телефона.
Чтобы вам лучше работалось вот весь финальный проект RoboCar4W в сборе (тут без блютуза).
Вот видео ходовых испытаний.
На первом видео RoboCar4W ездит в автоматическом режиме с объездом препятствий на двух разных версиях «прошивки», т.е. скетча, поэтому, если кто самый зоркий и заметил, что поведение робота в разных эпизодах немного отличается.
На втором видео RoboCar4W передвигается при помощи команд, передаваемых «водителем» по Bluetooth с мобильного телефона под Android. На телефоне установлена программа «Bluetooth RC Car». Причем, если близко впереди оказывается препятствие, то робот останавливается, т.е. протаранить что-нибудь не получится (однако есть «секретная» кнопка, которая отключает безопасный режим).
На третьем видео RoboCar4W показывает заранее запрограммированную демо-программу движения с поворотами. Демо-программа активируется по команде с того же мобильного телефона под Android. Робот просто едет некоторое время и делает повороты.
Алгоритм управления движением
Ошибочно называть наш способ «алгоритм объезда препятствий» или «поиском пути». Это отдельные математические дисциплины, чистая математика. Если вам очень-очень сильно нравится математика, то погуглите указанные словосочетания, чтивом на полгода будете обеспечены.
Пока же нас интересуют вещи гораздо проще. Поэтому мы назовем это просто — алгоритм управления движением 4-х колёсного робота. Разумеется речь идет об автоматическом управлении без участия человека.
Вот этот простой алгоритм записанный словами, для более сложных алгоритмов придется (хочется или нет) составлять блок-схемы.
Сейчас одновременно смотрите в исходник скетча RoboCar4W-1.ino.
Чем хорошо, что у нас 4 колеса и все ведущие? Мы можем выполнить (запрограммировать) несколько типов поворотов:
Во втором варианте программы, при управлении с Android-телефона безопасный режим, когда робот старается не допускать лобовых столкновений, может быть отключен, если в программе два раза нажать кнопку
и включен обратно однократным её нажатием.
Важное примечание. Вся логика находится под управлением Arduino. Android здесь выступает просто как игровой пульт (без мозгов) от консоли, его задача — тупо передавать нажатия кнопок (т.е. команды) посредством Bluetooth в Arduino RoboCar4W.
Компоненты
Первоначально в состав машины входил сервопривод, который поворачивал ультразвуковой измеритель расстояния на определенный угол для измерений по трем направлениям. Но в ходе испытаний из-за неосторожного обращения сервопривод сгорел, поэтому теперь датчик расстояния просто жестко закреплен впереди корпуса.
Нет худа без добра, зато скетч стал немного проще.
Итак составные части проекта RoboCar4W, описание на английском дается для облегчения поиска на ebay и ему подобных:
Шасси, DC моторы и колеса приобретались сразу в комплекте и даже с инструкцией по сборке.
Распиновка
Аналоговые входы могут использоваться как цифровые выводы портов ввода/вывода. Выводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19. Это относится только к выводам Arduino, а не к физическим номерам выводов микроконтроллера Atmega.
Рисовать не обязательно, можно просто свести все в таблицу. У меня получилось так.
Пины D4, D7, D8, D12 будут заняты, если используются любые DC моторы или шаговые.
Пины D9 (Servo #1 control), D10 (Servo #2 control) будут заняты, только если используются сервомоторы.
Сама по себе плата для управления моторами Motor Drive Shield L293D пины Arduino не занимает.
Пины питания 3.3 В, 5 В и «земля» дублируются на Motor Drive Shield в достаточном количестве. Поэтому об их нехватке не стоит беспокоиться.
Если все-таки хотите красиво нарисовать, то бесплатная программа Fritzing вам в помощь.
Питание
Это второй очень важный момент. От питания зависит очень многое. Например, серво-мотор при повороте вала на заданный угол начинает потреблять большой ток. При этом если серво подключен по питанию на 5 В Arduino, то происходит «просадка» по напряжению и вся остальная схема начинает глючить, а Arduino даже может перезагружаться при этом.
В любом случае, если в поделке используете моторы, то Motor Drive Shield необходим (или подобная ему схема).
Итак, имеем 4 мотора постоянного тока (DC), сервопривод, саму плату Arduino и несколько датчиков. Моторы самые прожорливые, а вот датчики могут успешно запитываться с разъемов самой платы Arduino, поэтому с ними все просто. Для удобства я свел всё хозяйство в одну таблицу.
Напряжение рекомендованное или типовое. Потребляемый ток | Максимальное напряжение | Чем планируется питать | Примечания | |
---|---|---|---|---|
Плата Arduino UNO R3 | 7 — 12V, 200mA (среднее) | 6 — 20 | «Крона 9V» Li-ion 650mAh, 8.4V | Разъем с плюсом в центре |
Сервомотор MG-995 | 5—6 V, 0.1 — 0.3A (пиковое) | 4.8 — 7.2 | Аккумуляторы (5) шт. Ni-Mh 1.2V = 6V | Питание только от отдельного источника. Если запитать вместе с Arduino, то будет глючить всё. Напряжения Ni-Mh аккумуляторов 4шт. * 1.2В = 4.8V не хватает. Некоторые утверждают, что данную серву не стоит использовать на 6 вольтах только 4,8 |
DC двигатели (4 шт.) | 6 — 8V, ток от 70mA до 250mA | 3 — 12 | аккумуляторы (5+3) шт. Ni-Mh 1.2V = 9.6V | Вы не сможете нормально запустить двигатели от 9В батареи, так что даже не тратьте время (и батареи)! |
Motor Drive Shield L293D | не требуется | 4.5 — 36 | не требуется | |
Модуль Bluetooth HC-0506 | 3.3 V, 50 mA | 1.8—3.6 | С пина 3.3V платы Arduino | |
Ультразвуковой измеритель расстояния HC-SR04 | 5 V, 2 mA | 5 | С пина 5V платы Arduino |
DC/DC преобразователя напряжения у меня не было в наличии. Крона 9V оказался не очень хорошим источником питания, просто у меня он уже был.
А вот от использования Li-ion аккумуляторов большой емкости я отказался. Во-первых, из-за высокой стоимости, во-вторых в китайских интернет-шопах легко нарваться на подделку. Точнее не «легко», а «всегда». Кроме этого Li-ion требует особого обращения, и он не безопасен.
Итак, как видим из таблицы, нам требуется 3 независимых источника питания:
Где ж столько набрать? Саму плату Arduino в любом случае надо питать от отдельного источника, т.к. при «проседании» напряжения, например от включения моторов, плата может перезагружаться или просто глючить. Здесь применяем аккумулятор форм-фактора «Крона 9В», причем разъем который будет подключаться к Arduino должен быть с «плюсом в центре».
Для сервомотора и 4-х DC моторов можно обойтись одним источником питания. Проблема только в том, что сервомотор рассчитан на напряжение 5-6В (максимум 7.2В) и ток 100 — 300мA (пиковое), а DC моторам требуется 6 — 8В (максимум 12В) и ток 250мА.
Для решения проблемы существуют DC-DC преобразователи, но у меня таких не оказалось. В итоге я применил свою «фирменную» схему соединения (безо всяких понижающих электронных схем, только экологически чистые напряжение и ток!): подключил 8 шт. аккумуляторов на 1.2V последовательно и сделал отводы в нужных местах, как показано на схеме.
6В пошло на сервомотор, а 9.6 на DC моторы. Понятно, что аккумуляторы 1—5 будут испытывать повышенную нагрузку.
Для управления серво и DC моторами использовал 4-х канальный Motor Drive Shield на базе микросхемы L293D.
Сборка
Собрать готовое шасси небольшая проблема. Но не думайте, что без допиливания у вас всё сразу соберется. Поэтому приготовьте надфили.
Подключить нормально несколько моторов, сервомотор или шаговый напрямую к Arduino не удастся. Так как пины (выводы) Arduino являются слаботочными. Для решения проблемы существует дополнительный модуль управления приводами — Motor Drive Shield на базе микросхемы L293D, которая является одной из самых распространенных микросхем, предназначенных для этой цели. Чип L293D известен также как H-мост (H-Bridge).
Данная плата модуля управления приводами имеет следующие характеристики.
Motor Drive Shield требует небольшой доработки, чтобы можно было после него хоть что-нибудь подключить. Я подпаял сверху необходимые разъемы, получилось вот что.
Моторы могут быть подключены к дополнительному по отношению к плате Arduino источнику питания. Я рекомендую именно такой способ подключения. Для этого нужно снять, разомкнуть перемычку, как показано на картинке.
В этом случае питание Arduino и питание моторов производится независимо друг от друга.
Светодиод на мотор-шилде светится при наличии питания для моторов, если он не горит, то моторы работать не будут.
Сервомоторов положение джампера питания не касается, они по прежнему будут запитаны от 5V Arduino. Так как сервомоторы обычно потребляют большой ток и если питания недостаточно, то всё устройство начинает глючить, в «лучшем» случае будет глючить только сервопривод — не будет поворачиваться на заданный угол, либо все время перед каждым поворотом поворачивать сначала в 0 градусов, а уже потом на заданный угол (и если будет успевать). Поэтому я рекомендую питать сервопривод также от дополнительного источника питания. Для этого придется немного переделать схему подключения: откусить плюсовой провод (обычно красный) от стандартного разъема и соединить его с плюсом источника питания напрямую.
При подключении Motor Drive Shield аналоговые пины не используются. Цифровые пины 2, 13 не используются.
Указанные ниже пины используются, только если подключены и используются соответствующие DC двигатели или шаговые двигатели (Stepper):
Эти пины будут заняты, если используются любые DC/steppers: D4, D7, D8, D12.
Указанные ниже пины будут заняты, только если используются соответствующие сервомоторы:
Для начала работы с Motor Drive Shield необходимо скачать и установить библиотеку Adafruit AFMotor.
Пример кода для управления моторами:
DC мотор у меня начал крутиться только при указании скорости больше 100, если меньше — просто жужжит. Минимальную скорость вашего мотора вам придется определить экспериментально.
Для моторов, подключенных к M1 и M2 можно задать частоту: MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, MOTOR12_1KHZ. Наибольшая скорость вращения достигается при 64KHz эта частота будет слышна, меньшая частота и скорость на 1KHz но и использует меньше энергии. Моторы 3 и 4 всегда работают на 1KHz другие значения игнорируются. По умолчанию везде 1KHz.
После этого необходимо прогнать тест моторов. Скетч для тестирования можно взять здесь. В начале скетча измените номер мотора в строке (или в строках) типа:
Скетч некоторое время вращает мотор(ы) вперед по ходу движения робота, а затем назад. Посмотрите внимательно в ту ли сторону вращается мотор, и измените полярность подключения если нужно.
Подключаем ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module. Распиновка выводов:
Время затрачиваемое ультразвуковым дальномером на измерения (определено опытным путем):
Ультразвуковой датчик дальномер, в силу своей физической природы, а не потому что Китай, в некоторых случаях плохо определяет расстояние до препятствия:
Другими словами, для ультразвукового дальномера в идеале было бы отлично, если бы все препятствия имели вид твёрдой плоскости, перпендикулярной направлению излучения ультразвука.
Некоторые проблемы можно решить с помощью инфракрасного датчика расстояния. Но он тоже не идеален:
Хотя если установить эти дальномеры в паре, то эффективность их работы заметно повысилась бы.
Подключаем Bluetooth HC-05
Как видим из даташита основные пины «голого» HC-05:
Наш модуль припаян к плате Breakout/Base Board, где уже есть делитель напряжения, поэтому диапазон рабочих напряжений у него от 3.3В до 6В.
Подключаем наш Bluetooth модуль в сборе :
После подачи питания на модуль Bluetooth HС-05 на нем должен заморгать светодиод, что означает работоспособность блютуза.
Включаем bluetooth на мобиле, находим устройство с именем HC-05 и подключаемся, пароль 1234.
Для тестирования заливаем в Arduino простой скетч:
На Android телефон устанавливаем Bluetooth Terminal. Подключаемся к устройству HC-05 и наблюдаем на экране телефона бегущие строки с увеличивающимся счетчиком.
Чтобы модуль мог принимать AT-команды, нужно его перевести в соответствующий режим — для этого нужно установить вывод KEY (PIO11) в логическую 1. На некоторых Breakout/Base Board вместо вывода KEY есть вывод EN (ENABLE), который может или не может быть припаян к выводу на самом чипе. Это касается только чипов HC05. Вот как раз у меня вывод EN платы никуда не припаян. Поэтому его можно припаять отдельным проводом к выводу KEY(PIO11) чипа. Либо во время работы, чтобы перевести HC05 в режим AT-команд на пару секунд закоротить вывод чипа KEY(PIO11) на вывод питания Vcc. Для HC06 вывод KEY не нужен.
Программное обеспечение
Примечание. Каждый раз перед загрузкой программы в Arduino, убедитесь, что модуль Bluetooth не подключен к Arduino. Это вызовет проблемы заливки скетча. Просто отсоедините питание от Bluetooth модуля или провода, соединяющие Arduino и RX, TX контакты модуля.
В начале скетча измените номера моторов в строках типа:
Если заменить строку
то включится режим отладки.
В режиме отладки робот RoboCar4W реально ездить или крутить колесами не будет. Вместо этого активируйте монитор последовательного порта и там увидите как он «ездит» виртуально. Вместо реальной езды вперед в монитор последовательного порта будет писаться строка «Forward», вместо заднего хода с поворотом влево — «Turn Back L(eft)» и т.д. Датчик ультразвукового измерения расстояния тоже ничего не делает, вместо этого расстояния до препятствий генерируются программно и случайно.
Этот режим отладки удобен, если вы меняете алгоритм движения и вместо того, чтобы ловить машинку по комнате, просто проверяете всё на «холостом» ходу.
Скетч для ручного управления по блютуз скачать здесь. Скетч не имеет режима отладки, так как там всё прозрачно. Вы нажимаете кнопку — робот едет.
Робот на Ардуино и машинка на Bluetooth своими руками
Робот – машинка на Ардуино становятся одним из самым популярных инженерных проектов в школьной робототехнике. Именно с таких устройств, автономных или управляемых со смартфона и bluetooth, начинается путь в робототехнику “после Lego”. К счастью, сегодня можно без труда купить все необходимые компоненты и достаточно быстро создать своего первого робота для езды по линии или объезда препятствий. В этой статье вы найдете подробную видео инструкцию как сделать продвинутый автомобиль Arduino Car своими руками, с питанием, датчиками линии, расстояния и управлении через bluetooth.
Робот на ардуино своими руками
В отличие от других проектов, создание робота – автомобиля (Arduino Car) требует понимания и навыков работы сразу с несколькими важными компонентами, поэтому не стоит приступать к созданию машинок без получения базовых навыков работы с платформой Arduino. В любом случае, вам нужно будет но только подключить готовые модули, но и собрать конструкцию, шасси с двигателями, обеспечить правильное питание и управление. Все это потребует определенного терпения.
Робот машина на Ардуино
Вот список ключевых компонентов, которые обязательно встретятся в проекте.
Контроллер Ардуино
Куда уж без него, если мы говорим о проектах на этой платформе. Как правило, роботы машины делают на базе плат Arduino Uno и Nano. Mega будут слишком большие, Pro Mini сложнее подключать к компьютеру и соединять с остальными компонентами, а Leonardo требуют дополнительных навыков в программировании, они дороже и их основное преимущество (тесная интеграция с компьютером в качестве периферийного устройства) в данном случае не слишком востребована.
Есть еще вариант использования плат ESP8266 или ESP32, тогда в проекте появляется возможность управления машиной через WiFi. Но и сами платы и их программирование требует определенных навыков, в этой статье мы будем говорить преимущественно об Uno или Nano.
Конструкция, шасси и двигатели робота на Ардуино
Для того, чтобы что-то поехало или стало перемещаться, надо снабдить “это” колесами, гусеницами или манипуляторами-ногами. Вот тут выбор совершенно не ограничен, можно использовать совершенно любые комбинации и сочетания платформ. Как правило, в качестве начального варианта берутся уже готовые наборы платформ с Алиэкспресс.
Двигатель, шасси и колеса машинки на ардуино
Если работать со стандартными наборами вам не интересно, можно создать платформу своими руками. Например, разобрать игрушечные радиоуправляемые машинки или любые двигатели на 5-12 вольт, с редукторами или без. Колеса можно создать и самим, что тоже является интересной задачей.
Драйвер двигателей
Ардуино – достаточно ранимое устройство, не терпящее больших нагрузок по току. Соединяя его с “брутальными” мощными двигателями, не избежать беды. Поэтому для нормальной совместной работы нам нужно будет включить в схему робота компонент, отвечающий за управление двигателями – подающий и отключающий ток на их обмотки. Речь идет о микросхеме или готовом модуле, которые называют драйвером двигателя. На нашем сайте есть статьи, посвященные драйверам, построенным на схеме H-моста. Если вы покупаете готовые шасси, то обязательно предусмотрите возможность размещения на них подходящего драйвера.
Красивый корпус
Как правило, вся конструкция автомобиля строится вокруг его шасси. Если посмотреть примеры готовых проектов, то они часто выглядят как “провода на колесиках” – внешний вид их изобилует пучками соединительных проводов, ведущих от восседающего на троне контроллера Ардуино к драйверам, моторам и датчикам. Между тем, красивый и функциональный корпус не только вызывает правильные эстетические чувства и помогает выделить вашу модель от остальных. Хороший корпус может превратить игрушку в реальное устройство, помогает привить навыки конструирования и промышленного дизайна, что важно для инженеров любого возраста.
Питание робота
Обеспечение правильной схемы питания – это то, что очень часто оказывается на последнем месте в списке приоритетов начинающих ардуинщиков. Между тем, именно ошибки в схеме электропитания становятся основными причинами проблем, возникающих в процессе работы умных устройств на Ардуино. Создавая ардуино-машинку нужно предусмотреть питание контроллера, двигателей, драйвера и датчиков. У всех них есть свои ограничения и особенности работы, требуется создать оптимальное по весу и сложности решение, позволяющее учесть все эти ограничения.
Питание робота на Ардуино
Создавая по-настоящему автономное устройство робота, нужно побеспокоиться и о времени его работы, и о возможности быстрой подзарядки или смены батареек. Как правило, выбираются решения из следующих вариантов:
Каким бы ни был источник питания, нужно обеспечить его надежное крепление, удобное расположение, защиту от воздействия недружелюбной окружающей среды. Если вы подключаете к одному источнику и контролер, и двигатели, и датчики, то нужно позаботиться о правильной схеме, включающей, например, надежную связь “по земле” всех устройств.
Где купить платформу и запчасти
Все, о чем говорится в этой статье, можно без проблем купить на всем известном сайте. К сожалению, подавляющее большинство предложений основываются на стандартной платформе 4WD автомобиля с двумя несущими планками, не очень надежными двигателями и колесами, любящими ездить в “развалочку”. Но эти варианты относительно не дороги и вполне подойдут для начала работы.