↑ Наверх
28 февраля 2012

Собираем свою Bluetooth машинку с управлением на Android

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



Выбираем компоненты
В прошлом мы с приятелями написали собственную прошивку для роботов Lego Mindstorms NXT, поддерживающую удалённое управление роботом по bluetooth с Android-коммуникатора. Для экспериментов тогда была приобретена отладочная плата Olimex SAM7 с ARM7 на борту, которую в этот раз можно использовать в качестве управляющего контроллера.
В качестве шасси используем корпус игрушечной машинки.

Нужен bluetooth-модуль. Результат хотелось получить быстро, поэтому модуль был выбран из единственного доступного в магазине на тот момент BTM-112, хотя он оказался сравнительно дорогим.

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

В сумме наши компоненты:

•Машинка
•Управляющий контроллер Olimex SAM7
•Bluetooth-модуль BTM-112
•Контроллер для управления моторами L298N
Теперь все необходимое у нас есть.

Соединяем bluetooth с управляющей платой
Для начала настроим доставку команд управляющему блоку. Схема соединения bluetooth-модуля и контроллера простая: по сути дела это UART с некоторыми управляющими ножками, то есть надо лишь присоединить модуль к интегрированному UART-контроллеру.

Программная составляющая не сильно сложнее. При соединении модуль пишет строку вида «CONNECT RE:MO:TE:BT:MA:CC xxx \r\n», а при отсоединении — «DISCONNECT xxx \r\n». Задача драйвера состоит в наблюдении за потоком символов и, в случае если сейчас активно соединение, передаче потока управляющему приложению. В итоге драйвер представляет собой конечный автомат, у которого переключение состояния означает переключение функции-обработчика.

Удалённое управление
Как было обещано, удаленное управление осуществляется с помощью Android-коммуникатора.

Наше прошлое приложение для Android (которое управляло Lego Mindstorms NXT, тоже посредством bluetooth) с помощью акселерометра отслеживало наклон коммуникатора и посылало соответствующие команды управления на NXT. Так что наиболее простым решением стало добавление протокола управления машинкой в уже существующее приложение. Сам протокол достаточно примитивен: фиксированная длина команды, фиксированный заголовок, после чего управление по осям X и Y.

Итак, на данном этапе мы можем “порулить” нашей платкой, правда моторы пока не подключены, так что индикация движений производится встроенными светодиодами (видео, к сожалению, нет, в этот момент снял только фотку), но всё равно прогресс есть, он виден, и это греет душу.

Соединяем управляющую плату с моторами

Изначально я думал, что смогу использовать управление со старой платы (зашитой в саму машинку), но оказалось, что использовать её в чистом виде нельзя, поскольку управление моторами было крепко сцеплено с радиочастью. Управлять моторами напрямую с ног головного контроллера тоже не получится из-за малой выходной мощности микросхемы. К сожалению, опыта в этой области у меня нет никакого (все-таки я программист, а не схемотехник), поэтому пришлось прибегнуть к помощи знакомых. По совету я взял микросхему усилителя L298N (избыточную для моих нужд, зато работающую из коробки) и собрал референсную схему.

Напомню, препарируемая машинка детская, и управление у нее немного хромает; когда я начал разбираться с моторами, я понял одну из причин. Для механизма поворота используется не сервопривод, а обычный электродвигатель, который может находиться в одном из трех состояний (выкл., вперед и назад). Таким образом, о плавном повороте мечтать не приходится.

В общем, функционально схема простая, один мотор используется как двигатель, второй мотор — как руль (у него стоит блокиратор на определенном угле поворота).
Для управления каждым мотором нужно подать напряжение на соответствующие управляющие ноги (положительное или отрицательное напряжение либо нуль). Напряжение измеряется между двумя точками (входными ногами управления), то есть мне нужно подавать напряжения на пару управляющих ног как-то так:
forward reverse off
PIN1 1 0 0 1
PIN2 0 1 0 1

Так как Android-приложение передает плавное управление, состояние моторов изменяется по преодолению заданного порога.
Код получился очень простой, я не буду приводить его здесь, но в конце поста есть ссылки на исходники всего проекта.

Итог

Ролик с работающей машинкой:
www.youtube.com/watch?v=iULK06tYsBY&feature=player_embedded

Понятно, есть недостатки:

•Дискретное управление лево/право, вперед/назад. Сейчас управление моторами осуществляется с помощью GPIO, но выбранные для управления линии могут быть переназначены под PWM контроллер. Таким образом, повороты и ускорение будут плавным.
•Дорогой усилитель. Тут всё просто, заменить на более дешёвую микросхему или схему на нескольких транзисторах.
•Скромные возможности. Раз управление осуществляется с помощью смартфона, то можно как-либо расширить функциональность по сравнению с просто пультом управления.

Где посмотреть
Весь код есть в открытом доступе.
Прошивка для платы Olimex — тут.
Код Android приложения тут, собранная версия на Android Market.

© Habrahabr

  • 2
  • kibero
  • 28 февраля 2012, 11:21
  • 8274
  • Поделиться:
avatar
В этот радиоуправляемый (или Bluetooth-управляемый) автомобильчик так и просится какая-то Wi-Fi видеокамера. Тем более, что большинство коммуникаторов на Android оснащены этим интерфейсом, а софта для просмотра потокового видео предостаточно.
avatar
Никогда не понимал, что интересного в камере на авто видно? Сколько видео не смотрел, ничего интересного не нашел. Может покажете что может удивить?
avatar
А что «интересного» вы хотите там увидеть? Главное ведь не вид, а то, что такой моделью можно управлять (или, по крайней мере, попытаться управлять) когда она находится вне поля вашего зрения. А это уже интересно. :-)
avatar
Ну острых ощущений или еще чего-нибудь :-) Как FPV и съемка с авиамоделей, лично меня некоторые видео просто поражают, возможно потому что нам это невиданно, ну то есть в обычной жизни мы не можем летать, поэтому и поражает. А машинки, если в плане управления да, но по тем видео что лично видел, не сказал бы что там можно управлять, видео очень сомнительного качества, обзор достаточно плохой. Ну это все может быть конечно из-за хреновой аппаратуры установленной на модели. А в данном случае о поле зрения судить не приходиться, блютус не так далеко действует, чтобы потерять ее из поля видимости :-)
avatar
Для каких-то модельных танковых битв — это вообще идеальное решение. А качество изображения зависит от установленной камеры. Wi-Fi обеспечивает достаточно «толстый» канал, туда и HD можно вполне засунуть.
avatar
Прогнать HD через Wi-Fi проблем не составит. Интересно посмотреть записи такие. С танковых битв никогда не видел честно говоря.
avatar
Держал в руках подобную игрушку за 200 с лишним долларов. «Танчик», который рекламируется как шпионский, управляется по Wi-Fi с iPhone или iPad. Дальность действия — метров 30 — 40. Изображение со встроенной камеры достаточно терпимое.
avatar
При 30-40 метрах, Wi-Fi и с IPhone, преподносить как шпионское это забавно :-)
avatar
Эта игрушка явно предназначена для подростков. Поэтому и «шпионское». И потом, 30 — 40 метров — дальность действия в реальном доме с кирпичными стенами. На открытом пространстве она должна раза в два увеличится.
avatar
Ну да, это все-таки игрушка больше :-)
avatar
Да, но такая игрушка — отличный демонстратор возможности управления автомоделями «от первого лица» с помощью стандартной электроники. Как эти возможности используются — совсем другое дело. Думаю, что Wi-Fi «автомобильчики» и «танчики» скоро станут массовым явлением.
avatar
Я совершенно с Вами согласна, Игорь. Тем более что с каждым днем моделизм становится все новее и преобразование. А с системой Wi-Fi такие игрушки, пусть даже дорогие, станут куда перспективнее и удобнее.
avatar
Дело тут не в удобстве. Есть надежда, что использование стандартных Wi-Fi и Bluetooth модулей, WEB-камер и т. д., позволит значительно удешевить такие модели. К сожалению, этот процесс происходит очень медленно.
avatar
Я немного с Вами не согласен и с высказыванием Venera. Использование Wi-Fi технологий в серьезном моделизме почти невозможно. Использование в игрушках — да, конечно, но для игрушек слишком дорого, а для серьезных моделей уж очень ненадежно. Да и почти нереально. Ну либо я не прав в том что разделяю игрушки и модели :-)
avatar
Я, например, вижу только одно ограничение Wi-Fi — недостаточную «дальноойность». Но ведь существует огромный «пласт» комнатных моделей (не игрушек), для которых это ограничение не является проблемой…
avatar
Недостаточная дальность Wi-Fi ограничивает его использование на «уличных» моделях, однако очень большое энергопотребление передающих модулей ограничивает в общем-то и использование его даже для «комнатных» моделей. Поэтому там и применяются примитивные передатчики, которых китайцы делают пачками и уже давно денег вообще не стоят. Чтобы использовать для управления телефон, айпад или еще что-то в этом духе, да, конечно можно, но, однако, я бы лично даже 450 верт в зале не стал поднимать управляя им с айпада. Максимум что пока сделали — это возможность управления с айпада или айфона, и то только с внешним передающим модулем, для 100-го трекса. Ну и то — это игрушка :-)
avatar
Мне кажется, что насчет «прожорливости» Wi-Fi вы немного преувеличиваете. Модули, предназначенные для мобильных устройств, специально оптимизируют на предмет уменьшения энергопотребления, иначе какой в них смысл?
avatar
Нет, не преувеличиваю, она такая и есть. Принимающий модуль, который стоит в телефонах действительно уже почти доведен до идеала, но при этом кушает достаточно много. Но если этот модуль переключить в передающий режим, то кушать начнет в разы больше, при этом обеспечит дальность передачи не более пары метров. Хорошая альтернатива ZigBee. Энергопотребление мизерное, дальность передачи бешеная, однако скорость не очень большая. Однако для некоторых областей очень хорошо подходит, в том числе для этой вполне хватит.
avatar
Не совсем с вами согласен. В стандарте передачи данных IEEE 802.11 (b, g или n) достаточно трудно выделить «передающий» или «принимающий» модуль. Обе стороны и передают радиосигналы, и принимают их…
avatar
В стандарте нельзя, а в устройствах если Вы покупаете, то Вы отдельно видите Wi-Fi точку, отдельно модуль для компа. Разделение не потому что один может принимать, второй передавать и наоборот, они действительно оба могут работать в режиме приемо-передачи, но посмотрите на адаптер питания Вашей точки и будет понятно что я имею ввиду, в плане мощности. И можно попробовать модуль в буке, телефоне или компе включить в режим точки и увидите что работать он будет максимум на 2-5 метра по прямой, зависит от модуля.
avatar
Мы говорим сейчас о технологиях, которые знаем и которые присутствуют на данный момент времени. А попробуйте заглянуть подальше. Технологический процесс не стоит на месте. Каждый день появляется что-то новое. Так что возможно и управление по Wi-Fi станет обыденностью.
avatar
Я с Вами не согласен. Не думаю что возможность управления по Wi-Fi станет обыденностью.
avatar
Ну а почему нет? Ещё не так давно сотовый телефон был большой редкостью, а сейчас он есть у любого школьника младших классов. Вся картина мира меняется ежедневно и ежечасно. Так что то, что сегодня редкость, завтра будет массовым.
avatar
Потому что ни с какой стороны данный протокол передачи данных для этого не подходит.
avatar
Не совсем понимаю, как протокол передачи данных влияет на энергопотребление радиопередатчика, работающего на частоте 2,4 или ГГц. Насколько я понял, основной проблемой вы считаете именно «прожорливость» Wi-Fi устройств.
avatar
Немного поторопился когда писал предыдущий коммент, да, речь просто о стандарте Wi-Fi. В частности первостепенно это энергопотребление, далее уже недостатки протокола, там они тоже есть для данной сферы применения.
avatar
В принципе, в чем-то вы правы. Для достижения одинаковой «дальнобойности» на гигагерцовых частотах нужен более мощный передатчик, чем на мегагерцовых. Соответственно, энергопотребление его будет больше.
avatar
Ну тем не менее частота Wi-Fi 2.4 ГГц, аналогично как и всех аппаратур управление которые сейчас продаются, тоже 2.4 ГГц.
avatar
В таком случае разницы в «дальнобойности» быть не должно. Ведь она зависит от четырех факторов — мощности передатчика, чувствительности приемника, частоты и конструкции антенны.
Только зарегистрированные пользователи могут оставлять комментарии. Пожалуйста, .

Регистрация занимает 40 секунд и не вызывает никаких сложностей.
Также вы можете войти на сайт используя свою учетную запись на любом из предложенных сервисов:

yandex google facebook twitter vkontakte