РАДИОУПРАВЛЕНИЕ НА МИКРОКОНТРОЛЛЕРЕ
Многие хотели собрать простую схему радиоуправления, но чтоб была многофункциональна и на достаточно большое расстояние. Я все-таки эту схему собрал, потратив на неё почти месяц. На платах дорожки рисовал от руки, так как принтер не пропечатывает такие тонкие. На фотографии приемника светодиоды с не подрезанными выводами — припаял их только для демонстрации работы радиоуправления. В дальнейшем их отпаяю и соберу радиоуправляемый самолет.
Схема аппаратуры радиоуправления состоит всего из двух микросхем: трансивера 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В. У приемника, который потребляет заметно меньше тока, аккумулятор от электронной сигареты, у передатчика — от моего любимого телефона)) Схему, найденную на сайте вртп , собрал и испытал: [)еНиС
Источник
Самодельная многоканальная аппаратура радиоуправления
На фотографиях в этой статье будет немного (много) «колхоза».
Мне понадобилось:
- Три микроконтроллера Arduino Nano
- Два радиомодуля NRF24l01 с усилителем и внешней антенной
- Три односторонние печатные платы 50х70мм
- Четыре потенциометра на 10кОм
- Четыре ручки для них
- Около 22 тактовых кнопок
- Четыре тумблера ON-OFF-ON
- Два двухосевых джойстика (лучше использовать не для геймпадов)
- И пины-соединители
- Стабилизаторы питания LM1117-3.3, или аналоги, и другие радиодетали
- Всякая мелочёвка: провода, паяльные принадлежности, клеи, скотчи и др.
->>> Arduino Nano на Паркфлаере
Процесс изготовления.
Начну с изготовления приёмника. Отрезал два куска по 15 пинов «мама», подключил на них Ардуино. На пины А0-А7 и D2-D8 включительно припаял тройной разъём «папа», где один ряд – сигнальный с Ардуино (отдельный с каждого пина на Дуине), средний – +5В в параллель, крайний, который ближе к названию пина на Ардуино – земля (GND) в параллель.
На пины D9-D13 включительно припаял радиомодуль по схеме, но питание впаял в стабилизатор напряжения, на выходе которого электролитический конденсатор 16В 100мкФ и керамический на 100нФ. На вход стабилизатора повесил керамический конденсатор 100нФ (пусть будет). Вход стабилизатора припаял к пину +5В (питаться приёмник будет от регуля напряжением 5В; его надо будет подключить на пин мотора).
Приклеил радиомодуль к пинам и Ардуино на суперклей с пищевой содой, использованной в качестве отвердителя. Потом я всё залил горячими соплями (термоклеем) для надёжности.
Обратите внимание: пины D0 и D1 (RX и TX) свободны, на них я не паял пины для подключения электроники авиамодели (хотя туда можно подключать электронику). Сделал я это для того, чтобы можно было в далбнейшем подключить вторую Ардуину по Serial для увеличения количества пинов и расширения функционала.
Теперь принимаюсь за передающую часть. Сначала надо было модифицировать джойстик газа, чтоб он был с фиксацией. Для этого я сначала его разобрал и надфилем подточил с двух противоположных краёв стик (он лежит по центру), который скользит по подпружиненной плошадке. Далее собрал его обратно.
Потом изготовил пульт (корпус передатчика) из нескольких линеек по 20см. Начал с лицевой части. Супеклеем склеил 6 линеек торцами воедино, чтобы получилась досочка (можно было использовать фанеру, но у меня её не было). Просверлил по кругу несколько отверстий, выковырял центральную часть кусачками-бокорезами и канцелярским ножом, выровнял отверстия полукруглым надфилем. Укрепил швы суперклеем с содой в нескольких местах каждый.
Просверлил отверстия для потенциометров и тумблеров, вкрутил всё это на свои места и изнутри залил термоклеем. Заранее припаял к тумблерам и потенциометрам провода с термоусадкой и пинами «мама». Установил стойки для джойстиков (припаял к ним провода тоже заранее) и выпилил прямоугольник для кнопочной площадки (она с общей землёй), устанавливал её с помощью горячих соплей.
Прикрепил боковые стенки и днище на термоклей:
Далее спаял на макетной плате конструкцию, напоминающую приёмник, но с шлейфом проводов «+5В–TX–RX–GND» и выходом с пинами для подключения радиомодуля всё по той же схеме. Думал, что буду питать МК через повышающий до 7-8В модуль (бустер) от одного Li-Ion аккумулятора (3-4,2В), но потом увидите, чем я его заменил.
Спаял на третьей макетной плате конструкцию с 20 выходами (радиомодуль на эту Дуину не надо будет вешать, поэтому пины D9-D13 включительно освобождаются), шлейфом «+5В–RX–TX–GND» (. соединять Ардуины друг с другом надо так: TX одной идёт в RX другой, и наоборот; +5В и GND просто для питания) и штекером для питания, в параллель которому припаян керамический конденсатор на 100нФ (чтобы сглаживать скачки напряжения от бустера).
Припаял к кнопочной площадке множество проводков, на каждую кнопку по одному, которые пойдут на сигнальные пины Ардуино; общий минус можно втыкать на любой крайний контакт. К светодиодам тоже припаял проводок на «плюс» со штекером «мама», «минус» соединён с общей шиной «минус».
Сделал из 2см пеноплекса боковые стенки и верхушку, обрезав углы ножом и обточив наждачкой. Присоединил боковые куски на двусторонний скотч, в верхушке сделал отверстие для антенны и радиомодуля. Приклеил верхушку на термоклей к остальному корпусу.
Чтоб было более красиво, наклеил на эту дырень кусок белого тонкого пластика на двусторонний скотч с отверстием для антенны.
Нанёс визит к моему другану, рассказал ему о том, что я делаю, и он отдал мне старый пульт от сломанного вертолётика на радио со словами: «На, пригодится». И вправду, мне пригодились антенна (вертолётик был 2,4ГГц) и джойстики, причём газ уже был с фиксацией. Установил джойстики вместо тех с Алиэкспресса, на приёмник припаял отданную антенну (просто она была более длинной, т.к. там был 5см кусок коаксиального провода, который очень хорошо гнулся). На пульт нанёс надписи рядом с джойстиками, тумблерами, потенциометрами и кнопками.
Для питания использую холдер последовательного соединения для аккумуляторов формата 18650 с Li-Ion аккумуляторами. На холдер приклеил сложенный вдвое липкой стороной внутрь скотч для лёгкого вынимания аккумов, сам холдер держится за липучку, приклеенную на самого него и на корпус передатчика.
Далее приступил к написанию прошивки для аппаратуры в 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);
return map ( analogRead (potpin), low, high, lowr, highr);
>
Для регулировки яркости всяческой подсветки и иллюминации написана функция toaw(), которая принимает в параметрах пин потенциометра, с которого надо считывать сигнал. Возвращает значения типа byte в диапазоне 0-255. Далее на приёмнике активируется функция analogWrite(), которая создаёт ШИМ на заданном пине.
byte toaw( int potpin2) <
return map ( analogRead (potpin2), 0, 1023, 0, 255);
>
Настройки радиомодуля с помощью библиотек «nRF24l01» и «RF24» спёрты у AlexGyver’а.
Настал черёд приёмника. В его коде ничего примечательного нет, кроме функции биндинга. Если тумблер 4 находится наверху (причём передатчик включен заранее) и включается приёмник, приходит сигнал состояния тумблера 4 и запускается функция биндинга:
boolean motor_flag = 0; //флаг биндинга регуля, по умолчанию опущен
void bind()<
//функция ничего не принимает и ничего не возвращает
servo_0. writeMicroseconds (2300);
delay (3000);
servo_0. writeMicroseconds (800);
delay (5000);
motor_flag = 1; //поднимаем флаг
>
Небольшой туториал:
- Если первый тумблер находится в верху, двигатель отключен. Если он находится в центральном положении, двигатель управляется потенциометром № 3. Если же он находится внизу, двигатель управляется левым (№ 1) джойстиком по вертикальной (Y) оси.
- Если третий тумблер находится вверху, выпускаются шасси и зажигаются посадочные огни. Если он внизу, то только выпускаются шасси.
- Для биндинга после включения передатчика надо перевести тумблер № 4 в верхнее положение, включить приёмник, подождать 8 секунд.
- Для регулировки яркости посадочных огней надо включить их третьим тумблером, поворачивать второй потенциометр.
- Для регулировки яркости иллюминации включить её четвёртым тумблером, поворачивать четвёртый потенциометр.
- Для регулировки угла выпуска закрылков, включить их с помощью второго тумблера, поворачивать первый потенциометр.
- Для триммировки использовать соответствующие кнопки на кнопочной площадке.
- Для сброса триммера определённой оси надо зажать кнопку «сброс триммеров», нажать любую из двух кнопок оси, триммер которой надо сбросить.
- Для выбора чувствительности зажать кнопку «чувствительность», нажать кнопку (0/1/2/3) желаемой чувствительности, где: 0 – самый лучший отклик, 3 – самый слабый отклик.
Результат:
Получилась многоканальная (до 32 аналоговых (или цифровых, как сами пожелаете)) аппаратура радиоуправления с несколькими «плюшками» на борту: есть триммеры осей управления (которые не сбрасываются при отключении и можно сбросить отдельно каждый), четыре (0/1/2/3) степени чувствительности (отклика), функция автоматического биндинга регулятора оборотов. В моём варианте аппы реализовано только 8 каналов, а это всего лишь ¼ всех возможных.
Послесловие.
В дальнейших моих планах разработка прошивки с меню (придётся припаять проводки с термоусадкой на оставшиеся кнопки и подключить их на «Transmitter_1»), в котором можно будет настроить диапазон поворота сервопривода определенного канала, фейлсейф (приведение всех каналов в заданное заранее положение при потере сигнала), оповещение о разрядке аккумулятора на модели и др.
Прошивки лежат в архиве на Гугл Диске.
Распиновка (чё куда подключать) для версии прошивки 1.1 в виде таблицы лежит здесь.
О дальности сигнала есть видео у AlexGyver’a (включайте видео на 13 минут 29 секунд, именно в этом месте начинается «тест»):
Испытание самодельной аппаратуры радиоуправления*. #1:
*качалки было лень ставить
Испытание самодельной аппаратуры радиоуправления. #2:
Выражаю благодарность в содействии созданию этого устройства:
Родным за терпение,
Александру Майорову (AlexGyver’у) за предоставленные в описаниях к видео скетчи,
Ивану Хмелевскому за то, что выслушивал, когда я ему поведывал о каждом новом этапе создания аппы.
Всем, кто прочитал данную статью, огромное СПАСИБО!
Источник