- Самодельная многоканальная аппаратура радиоуправления
- Топливо для авиамодельных двигателей своими руками
- Топливо для авиамодельных двигателей, рецепты
- Рецепты топливных смесей для калильных двигателей
- Рецепты топливных смесей для компрессионных моторов.
- Рекомендованные составы топлива от производителя.
- Состав топлива для калильных двигателей.
Самодельная многоканальная аппаратура радиоуправления
На фотографиях в этой статье будет немного (много) «колхоза».
Мне понадобилось:
- Три микроконтроллера 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);
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; //поднимаем флаг
}
Небольшой туториал:
- Если первый тумблер находится в верху, двигатель отключен. Если он находится в центральном положении, двигатель управляется потенциометром № 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’у) за предоставленные в описаниях к видео скетчи,
Ивану Хмелевскому за то, что выслушивал, когда я ему поведывал о каждом новом этапе создания аппы.
Всем, кто прочитал данную статью, огромное СПАСИБО!
P.S. Будут вопросы, пишите в комментариях к статье))
§
На фотографиях в этой статье будет немного (много) «колхоза».
Мне понадобилось:
- Три микроконтроллера 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);
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; //поднимаем флаг
}
Небольшой туториал:
- Если первый тумблер находится в верху, двигатель отключен. Если он находится в центральном положении, двигатель управляется потенциометром № 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’у) за предоставленные в описаниях к видео скетчи,
Ивану Хмелевскому за то, что выслушивал, когда я ему поведывал о каждом новом этапе создания аппы.
Всем, кто прочитал данную статью, огромное СПАСИБО!
P.S. Будут вопросы, пишите в комментариях к статье))
§
На фотографиях в этой статье будет немного (много) «колхоза».
Мне понадобилось:
- Три микроконтроллера 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);
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; //поднимаем флаг
}
Небольшой туториал:
- Если первый тумблер находится в верху, двигатель отключен. Если он находится в центральном положении, двигатель управляется потенциометром № 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’у) за предоставленные в описаниях к видео скетчи,
Ивану Хмелевскому за то, что выслушивал, когда я ему поведывал о каждом новом этапе создания аппы.
Всем, кто прочитал данную статью, огромное СПАСИБО!
P.S. Будут вопросы, пишите в комментариях к статье))
Топливо для авиамодельных двигателей своими руками
авиамоделизм — мир увлеченных
|