При управлении летательным аппаратом с полетным контроллером помимо 4 стандартных каналов управления требуется дополнительный для выбора режима, к этому каналу есть требование чтобы по нему передавалось несколько уровней сигнала, каждому из уровней соответствует определенный режим работы автопилота.
Однако во всех известных мне пультах многоступенчатые переключатели отсутствуют, поэтому подобную проблему решают двумя способами:
микширование нескольких переключателей, при этом каждой комбинации переключателей соотвествует какой либо режим
использование аналогового регулятора “крутилки”
Комбинации из микшированных переключателей крайне неудобны тем что в ответственный момент начинаешь теряться в управлении и совсем уже нет времени вспоминать нужную комбинацию для режима.
“крутилки” - ими можно выбирать любой из режимов, но отсутствие дискретности делает их использование крайне неудобным, кроме того невозможно из первого режима переключиться сразу в пятый - необходимо прокрутить все промежуточные режимы. Мне ка начинающему “пилоту” показалось крайне сложным одновременно следить за моделью отслеживать высоту и положение модели и одновременно не теряться выставляя нужную позицию у “крутилки”
Собственно дальше речь пойдет о том как сделать дискретный переключатель.
У многих пультов есть входы управляемые напряжением, в такой цепи включен резистор - одной стороной он подключен к +5 вольт, второй к общему проводу а со среднего контакта снимается управляющий уровень напряжения. В этом случае для того чтобы достичь цели необходим переключатель выдающий в зависимости от положения один из уровней напряжения.
Предлагаемое решение содержит микропроцессор 5 светодиодов, 5 кнопок и аналоговый выход. Программный код позволяет контролировать переключение на один из режимов и выдавать в соответствии с заложенном в настройки один из уровней выходного напряжения
эскиз платы и лицевой панели
схема - проект пяти позиционного переключателя режимов для переключения режимов автопилота
Ардуино - скетч
/*
s1 - s5 & LEDS connected to analog pins 1-5
its numbers from 14 to 18
if (digitalRead(ScanPin)==0)
{
SelBtn = ScanPin;
unsetOther(ScanPin);
while (digitalRead(ScanPin)==0); // hold scaning until relise button
pinMode(ScanPin, OUTPUT);
digitalWrite(ScanPin,LOW);
}
}
}
void unsetOther(int excludePin)
{
for (int i=14; i <= 18; i++)
{
if (i != excludePin)
pinMode(i, INPUT);
digitalWrite(i,HIGH);
}
Благодаря разгону PWM до 30кгц возможно более быстрое переключение, вместо трех каскадов сглаживания выходного напряжения достаточно одного-двух
Подключение вместо переменного резистора (“крутилки”) пульта Hobby King 2.4Ghz 6Ch :
вариант размещения платы:
Три провода снятые с переменного резистора отлично достают до платы установленной снаружи.
через штыревой разъем сверху возможно залить персонализированный вариант скетча или настроек.
на заднем фоне MissionPlaner в котором отображается что включен режима rtl
на фото включен режим стабилизации и он же на заднем фоне MissionPlaner
уровни напряжения для каждой из кнопок задаются в скетче установкой переменных
BtnLevels[14] = 0; // первая кнопка, 0 вольт
BtnLevels[15] = 84; // вторая кнопка, настроено на попадание в середину 5 режима
BtnLevels[16] = 127; // третья кнопка, середина 4 режима
BtnLevels[17] = 169; // четвертая кнопка, середина 3 режима
BtnLevels[18] = 255; // пятая кнопка, 5 вольт, 1 режим
Возможно вы заметили что в планере 6 режимов а переключатель 5-кнопочный. дело в том что пока я разрабатывал эту плату разработчики ардупилота увеличити число режимов до 6, в моем случае я не использую режим 2.
Для подбора режима используется миссион планер, в разделе калибрвоки стиков отображены длительности импульсов в милисекундах, я подобрал уровни сигнала таким образом чтобы каждая кнопка попадала в середину диапазона и обеспечивала стабильность
Актуальный вариант схемы, чертеж печатной платы в формате eagle можно скачать у меня на сайте.
зы. я заказывал печатную платку на заводе, еще несколько штучек осталось.
Дополнение 7.01.14
6 кнопочная версия
лицевая сторона
Юхимюк Сергей выбрал выбрал такое решение:
Это позволяет переустанавливать ее при необходимости на другой передатчик.
Соединительный разъем- обычный мини-джек от стереонаушников, врезанный в корпус,
с встроенными переключателями, позволяющими при отключении пульта восстанавливать прежнюю цепь крутилки.
Корпус использовал от ПДУ подходящего размера, удалив внутренности.
Табличка нарисована в Фотошопе и напечатана на цветном принтере на чертежной бумаге.
Обклеил с двух сторон обычным прозрачным скотчем.
Comments
Спасибо =) надо будет себе сделать на досуге
а не проще сделать на отечественном? просто наставить делителей и всё, как такой вариант?
проще, можно любую переключалку взять и резисторы разным номиналом, но это не так прикольно =)
Алексей, круто!
А нельзя придумать ответную часть, которая подключалась бы к каналу приемника и при различных значениях pwm вкл/выкл ту или иную цепь?
не, тут тока прямой канал, без обратной связи) хотя можно намудрить с логикой… и светодиодами, тогда получится тоже самое что и дуиной, но проще)
Алексей, круто!
А нельзя придумать ответную часть, которая подключалась бы к каналу приемника и при различных значениях pwm вкл/выкл ту или иную цепь?
в том же multiwii прописать if-ы для AUX канала по аналогии с переключением режимов, а уже с арудинки рулить цепями, даже при самой плохой аппе (±10 скачет сигнал, ну и если подобная схема даст нужную расрешающую способность) выйдет аж 50 режимов + если поставить таймер (чтобы как бы пакет данных собирался на определенное время), 50 одновременных режимов
Не, я хочу такую же красивую законченную схему как у Алексея)
Спасибо всем за отзывы.
кстати переключатель можно реализовать на обычной мини - ардуинке (мало ли у кого без дела валяется) а “навес” из кнопок и светодиодов можно будет крепить напрямую в корпус пульта. может даже симатичнее внешне будет.
по поводу п2к или галетника я в первую очередь подумал, но не решился из эстетических соображений)
ответную часть тоже можно сделать - примеров кода ппм декодера в изобилии
в данном примере логика так как в переключателе п2к - тоесть одновременно лишь один канал активен но если делать не под пилот а “расширение числа каналов” то и на пульте можно сделать отдельные кнопки независимыми
Сергей, если все еще хотите, стукнитесь ко мне в личку 😉
Я в принципе понимаю как это реализовать в железе и софте, так как делал нечто похожее в учисенном варианте, но вдруг кто-то это уже доделал в реальной жизни!
Люди, а никто случайно не встречал схему подключения ардуинки к trainer порту пульта? Теоретически можно же будет смодулировать любые сигналы на любом канале… или trainer порт не для подключения еще одного пульта?
для уточнения так как прописано
#define AnalogOut 10 // PWM out
то выход схемы подключается к отброшенному центральному проводу, выбранной для замены крутилки?
да, конечно выход подключается на центальный пин крутилки, у этой же крутилки крайние пины общий и +5
как нужно подправить скетч если надо подключить шестую кнопку скажем на ADC5 и задействовать второй выход (например PB1) ? Далее логически разделить набор кнопок как два по три кнопки и выводить в зависимости от нажатия кнопок №№1-3 в канал PB2 значения напряжения 0-127-255 соответственно и аналогично для кнопочек №№4-6 в канал PB1 ?
Или тупо описать (по аналогии) шестой вход и второй выход
#define AnalogOut 10 // PWM out первый
#define AnalogOut2 9 // PWM out дополнительный
BtnLevels[14] = 0; // 1 кнопка
BtnLevels[15] = 127;
BtnLevels[16] = 255;
BtnLevels[17] = 0;
BtnLevels[18] = 127; //
BtnLevels[19] = 255; // 6 кнопка
и сделать второй цикл
первый for (int i=14; i <= 16; i++)
второй for (int i=17; i <= 19; i++)
дублируя вложения конструкции с изменениями выходов?
И будет ли корректно работать скетч если не ставить кварцевый резонатор, а зашить фьюзы для работы от внутреннего 8Мгц генератора?
Я как то так поправил, чтобы добавить шестой режим:
/*
s1 - s6 & LEDS connected to analog pins 1-6
its numbers from 14 to 19
if (digitalRead(ScanPin)==0)
{
SelBtn = ScanPin;
unsetOther(ScanPin);
while (digitalRead(ScanPin)==0); // hold scaning until relise button
pinMode(ScanPin, OUTPUT);
digitalWrite(ScanPin,LOW);
}
}
}
void unsetOther(int excludePin)
{
for (int i=14; i <= 19; i++)
{
if (i != excludePin)
pinMode(i, INPUT);
digitalWrite(i,HIGH);
}
Может чего не правильно, т.к. в программировании полный ноль, но работает.
Не понял зачем доп выход?
Режимы по одному каналу управляются.
Доп кнопку повесил на 28ю ногу меги.
Единственное , скорее всего, нужно будет править/подгонять уровни режимов…
Плиз, кто повторил переключалку на ардуино поделитесь фотками,
очень интересны фотки подключения к ардуино “для чайников”
и дизайнерских решений по корпусному оформлению
Я собрал такой вариант , только руки не дойдут засунуть это в турнигу…
при замыкании пина D9 на GND после инициализации контролера происходит регулировка уровня выбранного канала в меньшую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать - достигнуто максимальное или минимальное значение
при замыкании пина D8 на GND после инициализации контролера происходит регулировка уровня выбранного канала в большую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать - достигнуто максимальное или минимальное значение
при замыкании пина D9 на GND в момент включения питания происходит сброс параметров на те что указаны в прошивке по умолчанию
На вывод D7 можно подключить пьезо - пищалку, при этом переключение каналов подтверждается писком. (Индуктивные пищалки следует зашунтировать защитным диодом параллельно пищалке, анодом на GND)
Это расширение возможностей позволит избежать трудоемкой процедуры калибровки аппаратуры и прошивки
Спасибо за такой проект.Вот мое детище.
За15 минут на коленке сделал.
Браво!, спасибо за фотку!
Решил пьезик поставить,заодно пофоткать. lh3.googleusercontent.com/…/20130204_010319.jpg]
Гордиться нечем,просто на заметку.😒
Перемычка,для калибровки.Пьезик,пищит в самый как раз,и не тихо , и не громко.😁
Ещё раз,спасибо за проект!
а смонтировано проводом который самозачищается при пайке или обычная обмоточная жилка?
ХЗ.Походу обычный эмалированый,мы таким на работе обрывы соединяем.
а лудишь его как? кислота? аспирин?
здравствуйте. собрал контроллер, заливал ваш некс и на 6 кнопок, сам контроллер работает, уровень в вольтах получается 0 0,9 1,9 2,9 3,9 4,9 на шести кнопках, но в аппе, туринга с ер9х, уровень сигнала получается совсем по другому, 1 кнопка 0 вольт- PWM 1100 2кнопка 0,9 вольт PWM 1460 3 кнопка 1,9 вольт PWM скачет до конца 2000 и на всех остальных кнопках 4 5 6 получается PWM 2000. что я мог не то сделать?
в моем последнем скетче что находится по ссылке внизу страницы в архиве есть возможность подстройки уровней каждой кнопки замыкая перемычками “тюнинг” - попробуйте подстроить под ваш диапазон.
если уровень “скачет” - тут возможно что плохое питание платы или неверно выбраны резисторы - конденсаторы в выходном фильтре. я в последнее время ставлю только 2 контура из трех резисторы 3килоома кондеры по 2,2мкф
Благодарю, прочитал, теперь появился такой вопрос , где находится на атмеге пин D9 и D8, на схеме их вроде нет или не нашёл их а по номерам ног на атмеге вроде не подходят?
Посмотри схему\мы на ардуинки
D8 --> PB0(12)
D9 --> PB1(13)
а лудишь его как? кислота? аспирин?
Тупо 480 градусов сжигают эмаль за доли секунды,и в этот момент происходит лужение.😁
Алексей.А никак нельзя вернуть в строй и потенциометр.
Конечно можно микропереключателем.Но имелось в виду через доп. кнопку.😒
П.с.Да простит меня создатель проекта:).Не удржался и сделал 6 кнопочек.
/*
s1 - s6 & LEDS connected to analog pins 0-5
its numbers from 14 to 19
*/
#include <EEPROM.h>
#define AnalogOut 10 // PWM out
#define SoundOut 7 //d7 speaker out
int SelBtn = 14; // default
//int BtnLevels[19];
void setup()
{
Serial.begin(9600);
pinMode(8, INPUT); //tune up button
pinMode(9, INPUT); //tune down button
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
if (EEPROM.read(1)!=123 || digitalRead(9) == LOW ) // if pin 9 short to 0 start reset defaults
reset_eprom();
//force pwm
TCCR1B = 0x01;
delay(100);
pinMode(SelBtn, OUTPUT);
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevel(SelBtn));
tone(SoundOut, 4000, 150);
delay (200);
tone(SoundOut, 1000, 400);
}
void loop()
{
ScanBtns();
TuneLevel();
delay(10);
}
void ScanBtns()
{
for (int i=14; i <= 19; i++)
ScanBtn(i);
}
void ScanBtn(int ScanPin)
{
if (SelBtn != ScanPin)
{
pinMode(ScanPin, INPUT);
if (digitalRead(ScanPin)==0)
{
SelBtn = ScanPin;
unsetOther(ScanPin);
tone(SoundOut, 5500, 150);
while (digitalRead(ScanPin)==0); // hold scaning until relise button
pinMode(ScanPin, OUTPUT);
digitalWrite(ScanPin,LOW);
}
}
}
void unsetOther(int excludePin)
{
for (int i=14; i <= 19; i++)
{
if (i != excludePin)
pinMode(i, INPUT);
digitalWrite(i,HIGH);
}
analogWrite (AnalogOut, BtnLevel(excludePin));
Serial.println(BtnLevel(excludePin));
}
void reset_eprom()
{
EEPROM.write(1, 123); //mark eeprom inited
EEPROM.write(14, 0);
EEPROM.write(15, 84);
EEPROM.write(16, 127);
EEPROM.write(17, 169);
EEPROM.write(18, 255);
EEPROM.write(19, 0);
}
byte BtnLevel(int pin)
{
return EEPROM.read(pin);
}
void TuneLevel()
{
byte newlevel = 0;
if ( digitalRead(9) == LOW)
{
newlevel = constrain(BtnLevel(SelBtn) - 1 ,0,255);
EEPROM.write(SelBtn, newlevel);
showpin(newlevel);
}
if ( digitalRead(8) == LOW)
{
newlevel = constrain(BtnLevel(SelBtn) + 1 ,0,255);
showpin(newlevel);
}
}
void showpin(byte newlevel)
{
EEPROM.write(SelBtn, newlevel);
analogWrite (AnalogOut, newlevel);
Serial.println(newlevel);
if (newlevel >1 && newlevel < 254 )
digitalWrite(SelBtn,HIGH);
delay(200);
digitalWrite(SelBtn,LOW);
}
неожидано эффектно с “линзами” вышло!
кстати я забыл отписаться что на сайте теперь выложен скетч и под 5 и под 6 кнопок.
подправил маленький недочет который приводил к тому что если на 6 кнопочный скетч повесить не все светодиоды, то режим перещелкивался на неподключенный канал
здравствуйте. у меня получилось исправить не правильные уровни сигнала на выходе, косяк как всегда был прост до безобразия, оказывается в аппе помимо стиков надо калибровать ещё и крутилки, откалибровал их и всё сразу заработало. в инструкции наверное надо написать что бы ещё кто то не парился потом с этим или я один такой.
теперь должно нормально сохранять перенастроенные значения
Пасибки 😃
Нарисуйте, пожалуйста, схему подключения шести кнопок и светодиодов к Ардуине мини.
Нарисуйте, пожалуйста, схему подключения шести кнопок и светодиодов к Ардуине мини.
пожалуйста:
выходы А4 и А5 находятся около атмеги на поверхности платы ардуино.
пожалуйста:
…
выходы А4 и А5 находятся около атмеги на поверхности платы ардуино.
Огромное спасибо. Правда, имею еще один вопрос: на каком китайском сайте опытные люди закупают радиодетали для SMD монтажа? Чтобы можно было купить несколько штук разных наименований, в частности и для этой схемы.
Огромное спасибо. Правда, имею еще один вопрос: на каком китайском сайте опытные люди закупают радиодетали для SMD монтажа? Чтобы можно было купить несколько штук разных наименований, в частности и для этой схемы.
Я, например, беру на ебее.
Там продают наборы резисторов и конденсаторов ряда Е24, любых размеров - самые популярные 0603, 0804, 1206,
Также там есть вся остальная популярная smd-рассыпуха.
Собрал переключатель режимов автопилота по вашей схеме. При его использовании на экране пульта Turnigy 9x вижу, что показания плавают в пределах десятых долей. Допустим второй канал скачет от 23,2 до 23,8 единиц. Так и должно быть? Или что-то со сглаживающим каскадом не в порядке.
И еще. На вашем сайте написано, что можно разогнать PWM до 30Гц и ускорить переключение режимов. А как это сделать на практике?
P.S. Переключатель сделал на основе Arduino Mini.
а что за единицы ? каков максимальный диапазон? если пара процентов от максимального диапазона то это нормально, если больше то нужно проверять каскады сглаживания -немного увеличивать номинал резистора и конденсатора и проверить что питание стабильное 5 вольт
резисторы и смд конденсаторы продаются наборами по 20-30 штук каждого номинала, дешевле всего в китае и наебее.
в москве богатый набор резисторов 0603 может стоить до 1000р в китае 10-15 долл, но ждать 60 дней
а что за единицы ? каков максимальный диапазон? если пара процентов от максимального диапазона то это нормально, если больше то нужно проверять каскады сглаживания -немного увеличивать номинал резистора и конденсатора и проверить что питание стабильное 5 вольт
Турнига показывает на своем экране положение стиков и крутилок в процентах - от “-100” до “+100”. Диапазон дребезжания моего переключателя менее одного процента. Я опасался, что это может сказаться на стабильности переключения режимов Ардупилота. Но вы написали, что это нормально.
А как разогнать PWM до более высокой частоты?
крайние модификации:
в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф, третий каскад не требуется
встроил переключалку в передатчик с 3,3 вольтовым питанием.
тупо подал эти 3,3 вольта на питание ардуинки
единственное пришлось существенно уменьшить номиналы шунтирующих светодиоды резисторов - иначе светятся тускло
Здравствуйте. Подскажите пож. а нельзя ли это чудо воплотить на arduino nano v3.0?
Спасибо Алексей за замечательную идею!
Реализацию я правда изменил с целью уменьшения компонентов и всяческих затрат.
В моем исполнении в данном девайсе трудится ATtiny13. 3 кнопки, 6 команд
Первые три позиции выбираются кратковременным нажатием на соответствующие кнопки 1, 2 или 3.Прозвучит короткий сигнал, можно отпустить. Диодик моргает редко.
Остальные 3 режима 4, 5, и 6, выбираются длительным нажатием(~1,5 сек) на кнопки 1,2 и 3 соответстванно. Звучит двойной сигнал. Диодик моргает часто.
На все про все, вместе с написанием кода потрачено день времени, самое сложное для меня было согласовать кнопочки с дырочками в корпусе. Работает исключительно, а главное уменьшился риск краша из за неверно выбранного режима.
Вот здесь всё: платы, схемы, исходник в CodeVision, hex файл итп rcopen.com/files/525109e59970730077846dbb
кстати возможно на три выхода повесить 6 светодиодов. одни анодом на плюс другие анодом на минус
выдавая логический ноль или единицу зажигать один из диодов. а когда вывод в состоянии чтения- ни один не горит -читается кнопка.
для меня выбор тини или атмега не стоит цена атмеги 100 и их всегда в достатке…
на буззер если он катушечный надо ставить обратный диод чтоб самоиндукцией не выбило транзистор
светодиоды действительно можно повесить! а смысл? текущий режим прекрасно распознается, частотой моргания диодика, а вот увеличивать кол-во компонентов не хотелось бы.
для меня выбор тини или атмега не стоит цена атмеги 100 и их всегда в достатке…
Вам везет!😃
на буззер если он катушечный надо ставить обратный диод чтоб самоиндукцией не выбило транзистор
Вероятно вы правы, однако такая пищалка(без диода) стоит у меня на калитке, пищит мелодии уже лет 10, и пока транзистор жив.
Подскажите пожалуйста Я заказал в таком корпусе DIP28, который удобно паять обычным паяльником… Но у меня Нет кварца на 16МГц… есть на 12МГц какой кварц можно ещё на него установить? Читал что у него есть встроенный на 8МГц для чего тогда внешний. Скинте пожалуйста качественную схему … здесь всё неразборчиво невидать нумерацию выв.
Алексей цель не в экономии … Ну Куплю я их 5шт. одну использую для переключалки … а остальные в ящик … СМЫСЛ. Для вас экономней вы их реализуете раз вы занимаетесь сборкой и изготовлением моделей… вы же должны понимать моделистов… которые собирают для себя. Мне нужен совет… по предыдущим вопросам. ДА и всё равно наверное ардуино нужно будет перепаивать для переключалки… а такой чип обычным паяльником моделиста не перепаять.
ламерски-преламерский вопрос 😉 (ну не силен я в электричестве)
в цепочке, которая на выходе (RC) - конденсаторы какие? не электролиты ж, а емкость 3.3 мкф, я таких емкостей просто не-электролитичных не встречал (22 пикофарад, 100 нанофарад - были)
а то вчера на макетке собрал по мотивам свой вариант, надо собрать и похвастаться, но сначала надо за детальками
Господа, прошу помощи! Решил соорудить данный мод на основе arduino Pro Mini(5V) на Turnigy 9XR PRO и вот какая беда: померял напряжение на резисторе, на место которого хотел поставить перключалку, а он мне показывает 3.3V, померял остальные два - та же песня!
У меня слабые познания в электронике, но что-то мне подсказывает что моя пятивольтовая ардуинка тут не заработает))))
Переключалку планировал по этой схеме:
Вопрос: можно ли внести какие нибудь изменения в схему или мне нужна 3.3V версия Ардуино?
Если возможен вариант всё же оставить 5V ардуинку, то можно сразу схемку поправить?!?
Заранее благодарен!!!
как то давно подключал к 3.3 вольтовой аппе.
как есть вместо 5 вольт
вроде все работало…
хотя наверное зависит от фьюзов ардуины. бывает что в случае просадки напряжения - стоит детектор и перезагрузка.
по идее если по хорошему можно поискать в аппе 5 вольт или сделать отдельный стабилизатор для питания ардуинки, а для выхода сделать резисторный делитель чтобы случайно не попалить трехвольтовые компаненты передатчика
Алексей, спасибо за такой оперативный ответ!!!
по идее если по хорошему можно поискать в аппе 5 вольт или сделать отдельный стабилизатор для питания ардуинки, а для выхода сделать резисторный делитель чтобы случайно не попалить трехвольтовые компаненты передатчика
Если не сложно, можно всё что вы сказали выше исправить на схеме, думаю это будет полезно многим , т.к. аппы 9XR\9XR pro потихоньку вытесняют 9Х, а данный мод не утратит своей актуальности на новых версиях тоже!!!
если ардуинка готовая то как правило там есть вход питания от батарей на котором значится 9-12 вольт.
найти место где после выключателя появляется напряжение батареи и завести питание на ардуинку
с выхода который у вас подписан как выходPWM а фактически является выходом аналогового уровня нужно последовательно включить два резистора, точка между резисторами будет являться выходом сигнала - ее подать вместо среднего контакта резистора-крутилки
крайнюю ногу второго резистора подключить на gnd
занчения сопротивлений выбрать так чтобы максимум был 3.3 вольта. тоесть делитель должен быть полтора раза.
грубо говоря сумарное сопротивление двух резисторов должно быть 5ком , который между “выходомPWM” и входом крутилки 1,8ком, а тот который от входа крутилки на GND 3.3ком
Так?
ну наверное можно и так,
разве что проверить чтобы не слишком медленно переключались режимы,
в противном случае выкинуть один каскад rc например r9 и с3
Собрал свою версию переключателя на ардуинке для встраивания в аппаратуру от коптера китайского происхождения Cheerson CX-20.
Напряжения питания, кстати у меня 3.3 В, все работает без проблем. Проблема вылезла в другом.
На каналах крутилок стоит непонятный мне алгоритм, по которому после первой подачи питания, при превышении крутилкой середины своего диапазона, реальное положение крутилки перестает иметь значение, а на выходе формируется максимальный сигнал. Снимается этот режим кратковременной установкой крутилки в верхнее положение, после чего сигнал становится адекватным ее положению. С переключателем это выглядело так: после подачи питания, при нажатии на кнопки 1-3, сигнал канала соответствовал нажатой кнопке, а при нажатии на кнопки 4 и 5, я получал на выходе максимальный сигнал, который должен был появляться только после нажатия на кнопку 6, но после хотя бы кратковременного нажатия шестой кнопки и четвертая с пятой начинали работать корректно.
При этом, каналы, закрепленные за стиками, такого алгоритма не имеют, но использовать то мы можем только каналы крутилок, как невостребованные. Как победить это в самой аппаратуре я не знаю, а раз не можем победить, то попытаемся подстроиться. При неоценимой поддержке автора проекта Алексея Козина, за что огромное ему спасибо, была внесена поправка в код переключателя. Теперь после включения, переключатель на несколько секунд сразу встает в положение максимального выходного сигнала, а после издает звуковой сигнал готовности к работе и переходит в режим минимального выходного сигнала (первая кнопка). Тем самым мы автоматически сбрасываем этот странный алгоритм аппаратуры и заставляем ее работать адекватно.
Информация от Алексея Козина для тех, кто захочет повторить данную схему в аппаратуре Cheerson CX-20 или имеющих такую же проблему. Необходима правка кода:
Внутри
в процедуре setup
найдите такие строки
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevel(SelBtn));
и вставьте между ними чтоб получилось так
digitalWrite(SelBtn,0);
Не могу найти схему к сетчу MODESW2.
Подскажите как осуществляется подстройка уровней каналов без программатора.
замыканием D8 если (не ошибаюсь) минус
или D9 плюс на массу при выбранном канале
если ошибаюсь значит наоборот.
при настройке канал начинает мигать светодиодом
замыканием D8 если (не ошибаюсь) минус
или D9 плюс на массу при выбранном канале
Спасибо за ответ!!! Буду делать…
Ребята! Вы молодцы! У меня к Вам будет великая просьба написать программку для ардуинки чтобы надписи на экран от от NOKIA5110 выводились. У вас так красиво все получается, а у меня валяются два экрана… Вот бы один прилепить, тогда вообще все будет прекрасно… И стоит 150 руб. с доставкой… Я, к сожалению, в программировании совсем не силен… www.ebay.com/itm/…/351096808460
Ребята! Вы молодцы! У меня к Вам будет великая просьба написать программку для ардуинки чтобы надписи на экран от от NOKIA5110 выводились. У вас так красиво все получается, а у меня валяются два экрана… Вот бы один прилепить, тогда вообще все будет прекрасно… И стоит 150 руб. с доставкой… Я, к сожалению, в программировании совсем не силен… www.ebay.com/itm/…/351096808460
Тогда уж лучше выбрать дисплей с сенсором чтобы кнопки не воротить.
Тогда уж лучше выбрать дисплей с сенсором чтобы кнопки не воротить.
Можно и с сенсором, но для начала хоть такой - самый доступный бы нарисовать… Сенсоры на маленьком экране, мне кажется, не совсем удобны…
Вот тут zelectro.cc/nokia5110_module_arduino есть какое-то описание подключения и скетч…
У меня все готово 😃
здравствуйте. у меня получилось исправить не правильные уровни сигнала на выходе, …, надо калибровать ещё и крутилки, откалибровал их и всё сразу заработало…или я один такой.
Т.е. сначала калибруем в МП (ДО перепайки управляющего вывода с движка резистора крутилки на “S” платки) , а потом перепаиваем и в МР назначаем соответствующие режимы ? 😒
У меня в Нове диапазон переключения частот от 1001 до 1087 с “некоторым шагом” МП показывает, при управлении с платки, а для переключения надо от 1000 до 2000 … 😵
Спасибо Алексей за замечательную идею!
Реализацию я правда изменил с целью уменьшения компонентов и всяческих затрат.
В моем исполнении в данном девайсе трудится ATtiny13…
przepraszam - używam translatora
Czy jest możliwość przerobienia kodu tak aby były aktywne tylko krótkie naciśnięcia dające 3 położenia? Używam MultiWii, a tam pewne opcje są aktywowane 3 sygnałami na danym kanale.
Pozdrawiam
Я извиняюсь - использую переводчика
Можно ли изменить код так, что они являются активными только короткое нажатие дает 3 позиции? MultiWii использовать, и есть несколько вариантов активированные 3 сигналы на канале.
С уважением
Можно ли использовать светодиоды со светодиодной ленты? Какие резисторы будут нужны?
Друзья, кто нить подключал к TARANIS PRO? откуда брали питалово? я нашел +/- на плате с выключателем у разъема. Но когда аппа выключена идет шум на динамик, видимо куда то не туда подрубился, а больше найти не могу ((( подскажите плиз
крайние модификации:
в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф, третий каскад не требуется
Делаю мод под тараньку с питанием 3,3в.
Под рукой нашлись только 0,5 мкф (и 3,3 мкф).
Правильно ли я понимаю - что бы получить те же параметры фильтра надо порядка 10к? И можно ли в данной ситуации увеличить сопротивление? Или лучше оставить 3к и 3,3 мкф?
Друзья, кто нить подключал к TARANIS PRO? откуда брали питалово? я нашел +/- на плате с выключателем у разъема. Но когда аппа выключена идет шум на динамик, видимо куда то не туда подрубился, а больше найти не могу ((( подскажите плиз
А разве нельзя взять питание со слайдера (или крутилки), вместо которого подрубаемся? Там же и “+3,3в” и “-” и “сигнал” - я так и собирался воткнуть.
…основной функционал работает, но вот калибровка ни в какую…
Сорри - непропай в одном месте. Всё работает как часы ))
Спасибо Алексей!
Оснастил переключателем Taranis. Подключился вместо “слайдера”. Питание 3,35в.
Осталось заказать надпись на “рокале” для вклейки под светодиодики.
Поддерживаю Павел Кулешов (SpbGrey), тоже бы хотелось, чтобы вместо светиков между кнопками расположился OLED дисплей 128*64. Допустим по краям напротив кнопок высвечиваются аббревиатуры режимов, а в центре экрана максимально крупно написан сам выбранный режим. В коде я не бельмеса, но дисплей уже заказал 😃. По мере возможности пытаюсь изучать программирование, но не могу найти модель экрана OLED 128*64 I2C под Протеус, чтоб проверять методом тыка хотя бы. Был бы очень рад, если бы спецы подсказали вектор движения, возможно через год-другой получилось бы реализовать задумку)) А тому, кто пришлёт готовый код под это дело - вышлю такой дисплей дропшипом!
Друзья, может кто направит на путь. как подключить плату Алесея к аппаратуре Spektrum DX6i
Доброго дня всем.
Промелькнула мысль, возможно бредовая…
А если оставить переключение крутилкой, но добавить ардуину с дисплеем, только для вывода названия режима на дисплей? ТО есть ардуино следит за изменением на потенциометре и, исходя из этого - пишет какой режим в данный момент активирован?
на мой взгляд это реализуемо технически но неудобно.
возможны переходные состояния когда позиция крутилки может быть трактована как один режим на пульте и как другой на борту. чтобы этого избежать нужно будет думать о какойто механической трещетке или подпружиненном шарике с тем чтобы крутилка вставала в фиксированные позиции механически
переход в другой режим нажатием кнопки занимет меньше времени чем попадание крутилкой в определенную позицию (если она не крайняя)
большое спасибо за реализацию и подробный фототчет!
я тем временем на основе еще одной переключалки сделал расширитель числа каналов,
причем там декодером ардушка и поэтому можно не просто каналы а целые программы последовательности действий
примеры кода как реализовать типовые вещи уже есть
присоединяйтесь к обсуждению rcopen.com/blogs/99365/21274
Всем привет! После продолжительных исследований программирования наконец-то готов и мой вариант переключателя. Программа написана на баскоме, т.е. с нуля. В устройстве используется графический дисплей OLED 128*64.
Немного внутренностей:
Отверстие в корпусе пульта и панелька из оргстекла делались на самопальном чпу-станке. Трепанация Тараниса
А тут как это работает:
Менюшку с выбором типа летательного аппарата сделал просто так, может пригодится, когда начну осваивать самолёты и полётные режимы будут другими. Пока у меня только коптер, поэтому после выбора того или другого программа попадает в коптерный список режимов. Это опционально и всегда можно удалить.
Также есть вариант программы под символьный дисплей 16*2, но встроенного решения с ним уж точно не получится))
Доброго здоровья!
Извините, что снова поднимаю тему.
По схеме переключателя режимов (5 режимов)… там на входе (от разъёма JP1) конденсаторы по 3.3 мФ? А то с моим разрешением экрана я только догадываюсь о номиналах. Резисторы вроде угадал - 3 кОм.
Или же лучше использовать другие номиналы?
крайние модификации:
в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф, третий каскад не требуется
очень хорошо.
крайние модификации:
в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф,
ОК. Понял.
Доброго здоровья!
Тут ещё вопрос всплыл.
Все версии переключателя режимов подключаются вместо крутилки.
Однако, на моей аппаратуре не могу привязать крутилку к пятому каналу.
Есть только возможность использовать любой трёхпозиционный переключатель и можно сделать комбинацию из двух переключателей.
Т.е. один из двухпозиционных будет работать как шифт и один из трёхпозиционных как переключатель режимов.
При таком раскладе заблудиться в ответственный момент очень легко!
Как можно использовать последнюю версию кнопочного переключателя режимов в моей ситуации?
Собираю переключатель режимов на Arduino Pro Mini.
Аппаратура RadioLink AT9 (прошивка 1.5.6 (AT9S)).
проверьте, возможно трехпозиционный переключатель аналогичен крутилке, т.е. возможно там аналоговый вход проца висит.
в этом случае будет достаточно подключить к нему выход переключателя
(возможно отпаяв лишние подтягивающие резисторы)
проверьте, возможно трехпозиционный переключатель аналогичен крутилке, т.е. возможно там аналоговый вход проца висит.
в этом случае будет достаточно подключить к нему выход переключателя
(возможно отпаяв лишние подтягивающие резисторы)
Проверил. Нет не аналогичен. Ситуация с переключателями такая: они через резистор 1 кОм замыкают один из выводов контроллера на GND.
Т.е. двухпозиционники замыкают один вывод контроллера через резистор на GND, а трёхпозиционники замыкают один из двух выводов контроллера, ну а в среднем положении ничего не замыкают. Там по дорожкам глянул есть ещё конденсатор между резистором и выводом контроллера (наверное дребезг гасит), который одним выводом сидит на GND.
Другими словами - прошивка генерирует управляющий сигнал по комбинации единиц и нулей на цифровых входах контроллера, а не не по напряжению на аналоговом входе. И да, на все переключатели приходит с контроллера 3,15 Вольта, ну те ноги, которые в последствии будут на GND замыкаться.
Получается, что для RadioLink AT9/AT9S нужна другая схема и прошивка переключателя режимов.
Эта схема должна заменить собой два штатных переключателя.
Один двухпозиционный и один трёхпозиционный.
Комбинации для переключения режимов должны выглядеть примерно так:
1). На GND один из выводов трёхпозиционника, выводы двухпозиционника свободны;
2). Все выводы трёхпозиционника свободны, выводы двухпозиционника свободны;
3). Второй из выводов трёхпозиционника замкнут на землю, выводы двухпозиционника свободны;
4). На GND один из выводов трёхпозиционника, вывод двухпозиционника замкнут на GND;
5). Все выводы трёхпозиционника свободны, вывод двухпозиционника замкнут на GND;
6). Второй из выводов трёхпозиционника замкнут на землю, вывод двухпозиционника замкнут на GND.
Примерно так должен будет выносной переключатель имитировать работу 2-х и 3-х позиционных переключателей.
Надеюсь я не ошибся. Просто если бы переключатели были аналогичны резистору, то скорее всего должна была быть одна дорожка к контроллеру от средней ноги переключателя, а две другие ноги переключателя через резисторы на + или -. А в AT9 наоборот - центральный вывод переключетеля на GND всегда, а два других через одинаковые резисторы (1 кОМ) уходят куда-то на контроллер.
Доброго здоровья!
Извините пожалуйста, ну задёргал я уж людей со своим переключателем режимов!
Есть ещё вопрос.
На аппе AT9 стоит контроллер такой же как и на F4BY.
Так как многие уже знакомы с этим АРМ то пишу в этой теме.
Исходя из исследований приведённых постом выше, понятно что цифровые выводы контроллера коротятся через резистор на GND.
А если я вместо замыкания на GND подам логический 0 с Arduino или с любой другой платы, то это будет то же что и замыкание на GND для контроллера?
Быть может только 0 подавать не через штатный резистор, а обойдя его (ну или перемычку впаять), так же, да?
Просто хочу обойтись без лишних ключей или того хуже - оптронов. И при этом нужно не спалить ни чего в аппе.
Доброго здоровья!
Всё! Сделал переключатель 6-и режимов полёта под RadioLink AT9/AT9S.
Работает! На экране АТ9 отображается всё правильно.
Сюда можно выложить схему и скетч для Arduino?
Или заводить свой дневник?
да, можно, приветствуется, но если хотите можно и свой дневник
Не, дневник пока не буду заводить.
Когда наберу критический объём информации о своём детище (имею в виду целиком гексакоптер), вот тогда заведу.
Пока здесь кину ссылку на другую ветку этого же форума, где я уже выложил схему и скетч. А чуть позже подготовлю нормальную схему и подробное описание настроек в аппе плюс места подключения сфотографирую.
по скетчу,
если делать аналоговое чтение то лучше сравнивать по скетчу не с нулем а с половиной напряжения т.к. со временем контакты кнопок могут окислиться и возникнуть небольшое сопротивление и даже при зажатой кнопке будет считываться к примеру не ноль а 2,3,5 или изза потерь на проводах.
если же из аналоговых пинов делать дигитал чтение то этой проблемы не будет
кроме того при инициализации можно установить подтяг входов к плюсу, при этом не нужно будет резисторов по входу
Ну в принципе да, можно убрать резисторы-подтяжки и использовать встроенные в ардуино.
А вот с digitalRead(Ax), что-то у меня не получилось в ходе экспериментов.
Но всё же попробую ещё раз.
Доброго здоровья!
Ну вот и готов полностью переключатель режимов для AT9/AT9S.
Изменения в скетче:
включил интегрированные в ATmega328 подтягивающие резисторы;
сделал чтение аналогового порта как цифрового (digitalRead());
по умолчанию включается всегда режим привязанный к третьей кнопке (на моей монтажке так оказалось удобнее).
Изменил схему убрав внешние подтягивающие резисторы на аналоговых входах.
Листинг скетча.
// 6-и позиционный переключатель полётных режимов АРМ для АТ9
// Пин 3 к контакту 2-х позиционника, который идёт на контроллер АТ9
// Пины 0 и 1 к контактам 3-х позиционника которые идут на контроллер
#define button1 A0
#define button2 A1
#define button3 A2
#define button4 A3
#define button5 A4
#define button6 A5
#define led1 3
#define led2 4
#define led3 5
#define led4 6
#define led5 7
#define led6 8
#define ledardu 13
#define upr1 0
#define upr2 1
#define upr3 2
#define buzzer 9
int flag = 0; // Флаг нажатой кнопки. 0 - отпущена, 1 - нажата
// Позволяет не повторять действия если кнопку удерживают
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(ledardu, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(upr1, OUTPUT);
pinMode(upr2, OUTPUT);
pinMode(upr3, OUTPUT);
// При старте или сбросе всегда будет включен 3-й режим
// В моём случае - это Stab.
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, HIGH);
digitalWrite(led3, HIGH);
// Подключаем интегрированные в ATmega328 резисторы подтяжки
digitalWrite(button1, HIGH);
digitalWrite(button2, HIGH);
digitalWrite(button3, HIGH);
digitalWrite(button4, HIGH);
digitalWrite(button5, HIGH);
digitalWrite(button6, HIGH);
// Задержка на 1 секунду перед стартовым звуком
// чтобы со звуком аппаратуры не совпадал
delay (1000);
// Проигрываем звук (до, ре, ми) при старте
digitalWrite(ledardu, HIGH);
tone (buzzer, 262);
delay (100);
tone (buzzer, 294);
delay (100);
tone (buzzer, 330);
delay (150);
noTone(buzzer);
digitalWrite(ledardu, LOW);
}
// Функция проигрывания звука нажатой кнопки (переключения режима)
void beep()
{
digitalWrite(ledardu, HIGH);
tone (buzzer, 1500);
delay (100);
tone (buzzer, 1000);
delay (200);
noTone(buzzer);
digitalWrite(ledardu, LOW);
}
void loop()
{
if (digitalRead(button1) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, HIGH);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button2) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, LOW);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button3) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button4) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button5) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, LOW);
digitalWrite(upr2, HIGH);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, HIGH);
digitalWrite(led6, LOW);
flag = 1;
}
else if (digitalRead(button6) == 0 && flag == 0)
{
beep();
digitalWrite(upr1, HIGH);
digitalWrite(upr2, LOW);
digitalWrite(upr3, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, HIGH);
flag = 1;
}
// Сброс флага если кнопка была нажата ранее, а сейчас отпущена
else if (digitalRead(button1) != 0 && digitalRead(button2) != 0 && digitalRead(button3) != 0 && digitalRead(button4) != 0 && digitalRead(button5) != 0 && digitalRead(button6) != 0 && flag !=0)
{
flag = 0;
}
delay(10);
}
Схема.
Внешний вид.
Надписи сделаны на плёнке лазерным принтером.
Коробка где-то из закромов.
Крепление вместо штатных SwB и SwC на алюминиевый уголок и два болта с шайбами.
Переделки самой аппы минимальные: удалил штатные SwB, SwC, и на 1 мм подточил корпус для вывода шлейфа подключения переключателя режимов.
Вот вид на шлейф:
Место подключения переключателя режимов APM в RadioLink AT9/AT9S.
Штатные разъёмы временно убрал (для фото сессии) для лучшего обзора.
Так же видно место откуда было взято питание 3.3 Вольта (красный и синий провода).
попробовал собрать по схеме для AT9/AT9S. в МП переключается только по трем позициям. в чем косяк? как исправить?
попробовал собрать по схеме для AT9/AT9S. в МП переключается только по трем позициям. в чем косяк? как исправить?
А в аппе все 6 позиций переключаются?
В настройках аппаратуры нужно включить так, чтобы два переключателя отвечали за режимы полёта (один двухпозиционный и один трёхпозиционный).
У меня физически выпаяны SwC и SwB, а вместо них подключен внешний кнопочный переключатель.
В меню аппы это выглядит вот так:
Режимы отображаемые на дисплее аппы могут быть любые (хотя можно подогнать в настройках аппы и под реальные), главное правильно выставить процентаж для каждого из 6 режимов и включить два тумблера отвечающих за их переключение.
На фото видно, что у меня SW3 соответствует физическому переключателю SwC и SW2 соответствует физическому SwB, вместо которых и подключается внешний кнопочный.
Как попасть в меню “ATTITUDE”?
В RadioLink AT9 с прошивкой 1.5.6(AT12S) это делается так:
держим кнопку “MODE” до появления [BASIC MENU],
крутим переключатель “PUSH” до пункта “AUX-CH”,
жмём этот переключатель в центре (он же и кнопка),
в появившемся меню [AUX-CH] переключателем “PUSH” перемещаемся на пункт “CH5”, жмём кнопку “PUSH” и попадаем в нужное нам меню [ATTITUDE].
Далее маневрируем всё всё тем же переключателем “PUSH” до нужных позиций меню а кнопкой “PUSH” выбираем эти пункты.
Переключателем “PUSH” изменяем выбранные пункты и кнопкой “PUSH” фиксируем изменения, когда всё будет настроено жмите кнопку “END” до появления главного экрана аппаратуры. С аппаратурой всё!
Дальнейшие настройки все в MissionPlanner и в нём уже настраиваем реальные режимы, которые нужны.
Повторюсь - экран аппы может отображать имена режимов не соответствующих режимам в MissionPlanner, главное, чтобы аппа выдавала правильный процент для каждого режима, а правильные названия можно настроить потом, когда из практики станет понятно какие режимы вообще нужны.
Константин Сакрюкин, разобрался, проценты были не те. как бы еще озвучку сделать?
разобрался, проценты были не те. как бы еще озвучку сделать?
Вы имеете в виду озвучку как у Тараниса?
Т.е., когда голосом человеческим молвит?
Для AT9 наверное это будет сложно сделать не покопавшись в её прошивке!
Что касается именно самого переключателя режимов и его озвучки, то он не знает какой режим включен.
Он просто заменяет собою два тумблера имитируя их состояния, а вместо механического клац-клац, просто попискивает зумером.
Можно конечно поставить и микруху туда типа ISD1416, но при смене режима в MissionPlanner придётся перезаписывать и озвучку режимов на кнопочном переключателе. А заставить Arduino управлять этой ISD не трудно.
Для AT9 наверное это будет сложно сделать не покопавшись в её прошивке!
Для Radiolink AT9S - оказалось очень просто. Без всяких танцев и бубнов… Переписываете на пятый канал крутилку и все работает как часы.
Переписываете на пятый канал крутилку и все работает как часы.
Наверное Вы имеете в виду переключение режимов?
-Это, да!
Но, речь шла об озвучке голосом - не просто пик, пик. Потому я и предположил, что без соответствующей прошивки не обойтись!
озвучка делается элементарно на ардуине + дешевый звуковой модуль + сд карточка с требуемыми мелодиями или голосами.
по событию ардуина (можно дописать прямо в переключалку) передает по сериалу команду в звуковой модуль на воспроизведение определенного трека
модуль проигрывает, причем стерео, хоть моцарта записывай
типа такого banggood.com/DFPlayer-Mini-MP3-Player-Module-For-A…
примеры скетчей для управления им под ардуино есть
Ну да я и писал, что озвучить сам переключатель режимов можно. Только не понятно как голосовое оповещение будет соответствовать режимам в МР и самом контроллере полётов? Разве что не говорить название режима, а только его номер произносить, ну или как предложили Вы: Моцарта записать! Связи же нет обратной с пультом, а по телеметрии (в радиолинке к прмеру) данные о полётных режимах не передаются. По сути же переключателю до фени как называются режимы и пульту до фени ему что пикать что Моцарта играть лишь бы было чем играть! Тут уже интерпретация звуков от пользователя зависит, а если речь будет вот тут и загвозка в соответствии названий режимов. Или же перестраивать как МР, так и пульт (переключатель) ксждый раз при изменении списка используемых режимов.
если тип модели один например только коптеры - можно задать для всех одинаковый порядок режимов, если разные то под каждую модель своя карточка )
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"45fa2ae03df9550077785987":{"_id":"45fa2ae03df9550077785987","hid":21428,"name":"appolinari","nick":"appolinari","avatar_id":null,"css":"user__m-banned"},"4683d68c3df9550077783119":{"_id":"4683d68c3df9550077783119","hid":24868,"name":"HATUUL","nick":"HATUUL","avatar_id":null,"css":""},"46c0d6d83df9550077781acc":{"_id":"46c0d6d83df9550077781acc","hid":27186,"name":"EduardNN","nick":"EduardNN","avatar_id":null,"css":""},"475d748c3df955007777f4d9":{"_id":"475d748c3df955007777f4d9","hid":29799,"name":"romushock","nick":"romushock","avatar_id":null,"css":""},"48e5b0183df9550077776e98":{"_id":"48e5b0183df9550077776e98","hid":38996,"name":"Andrew_Stick","nick":"Andrew_Stick","avatar_id":null,"css":""},"4c0433b83df9550077760465":{"_id":"4c0433b83df9550077760465","hid":66834,"name":"vldvv","nick":"vldvv","avatar_id":null,"css":""},"4ce2b4963df9550077759da3":{"_id":"4ce2b4963df9550077759da3","hid":75008,"name":"targetorsk","nick":"targetorsk","avatar_id":null,"css":""},"4cfdcc9a3df95500777590d3":{"_id":"4cfdcc9a3df95500777590d3","hid":76076,"name":"alexspy2","nick":"alexspy2","avatar_id":null,"css":""},"4d2ed4283df9550077757835":{"_id":"4d2ed4283df9550077757835","hid":78182,"name":"Covax","nick":"Covax","avatar_id":null,"css":""},"4d4325cb3df9550077756c92":{"_id":"4d4325cb3df9550077756c92","hid":79585,"name":"SovGVD","nick":"SovGVD","avatar_id":null,"css":""},"4d8cf84b3df9550077754683":{"_id":"4d8cf84b3df9550077754683","hid":84319,"name":"PSH","nick":"PSH","avatar_id":null,"css":""},"4d9175043df95500777543a9":{"_id":"4d9175043df95500777543a9","hid":84666,"name":"YRIY","nick":"YRIY","avatar_id":null,"css":""},"4d9a7aac3df95500777540be":{"_id":"4d9a7aac3df95500777540be","hid":85120,"name":"flaaanker","nick":"flaaanker","avatar_id":null,"css":""},"4dac6c603df95500777538c6":{"_id":"4dac6c603df95500777538c6","hid":86272,"name":"Serj=","nick":"Serj=","avatar_id":null,"css":""},"4e71d4e23df955007774e5d8":{"_id":"4e71d4e23df955007774e5d8","hid":99365,"name":"alexeykozin","nick":"alexeykozin","avatar_id":null,"css":""},"4e7f14493df955007774df10":{"_id":"4e7f14493df955007774df10","hid":100377,"name":"Compage","nick":"Compage","avatar_id":null,"css":""},"4eb56c083df955007774c6c0":{"_id":"4eb56c083df955007774c6c0","hid":104468,"name":"ZayFly","nick":"ZayFly","avatar_id":null,"css":""},"4f9c06333df9550077744f31":{"_id":"4f9c06333df9550077744f31","hid":118539,"name":"kren-DEL","nick":"kren-DEL","avatar_id":null,"css":""},"4faee4763df9550077744799":{"_id":"4faee4763df9550077744799","hid":119271,"name":"bark5164","nick":"bark5164","avatar_id":null,"css":""},"5038d0123df95500777409df":{"_id":"5038d0123df95500777409df","hid":124339,"name":"svir","nick":"svir","avatar_id":null,"css":""},"50b5846d3df955007773d43e":{"_id":"50b5846d3df955007773d43e","hid":129976,"name":"Cepera77","nick":"Cepera77","avatar_id":null,"css":""},"50c478ff3df955007773cf09":{"_id":"50c478ff3df955007773cf09","hid":130714,"name":"hippp","nick":"hippp","avatar_id":null,"css":""},"51cf6e553df9550077735006":{"_id":"51cf6e553df9550077735006","hid":161340,"name":"fat_hamster","nick":"fat_hamster","avatar_id":null,"css":""},"51fa457b3df9550077733dca":{"_id":"51fa457b3df9550077733dca","hid":167480,"name":"Epox","nick":"Epox","avatar_id":null,"css":""},"532134753df955007772b46a":{"_id":"532134753df955007772b46a","hid":197648,"name":"Nivel","nick":"Nivel","avatar_id":null,"css":""},"53c6634b3df955007772749a":{"_id":"53c6634b3df955007772749a","hid":204957,"name":"r_aleks","nick":"r_aleks","avatar_id":null,"css":""},"53d4a4b63df9550077727045":{"_id":"53d4a4b63df9550077727045","hid":205470,"name":"gosha57","nick":"gosha57","avatar_id":null,"css":""},"5472692a3df955007772365d":{"_id":"5472692a3df955007772365d","hid":211749,"name":"SpbGrey","nick":"SpbGrey","avatar_id":null,"css":""},"54b656c93df9550077721a96":{"_id":"54b656c93df9550077721a96","hid":216571,"name":"nkarataev","nick":"nkarataev","avatar_id":null,"css":""},"54b69e3f3df9550077721a62":{"_id":"54b69e3f3df9550077721a62","hid":216592,"name":"art_80","nick":"art_80","avatar_id":null,"css":""},"54f416bd3df955007771fef7":{"_id":"54f416bd3df955007771fef7","hid":219493,"name":"Chico1","nick":"Chico1","avatar_id":null,"css":""},"58315ba53df955007770bbca":{"_id":"58315ba53df955007770bbca","hid":262531,"name":"konstantin_sakryukin","nick":"konstantin_sakryukin","avatar_id":null,"css":""},"59cbeba03df955007770317f":{"_id":"59cbeba03df955007770317f","hid":303273,"name":"Alebel","nick":"Alebel","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"4fb3863099707300771076a8","hid":14414,"title":"Переключатель режимов ардупилота","html":"<p><a href=\"http://hobby.msdatabase.ru/project-updates/theresultsofoursurvey/modesw/P5162318.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://hobby.msdatabase.ru/project-updates/theresultsofoursurvey/modesw/P5162318.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 400px\" data-nd-image-orig=\"http://hobby.msdatabase.ru/_/rsrc/1337163935161/project-updates/theresultsofoursurvey/modesw/P5162318.jpg?height=300&width=400\"><img src=\"http://hobby.msdatabase.ru/_/rsrc/1337163935161/project-updates/theresultsofoursurvey/modesw/P5162318.jpg?height=300&width=400\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 75.0000%\"></span></span></a></p>\n<p>При управлении летательным аппаратом с полетным контроллером помимо 4 стандартных каналов управления требуется дополнительный для выбора режима, к этому каналу есть требование чтобы по нему передавалось несколько уровней сигнала, каждому из уровней соответствует определенный режим работы автопилота.</p>\n<p>Однако во всех известных мне пультах многоступенчатые переключатели отсутствуют, поэтому подобную проблему решают двумя способами:</p>\n<ul>\n<li>микширование нескольких переключателей, при этом каждой комбинации переключателей соотвествует какой либо режим</li>\n<li>использование аналогового регулятора “крутилки”</li>\n</ul>\n<!--cut-->\n<p>Комбинации из микшированных переключателей крайне неудобны тем что в ответственный момент начинаешь теряться в управлении и совсем уже нет времени вспоминать нужную комбинацию для режима.<br>\n“крутилки” - ими можно выбирать любой из режимов, но отсутствие дискретности делает их использование крайне неудобным, кроме того невозможно из первого режима переключиться сразу в пятый - необходимо прокрутить все промежуточные режимы. Мне ка начинающему “пилоту” показалось крайне сложным одновременно следить за моделью отслеживать высоту и положение модели и одновременно не теряться выставляя нужную позицию у “крутилки”</p>\n<p>Собственно дальше речь пойдет о том как сделать дискретный переключатель.<br>\nУ многих пультов есть входы управляемые напряжением, в такой цепи включен резистор - одной стороной он подключен к +5 вольт, второй к общему проводу а со среднего контакта снимается управляющий уровень напряжения. В этом случае для того чтобы достичь цели необходим переключатель выдающий в зависимости от положения один из уровней напряжения.</p>\n<p>Предлагаемое решение содержит микропроцессор 5 светодиодов, 5 кнопок и аналоговый выход. Программный код позволяет контролировать переключение на один из режимов и выдавать в соответствии с заложенном в настройки один из уровней выходного напряжения</p>\n<p>эскиз платы и лицевой панели<br>\n<a href=\"http://files.msdatabase.ru/modesw/modesw.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/modesw.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 361px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1332422120864/modesw/modesw.jpg\"><img src=\"http://files.msdatabase.ru/_/rsrc/1332422120864/modesw/modesw.jpg\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 60.1108%\"></span></span></a></p>\n<p>схема - проект пяти позиционного переключателя режимов для переключения режимов автопилота</p>\n<p><a href=\"http://files.msdatabase.ru/modesw/modesw-sh.gif?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/modesw-sh.gif?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 781px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1332484836214/modesw/modesw-sh.gif\"><img src=\"http://files.msdatabase.ru/_/rsrc/1332484836214/modesw/modesw-sh.gif\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 53.5211%\"></span></span></a></p>\n<p>Ардуино - скетч</p>\n<p>/*<br>\ns1 - s5 & LEDS connected to analog pins 1-5<br>\nits numbers from 14 to 18</p>\n<p>*/</p>\n<p>#define AnalogOut 10 // PWM out</p>\n<p>int SelBtn = 14; // default<br>\nint BtnLevels[19];</p>\n<p>void setup()<br>\n{</p>\n<p>Serial.begin(9600);</p>\n<p>//5 of 6 modes</p>\n<p>BtnLevels[14] = 0;<br>\nBtnLevels[15] = 84;<br>\nBtnLevels[16] = 127;<br>\nBtnLevels[17] = 169;<br>\nBtnLevels[18] = 255;</p>\n<p>//force pwm<br>\nTCCR1B = 0x01;<br>\ndelay(100);</p>\n<p>pinMode(SelBtn, OUTPUT);<br>\ndigitalWrite(SelBtn,0);<br>\nanalogWrite (AnalogOut, BtnLevels[SelBtn]);</p>\n<p>}<br>\nvoid loop()<br>\n{<br>\nScanBtns();<br>\ndelay(10);<br>\n}</p>\n<p>void ScanBtns()<br>\n{<br>\nfor (int i=14; i <= 18; i++)<br>\nScanBtn(i);<br>\n}</p>\n<p>void ScanBtn(int ScanPin)<br>\n{<br>\nif (SelBtn != ScanPin)<br>\n{<br>\npinMode(ScanPin, INPUT);</p>\n<p>if (digitalRead(ScanPin)==0)<br>\n{<br>\nSelBtn = ScanPin;<br>\nunsetOther(ScanPin);<br>\nwhile (digitalRead(ScanPin)==0); // hold scaning until relise button<br>\npinMode(ScanPin, OUTPUT);<br>\ndigitalWrite(ScanPin,LOW);</p>\n<p>}<br>\n}<br>\n}</p>\n<p>void unsetOther(int excludePin)<br>\n{<br>\nfor (int i=14; i <= 18; i++)<br>\n{<br>\nif (i != excludePin)<br>\npinMode(i, INPUT);<br>\ndigitalWrite(i,HIGH);<br>\n}</p>\n<p>analogWrite (AnalogOut, BtnLevels[excludePin]);<br>\nSerial.println(BtnLevels[excludePin]);<br>\n}</p>\n<p>Благодаря разгону PWM до 30кгц возможно более быстрое переключение, вместо трех каскадов сглаживания выходного напряжения достаточно одного-двух</p>\n<p>Подключение вместо переменного резистора (“крутилки”) пульта Hobby King 2.4Ghz 6Ch :</p>\n<p><a href=\"http://files.msdatabase.ru/modesw/inside.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/inside.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 400px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1337109746598/modesw/inside.jpg?height=300&width=400\"><img src=\"http://files.msdatabase.ru/_/rsrc/1337109746598/modesw/inside.jpg?height=300&width=400\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 75.0000%\"></span></span></a></p>\n<p>вариант размещения платы:</p>\n<p><a href=\"http://files.msdatabase.ru/modesw/rtl2.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/rtl2.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 400px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1337110069222/modesw/rtl2.jpg?height=300&width=400\"><img src=\"http://files.msdatabase.ru/_/rsrc/1337110069222/modesw/rtl2.jpg?height=300&width=400\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 75.0000%\"></span></span></a></p>\n<p>Три провода снятые с переменного резистора отлично достают до платы установленной снаружи.<br>\nчерез штыревой разъем сверху возможно залить персонализированный вариант скетча или настроек.<br>\nна заднем фоне MissionPlaner в котором отображается что включен режима rtl</p>\n<p><a href=\"http://files.msdatabase.ru/modesw/stab.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/stab.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 400px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1337110350583/modesw/stab.jpg?height=300&width=400\"><img src=\"http://files.msdatabase.ru/_/rsrc/1337110350583/modesw/stab.jpg?height=300&width=400\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 75.0000%\"></span></span></a></p>\n<p>на фото включен режим стабилизации и он же на заднем фоне MissionPlaner</p>\n<p>уровни напряжения для каждой из кнопок задаются в скетче установкой переменных<br>\nBtnLevels[14] = 0; // первая кнопка, 0 вольт<br>\nBtnLevels[15] = 84; // вторая кнопка, настроено на попадание в середину 5 режима<br>\nBtnLevels[16] = 127; // третья кнопка, середина 4 режима<br>\nBtnLevels[17] = 169; // четвертая кнопка, середина 3 режима<br>\nBtnLevels[18] = 255; // пятая кнопка, 5 вольт, 1 режим</p>\n<p>Возможно вы заметили что в планере 6 режимов а переключатель 5-кнопочный. дело в том что пока я разрабатывал эту плату разработчики ардупилота увеличити число режимов до 6, в моем случае я не использую режим 2.</p>\n<p>Для подбора режима используется миссион планер, в разделе калибрвоки стиков отображены длительности импульсов в милисекундах, я подобрал уровни сигнала таким образом чтобы каждая кнопка попадала в середину диапазона и обеспечивала стабильность</p>\n<p>Актуальный вариант схемы, чертеж печатной платы в формате eagle можно скачать у меня на <a href=\"http://hobby.msdatabase.ru/project-updates/theresultsofoursurvey/modesw\" class=\"link link-ext\" data-nd-link-orig=\"http://hobby.msdatabase.ru/project-updates/theresultsofoursurvey/modesw\" target=\"_blank\" rel=\"nofollow noopener\">сайте</a>.<br>\nзы. я заказывал печатную платку на заводе, еще несколько штучек осталось.</p>\n<p>Дополнение 7.01.14<br>\n6 кнопочная версия<br>\nлицевая сторона</p>\n<p><a href=\"http://files.msdatabase.ru/modesw/board_top.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/board_top.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 653px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1389090710148/modesw/board_top.jpg\"><img src=\"http://files.msdatabase.ru/_/rsrc/1389090710148/modesw/board_top.jpg\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 75.0383%\"></span></span></a></p>\n<p>обратная сторона</p>\n<p><a href=\"http://files.msdatabase.ru/modesw/board_bottom.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/board_bottom.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 653px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1389090727526/modesw/board_bottom.jpg\"><img src=\"http://files.msdatabase.ru/_/rsrc/1389090727526/modesw/board_bottom.jpg\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 75.0383%\"></span></span></a></p>\n<p>карбоновая накладка, дюралевые кнопки, пульт hk6ch</p>\n<p><a href=\"http://files.msdatabase.ru/modesw/transmitter.jpg?attredirects=0\" class=\"link link-ext\" data-nd-link-orig=\"http://files.msdatabase.ru/modesw/transmitter.jpg?attredirects=0\" target=\"_blank\" rel=\"nofollow noopener\"><span class=\"image\" style=\"width: 653px\" data-nd-image-orig=\"http://files.msdatabase.ru/_/rsrc/1389090735811/modesw/transmitter.jpg\"><img src=\"http://files.msdatabase.ru/_/rsrc/1389090735811/modesw/transmitter.jpg\" alt referrerpolicy=\"no-referrer\"><span class=\"image__spacer\" style=\"padding-bottom: 75.0383%\"></span></span></a></p>\n<p>Юхимюк Сергей выбрал выбрал такое решение:<br>\n<a class=\"attach attach-img attach__m-sm\" href=\"https://rcopen.com/member99365/media/53a25c7e99707300779f4375\" target=\"_blank\" data-nd-media-id=\"53a25c7e99707300779f4375\" data-nd-image-orig=\"https://rcopen.com/member99365/media/53a25c7e99707300779f4375\" data-nd-image-size=\"sm\"><img class=\"attach__image\" src=\"https://rcopen.com/files/53a25c7e99707300779f4375_sm\" alt width=\"170\" height=\"150\"></a><br>\nЭто позволяет переустанавливать ее при необходимости на другой передатчик.<br>\nСоединительный разъем- обычный мини-джек от стереонаушников, врезанный в корпус,<br>\nс встроенными переключателями, позволяющими при отключении пульта восстанавливать прежнюю цепь крутилки.<br>\n<a class=\"attach attach-img attach__m-sm\" href=\"https://rcopen.com/member99365/media/53a25cf199707300779f4951\" target=\"_blank\" data-nd-media-id=\"53a25cf199707300779f4951\" data-nd-image-orig=\"https://rcopen.com/member99365/media/53a25cf199707300779f4951\" data-nd-image-size=\"sm\"><img class=\"attach__image\" src=\"https://rcopen.com/files/53a25cf199707300779f4951_sm\" alt width=\"170\" height=\"150\"></a><br>\n<a class=\"attach attach-img attach__m-sm\" href=\"https://rcopen.com/member99365/media/53a25d4499707300779f4f3a\" target=\"_blank\" data-nd-media-id=\"53a25d4499707300779f4f3a\" data-nd-image-orig=\"https://rcopen.com/member99365/media/53a25d4499707300779f4f3a\" data-nd-image-size=\"sm\"><img class=\"attach__image\" src=\"https://rcopen.com/files/53a25d4499707300779f4f3a_sm\" alt width=\"170\" height=\"150\"></a><br>\nКорпус использовал от ПДУ подходящего размера, удалив внутренности.<br>\nТабличка нарисована в Фотошопе и напечатана на цветном принтере на чертежной бумаге.<br>\nОбклеил с двух сторон обычным прозрачным скотчем.<br>\n<a class=\"attach attach-img attach__m-sm\" href=\"https://rcopen.com/member99365/media/53a25d8099707300779f5513\" target=\"_blank\" data-nd-media-id=\"53a25d8099707300779f5513\" data-nd-image-orig=\"https://rcopen.com/member99365/media/53a25d8099707300779f5513\" data-nd-image-size=\"sm\"><img class=\"attach__image\" src=\"https://rcopen.com/files/53a25d8099707300779f5513_sm\" alt width=\"170\" height=\"150\"></a></p>\n","user":"4e71d4e23df955007774e5d8","ts":"2012-05-16T10:49:20.000Z","st":1,"cache":{"comment_count":127,"last_comment":"5ae0e046997073007715aac4","last_comment_hid":127,"last_ts":"2018-04-25T20:08:38.000Z","last_user":"4e71d4e23df955007774e5d8"},"views":33204,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}