30 окт. 2010 г.

Машинка с дистанционным Bluetooth-управлением



      С самого первого раза, когда я увидел машинку, дистанционно управляемую через Bluetooth, мне захотелось сделать такую же своими руками. Для тех, кто не видел ничего подобного, поясняю: конструкция состояла из модуля с последовательным Bluetooth портом ( стоимостью около $200), платы сервоуправления «Mini SSC II» (ориентировочно $50) и довольно старенькой машинки с ДУ. Вот зеркальная ссылка на этот проект. Она была баснословно дорогой, что собственно и оттолкнула меня от ее покупки. Прошли долгие годы, пока я не наткнулся на действительно дешевые Bluetooth-модули марки GP-GC021 на eBay. Это были УАПП, полностью совместимые с ТТЛ-схемами. Мало того, что я смог бы сэкономить кучу денег, так еще и отпадала необходимость использовать RS-232 интерфейс с его высоким уровнем напряжения. Я решил использовать ДУ машинку с моих предыдущих попыток реализации радиочастотного управления, доработав сервоуправление для большего интереса и практичности. Учитывая то, что в своей предыдущей работе я проектировал лазерную головку через COM-порт, управлять мотором через последовательный не представляло особой сложности, тем более что все необходимое программное обеспечение было уже написано. Единственная задача, которую предстояло решить – реализация сервоуправления через последовательный порт.


Я просто подсоединил УАПП Bluetooth-модуля ко встроенному УАП в ATTiny2313, так чтобы они сообщались друг с другом напрямую. PORTB используется, чтобы управлять различными функциями машинки. Встроенное ПО ATtiny2313 считывает УАПП, затем формирует выходные сигналы и положение сервопривода. Сначала устанавливаются все выходные сигналы, кроме сигнала сервопривода. Сигнал представляет собой простую последовательность битов, в котором шесть старших определяют команды управления машинкой. Один означает «да», 0 – «нет», начиная с самого старшего бита, последовательность означает: | Передние фары | Стоп-сигналы | Вперед | Назад | Влево | Вправо | Не используется | Не используется |. В зависимости от значений бит «Влево» и «Вправо» переменная положения колес принимает установленное значение, представляющее собой крайнее левое или крайнее правое. После того, как значение позиции серво определено, оставшиеся биты просто отсылаются на PORTB, зажигая фары или заводя мотор. После этого вызывается функция, которая позиционирует серво. Согласно тому, как я написал программу, машина может откликаться на импульсы управления каждые 15 мс. В сравнении со временем стандартной человеческой реакции в 200 мс, этот промежуток времени незначителен. Встроенное ПО было написано на MikroC Pro от Mikro Elektronica. Я также подумываю о том, чтобы сделать ПО получше, с использованием AVR-GCC, который на сегодняшний день являются моим выбором номер один среди компиляторов. После пары других проектов, мои навыки в программировании на AVR значительно улучшились. Я еще поработаю над добавлением сенсоров, широтно-импульсного преобразователя и улучшеннием сервоуправления.



Вдобавок ко встроенному ПО для ATtiny2313 понадобилась еще программа для управления Bluetooth-устройством. Я написал небольшую программку на Visual Basic, которая может управлять машинкой через любой последовательный порт, аппаратный или виртуальный. Я добавил пользователям возможность управлять машинкой посредством клавиатуры, которая обеспечивает гораздо более легкое управление, чем любой, даже самый навороченный пульт ДУ, как по мне. Использована стандартная игровая раскладка: W – прямо, S - назад, A – влево D – вправо.
Java приложение

Управление машинкой через ПК по Bluetooth – это отличное изобретение, но мобильные телефоны также поддерживают Bluetooth. Для проекта с лазерной головкой я использовал Java, чтобы посылать последовательные команды на ПК через Bluetooth. Я нашел вот этот учебник по подключению GPS-модулей по Bluetooth. Я взял исходный программный код, разобрался что и как должно работать и, упростив его несколько, получил нужную мне программу. После этого формирование меню управления и отправка команд по Bluetooth с телефона казались легкой задачей.Программка отлично работает на моем k750i, не совсем идеально на телефоне моего отца k810i, и только способна принимать команды на N73 моей мамы. Так что за универсальность такого решения ручаться не могу. Я думаю, что проблема кроется в антивирусе смартфона N73 и некоторыми ограничительными настройками мобильного оператора на k810i, которые не позволяют использовать последовательный порт java-апплетами. Некоторые прошивки наверняка даже не позволяют java-приложениям использовать Bluetooth. Само java-приложение было написано на бесплатном и полностью открытом Netbeans. Я присоединил файлы с исходным кодом с моими комментариями, чтобы вам было понятно, что к чему.
Загрузите полный пакет, включая схемы, ПО, приложение для мобильного телефона и исходный код.

Приложение для Android


Поскольку последним моим приобретением стал HTC Hero, восхищения которому нет предела, я разработал приложение по управлению машинкой и под Android. Конечно, Android Market – полный отстой, но это все аргументы против самого Android. Их Dev Guide (руководство разработчика) оказался действительно полезным, с ним учиться программировать под Android очень легко. В любом случае, чтобы мой Android-смартфон оправдал свою ценность, он просто обязан был уметь управлять этой машинкой. Первая программа, которую я создал для тренировки, была маленьким приложением для звуковой карты. Затем, когда я уже понял основы, единственной трудностью для меня была реализация самого управления посредством Bluetooth. В конечном итоге мне пришлось взять за основу один из примеров (Bluetooth Chat). У меня получилось приложение, которое использует встроенный акселерометр телефона для управления рулем, а две большие кнопки – для управления направлением движения (вперед и назад). Куда более легкое устройство управления, чем на k750i.Что касается самого приложения, поиск Bluetooth-устройств осуществляется благодаря «DeviceListActivity.java», взятого с примера с чатом. Оно просто ищет парные устройства и те, которые находятся поблизости, отображает их в меню. Экранные кнопки формируют состав битовой последовательности, которая отсылается к машинке. Если интересно, вот исходный код этого приложения – blu_car.java. Опять же, надеюсь, моих комментариев будет достаточно, чтобы его понять. Если вы хотите откомпилировать исходный код, вам понадобиться DeviceListActivity.java вместе с графикой для иконок и текстовыми элементами. При необходимости, могу предоставить доступ к этому проекту. Готовая к установке программа есть здесь: blu_car.apk. Использование Bluetooth требует Android версии 2.0 и выше. Наверное, многие из вас удивятся, как же я тогда использовал свой Hero? Ответ найдете здесь: VillainROM 10.0




Добавление сервопривода

Конструирование новой системы рулевого сервоуправления было главной частью этого проекта, не имеющей прямого отношения к микроконтроллерам или Bluetooth. Следующая информация может быть полезной для тех, кто попытается воссоздать этот проект. Я немного расскажу о том, что именно я сделал. Изначально система рулевого управления машинки была сделана так, что машинка могла ехать строго прямо вперед, а на заднем ходе еще и поворачивать влево. Такая двухканальная структура управления рулем значительно упрощает электронику. Если учесть, что изначальная схема состояла только из дискретных компонентов, то решение конструкторов вполне объяснимо! Мне повезло, поскольку нужно было сделать несложную модификацию имеющейся схемы, чтобы обеспечить машинке возможность ехать во всех направлениях.На первой картинке изображена оригинальная система рулевого управления и сервосистема, которую я планировал использовать (см. фото слева). На eBay мне удалось найти четыре небольших любительских сервомеханизма марки 9G, которые вполне подходили для моей машинки. Так как мне не хотелось слишком портить ее вид в случае неудачи с системой сервоуправления, я смастерил новую ось для передней колесной пары из черного пластика от простой коробочки из-под CD-ROM. По толщине этот пластик был почти такой же, как оригинальная деталь, так что выглядело все почти одинаково. Я просто вырезал деталь, используя оригинальную ось как шаблон, чтобы колеса точно встали как нужно, на одной линии друг с другом. Вобщем, получилась деталь нужной формы, я приклеил к ней толстый штифт (взял от 5A диода) эпоксидной смолой, который будет служить как направляющий элемент. Сама сервосистема была также прикреплена к машинке с помощью эпоксидной смолы позади колес, куда она идеально вписалась после пары минут работы с дрелью. Я опасаюсь, что когда-нибудь мое сервоуправление накроется, и я не смогу вытащить его оттуда из-за обилия эпоксидной смолы, которой я слегка переборщил в спешке. Как видно по фото внизу, штифт моей сервосистемы обеспечивает движение колес в горизонтальном направлении, как вправо, так и влево.


 



 





4 комментария:

  1. Анонимный10/31/2010

    Здорово! Давно хотел что-нибудь подобное сотворить)

    ОтветитьУдалить
  2. Анонимный3/06/2011

    Сотворил ?

    ОтветитьУдалить
  3. Анонимный10/01/2011

    конечно!

    ОтветитьУдалить