Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Итак, если мы хотим установить привод в крайнее левое положение нужно слать импульсы длительностью 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-битного ШИМа:

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

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

С одной сервомашинкой разобрались, но для самолета их нужно минимум три и еще регулятор скорости. Решение «в лоб» — взять микроконтроллер с четырьмя каналами 16-битного ШИМ, но такой контроллер будет стоять дорого и, скорее всего, займет много места на плате.

Второй вариант — запилить программный ШИМ, но занимать процессорное время — это тоже не вариант. Если снова посмотреть на диаграммы сигнала, то 80% времени он не несет никакой информации, поэтому рациональнее было бы ШИМом задавать только сам импульс 1-2мс.

Почему скважность изменяется в таких узких пределах, ведь проще было бы и формировать и считывать импульсы со скважностью хотя бы 10-90%? Зачем нужен тот неинформативный кусок сигнала занимающий 80% времени? Я заподозрил, что, возможно, эти 80% могут занимать импульсы для других исполнительных механизмов, а потом этот сигнал разделяется на несколько разных.

То есть, в периоде длительностью 20мс могут уместится 10 импульсов длительностью 1-2мс, затем этот сигнал каким-то демультиплексором разделяется на 10 различных с длительностью периода как раз 20мс. Сказано — сделано, нарисовал в PROTEUS такую схемку:

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик


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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Интересно, что возможное количество значений ШИМа ровно в 1000 раз меньше частоты таймера.

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

Самолетная часть есть, осталось разобраться с наземной аппаратурой. Как уже писалось ранее, данные передаются по UART, на каждый канал по одному байту. Вначале подключал свою систему проводом через

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

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

image

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

и получилось! Управлять самолетиком с помощью полноценного джойстика, мне кажется, гораздо круче, чем маленькой палочкой на пульте. Вообщем все вместе изображено на первой фотке — это нетбук, джойстик, преобразователь на FT232, и подключенный к нему передатчик HM-T868.

Программная реализация


Для ATmega8 с тактовой частотой 16МГц в AtmelStudio6 все реализуется следующим образом: вначале задефайним значения счетчика для крайних положений сервомашинок:

#define LOW 16000U
#define HIGH 32000U

затем инициализируем генератор ШИМа на таймере/счетчике1:

OCR1A = HIGH; //Устанавливаем ТОР
TCCR1A = 0<<COM1A1 | 0<<COM1A0 | 1<<COM1B1 | 0<<COM1B0 | 0<<FOC1A | 0<<FOC1B | 1<<WGM11 | 1<<WGM10; //Запускаем неинвертированный Fast PWM на выходе OC1B с верхним значением счетчика, которое записанно в OCR1A
TCCR1B = 0<<ICNC1 | 0<<ICES1 | 1<<WGM13 | 1<<WGM12 | 0<<CS12 | 0<<CS11 | 1<<CS10; //предделитель 1
TIMSK = 1<<OCIE1A | 1<<OCIE1B | 0<<TOIE1; //Разрешаем прерывания по совпадению

Остается реализовать прерывания:

Пуск!

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

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Радиокот :: 10 командное радиоуправление на mrf49xa

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Конструкция создана на относительно новых и недорогих микросхемах  MRF49XA.

Одна применена в приемной части , другая- в передающей.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Состоит из управляющего контроллера и трансивера MRF49XA.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Схема приемника.

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

MRF49XA малогабаритный трансивер , имеющий возможность работать в

трех частотных диапазонах .

Низкочастотный диапазон       : 430,24 — 439,75 Mгц  ( шаг 2,5 кГц ) .

Высокочастотный диапазон А : 860,48 — 879,51 МГц ( шаг 5 кГц    ) .

Высокочастотный диапазон Б : 900,72 — 929,27 МГц  ( шаг 7,5 кГц ) .

Границы диапазонов указаны при условии применения опорного кварца частотой 10 МГц ,

предусмотренного производителем .С опорными кварцами 11МГц устройства нормально работали на частоте 481 МГц .Детальные исследования на тему максимальной «затяжки» частоты относительно заявленной производителем не проводились.Предположительно она может быть не так широка , как в микросхеме ТХС101 , поскольку в даташите MRF49XA  упоминается об уменьшенном фазовом шуме ,  одним из способов достижения которого является сужение диапазона перестройки ГУН .

Устройства имеют следующие технические характеристики .

Передатчик .

Мощность — 10 мВт .

Напряжение питания 2,2 — 3,8 В ( согласно даташиту на мс , на практике нормально работает

до 5 вольт ) .

Ток , потребляемый в режиме передачи — 25 мА .

Ток  покоя — 25 мкА .

Скорость данных — 1кбит / сек .

Всегда передается целое количество пакетов данных .

Модуляция FSK .

Помехоустойчивое кодирование , передача контрольной суммы.

Приемник .

Чувствительность — 0,7 мкВ .

Напряжение питания 2,2 — 3,8 В ( согласно даташиту на мс , на практике нормально работает

до 5 вольт ) .

Постоянный потребляемый ток — 12 мА .

Скорость данных до 2 кбит / сек . Ограничена программно .

Модуляция FSK .

Помехоустойчивое кодирование , подсчет контрольной суммы при приеме .

Алгоритм работы .

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

Кнопка ( или комбинация кнопок ) отпускается — соответсвующие светодиоды сразу же гаснут .

Тест режим .

И приемник и передатчик по факту подачи на них питания входят на 3 сек в тест режим .

И приемник и передатчик включаются в режим передачи несущей частоты ,  запрограммированной в EEPROM , на 1 сек 2 раза с паузой 1 сек ( во время паузы передача выключается ) . Это удобно при программировании устройств . Далее оба устройства готовы к работе .

Программирование контроллеров .

EEPROMконтроллера передатчика .

Все настройки EEPROM, упомянутые ниже , запишутся автоматически  на свои места по факту подачи на контроллер питания после его прошивки .

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

Верхняя строка EEPROM после прошивки и подачи питания на контроллер передатчика будет выглядеть так …

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

    80  1F — ( подиапазон 4хх МГц )  — ConfigRG

   AC  80 — ( точное значение частоты 438 MГц ) — FregSettingRG 

   98   F0 — ( максимальная мощность передатчика , девиация 240 кГц ) — TxConfigRG 

   C4  00 — ( АПЧ выключено ) — AFGRG

   82   39 — ( передатчик включен ) — PowManagementRG .

Первая ячейка памяти второй строки ( адрес 10 h ) — идентификатор .

По умолчанию здесь  FF. Идентификатор может быть любой в пределах байта ( 0 … FF ) . Это индивидуальный номер ( код ) пульта .

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

EEPROMконтроллера приемника .

Все настройки EEPROM, упомянутые ниже , запишутся автоматически  на свои места по факту подачи на контроллер питания после его прошивки .

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

Верхняя строка EEPROM после прошивки и подачи питания на контроллер приемника будет выглядеть так …

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

80    1F — ( подиапазон 4хх МГц )  — ConfigRG

AC  80 — ( точное значение частоты 438 MГц ) — FregSettingRG

91   20 —  ( полоса приемника 400 кГц , чувствительность максимальная ) — RxConfigRG

C6  94 —  ( скорость данных — не быстрее 2 кбит/сек ) — DataRateRG

C4  00 —  ( АПЧ выключено ) — AFGRG

82  D9 —  ( приемник включен ) — PowManagementRG .

Первая ячейка памяти второй строки ( адрес 10 h ) — идентификатор приемника .

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

Примечания .

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

Смотрите про коптеры:  Аппаратура радиоуправления. Часть 1. Передатчики

Обратная сторона плат — сплошная масса ( залуженная фольга ) .

Дальность уверенной работы в условиях прямой видимости — 200 м .

Количество витков катушек прм и прд — 6 . Если воспользоваться опорным кварцем 11 МГц вместо 10 МГц , частота «уйдет» выше около 40 МГц . Максимальная мощность и чувствительность в этом случае будут при 5 витках контуров прм и прд .

Файлы:
Печтаные платы
Прошивки МК

Все вопросы в
Форум.

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

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Для получения данных к плате подключается

HM-R868:

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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


Плата обошлась примерно в 20грн = $2.50, приемник — 30грн = $3,75.

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

Предисловие.

На фотографиях в этой статье будет немного (много) «колхоза».

Мне понадобилось:

  1. Три микроконтроллера Arduino Nano
  2. Два радиомодуля NRF24l01 с усилителем и внешней антенной
  3. Три односторонние печатные платы 50х70мм
  4. Четыре потенциометра на 10кОм
  5. Четыре ручки для них
  6. Около 22 тактовых кнопок
  7. Четыре тумблера ON-OFF-ON
  8. Два двухосевых джойстика (лучше использовать не для геймпадов)
  9. И пины-соединители
  10. Стабилизаторы питания LM1117-3.3, или аналоги, и другие радиодетали
  11. Всякая мелочёвка: провода, паяльные принадлежности, клеи, скотчи и др.

->>> Arduino Nano на Паркфлаере
Процесс изготовления.

Начну с изготовления

приёмника

. Отрезал два куска по 15 пинов «мама», подключил на них Ардуино. На пины А0-А7 и D2-D8 включительно припаял тройной разъём «папа», где один ряд – сигнальный с Ардуино (отдельный с каждого пина на Дуине), средний – 5В в параллель, крайний, который ближе к названию пина на Ардуино – земля (GND) в параллель.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

На пины D9-D13 включительно припаял радиомодуль по схеме, но питание впаял в стабилизатор напряжения, на выходе которого электролитический конденсатор 16В 100мкФ и керамический на 100нФ. На вход стабилизатора повесил керамический конденсатор 100нФ (пусть будет). Вход стабилизатора припаял к пину 5В (питаться приёмник будет от регуля напряжением 5В; его надо будет подключить на пин мотора).

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Приклеил радиомодуль к пинам и Ардуино на суперклей с пищевой содой, использованной в качестве отвердителя. Потом я всё залил горячими соплями (термоклеем) для надёжности.

Обратите внимание: пины D0 и D1 (RX и TX) свободны, на них я не паял пины для подключения электроники авиамодели (хотя туда можно подключать электронику). Сделал я это для того, чтобы можно было в далбнейшем подключить вторую Ардуину по Serial для увеличения количества пинов и расширения функционала.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Теперь принимаюсь за

передающую часть

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Прикрепил боковые стенки и днище на термоклей:

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Далее спаял на макетной плате конструкцию, напоминающую приёмник, но с шлейфом проводов « 5В–TX–RX–GND» и выходом с пинами для подключения радиомодуля всё по той же схеме. Думал, что буду питать МК через повышающий до 7-8В модуль (бустер) от одного Li-Ion аккумулятора (3-4,2В), но потом увидите, чем я его заменил.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Спаял на третьей макетной плате конструкцию с 20 выходами (радиомодуль на эту Дуину не надо будет вешать, поэтому пины D9-D13 включительно освобождаются), шлейфом « 5В–RX–TX–GND» (!!!соединять Ардуины друг с другом надо так: TX одной идёт в RX другой, и наоборот; 5В и GND просто для питания) и штекером для питания, в параллель которому припаян керамический конденсатор на 100нФ (чтобы сглаживать скачки напряжения от бустера).

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Припаял к кнопочной площадке множество проводков, на каждую кнопку по одному, которые пойдут на сигнальные пины Ардуино; общий минус можно втыкать на любой крайний контакт. К светодиодам тоже припаял проводок на «плюс» со штекером «мама», «минус» соединён с общей шиной «минус».

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Нанёс визит к моему другану, рассказал ему о том, что я делаю, и он отдал мне старый пульт от сломанного вертолётика на радио со словами: «На, пригодится». И вправду, мне пригодились антенна (вертолётик был 2,4ГГц) и джойстики, причём газ уже был с фиксацией. Установил джойстики вместо тех с Алиэкспресса, на приёмник припаял отданную антенну (просто она была более длинной, т.к. там был 5см кусок коаксиального провода, который очень хорошо гнулся). На пульт нанёс надписи рядом с джойстиками, тумблерами, потенциометрами и кнопками.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Для питания использую холдер последовательного соединения для аккумуляторов формата 18650 с Li-Ion аккумуляторами. На холдер приклеил сложенный вдвое липкой стороной внутрь скотч для лёгкого вынимания аккумов, сам холдер держится за липучку, приклеенную на самого него и на корпус передатчика.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Далее приступил к

написанию прошивки для аппаратуры

в Arduino IDE. Писал три файла .ino: «Transmitter_1» для дуины с кнопками и светодиодами, «Transmitter_2» для дуины с радиомодулем, джойстиками, тумблерами и потенциометрами, «Receiver» для приёмника. В скетчах очень много комментариев для того, чтобы можно было разобраться что где происходит.

Разберём сначала код в файле «Transmitter_1». Для упрощения обработки нажатий на кнопки (или переключения тумблеров) я написал функцию, в параметр которой вписывается пин, с которого надо считывать сигнал, и которая возвращает 0 или 1 (можно было использовать тип данных boolean (8 бит), но потом могут возникнуть проблемы с передачей по Serial, поэтому выбрал byte (8 бит)):

byte bt(int pin){ //тип данных возвращаемого значения byte
pinMode(pin, INPUT_PULLUP);
boolean bt_state = !digitalRead(pin);
if(bt_state == 1){
return 1;
}else{
return 0;
}
}

Для простого зажигания зелёного светодиода написал эту функцию:

void ledon(){
pinMode(3, OUTPUT); //устанавливаем пин 3 как выход
digitalWrite(3, HIGH); //зажигаем
delay(150); //ждём
digitalWrite(3, LOW); //гасим
delay(200); //ждём
}

Эта функция ничего не возвращает, поэтому прописываем «void». Остальной код элементарный и ничего примечательного в нём нет.

Переходим к разбору кода файла «Transmitter_2». В нём используется библиотека «EEPROM» для запоминания значений триммеров. В функции bt() из кода «Transmitter_1» я изменил только тип возвращаемого значения с byte на boolean. Для перевода значений с потенциометров и джойстиков написана функция toservo(), которая принимает пин потенциометра, нижнее значение с потенциометра, верхнее значение с него же и диапазон возвращаемых значений. Функция возвращает значения типа byte.

byte toservo(int potpin, int low, int high, int range){
int lowr = (180 — range) / 2;
int highr = 180 — ((180 — range) / 2);
returnmap(analogRead(potpin), low, high, lowr, highr);
}

Для регулировки яркости всяческой подсветки и иллюминации написана функция toaw(), которая принимает в параметрах пин потенциометра, с которого надо считывать сигнал. Возвращает значения типа byte в диапазоне 0-255. Далее на приёмнике активируется функция analogWrite(), которая создаёт ШИМ на заданном пине.

byte toaw(int potpin2){
returnmap(analogRead(potpin2), 0, 1023, 0, 255);
}

Настройки радиомодуля с помощью библиотек «nRF24l01» и «RF24» спёрты у AlexGyver’а.

Настал черёд приёмника. В его коде ничего примечательного нет, кроме функции биндинга. Если тумблер 4 находится наверху (причём передатчик включен заранее) и включается приёмник, приходит сигнал состояния тумблера 4 и запускается функция биндинга:

boolean motor_flag = 0; //флаг биндинга регуля, по умолчанию опущен

if(recieved_data[8] == 1 && motor_flag == 0){ //если тумблер 4 поднят и флаг мотора опущен
bind(); //начать биндинг
}

void bind(){
//функция ничего не принимает и ничего не возвращает
servo_0.writeMicroseconds(2300);
delay(3000);
servo_0.writeMicroseconds(800);
delay(5000);
motor_flag = 1; //поднимаем флаг
}

Небольшой туториал:

  1. Если первый тумблер находится в верху, двигатель отключен. Если он находится в центральном положении, двигатель управляется потенциометром № 3. Если же он находится внизу, двигатель управляется левым (№ 1) джойстиком по вертикальной (Y) оси.
  2. Если третий тумблер находится вверху, выпускаются шасси и зажигаются посадочные огни. Если он внизу, то только выпускаются шасси.
  3. Для биндинга после включения передатчика надо перевести тумблер № 4 в верхнее положение, включить приёмник, подождать 8 секунд.
  4. Для регулировки яркости посадочных огней надо включить их третьим тумблером, поворачивать второй потенциометр.
  5. Для регулировки яркости иллюминации включить её четвёртым тумблером, поворачивать четвёртый потенциометр.
  6. Для регулировки угла выпуска закрылков, включить их с помощью второго тумблера, поворачивать первый потенциометр.
  7. Для триммировки использовать соответствующие кнопки на кнопочной площадке.
  8. Для сброса триммера определённой оси надо зажать кнопку «сброс триммеров», нажать любую из двух кнопок оси, триммер которой надо сбросить.
  9. Для выбора чувствительности зажать кнопку «чувствительность», нажать кнопку (0/1/2/3) желаемой чувствительности, где: 0 – самый лучший отклик, 3 – самый слабый отклик.

Результат:

Получилась многоканальная (до 32 аналоговых (или цифровых, как сами пожелаете)) аппаратура радиоуправления с несколькими «плюшками» на борту: есть триммеры осей управления (которые не сбрасываются при отключении и можно сбросить отдельно каждый), четыре (0/1/2/3) степени чувствительности (отклика), функция автоматического биндинга регулятора оборотов. В моём варианте аппы реализовано только 8 каналов, а это всего лишь ¼ всех возможных!!!

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Послесловие.
В дальнейших моих планах разработка прошивки с меню (придётся припаять проводки с термоусадкой на оставшиеся кнопки и подключить их на «Transmitter_1»), в котором можно будет настроить диапазон поворота сервопривода определенного канала, фейлсейф (приведение всех каналов в заданное заранее положение при потере сигнала), оповещение о разрядке аккумулятора на модели и др.

Прошивки лежат в архиве на Гугл Диске.
Распиновка (чё куда подключать) для версии прошивки 1.1 в виде таблицы лежит здесь.

О дальности сигнала есть видео у AlexGyver’a (включайте видео на 13 минут 29 секунд, именно в этом месте начинается «тест»):

Смотрите про коптеры:  Делаем радиоуправление для самолета / Хабр

Испытание самодельной аппаратуры радиоуправления*. #1:
*качалки было лень ставить

Испытание самодельной аппаратуры радиоуправления. #2:

Выражаю благодарность в содействии созданию этого устройства:

Родным за терпение,

Александру Майорову (AlexGyver’у) за предоставленные в описаниях к видео скетчи,

Ивану Хмелевскому за то, что выслушивал, когда я ему поведывал о каждом новом этапе создания аппы.

Всем, кто прочитал данную статью, огромное СПАСИБО!

P.S. Будут вопросы, пишите в комментариях к статье))

§

Предисловие.

На фотографиях в этой статье будет немного (много) «колхоза».

Мне понадобилось:

  1. Три микроконтроллера Arduino Nano
  2. Два радиомодуля NRF24l01 с усилителем и внешней антенной
  3. Три односторонние печатные платы 50х70мм
  4. Четыре потенциометра на 10кОм
  5. Четыре ручки для них
  6. Около 22 тактовых кнопок
  7. Четыре тумблера ON-OFF-ON
  8. Два двухосевых джойстика (лучше использовать не для геймпадов)
  9. И пины-соединители
  10. Стабилизаторы питания LM1117-3.3, или аналоги, и другие радиодетали
  11. Всякая мелочёвка: провода, паяльные принадлежности, клеи, скотчи и др.

->>> Arduino Nano на Паркфлаере
Процесс изготовления.

Начну с изготовления

приёмника

. Отрезал два куска по 15 пинов «мама», подключил на них Ардуино. На пины А0-А7 и D2-D8 включительно припаял тройной разъём «папа», где один ряд – сигнальный с Ардуино (отдельный с каждого пина на Дуине), средний – 5В в параллель, крайний, который ближе к названию пина на Ардуино – земля (GND) в параллель.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

На пины D9-D13 включительно припаял радиомодуль по схеме, но питание впаял в стабилизатор напряжения, на выходе которого электролитический конденсатор 16В 100мкФ и керамический на 100нФ. На вход стабилизатора повесил керамический конденсатор 100нФ (пусть будет). Вход стабилизатора припаял к пину 5В (питаться приёмник будет от регуля напряжением 5В; его надо будет подключить на пин мотора).

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Приклеил радиомодуль к пинам и Ардуино на суперклей с пищевой содой, использованной в качестве отвердителя. Потом я всё залил горячими соплями (термоклеем) для надёжности.

Обратите внимание: пины D0 и D1 (RX и TX) свободны, на них я не паял пины для подключения электроники авиамодели (хотя туда можно подключать электронику). Сделал я это для того, чтобы можно было в далбнейшем подключить вторую Ардуину по Serial для увеличения количества пинов и расширения функционала.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Теперь принимаюсь за

передающую часть

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Прикрепил боковые стенки и днище на термоклей:

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Далее спаял на макетной плате конструкцию, напоминающую приёмник, но с шлейфом проводов « 5В–TX–RX–GND» и выходом с пинами для подключения радиомодуля всё по той же схеме. Думал, что буду питать МК через повышающий до 7-8В модуль (бустер) от одного Li-Ion аккумулятора (3-4,2В), но потом увидите, чем я его заменил.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Спаял на третьей макетной плате конструкцию с 20 выходами (радиомодуль на эту Дуину не надо будет вешать, поэтому пины D9-D13 включительно освобождаются), шлейфом « 5В–RX–TX–GND» (!!!соединять Ардуины друг с другом надо так: TX одной идёт в RX другой, и наоборот; 5В и GND просто для питания) и штекером для питания, в параллель которому припаян керамический конденсатор на 100нФ (чтобы сглаживать скачки напряжения от бустера).

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Припаял к кнопочной площадке множество проводков, на каждую кнопку по одному, которые пойдут на сигнальные пины Ардуино; общий минус можно втыкать на любой крайний контакт. К светодиодам тоже припаял проводок на «плюс» со штекером «мама», «минус» соединён с общей шиной «минус».

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Нанёс визит к моему другану, рассказал ему о том, что я делаю, и он отдал мне старый пульт от сломанного вертолётика на радио со словами: «На, пригодится». И вправду, мне пригодились антенна (вертолётик был 2,4ГГц) и джойстики, причём газ уже был с фиксацией. Установил джойстики вместо тех с Алиэкспресса, на приёмник припаял отданную антенну (просто она была более длинной, т.к. там был 5см кусок коаксиального провода, который очень хорошо гнулся). На пульт нанёс надписи рядом с джойстиками, тумблерами, потенциометрами и кнопками.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Для питания использую холдер последовательного соединения для аккумуляторов формата 18650 с Li-Ion аккумуляторами. На холдер приклеил сложенный вдвое липкой стороной внутрь скотч для лёгкого вынимания аккумов, сам холдер держится за липучку, приклеенную на самого него и на корпус передатчика.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Далее приступил к

написанию прошивки для аппаратуры

в Arduino IDE. Писал три файла .ino: «Transmitter_1» для дуины с кнопками и светодиодами, «Transmitter_2» для дуины с радиомодулем, джойстиками, тумблерами и потенциометрами, «Receiver» для приёмника. В скетчах очень много комментариев для того, чтобы можно было разобраться что где происходит.

Разберём сначала код в файле «Transmitter_1». Для упрощения обработки нажатий на кнопки (или переключения тумблеров) я написал функцию, в параметр которой вписывается пин, с которого надо считывать сигнал, и которая возвращает 0 или 1 (можно было использовать тип данных boolean (8 бит), но потом могут возникнуть проблемы с передачей по Serial, поэтому выбрал byte (8 бит)):

byte bt(int pin){ //тип данных возвращаемого значения byte
pinMode(pin, INPUT_PULLUP);
boolean bt_state = !digitalRead(pin);
if(bt_state == 1){
return 1;
}else{
return 0;
}
}

Для простого зажигания зелёного светодиода написал эту функцию:

void ledon(){
pinMode(3, OUTPUT); //устанавливаем пин 3 как выход
digitalWrite(3, HIGH); //зажигаем
delay(150); //ждём
digitalWrite(3, LOW); //гасим
delay(200); //ждём
}

Эта функция ничего не возвращает, поэтому прописываем «void». Остальной код элементарный и ничего примечательного в нём нет.

Переходим к разбору кода файла «Transmitter_2». В нём используется библиотека «EEPROM» для запоминания значений триммеров. В функции bt() из кода «Transmitter_1» я изменил только тип возвращаемого значения с byte на boolean. Для перевода значений с потенциометров и джойстиков написана функция toservo(), которая принимает пин потенциометра, нижнее значение с потенциометра, верхнее значение с него же и диапазон возвращаемых значений. Функция возвращает значения типа byte.

byte toservo(int potpin, int low, int high, int range){
int lowr = (180 — range) / 2;
int highr = 180 — ((180 — range) / 2);
returnmap(analogRead(potpin), low, high, lowr, highr);
}

Для регулировки яркости всяческой подсветки и иллюминации написана функция toaw(), которая принимает в параметрах пин потенциометра, с которого надо считывать сигнал. Возвращает значения типа byte в диапазоне 0-255. Далее на приёмнике активируется функция analogWrite(), которая создаёт ШИМ на заданном пине.

byte toaw(int potpin2){
returnmap(analogRead(potpin2), 0, 1023, 0, 255);
}

Настройки радиомодуля с помощью библиотек «nRF24l01» и «RF24» спёрты у AlexGyver’а.

Настал черёд приёмника. В его коде ничего примечательного нет, кроме функции биндинга. Если тумблер 4 находится наверху (причём передатчик включен заранее) и включается приёмник, приходит сигнал состояния тумблера 4 и запускается функция биндинга:

boolean motor_flag = 0; //флаг биндинга регуля, по умолчанию опущен

if(recieved_data[8] == 1 && motor_flag == 0){ //если тумблер 4 поднят и флаг мотора опущен
bind(); //начать биндинг
}

void bind(){
//функция ничего не принимает и ничего не возвращает
servo_0.writeMicroseconds(2300);
delay(3000);
servo_0.writeMicroseconds(800);
delay(5000);
motor_flag = 1; //поднимаем флаг
}

Небольшой туториал:

  1. Если первый тумблер находится в верху, двигатель отключен. Если он находится в центральном положении, двигатель управляется потенциометром № 3. Если же он находится внизу, двигатель управляется левым (№ 1) джойстиком по вертикальной (Y) оси.
  2. Если третий тумблер находится вверху, выпускаются шасси и зажигаются посадочные огни. Если он внизу, то только выпускаются шасси.
  3. Для биндинга после включения передатчика надо перевести тумблер № 4 в верхнее положение, включить приёмник, подождать 8 секунд.
  4. Для регулировки яркости посадочных огней надо включить их третьим тумблером, поворачивать второй потенциометр.
  5. Для регулировки яркости иллюминации включить её четвёртым тумблером, поворачивать четвёртый потенциометр.
  6. Для регулировки угла выпуска закрылков, включить их с помощью второго тумблера, поворачивать первый потенциометр.
  7. Для триммировки использовать соответствующие кнопки на кнопочной площадке.
  8. Для сброса триммера определённой оси надо зажать кнопку «сброс триммеров», нажать любую из двух кнопок оси, триммер которой надо сбросить.
  9. Для выбора чувствительности зажать кнопку «чувствительность», нажать кнопку (0/1/2/3) желаемой чувствительности, где: 0 – самый лучший отклик, 3 – самый слабый отклик.

Результат:

Получилась многоканальная (до 32 аналоговых (или цифровых, как сами пожелаете)) аппаратура радиоуправления с несколькими «плюшками» на борту: есть триммеры осей управления (которые не сбрасываются при отключении и можно сбросить отдельно каждый), четыре (0/1/2/3) степени чувствительности (отклика), функция автоматического биндинга регулятора оборотов. В моём варианте аппы реализовано только 8 каналов, а это всего лишь ¼ всех возможных!!!

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Послесловие.
В дальнейших моих планах разработка прошивки с меню (придётся припаять проводки с термоусадкой на оставшиеся кнопки и подключить их на «Transmitter_1»), в котором можно будет настроить диапазон поворота сервопривода определенного канала, фейлсейф (приведение всех каналов в заданное заранее положение при потере сигнала), оповещение о разрядке аккумулятора на модели и др.

Прошивки лежат в архиве на Гугл Диске.
Распиновка (чё куда подключать) для версии прошивки 1.1 в виде таблицы лежит здесь.

О дальности сигнала есть видео у AlexGyver’a (включайте видео на 13 минут 29 секунд, именно в этом месте начинается «тест»):

Испытание самодельной аппаратуры радиоуправления*. #1:
*качалки было лень ставить

Испытание самодельной аппаратуры радиоуправления. #2:

Выражаю благодарность в содействии созданию этого устройства:

Родным за терпение,

Александру Майорову (AlexGyver’у) за предоставленные в описаниях к видео скетчи,

Ивану Хмелевскому за то, что выслушивал, когда я ему поведывал о каждом новом этапе создания аппы.

Всем, кто прочитал данную статью, огромное СПАСИБО!

P.S. Будут вопросы, пишите в комментариях к статье))

§

Предисловие.

На фотографиях в этой статье будет немного (много) «колхоза».

Мне понадобилось:

  1. Три микроконтроллера Arduino Nano
  2. Два радиомодуля NRF24l01 с усилителем и внешней антенной
  3. Три односторонние печатные платы 50х70мм
  4. Четыре потенциометра на 10кОм
  5. Четыре ручки для них
  6. Около 22 тактовых кнопок
  7. Четыре тумблера ON-OFF-ON
  8. Два двухосевых джойстика (лучше использовать не для геймпадов)
  9. И пины-соединители
  10. Стабилизаторы питания LM1117-3.3, или аналоги, и другие радиодетали
  11. Всякая мелочёвка: провода, паяльные принадлежности, клеи, скотчи и др.
Смотрите про коптеры:  Как не потерять квадрокоптер. Советы и личная история. | Форум о дронах

->>> Arduino Nano на Паркфлаере
Процесс изготовления.

Начну с изготовления

приёмника

. Отрезал два куска по 15 пинов «мама», подключил на них Ардуино. На пины А0-А7 и D2-D8 включительно припаял тройной разъём «папа», где один ряд – сигнальный с Ардуино (отдельный с каждого пина на Дуине), средний – 5В в параллель, крайний, который ближе к названию пина на Ардуино – земля (GND) в параллель.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

На пины D9-D13 включительно припаял радиомодуль по схеме, но питание впаял в стабилизатор напряжения, на выходе которого электролитический конденсатор 16В 100мкФ и керамический на 100нФ. На вход стабилизатора повесил керамический конденсатор 100нФ (пусть будет). Вход стабилизатора припаял к пину 5В (питаться приёмник будет от регуля напряжением 5В; его надо будет подключить на пин мотора).

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Приклеил радиомодуль к пинам и Ардуино на суперклей с пищевой содой, использованной в качестве отвердителя. Потом я всё залил горячими соплями (термоклеем) для надёжности.

Обратите внимание: пины D0 и D1 (RX и TX) свободны, на них я не паял пины для подключения электроники авиамодели (хотя туда можно подключать электронику). Сделал я это для того, чтобы можно было в далбнейшем подключить вторую Ардуину по Serial для увеличения количества пинов и расширения функционала.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Теперь принимаюсь за

передающую часть

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Прикрепил боковые стенки и днище на термоклей:

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Далее спаял на макетной плате конструкцию, напоминающую приёмник, но с шлейфом проводов « 5В–TX–RX–GND» и выходом с пинами для подключения радиомодуля всё по той же схеме. Думал, что буду питать МК через повышающий до 7-8В модуль (бустер) от одного Li-Ion аккумулятора (3-4,2В), но потом увидите, чем я его заменил.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Спаял на третьей макетной плате конструкцию с 20 выходами (радиомодуль на эту Дуину не надо будет вешать, поэтому пины D9-D13 включительно освобождаются), шлейфом « 5В–RX–TX–GND» (!!!соединять Ардуины друг с другом надо так: TX одной идёт в RX другой, и наоборот; 5В и GND просто для питания) и штекером для питания, в параллель которому припаян керамический конденсатор на 100нФ (чтобы сглаживать скачки напряжения от бустера).

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Припаял к кнопочной площадке множество проводков, на каждую кнопку по одному, которые пойдут на сигнальные пины Ардуино; общий минус можно втыкать на любой крайний контакт. К светодиодам тоже припаял проводок на «плюс» со штекером «мама», «минус» соединён с общей шиной «минус».

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

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

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Нанёс визит к моему другану, рассказал ему о том, что я делаю, и он отдал мне старый пульт от сломанного вертолётика на радио со словами: «На, пригодится». И вправду, мне пригодились антенна (вертолётик был 2,4ГГц) и джойстики, причём газ уже был с фиксацией. Установил джойстики вместо тех с Алиэкспресса, на приёмник припаял отданную антенну (просто она была более длинной, т.к. там был 5см кусок коаксиального провода, который очень хорошо гнулся). На пульт нанёс надписи рядом с джойстиками, тумблерами, потенциометрами и кнопками.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Для питания использую холдер последовательного соединения для аккумуляторов формата 18650 с Li-Ion аккумуляторами. На холдер приклеил сложенный вдвое липкой стороной внутрь скотч для лёгкого вынимания аккумов, сам холдер держится за липучку, приклеенную на самого него и на корпус передатчика.

Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Далее приступил к

написанию прошивки для аппаратуры

в Arduino IDE. Писал три файла .ino: «Transmitter_1» для дуины с кнопками и светодиодами, «Transmitter_2» для дуины с радиомодулем, джойстиками, тумблерами и потенциометрами, «Receiver» для приёмника. В скетчах очень много комментариев для того, чтобы можно было разобраться что где происходит.

Разберём сначала код в файле «Transmitter_1». Для упрощения обработки нажатий на кнопки (или переключения тумблеров) я написал функцию, в параметр которой вписывается пин, с которого надо считывать сигнал, и которая возвращает 0 или 1 (можно было использовать тип данных boolean (8 бит), но потом могут возникнуть проблемы с передачей по Serial, поэтому выбрал byte (8 бит)):

byte bt(int pin){ //тип данных возвращаемого значения byte
pinMode(pin, INPUT_PULLUP);
boolean bt_state = !digitalRead(pin);
if(bt_state == 1){
return 1;
}else{
return 0;
}
}

Для простого зажигания зелёного светодиода написал эту функцию:

void ledon(){
pinMode(3, OUTPUT); //устанавливаем пин 3 как выход
digitalWrite(3, HIGH); //зажигаем
delay(150); //ждём
digitalWrite(3, LOW); //гасим
delay(200); //ждём
}

Эта функция ничего не возвращает, поэтому прописываем «void». Остальной код элементарный и ничего примечательного в нём нет.

Переходим к разбору кода файла «Transmitter_2». В нём используется библиотека «EEPROM» для запоминания значений триммеров. В функции bt() из кода «Transmitter_1» я изменил только тип возвращаемого значения с byte на boolean. Для перевода значений с потенциометров и джойстиков написана функция toservo(), которая принимает пин потенциометра, нижнее значение с потенциометра, верхнее значение с него же и диапазон возвращаемых значений. Функция возвращает значения типа byte.

byte toservo(int potpin, int low, int high, int range){
int lowr = (180 — range) / 2;
int highr = 180 — ((180 — range) / 2);
returnmap(analogRead(potpin), low, high, lowr, highr);
}

Для регулировки яркости всяческой подсветки и иллюминации написана функция toaw(), которая принимает в параметрах пин потенциометра, с которого надо считывать сигнал. Возвращает значения типа byte в диапазоне 0-255. Далее на приёмнике активируется функция analogWrite(), которая создаёт ШИМ на заданном пине.

byte toaw(int potpin2){
returnmap(analogRead(potpin2), 0, 1023, 0, 255);
}

Настройки радиомодуля с помощью библиотек «nRF24l01» и «RF24» спёрты у AlexGyver’а.

Настал черёд приёмника. В его коде ничего примечательного нет, кроме функции биндинга. Если тумблер 4 находится наверху (причём передатчик включен заранее) и включается приёмник, приходит сигнал состояния тумблера 4 и запускается функция биндинга:

boolean motor_flag = 0; //флаг биндинга регуля, по умолчанию опущен

if(recieved_data[8] == 1 && motor_flag == 0){ //если тумблер 4 поднят и флаг мотора опущен
bind(); //начать биндинг
}

void bind(){
//функция ничего не принимает и ничего не возвращает
servo_0.writeMicroseconds(2300);
delay(3000);
servo_0.writeMicroseconds(800);
delay(5000);
motor_flag = 1; //поднимаем флаг
}

Небольшой туториал:

  1. Если первый тумблер находится в верху, двигатель отключен. Если он находится в центральном положении, двигатель управляется потенциометром № 3. Если же он находится внизу, двигатель управляется левым (№ 1) джойстиком по вертикальной (Y) оси.
  2. Если третий тумблер находится вверху, выпускаются шасси и зажигаются посадочные огни. Если он внизу, то только выпускаются шасси.
  3. Для биндинга после включения передатчика надо перевести тумблер № 4 в верхнее положение, включить приёмник, подождать 8 секунд.
  4. Для регулировки яркости посадочных огней надо включить их третьим тумблером, поворачивать второй потенциометр.
  5. Для регулировки яркости иллюминации включить её четвёртым тумблером, поворачивать четвёртый потенциометр.
  6. Для регулировки угла выпуска закрылков, включить их с помощью второго тумблера, поворачивать первый потенциометр.
  7. Для триммировки использовать соответствующие кнопки на кнопочной площадке.
  8. Для сброса триммера определённой оси надо зажать кнопку «сброс триммеров», нажать любую из двух кнопок оси, триммер которой надо сбросить.
  9. Для выбора чувствительности зажать кнопку «чувствительность», нажать кнопку (0/1/2/3) желаемой чувствительности, где: 0 – самый лучший отклик, 3 – самый слабый отклик.

Результат:

Получилась многоканальная (до 32 аналоговых (или цифровых, как сами пожелаете)) аппаратура радиоуправления с несколькими «плюшками» на борту: есть триммеры осей управления (которые не сбрасываются при отключении и можно сбросить отдельно каждый), четыре (0/1/2/3) степени чувствительности (отклика), функция автоматического биндинга регулятора оборотов. В моём варианте аппы реализовано только 8 каналов, а это всего лишь ¼ всех возможных!!!

Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик
Простое радиоуправление на NRF24L01 PA LNA. Передатчик

Послесловие.
В дальнейших моих планах разработка прошивки с меню (придётся припаять проводки с термоусадкой на оставшиеся кнопки и подключить их на «Transmitter_1»), в котором можно будет настроить диапазон поворота сервопривода определенного канала, фейлсейф (приведение всех каналов в заданное заранее положение при потере сигнала), оповещение о разрядке аккумулятора на модели и др.

Прошивки лежат в архиве на Гугл Диске.
Распиновка (чё куда подключать) для версии прошивки 1.1 в виде таблицы лежит здесь.

О дальности сигнала есть видео у AlexGyver’a (включайте видео на 13 минут 29 секунд, именно в этом месте начинается «тест»):

Испытание самодельной аппаратуры радиоуправления*. #1:
*качалки было лень ставить

Испытание самодельной аппаратуры радиоуправления. #2:

Выражаю благодарность в содействии созданию этого устройства:

Родным за терпение,

Александру Майорову (AlexGyver’у) за предоставленные в описаниях к видео скетчи,

Ивану Хмелевскому за то, что выслушивал, когда я ему поведывал о каждом новом этапе создания аппы.

Всем, кто прочитал данную статью, огромное СПАСИБО!

P.S. Будут вопросы, пишите в комментариях к статье))

Список радиоэлементов

ОбозначениеТипНоминалКоличествоПримечаниеМагазинМой блокнот
R1, R10, R11Резистор

10 кОм

3R1 — 0805, R10 -11 — МЛТ-0.25Поиск в магазине ОтронВ блокнот
R4 — R9Резистор

330 Ом

6МЛТ-0.25Поиск в магазине ОтронВ блокнот
R2, R3Резистор

220 Ом

2МЛТ-0.25Поиск в магазине ОтронВ блокнот
RV1, RV2, SWДжойстик1Поиск в магазине ОтронВ блокнот
C1, C2, C4, C5Конденсатор100 нФ40805Поиск в магазине ОтронВ блокнот
C3Конденсатор4.7 мкФ х 16 В1Поиск в магазине ОтронВ блокнот
U1МК AVR 8-бит

ATmega8

1PDIP28Поиск в магазине ОтронВ блокнот
U2Линейный регулятор

AMS1117-3.3

1SOT-223Поиск в магазине ОтронВ блокнот
D3СветодиодЗеленый1Поиск в магазине ОтронВ блокнот
D4СветодиодЖелтый1Поиск в магазине ОтронВ блокнот
D1, D2СветодиодRGB2Поиск в магазине ОтронВ блокнот
L1Катушка индуктивности10 мкГн1Поиск в магазине ОтронВ блокнот
Радио модульNRF24L01 PA LNA1Поиск в магазине ОтронВ блокнот
SW0 — SW3Кнопка1Поиск в магазине ОтронВ блокнот
J2 — J7РазъемPBS-401Поиск в магазине ОтронВ блокнот
J1РазъемPLS-401Поиск в магазине ОтронВ блокнот
JP1Перемычка12 позицииПоиск в магазине ОтронВ блокнот
DC-DC преобразовательMT36081На схеме не указанПоиск в магазине ОтронВ блокнот
Добавить все

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector