Как сделать игрушечный пульт

Обновлено: 25.04.2024

image

Всем привет. Представляю на общее обозрение самодельный пульт радиоуправления для управления различными объектами на расстоянии. Это может быть машинка, танк, катер и т.д. изготовленное мной для “детского” радио кружка. С применением радио модуля NRF24L01 и микроконтроллера ATMEGA16.

Давно у меня лежала коробка одинаковых поломанных игровых джойстиков от приставок. Досталась от игрового заведения. Особого применения в неисправных игровых джойстиках я не видел, да и выкидывать или разбирать жалко. Вот и стояла коробка мертвым грузом пылилась. Идея применения игровых джойстиков, пришла, как только пообщался со своим приятелем. Приятель вел кружок для юных радиолюбителей в интернате, причем бесплатно по выходным, приобщал любознательных детишек к миру радиоэлектроники. Дети они ведь как губка, впитывают информацию. Так как я сам очень приветствую подобные кружки для детей, а тут еще и в таком месте. То и предложил идею, как задействовать нерабочие джойстики. Идея заключалась в следующем: создать самодельный радио дистанционный пульт управления моделями, собранными своими руками, который хотелось бы предложить детям для изучения проекта. Идея ему очень понравилась, учитывая, что финансирование детских учреждений мягко сказать не очень, да и мне был интересен данный проект. Пускай я тоже внесу свою лепту в развитие радио кружка.
Цель проекта создать законченное устройство не только как радио дистанционный пульт, но и ответную часть на радиоуправляемый объект. Учитывая, что пульт для детей то и подключение приёмной части на модель, также должно быть по возможности простым.

Сборка и комплектующие:

image

image

Разобрав игровой джойстик на составляющие, сразу стало ясно, нужно изготовить новую печатную плату, причем, весьма необычной формы. Сначала, хотел развести печатную плату на микроконтроллер ATMEGA48, но как оказалось портов микроконтроллера просто не хватает под все кнопки. Конечно, такое количество кнопок в принципе не нужно и можно было ограничиться только четырьмя портами микроконтроллера АЦП для двух джойстиков и два порта для тактовых кнопок, размещенных на джойстиках. Но мне захотелось по возможности максимально большое количество кнопок задействовать, кто знает, чего там детишки ещё захотят добавить. Так была рождена печатная плата под микроконтроллер ATMEGA16. Сами микроконтроллеры у меня были в наличии, остались от какого-то проекта.

Резинки на кнопках очень сильно были изношены, и восстановлению не подлежали. Но это не удивительно учитывая, где джойстики использовались. По этой причине применил тактовые кнопки. Пожалуй, к минусам тактовых кнопок можно отнести сильное щелканье, возникавшие в результате нажатия на кнопку. Но для данного проекта это весьма терпимо.
Плату с джойстиками не пришлось переделывать, оставил какая есть, что значительно сэкономило времени. Торцевые кнопки также сохранил в первоначальном виде.
В качестве приемопередатчика выбрал радиомодуль NRF24L01, так как цена весьма мала в Китае по цене 0.60$ за шт. купил. Несмотря на свою малую стоимость, радиомодуль обладает не малыми возможностями и конечно мне подходил. Следующей проблемой, с которой столкнулся, а собственно где радиомодуль разместить. Пространство в корпусе свободного маловато, по этой причине радио модуль разместил в одной из ручек корпуса джойстика. Даже фиксировать не пришлось, модуль плотно прижимался, когда собирался полностью корпус.

image

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

В процессе испытания радио модуль, свою заявленную дальность оправдал и уверенно работал по прямой видимости на расстоянии 50 метров, через стены дальность значительно уменьшилась. Также было в планах установить вибромотор, который реагировал, скажем на какие-то столкновения или другие действия в радиоуправляемой модели. В связи с этим предусмотрел на печатной плате транзисторный ключ для управления. Но дополнительные усложнения я оставил на потом сначала нужно обкатать программу, так как она ещё сыровата. Да и конструкция, учитывая, что это прототип требует мелких доработок. Вот так как говорится “с миру по нитке”, практически с минимальными вложениями был создан пульт радиоуправление.

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


Пульт очень удобен в том, что на экране практически одни и те же кнопки используются для управления телевизором и плеером. Одно отличие в том, что кнопка "AV" в режиме управления телевизором меняется на кнопку "◻" (stop) при переходе в режим управления плеером. На картинках показано два режима, слева режим управления телевизором, справа — режим управления плеером.

Ну а сейчас я расскажу немного о создании такого пульта. Для устройства использовал пульт от телевизора ERGO и пульт от медиаплеера DUNE HD TV101W.

image

Для получения данных от пультов я использовал инфракрасный датчик TSOP1138 (аналог TSOP4838) на рабочей частоте 38 кГц и подключил его к плате Arduino по схеме:

image

Для начала нам потребуется прочитать коды кнопок пультов. Я воспользовался библиотекой IRremote и тестовым скетчем IRrecvDump.

image

Этот скетч на потребуется для определения кодировки передачи данных и считывания кода кнопок пультов.

После заливки скетча открываем «монитор порта» и, нажимая на кнопки пульта, смотрим на полученные данные.

image

На картинке пример сканирования кнопки включения от пульта телевизора и пульта плеера. Теперь формируем таблицу для кодов кнопок.

image

У меня получилось как на фото выше. Под надписью TV коды кнопок пульта от телевизора; под надписью Player — коды от пульта медиаплеера.

Теперь отключаем наш приемник инфракрасных сигналов от платы Arduino и подключаем к ней Bluetooth модуль HC-05 и инфракрасный светодиод по схеме на фото.

image

После этого переходим непосредственно к скетчу.

В скетче вам потребуется отредактировать коды кнопок, а именно в строках:


Значение 807F08F7 поменять на:


Где 12345678 — это код вашей кнопки.

После редактирования скетча по ваши коды кнопок заливаем скетч в плату Arduino и переходим к установке приложения на телефон.

Включаем блютуз в телефоне, ищем наше устройство, создаем пару, потом запускаем приложение Pult на телефоне.

При запуске у нас появится экран с красным значком bluetooth в правом нижнем углу, что сигнализирует о том, что мы не подключены к нашему устройству.

image

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

image

Теперь мы снова вернулись на главный экран и уже можем управлять телевизором:

image

Для перехода в режим управления нам потребуется нажать кнопку с надписью «Player». Как я говорил раньше, у нас кнопка с надписью «AV» поменяется на кнопку "◻":

image

Для отключения от нашего устройства просто зажмите кнопку «Power» на несколько секунд.



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

В свою бытность, я также как и многие, прошёл путь по созданию разных устройств, базирующихся на модулях HC-05, HC-06:

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

Такая связка была бы целесообразной в начале 2010-х годов, но в настоящее время стоит использовать более современный подход. А если более конкретно, то в качестве микроконтроллера мы возьмём esp32, управлять которым будем с экрана своего смартфона.

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

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

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

С точки зрения соединения, мы будем подключаться к микроконтроллеру по wifi, где точкой доступа будет выступать наш смартфон (то есть и пультом управления — он же, а управлять будем, соответственно, — машинкой). Поэтому изначально необходимо сконфигурировать и запустить точку доступа на смартфоне, после чего ввести в скетч параметры доступа к ней:


Далее запускаем асинхронный веб-сервер на 80 порту и создаём объект, который будет обрабатывать websocket-ы:


Далее нам необходимо создать веб-страницу, которая будет отображаться у пользователя. Эту страницу мы помещаем в массив index_html.

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

Там же отдельными классами прописываются кнопки:

Для обработки нажатий используется JavaScript код, в котором происходит настройка websocket-ов, а также прописывается реакция на происходящие события:


Кроме того, инициализируется обработчики нажатий кнопок:


и прописывается конкретный сценарий, который будет происходить при начале касания и его окончании (будет вызвана соответствующая функция):

Именно здесь, чтобы понимать, что происходит в данный момент, и требуется считывать состояние переменной state:

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


Для инициализации протокола websockets создана специальная функция:


Как мы говорили уже ранее, в рамках нашей системы смартфон выступает в качестве точки доступа, а esp32 — в роли клиента. Запустим монитор COM порта, точку доступа на смартфоне и посмотрим, что из этого получится. Мы видим, что esp32 подключилась к смартфону и получила IP адрес, и отчёт вывелся в COM порт:



В свою очередь, при загрузке, пульт управления будет таким:


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

Кстати сказать, при таком способе управления, мы будем ограничены дальностью действия wi-fi. Если же вам потребуется управлять устройством с больших расстояний, то нужно будет изменить схему подключения с такой:



Для этого придётся использовать радиомодули nrf. Использование их совместно с esp32 таит свои трудности, в частности, придётся использовать видоизменённую библиотеку RF24, с целью дать возможность программе использовать программную реализацию SPI, вместо аппаратной. Об этом неплохо рассказано вот здесь.

Ну вот собственно и всё! Код для работы через websockets протестирован и работает. Остаётся только прописать свою реализацию, для нужного типа двигателя/лей.


Радио управление и двигатели на ней стухли от влажности.
И вот руки добрались его оживить.
Задача:
— что бы все рулилось
— обратная телеметрия
— что бы сильнодешево.
За базу взял Ардуино Нано (130р) и радиомодули NRF24+ (150р). Экран .96" (300р) (блин мелкий надо было 1.3" брать).
От старого пульта не осталось ничего кроме пластика. Резисторы поменял на свои зафиксировав их макетной платой и приклеив к джойстику.






Пульт имеет пищалку. 2-х цветный светодиод. Умеет измерять и выводить на экран напряжение батареи. Умеет принимать от корабля его телеметрию и выводить на экран. Дальность связи до 1000м. Наличие устойчивой связи можно видеть на экране по напряжению батареи модели. Если обратной связи нет, значение будет нулевое (если модель не видит пульт более 1сек, то она останавливается). Частота обмена информацией модели с пультом 10 герц.
Радиомодули по совету друга были доработаны. Усилители на них шумят и их для увеличения дальности и отсутствия проблем необходимо экранировать.


для начала оборачиваем скотчем. Затем фольгой.


Фольгу припаиваем к земле разъема антенны.

Для отладки программного обеспечения пришлось собрать симулятор электроники корабля.


нано, nrf24+ и motor shild.

Сейчас находусь в ожидании двигателей для корабля из китая. Пульт завершен.

PS из того что пока не реализовано.
— режим калибровки пульта.
— добавление 3-х датчиков температуры в модель и вывод их в телеметрию (2 двигателя и радиатор платы их управления).
— софт для GPS и магнитометра на модели, что бы она при потери связи сама возвращалась на место запуска.
— автоматическая система борьбы за живучесть модели
— система антивандальная модели (китайцы у амеров сперли беспилотник, а мой будет лучше не трогать).
Схема спокойно читаема из софта, поэтому останавливаться на ней не буду.
yadi.sk/d/TiWUG4743E8LpH


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


Это обычные детские бибики из обычного магазина игрушек, купешка производства Rastar, кроссовер вообще QingXing какой-то. Технически они вообще примитивные, привод задний, электроника убогая, пульты кнопочные 27Мнz уже давно не работают.
Начать решили с Х6 — он попроще и покомпактнее.



Для апгрейда использовали электронику от RemoHobbi (спасибо Богдану) — пульт и блок 3-в-1 (приемник, регулятор оборотов мотора, модуль включения фар по третьему каналу с пульта). Установка электроники, переделка батарейного отсека под установку аккумулятора (Li-Ion так же от RemoHobby) вообще дело не сложное — быстро накинули элементы на шасси для примерки, спаяли все что надо было.
Намного сложнее с рулевым управлением — в стоке на машинке стоит дискретная системка — руль либо на всю вывернут, либо в нулевом положении — нас это не устраивает,


естественно ставим пропорциональное управление — насколько крутим колесико на пульте, на столько и поворачиваются колеса на машинке


Глобально менять конструкцию рулевого на этой малышке мы не стали — просто установили микросервомашинку с металлическим редуктором (куплено на Али).


С поключением фар не срослось — распайка китайцами сделана так, что горят либо задние красные, либо белые передние фары — перепайка с прекрекрещиванием полюсов приводит к тому что свет вообще не включается. В итоге на радиомодуле отломился один контакт (( в общем я забил болт на эти фары — один черт сын быстро раздолбает эту игрушку.
Несмотря на хорошую электронику и липошный аккум тачка не сильно скоростная — это же детская игруха, в приводе стоит сильно понижающий обороты на выходе редуктор.

Не так давно переделывал Богдану Bagdi363 его RemoHobby Rocket — вместо штатной коллекторной системы 3-в-1, которая описана выше, поставил бесколлекторную систему (машинка масштаба 1/16)


Вот что получилось


заменены — мотор и его регулятор оборотов, радио — пульт и приемник поставил от HPI, установлена качественнная сервомашинка на рулевое, поставил диодные фары с включением отдельным тумблером на шасси

p.s. Следующим этапом уже началась переделка купэшки — там хоть и тот же принцип, но история другая

Читайте также: