Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Оглавление

Вместо предисловия

Начинать работу с Arduino, как и с любой другой платформой программной или аппаратной, всегда интереснее с какого-нибудь реального проекта. Программисты при этом пишут код выводящий «Hello, world», ардуинисты моргают светодиодом. И все радуются как дети.

Я же решил начать с продвинутого проекта, в том числе с тайной надеждой оторвать молодое поколение от Counter-Strike.

Как можно догадаться из названия RoboCar4W, первым проектом стал робот-машина о четырех колесах. Начиная работу я уже имел опыт программирования, умел когда-то давно паять, но совершенно не знал даже распиновки Arduino и документацию совершенно не читал. Все премудрости изучал по ходу пьесы и гугл в помощь.

Поскольку сам проект принципиально не нов, подобных описаний в сети достаточно, все компоненты известны, то никаких неожиданностей не предполагалось. Поэтому задумка была сформулирована в самых общих чертах и главной целью являлось погружение в «мир вещей» с помощью Arduino, как платформы для быстрого прототипирования. В этом опусе возможно кто-то узнает себя в самом начале пути.

Всё железо приобреталось на ebay, и по своему опыту хочу сказать, что проще приобрести сразу стартер кит (ищите по словам Arduino Starter Kit), а не собирать подетально. Да и приедет все сразу вместе.

Какую плату семейства Arduino выбрать?

Я взял Arduino UNO, под нее много проектов с описаниями. Но сейчас бы взял Arduino Mega 2560, у нее больше цифровых и аналогов выводов и полная совместимость по проектам с UNO.

Главный секрет успешных покупок на eBay — покупать у продавцов с высоким рейтингом и при этом внимательно читать описание товара. Об этом есть много статей в интернете.

Общее описание проекта RoboCar4W

В мире разработки программного обеспечения это называют еще «требования к системе».

Задумка проекта была следующей. Первая версия машины-робота под названием RoboCar4W должна выполнять незамысловатые действия:

  1. двигаться вперед, назад, выполнять повороты
  2. измерять расстояние до препятствий
  3. уметь автоматически объезжать препятствия находящиеся впереди.

Второй вариант машины должен управляться вручную по bluetooth с Android телефона.

Чтобы вам лучше работалось вот весь финальный проект RoboCar4W в сборе (тут без блютуза).

Проект RoboCar4W в сборе

Проект RoboCar4W в сборе

Вот видео ходовых испытаний.

На первом видео RoboCar4W ездит в автоматическом режиме с объездом препятствий на двух разных версиях «прошивки», т.е. скетча, поэтому, если кто самый зоркий и заметил, что поведение робота в разных эпизодах немного отличается.

На втором видео RoboCar4W передвигается при помощи команд, передаваемых «водителем» по Bluetooth с мобильного телефона под Android. На телефоне установлена программа «Bluetooth RC Car». Причем, если близко впереди оказывается препятствие, то робот останавливается, т.е. протаранить что-нибудь не получится (однако есть «секретная» кнопка, которая отключает безопасный режим).

На третьем видео RoboCar4W показывает заранее запрограммированную демо-программу движения с поворотами. Демо-программа активируется по команде с того же мобильного телефона под Android. Робот просто едет некоторое время и делает повороты.

 

Алгоритм управления движением

Важный момент, на котором никто в своих проектах не заостряет внимание — это алгоритм работы вашей поделки. В данном конкретном случае — это то, как именно будет ездить наш робот-кар.

Если мы что-то упустим сейчас, то в дальнейшем возможно нам понадобятся дополнительные детали, сенсоры, а путь из Китая не близкий. Это в лучшем случае, в худшем вся работа окажется насмарку. Это как паять без канифоли. Так что лучше обдумать всё именно сейчас.

Большая ошибка называть наш способ «алгоритм объезда препятствий» или «поиском пути». Это отдельные математические дисциплины, чистая математика. Если вам очень-очень сильно нравится математика, то погуглите указанные словосочетания, чтивом на полгода будете обеспечены.

Пока же нас интересуют вещи гораздо проще. Поэтому мы назовем это правильно и точно — алгоритм управления движением 4-х колёсного робота. Разумеется речь идет об автоматическом управлении без участия человека.

Вот этот простой алгоритм записанный словами, для более сложных алгоритмов придется (хочется или нет) составлять блок-схемы.

Сейчас одновременно смотрите в .

  1. Измеряем расстояние до препятствия впереди.
  2. Если это измеренное расстояние меньше значения DST_TRH_BACK (сокращение от distance threshold), то останавливаемся и едем задним ходом одновременно поворачивая. Направление поворота выбираем так: если ранее уже поворачивали влево, то поворачиваем вправо и наоборот.
  3. Если измеренное расстояние больше чем DST_TRH_BACK, но меньше чем DST_TRH_TURN, то просто поворачиваем. Направление поворота выбираем случайно.
  4. Если до препятствия далеко, то просто едем вперед.
  5. Повторяем все сначала.

Чем хорошо, что у нас 4 колеса и все ведущие? Мы можем выполнить (запрограммировать) несколько типов поворотов:

  • Плавный поворот. Все колеса вращаются, но колеса с одной стороны вращаются быстрее.
  • Резкий поворот. Колеса вращаются только с одной стороны.
  • Разворот на месте. Как трактор, колеса одной стороны вращаются назад, а другой — вперед.

Во втором варианте программы, при управлении с Android-телефона безопасный режим, когда робот старается не допускать лобовых столкновений, может быть отключен, если в программе два раза нажать кнопку button-unsafe и включен обратно однократным её нажатием.

Важное примечание. Вся логика находится под управлением Arduino. Android здесь выступает просто как игровой пульт (без мозгов) от консоли, его задача — тупо передавать нажатия кнопок (т.е. команды) посредством Bluetooth в Arduino RoboCar4W.

 

Компоненты

Первоначально в состав машины входил сервопривод, который поворачивал ультразвуковой измеритель расстояния на определенный угол для измерений по трем направлениям. Но в ходе испытаний из-за неосторожного обращения сервопривод сгорел, поэтому теперь датчик расстояния просто жестко закреплен впереди корпуса.

Нет худа без добра, зато скетч стал немного проще.

На будущее, сервопривод покупайте самый простой и дешевый, особая мощность, скорость и точность поворота на заданный угол не нужны, а вывести серво из строя довольно легко, как оказалось. Вполне подойдет SG90 стоимостью .

Итак составные части проекта RoboCar4W, описание на английском дается для облегчения поиска на ebay и ему подобных:

  1. Arduino UNO R3
  2. Готовое шасси 4 Wheel Drive Mobile Robot Platform Smart Car Chassis Arduino Compatible
  3. Моторы постоянного тока (DC) с вращением в обе стороны — 4 шт.
  4. Колеса — 4 шт.
  5. Плата для управления 4-мя DC моторами Motor Drive Shield L293D
  6. Ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module Distance Measuring Sensor
  7. Аккумуляторы Ni-MH 1.2 В — 8 шт.
  8. Пластиковый бокс держатель для батареек, Battery Box holder 4 AA Batteries — 2 шт.
  9. Аккумулятор типа «Крона» 8.4 В — 1 шт.
  10. Опционально тумблер — выключатель питания

Шасси, DC моторы и колеса приобретались сразу в комплекте и даже с инструкцией по сборке.

 

Распиновка

Опять и снова суперважный момент, на котором нигде не акцентируется внимание. Вы заранее должны спланировать, какие пины Arduino и всех шилдов (дополнительных плат) под что конкретно будут заняты.

Аналоговые входы могут использоваться как цифровые выводы портов ввода/вывода. Выводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19. Это относится только к выводам Arduino, а не к физическим номерам выводов микроконтроллера Atmega.

Arduino UNO

Arduino UNO

Рисовать не обязательно, можно просто свести все в таблицу. У меня получилось так.

ARDUINO UNO GND 13 IOREF 12 DC/steppers RESET 11 DC Motor #1 / Stepper #1
(activation/speed control) 3.3V 10 Если Servo #2 5V 9 Если Servo #1 GND  8  DC/steppers GND  Vin 7 DC/steppers 6 DC Motor #4 / Stepper #2
(activation/speed control) Ultrasonic sensor
TRIGGER (pin 14) A0 5 DC Motor #3 / Stepper #2
(activation/speed control) Ultrasonic sensor
ECHO (pin 15) A1 4 DC/steppers A2 3 DC Motor #2 / Stepper #1
(activation/speed control) A3 2 A4 1 ← TX  Bluetooth RX A5 0 → RX  Bluetooth TX

 

Пины D4, D7, D8, D12 будут заняты, если используются любые DC моторы или шаговые.

Пины D9 (Servo #1 control), D10 (Servo #2 control) будут заняты, только если используются сервомоторы.

Сама по себе плата для управления моторами Motor Drive Shield L293D пины Arduino не занимает.

Пины питания 3.3 В, 5 В и «земля» дублируются на Motor Drive Shield в достаточном количестве. Поэтому об их нехватке не стоит беспокоиться.

Если все-таки хотите красиво нарисовать, то бесплатная программа вам в помощь. Вот короткое, но красноречивое видео о возможностях этой программы.

 

Питание

Это второй очень важный момент создания прототипов. И опять никто в сети не акцентирует на нем внимание. Как будто всё само собой происходит.

На самом деле от питания зависит очень многое. Например, серво-мотор при повороте вала на заданный угол начинает потреблять большой ток. При этом если серво подключен по питанию на 5 В Arduino, то происходит «просадка» по напряжению и вся остальная схема начинает глючить, а Arduino даже может перезагружаться при этом.

В любом случае, если в поделке используете моторы, то Motor Drive Shield необходим (или подобная ему схема).

Вопрос питания подробно рассмотрен , где мне удалось избежать применения еще одной детали — DC/DC преобразователя напряжения, которого у меня не было в наличии.

Вопрос «как правильно протестировать аккумуляторы» подробно рассмотрен . С поправкой на вольтаж, описанный рецепт можно использовать и для Ni-MH аккумуляторов.

 

Сборка Arduino RoboCar4W

Собрать готовое шасси небольшая проблема. Но не думайте, что без допиливания у вас всё сразу соберется. Поэтому приготовьте надфили.

Провода для моторов китаец прислал слишком жесткие и, чтобы не выломать контакты у моторов, зафиксировал провода изолентой.

 

RoboCar4W сборка шасси

RoboCar4W сборка шасси

RoboCar4W сборка шасси

RoboCar4W сборка шасси

RoboCar4W сборка шасси

RoboCar4W сборка шасси

Колеса продаван укомплектовал с разными протекторами, это понятно чтоб веселей было. Ну да нам не на чемпионате мира выступать, простим.

robocar4w-wheel-01

Далее присоединяем моторы к плате управления, все премудрости .

После этого необходимо прогнать тест моторов. . В начале скетча измените номер мотора в строке (или в строках) типа:

AF_DCMotor motor(…);

Скетч некоторое время вращает мотор(ы) вперед по ходу движения робота, а затем назад. Посмотрите внимательно в ту ли сторону вращается мотор, и измените полярность подключения если нужно.

Подключаем ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module. Распиновка выводов:

  1. Vcc
  2. Trig (T)
  3. Echo (R)
  4. GND

Время затрачиваемое ультразвуковым дальномером на измерения (определено опытным путем):

  • максимум 240 мсек, если расстояние слишком велико (out of range)
  • минимум  1 мсек, если расстояние слишком мало
  • расстояние в 1.5 м определяется примерно за 10 мсек

 

Ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module

Ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module

 

Ультразвуковой датчик дальномер, в силу своей физической природы, а не потому что Китай, в некоторых случаях плохо определяет расстояние до препятствия:

  • если препятствие сложной формы, то ультразвук отражается под разными углами и датчик ошибается,
  • ультразвук отлично поглощается (т.е. не отражается) мягкой мебелью или игрушками, и датчик считает что перед ним ничего нет.

Другими словами, для ультразвукового дальномера в идеале было бы отлично, если бы все препятствия имели вид твёрдой плоскости, перпендикулярной направлению излучения ультразвука.

Некоторые проблемы можно решить с помощью инфракрасного датчика расстояния. Но он тоже не идеален:

  • небольшая максимальная дальность по сравнению с ультразвуковым: 0,3—0,8 м против 4 м
  • большое минимальное расстояние  по сравнению с ультразвуковым: 10 см против 2 см
  • зависимость чувствительности датчика от общей освещенности.

Хотя если установить эти дальномеры в паре, то эффективность их работы заметно повысилась бы.

Далее подготавливаем блютуз-модуль как . Подключаем к пинам как указано в таблице.

 

Программное обеспечение

Примечание. Каждый раз перед загрузкой программы в Arduino, убедитесь, что модуль Bluetooth не подключен к Arduino. Это вызовет проблемы заливки скетча. Просто отсоедините питание от Bluetooth модуля или провода, соединяющие Arduino и RX, TX контакты модуля.

В начале скетча измените номера моторов в строках типа:

AF_DCMotor motor(…);

.

Если заменить строку

byte debug = 0;

на

byte debug = 10;

то включится режим отладки.

В режиме отладки робот RoboCar4W реально ездить или крутить колесами не будет. Вместо этого активируйте монитор последовательного порта и там увидите как он «ездит» виртуально. Вместо реальной езды вперед в монитор последовательного порта будет писаться строка «Forward», вместо заднего хода с поворотом влево — «Turn Back L» и т.д. Датчик ультразвукового измерения расстояния тоже ничего не делает, вместо этого расстояния до препятствий генерируются программно и случайно.

Этот режим отладки удобен, если вы меняете алгоритм движения и вместо того, чтобы ловить машинку по комнате, просто проверяете всё на «холостом» ходу.

. Скетч не имеет режима отладки, так как там всё прозрачно. Вы нажимаете кнопку — робот едет.

.

Ну вот и все! Счастливой дороги!

voditeli-plakat


Источник: http://tim4dev.com/arduino-instruction-project-robocar4w/


Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini

Машинка на блютуз управлении на arduino mini