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

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

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

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

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

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

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

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

Как и чем управлять

Нормальные люди берут приемник, втыкают в него сервомашинки, регулятор скорости, двигают рычажки на пульте и радуются жизни не задаваясь принципами работы и не углубляясь в подробности. В нашем случае такое не пройдет. Первой задачей стало узнать каким макаром управляются сервомашинки. Все оказывается достаточно просто, у привода есть три провода: + питания, - питания и сигнальный. На сигнальном проводе прямоугольные импульсы изменяемой скважности. Чтобы понять что это такое смотрим картинку:

Итак, если мы хотим установить привод в крайнее левое положение нужно слать импульсы длительностью 0,9мс с интервалом 20мс, если в крайнее правое - длительность 2,1мс, интервал тот же, ну со средними положениями аналогично. Как оказалось, регуляторы скорости управляются аналогично. Те, кто в теме скажут что это обычный ШИМ , который реализовать на любом микроконтроллере - плевое дело. Вот и я так решил, купил в местном магазине сервомашинку и склепал на макетке для нее так называемый сервотестер на ATtiny13. И тут оказалось, что ШИМ не совсем простой, а с подводными камнями. Как видно из вышеприведенной диаграммы, скважность (отношение длительности импульса к длительности периода) от 5% до 10% (в дальнейшем я за крайние положения принимаю импульсы длительностью 1,0мс и 2,0мс) для 256-значного ШИМ счетчика ATtiny13 это соответствует значениям от 25 до 50. Но это при условии, что на заполнение счетчика уйдет 20мс, а на деле так не получится и для частоты 9,6МГц и предделителя 1024 нужно ограничить счетчик значением 187(ТОР), в таком случае у нас получится частота 50,134Гц. В большинстве (если не во всех) сервомашинок нету точного генератора опорной частоты и поэтому частота управляющего сигнала может немного плавать. Если оставить ТОР счетчика 255, то частота управляющего сигнала будет 36,76Гц - на некоторых приводах оно будет работать (возможно с глюками), но далеко не на всех. Итак, теперь у нас 187-значный счетчик, для него 5-10% соответствуют значениям от 10 до 20 - всего 10 значений, немного дискретно получится. Если думаете поиграть с тактовой частотой и предделителем ниже привожу сравнительную табличку для 8-битного ШИМа:

Но ведь у большинства микроконтроллеров есть 16-битный (и больше) таймер для генерации ШИМ. Здесь проблема с дискретностью сразу пропадет еще и частоту можно точно выставить. Долго расписывать не буду, сразу даю табличку:

Я не думаю, что для китайской сервомашинки есть существенная разница в 600 и 1200 значений, поэтому вопрос с точностью позиционирования можно считать закрытым.

Многоканальное управление

С одной сервомашинкой разобрались, но для самолета их нужно минимум три и еще регулятор скорости. Решение «в лоб» - взять микроконтроллер с четырьмя каналами 16-битного ШИМ, но такой контроллер будет стоять дорого и, скорее всего, займет много места на плате. Второй вариант - запилить программный ШИМ, но занимать процессорное время - это тоже не вариант. Если снова посмотреть на диаграммы сигнала, то 80% времени он не несет никакой информации, поэтому рациональнее было бы ШИМом задавать только сам импульс 1-2мс. Почему скважность изменяется в таких узких пределах, ведь проще было бы и формировать и считывать импульсы со скважностью хотя бы 10-90%? Зачем нужен тот неинформативный кусок сигнала занимающий 80% времени? Я заподозрил, что, возможно, эти 80% могут занимать импульсы для других исполнительных механизмов, а потом этот сигнал разделяется на несколько разных. То есть, в периоде длительностью 20мс могут уместится 10 импульсов длительностью 1-2мс, затем этот сигнал каким-то демультиплексором разделяется на 10 различных с длительностью периода как раз 20мс. Сказано - сделано, нарисовал в PROTEUS такую схемку:


В роли демультиплексора - 74HC238, на его вход E подаются импульсы с выхода микроконтроллера. Эти импульсы - ШИМ с периодом 2мс (500Гц) и скважностью 50-100%. У каждого импульса своя скважность, обозначающая состояние каждого канала. Вот так выглядит сигнал на входе Е:


Для того, чтобы 74HC238 знал на какой выход подать текущий сигнал используем PORTC микроконтроллера и входы A, B, C демультиплексора. В результате на выходах получаем такие сигналы:


Сигналы на выходе получаются правильной частоты (50Гц) и скважности (5-10%). Итак, нужно генерировать ШИМ частотой 500Гц и заполнением 50-100%, вот табличка для настройки предделителя и ТОР 16-битного счетчика:


Интересно, что возможное количество значений ШИМа ровно в 1000 раз меньше частоты таймера.
Программная реализация
Для ATmega8 с тактовой частотой 16МГц в AtmelStudio6 все реализуется следующим образом: вначале задефайним значения счетчика для крайних положений сервомашинок:
#define LOW 16000U #define HIGH 32000U
затем инициализируем генератор ШИМа на таймере/счетчике1:
OCR1A = HIGH; //Устанавливаем ТОР TCCR1A = 0< Остается реализовать прерывания:
ISR(TIMER1_COMPA_vect) //прерывание по достижению верхнего значения счетчика, непосредственно перед началом следующего импульса { //c_num- переменная, обозначающая номер текущего канала, channels - массив значений каналов if (c_num <= 7) { OCR1B = channels; } else { OCR1B = 0; //отключаем ШИМогенератор для несуществующих в демультиплексоре 8 и 9 канала } } ISR(TIMER1_COMPB_vect, ISR_NOBLOCK)// прерывание возникающее в конце импульса { if (c_num <= 7) { PORTC = c_num; //для каналов 0-7 выводим номер канала на PORTC } //и изменяем значение счетчика от 0 до 9 if (c_num >= 9) { c_num = 0; } else { c_num++; } }
Глобально разрешаем прерывания и готово, забивая в channels значения от LOW до HIGH изменяем значения на каналах.

Реализация в железе

Ну с теорией разобрались, пришло время все это реализовать. Мозгом системы выбран микроконтроллер ATmega8A, тактируется от кварца на 16МГц (не потому, что я захотел 16000 позиций сервомашинки, а потому, что у меня такие валялись). Управляющий сигнал для МК будет поступать через UART. В результате получилась вот такая схемка:


Спустя некоторое время появилась вот такая платка:




Два трехштыревых разъема я не припаял потому, что они мне не нужны, а не подряд они впаяны поскольку у меня нету металлизации отверстий, а в нижнем разъеме дорожки с двух сторон, можно было бы заменить проволочкой, но программно нету проблемы выводить сигнал на любой разъем. Также отсутствует 78L05 ибо в моем регуляторе двигателя есть встроенный стабилизатор (ВЕС).
Для получения данных к плате подключается радиомодуль HM-R868:


Изначально думал втыкать его прямо в плату, но эта конструкция не помещалась в самолетик, пришлось сделать через шлейф. Если изменить прошивку, то контакты разъема для программирования можно использовать для включения/отключения каких-нибудь системам (бортовые огни и т.п.)
Плата обошлась примерно в 20грн = $2.50, приемник - 30грн = $3,75.

Передающая часть

Самолетная часть есть, осталось разобраться с наземной аппаратурой. Как уже писалось ранее, данные передаются по UART, на каждый канал по одному байту. Вначале подключал свою систему проводом через переходник к компьютеру и команды слал через терминал. Чтобы дешифратор определял начало посылки, а в будущем выделял посылки адресуемые именно ему, вначале шлется байт-идентификатор, затем 8 байт определяющих состояние каналов. Позже стал использовать радиомодули, при отключении передатчика все моторчики начинали дико дергаться. Дабы отфильтровать сигнал от шумов, десятым байтом шлю XOR всех 9 предыдущих байт. Помогло, но слабо, добавил еще проверку на таймаут между байтами, если он превышается - вся посылка игнорится и прием начинается заново, с ожидания байта-идентификатора. С добавлением контрольной суммы в виде XOR слать команды с терминала стало напряжным, поэтому я побыстрому наклепал вот такую программку с ползунками:


Число в нижнем левом углу - контрольная сумма. Передвигая ползунки на компе двигались рули на самолете! Вообщем отладил я все это и стал думать о пульте ДУ, купил для него вот такие джойстики:

Но потом меня посетила одна мысль. В свое время я тащился от всяких авиасимуляторов: «Ил-2 Штурмовик», «Lock On», «MSFSX», «Ка-50 Черная Акула» и др. Соответственно был у меня джойстик Genius F-23 и решил я прикрутить его к вышеописанной проге с ползунками. Погуглил как это реализовать, нашел этот пост и получилось! Управлять самолетиком с помощью полноценного джойстика, мне кажется, гораздо круче, чем маленькой палочкой на пульте. Вообщем все вместе изображено на первой фотке - это нетбук, джойстик, преобразователь на FT232, и подключенный к нему передатчик HM-T868. Преобразователь подключается 2м кабелем от принтера, что позволяет закрепить его на каком нибудь дереве или чем-то подобном.

Пуск!

Итак, есть самолетик, есть радиоуправление - Поехали!(с) Первый полет производился над асфальтом, результат - сломанный пополам фюзеляж и полувырванный двигатель. Второй полет производился над более мягкой поверхностью:

Последующие полетов 10 были тоже не особо удачными. Основной причиной я считаю сильную дискретность джойстика - по крену он выдавал только 16 значений (вместо возможных 256), с осью тангажа - не лучше. Но так как в результате испытаний самолет был значительно поврежден и не подлежит ремонту:


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

Дальность действия аппаратуры - примерно 80м, дальше тоже ловит, но через раз.
Ну вот и все, благодарю за внимание. Надеюсь, приведенная информация окажется для кого-то полезной. Буду рад ответить на все вопросы.

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

Схема аппаратуры радиоуправления состоит всего из двух микросхем: трансивера MRF49XA и микроконтроллера PIC16F628A. Детали в принципе доступные, но для меня проблемой был трансивер, пришлось через интернет заказывать. и платой качайте здесь. Подробнеее об устройстве:

MRF49XA - малогабаритный трансивер, имеющий возможность работать в трех частотных диапазонах.
- Низкочастотный диапазон: 430,24 - 439,75 Mгц (шаг 2,5 кГц).
- Высокочастотный диапазон А: 860,48 - 879,51 МГц (шаг 5 кГц).
- Высокочастотный диапазон Б: 900,72 - 929,27 МГц (шаг 7,5 кГц).
Границы диапазонов указаны при условии применения опорного кварца частотой 10 МГц.

Принципиальная схема передатчика:

В схеме TX довольно мало деталей. И она очень стабильная, более того даже не требует настройки, работает сразу после сборки. Дистанция (согласно источнику) около 200 метров.

Теперь к приемнику. Блок RX выполнен по аналогичной схеме, различия только в светодиодах, прошивках и кнопках. Параметры 10-ти командного блока радиоуправления:

Передатчик:
Мощность - 10 мВт
Напряжение питания 2,2 - 3,8 В (согласно даташиту на м/с, на практике нормально работает до 5 вольт).
Ток, потребляемый в режиме передачи - 25 мА.
Ток покоя - 25 мкА.
Скорость данных - 1кбит/сек.
Всегда передается целое количество пакетов данных.
Модуляция - FSK.
Помехоустойчивое кодирование, передача контрольной суммы.

Приемник:
Чувствительность - 0,7 мкВ.
Напряжение питания 2,2 - 3,8 В (согласно даташиту на микросхему, на практике нормально работает до 5 вольт).
Постоянный потребляемый ток - 12 мА.
Скорость данных до 2 кбит/сек. Ограничена программно.
Модуляция - FSK.
Помехоустойчивое кодирование, подсчет контрольной суммы при приеме.

Преимущества данной схемы

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

Во время подачи питания на приемник и передатчик, они уходят в тест режим на 3 секунды. В это время ничего не работает, по истечению 3-х секунд обе схемы готовы к работе.

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

На печатной плате передатчика кнопки расположены в один ряд, но я решил собрать что-то наподобии пульта на отдельной плате.

Питаются оба модуля от аккумуляторов 3,7В. У приемника, который потребляет заметно меньше тока, аккумулятор от электронной сигареты, у передатчика - от моего любимого телефона)) Схему, найденную на сайте вртп , собрал и испытал: [)еНиС

Обсудить статью РАДИОУПРАВЛЕНИЕ НА МИКРОКОНТРОЛЛЕРЕ

Я остановился на том, что разблокировал четвертую ось управления и установил в пульт тучку кнопок, переключателей и светодиодов. Дальше дело было за схемой, паяльником и прошивкой . Как потом оказалось, кнопок и разъемов оказалось маловато, пришлось доустанавливать.

Схема самодельного пульта радиоуправления

Схема сделана на основе микроконтроллера Atmega8. Его ножек хватило буквально «впритык». Чтобы увидеть большую схему — кликните по картинке (схема так же находиться в архиве, который в конце статьи.

Подсчитаем: 10 кнопок/переключателей + 2 светодиода + 2 ножки на кварц (нам нужен точный во времени ШИМ сигнал) + 5 каналов АЦП + 2 ножки на UART + 1 канал на вывод сигнала РРМ на ВЧ модуль = 22 ножек МК. Как раз столько, сколько есть у Atmega8, которая настроена на внутрисхемное программирование (имею в виду пин RESET, он же PC6).

Светодиоды подключил на PB3 и PB5 (MOSI и SCK разъема программирования) Теперь во время заливки прошивки буду наблюдать красивое перемигивание (бесполезное в некотором смысле — но тут я гнался за визуальным красивым эффектом ).

Напомню с чего все началось — у меня в наличии появился ВЧ модуль из хобикинговской аппаратуры (он был заменен на ВЧ модуль FrSky), и была вертолетная аппаратура. Так как в аппаратуре не было никаких крутилок (да и зачем они?) то получается из шести каналов я буду нормально (штатно) использовать только 4 (по два на каждый стик). Один канал я решил потратить на 8 независимых кнопок/переключателей, еще один — программно имитировать вращение крутилки (например — красивый выпуск шасси — щелкнул переключателем, и шасси на протяжении 10 секунд выпускаются). Еще один переключатель до сих пор не определился, что с ним делать.
Светодиоды, показывающие состояние переключателей — работают независимо от микроконтроллера. Один из программно управляемых светодиодов отвечает за индикацию разряженной батареи, второй — показывает текущее состояние программной крутилки.

В корпус кроме кнопок и светодиодов еще захотелось добавить стандартный (для меня) разъем UART (для связи с ПК, потом буду писать свою программу настройки), и разъем с выводом РРМ сигнала — для подключения пульта к симулятору. Помучившись с разъемом для программатора — понял, что это мне не подходит — и тоже вывел его наружу. Единственное, что плохо в этом — что появилась опасность замкнуть штырьки разъема, хотя они и «утоплены» в корпусе. Но это лечиться последовательными резисторами 220 Ом (что дает 99% гарантию, что микроконтроллер останется цел)

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

Печатная плата контроллера пульта радиоуправления

Весьма простенькая — большая часть ножек просто выведена наружу. На плате присутствует стабилизатор на 5 вольт, и схема измерения входного напряжения. Почему использовал DIP корпус? Та просто был он у меня… кроме того — почему бы и не DIP…

Когда паял все это — то пробирала мысль — разве эта туча проводов будет работать?!
Но все же оно работает. Обычно у меня платы чистые от канифоли… но тут уж постоянно возился с делителем, пока не оказалось, что это у меня программная проблема а не «железная». Питание от двухбаночной липольки (то, что когда-то осталось от нормальной трехбаночной, после того, как ее забыли отключить от нагрузки. В результате одна из банок ушла в полный разряд). Несмотря на это — предусмотрел возможность работы и от пальчиковых батарей. Мало ли

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

А сейчас можно скачать текущую версию прошивки. Пока что не настраивается вообще (т.е. настроек реверса, расходов, смещения и прочих «вкусностей» еще нету). Просто считывается состояние крутилок и генерируется РРМ сигнал. Кнопки и выключатель MOD пока не работает. Зато работает виртуальная серва (на 5 канале) и измерение уровня входного напряжения. Если оно слишком низкое — светодиод IND начнет мигать (прошивка автоматически определяет сколько банок у литий-полимерного аккумулятора). И еще — расходы по 4 каналу (тому, где я добавлял свой потенциометр) — завышены, чтобы компенсировать неполный диапазон вращения потенциометра.

Радиоуправление своими руками на 12 команд

Схема позволяет управлять моделями или другими устройствами и нагрузками на расстоянии .Допускается нажатие одновременно до 8 кнопок. Схема проста в изготовлении,и требует после сборки только прошивки контроллеров.Индикаторы исполнения команд – светодиоды. Разумеется, к соответствующим выводам процессора можно подключить например затворы мощных полевых или базы биполярных транзисторов через токоограничивающие резисторы.

Схема передатчика:



Приемник


Сверхрегенератор: При номиналах указанных на схеме и исправных деталях обладает 100% повторяемостью.


Его настройка заключается лишь в раздвигании витков контурной катушки и подборе емкости связи с антенной.3 й вывод контроллера дешифратора служит для контроля прохождения сигнала при настройке (программно подключенный выход внутреннего компаратора).Контролировать можно с помощью обычного УНЧ.
Дешифратор приемника – PIC16F628A , он осуществляет декодирование и исполнение принятых команд.

Система кодер - декодер может работать как по проводам так и с другими приемником и передатчиком. Каждая посылка 0 и 1 со стороны кодера «закрашена» колебаниями 5,5 кГц для лучшей помехозащищенности + передача контрольной суммы.
Питание приемника обязательно от стабилизированного источника 5 вольт (на схеме не показан, в плате предусмотрен КРЕН 5 А +диод). Питание передатчика от 3,6 вольта но не больше 5,5 вольта (на плате предусмотрен КРЕН 5А+диод).
Картина нажатых кнопок в PORTB (выводы 6 - 13) на передающей части полностью отражается на приемной части в PORTB (выводы 6 - 13) соответственно. Картина нажатых кнопок в PORTA (3>2, 4> 15,15> 16, 16> 17).