Переключатель режимов ардупилота

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

Однако во всех известных мне пультах многоступенчатые переключатели отсутствуют, поэтому подобную проблему решают двумя способами:

  • микширование нескольких переключателей, при этом каждой комбинации переключателей соотвествует какой либо режим
  • использование аналогового регулятора “крутилки”

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

Собственно дальше речь пойдет о том как сделать дискретный переключатель.
У многих пультов есть входы управляемые напряжением, в такой цепи включен резистор - одной стороной он подключен к +5 вольт, второй к общему проводу а со среднего контакта снимается управляющий уровень напряжения. В этом случае для того чтобы достичь цели необходим переключатель выдающий в зависимости от положения один из уровней напряжения.

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

эскиз платы и лицевой панели

схема - проект пяти позиционного переключателя режимов для переключения режимов автопилота

Ардуино - скетч

/*
s1 - s5 & LEDS connected to analog pins 1-5
its numbers from 14 to 18

*/

#define AnalogOut 10 // PWM out

int SelBtn = 14; // default
int BtnLevels[19];

void setup()
{

Serial.begin(9600);

//5 of 6 modes

BtnLevels[14] = 0;
BtnLevels[15] = 84;
BtnLevels[16] = 127;
BtnLevels[17] = 169;
BtnLevels[18] = 255;

//force pwm
TCCR1B = 0x01;
delay(100);

pinMode(SelBtn, OUTPUT);
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevels[SelBtn]);

}
void loop()
{
ScanBtns();
delay(10);
}

void ScanBtns()
{
for (int i=14; i <= 18; i++)
ScanBtn(i);
}

void ScanBtn(int ScanPin)
{
if (SelBtn != ScanPin)
{
pinMode(ScanPin, INPUT);

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);
}

analogWrite (AnalogOut, BtnLevels[excludePin]);
Serial.println(BtnLevels[excludePin]);
}

Благодаря разгону 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 кнопочная версия
лицевая сторона

обратная сторона

карбоновая накладка, дюралевые кнопки, пульт hk6ch

Юхимюк Сергей выбрал выбрал такое решение:

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


Корпус использовал от ПДУ подходящего размера, удалив внутренности.
Табличка нарисована в Фотошопе и напечатана на цветном принтере на чертежной бумаге.
Обклеил с двух сторон обычным прозрачным скотчем.

  • 33175
Comments
SovGVD

Спасибо =) надо будет себе сделать на досуге

kren-DEL

а не проще сделать на отечественном? просто наставить делителей и всё, как такой вариант?

SovGVD

проще, можно любую переключалку взять и резисторы разным номиналом, но это не так прикольно =)

Covax

Алексей, круто!
А нельзя придумать ответную часть, которая подключалась бы к каналу приемника и при различных значениях pwm вкл/выкл ту или иную цепь?

kren-DEL

не, тут тока прямой канал, без обратной связи) хотя можно намудрить с логикой… и светодиодами, тогда получится тоже самое что и дуиной, но проще)

SovGVD
Covax;bt76044

Алексей, круто!
А нельзя придумать ответную часть, которая подключалась бы к каналу приемника и при различных значениях pwm вкл/выкл ту или иную цепь?

в том же multiwii прописать if-ы для AUX канала по аналогии с переключением режимов, а уже с арудинки рулить цепями, даже при самой плохой аппе (±10 скачет сигнал, ну и если подобная схема даст нужную расрешающую способность) выйдет аж 50 режимов + если поставить таймер (чтобы как бы пакет данных собирался на определенное время), 50 одновременных режимов

Covax

Не, я хочу такую же красивую законченную схему как у Алексея)

alexeykozin

Спасибо всем за отзывы.
кстати переключатель можно реализовать на обычной мини - ардуинке (мало ли у кого без дела валяется) а “навес” из кнопок и светодиодов можно будет крепить напрямую в корпус пульта. может даже симатичнее внешне будет.

по поводу п2к или галетника я в первую очередь подумал, но не решился из эстетических соображений)

ответную часть тоже можно сделать - примеров кода ппм декодера в изобилии
в данном примере логика так как в переключателе п2к - тоесть одновременно лишь один канал активен но если делать не под пилот а “расширение числа каналов” то и на пульте можно сделать отдельные кнопки независимыми

Andrew_Stick

Сергей, если все еще хотите, стукнитесь ко мне в личку 😉

Covax

Я в принципе понимаю как это реализовать в железе и софте, так как делал нечто похожее в учисенном варианте, но вдруг кто-то это уже доделал в реальной жизни!

SovGVD

Люди, а никто случайно не встречал схему подключения ардуинки к trainer порту пульта? Теоретически можно же будет смодулировать любые сигналы на любом канале… или trainer порт не для подключения еще одного пульта?

targetorsk

для уточнения так как прописано
#define AnalogOut 10 // PWM out
то выход схемы подключается к отброшенному центральному проводу, выбранной для замены крутилки?

alexeykozin

да, конечно выход подключается на центальный пин крутилки, у этой же крутилки крайние пины общий и +5

Compage

не осталось ли еще платок? 😃

alexeykozin

есть еще, пишите kozin@mail.ru

targetorsk

как нужно подправить скетч если надо подключить шестую кнопку скажем на 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Мгц генератора?

EduardNN

Я как то так поправил, чтобы добавить шестой режим:

/*
s1 - s6 & LEDS connected to analog pins 1-6
its numbers from 14 to 19

*/

#define AnalogOut 10 // PWM out

int SelBtn = 14; // default
int BtnLevels[20];

void setup()
{

Serial.begin(9600);

//5 of 6 modes

BtnLevels[14] = 0;
BtnLevels[15] = 51;
BtnLevels[16] = 102;
BtnLevels[17] = 153;
BtnLevels[18] = 204;
BtnLevels[19] = 255;

//force pwm
TCCR1B = 0x01;
delay(100);

pinMode(SelBtn, OUTPUT);
digitalWrite(SelBtn,0);
analogWrite (AnalogOut, BtnLevels[SelBtn]);

}
void loop()
{
ScanBtns();
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);
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, BtnLevels[excludePin]);
Serial.println(BtnLevels[excludePin]);
}

Может чего не правильно, т.к. в программировании полный ноль, но работает.
Не понял зачем доп выход?
Режимы по одному каналу управляются.
Доп кнопку повесил на 28ю ногу меги.
Единственное , скорее всего, нужно будет править/подгонять уровни режимов…

alexeykozin

Плиз, кто повторил переключалку на ардуино поделитесь фотками,
очень интересны фотки подключения к ардуино “для чайников”
и дизайнерских решений по корпусному оформлению

EduardNN

Я собрал такой вариант , только руки не дойдут засунуть это в турнигу…

alexeykozin

Пришло несколько идей по усовершенстврованию прошивки
новый скетч в конце странички hobby.msdatabase.ru/project-updates/…/modesw
в архиве

Новое:

  • при замыкании пина D9 на GND после инициализации контролера происходит регулировка уровня выбранного канала в меньшую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать - достигнуто максимальное или минимальное значение
  • при замыкании пина D8 на GND после инициализации контролера происходит регулировка уровня выбранного канала в большую сторону, уменьшение индицируется миганием светодиода если светодиод перестал мигать - достигнуто максимальное или минимальное значение
  • при замыкании пина D9 на GND в момент включения питания происходит сброс параметров на те что указаны в прошивке по умолчанию
  • На вывод D7 можно подключить пьезо - пищалку, при этом переключение каналов подтверждается писком. (Индуктивные пищалки следует зашунтировать защитным диодом параллельно пищалке, анодом на GND)

Это расширение возможностей позволит избежать трудоемкой процедуры калибровки аппаратуры и прошивки

HATUUL

Спасибо за такой проект.Вот мое детище.

За15 минут на коленке сделал.

alexeykozin

Браво!, спасибо за фотку!

HATUUL

Решил пьезик поставить,заодно пофоткать.


lh3.googleusercontent.com/…/20130204_010319.jpg]
Гордиться нечем,просто на заметку.😒
Перемычка,для калибровки.Пьезик,пищит в самый как раз,и не тихо , и не громко.😁
Ещё раз,спасибо за проект!

alexeykozin

а смонтировано проводом который самозачищается при пайке или обычная обмоточная жилка?

HATUUL

ХЗ.Походу обычный эмалированый,мы таким на работе обрывы соединяем.

alexeykozin

а лудишь его как? кислота? аспирин?

svir

здравствуйте. собрал контроллер, заливал ваш некс и на 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. что я мог не то сделать?

alexeykozin

в моем последнем скетче что находится по ссылке внизу страницы в архиве есть возможность подстройки уровней каждой кнопки замыкая перемычками “тюнинг” - попробуйте подстроить под ваш диапазон.
если уровень “скачет” - тут возможно что плохое питание платы или неверно выбраны резисторы - конденсаторы в выходном фильтре. я в последнее время ставлю только 2 контура из трех резисторы 3килоома кондеры по 2,2мкф

alexeykozin

вот прямая ссылка, внизу описан новый функционал и архив со скетчем hobby.msdatabase.ru/project-updates/…/modesw

svir
alexeykozin;bt92072

вот прямая ссылка, внизу описан новый функционал и архив со скетчем hobby.msdatabase.ru/project-updates/…/modesw

Благодарю, прочитал, теперь появился такой вопрос , где находится на атмеге пин D9 и D8, на схеме их вроде нет или не нашёл их а по номерам ног на атмеге вроде не подходят?

EduardNN

Посмотри схему\мы на ардуинки

D8 --> PB0(12)
D9 --> PB1(13)

HATUUL
alexeykozin;bt92041

а лудишь его как? кислота? аспирин?

Тупо 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 висит.

alexeykozin

распиновки ардуинок hobby.msdatabase.ru/project-updates
желтая заливка- нумерация цифровыходов

любые предложения и тем более наработки по коду приветствуются!

Serj=

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

alexeykozin

а, что это за корпус? фултяр от sd-card?

Serj=

Спасибо!
От СF, он без перегородок внутри.

romushock

“очень интересны фотки подключения к ардуино “для чайников””

ОООО, их есть у меня!

alexeykozin

неожидано эффектно с “линзами” вышло!
кстати я забыл отписаться что на сайте теперь выложен скетч и под 5 и под 6 кнопок.
подправил маленький недочет который приводил к тому что если на 6 кнопочный скетч повесить не все светодиоды, то режим перещелкивался на неподключенный канал

svir

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

romushock

Ну вот, есть чем похвалиться…

alexeykozin
romushock;bt94909

бесподобно! как родной вживлен

romushock
alexeykozin;bt94912

бесподобно! как родной вживлен

Спасибо за комплимент, идею и помощь…
Изнутри оно выглядит так:


Пришлось срубить две стойки для саморезов, но овчина стоила того.
Спасибо, Лёш!

romushock

Да, забыл сказать, что скетч пришлось подправить в плане частоты пищалки

tone(SoundOut, 2000, 150);
delay (200);
tone(SoundOut, 1000, 200);

и значений

EEPROM.write(1, 123); //mark eeprom inited
EEPROM.write(14, 0);
EEPROM.write(15, 84);
EEPROM.write(16, 127);
EEPROM.write(17, 160);
EEPROM.write(18, 190);
EEPROM.write(19, 255);
}

иначе пищало рвано и планнер не определял 2 положения - 4е и 5е.

romushock

Не удержался, грешник, пошёл хвастать

alexeykozin

так положения можно подстраивать замыкая пинцетом контакты тюнинга

alexeykozin

поправил
tone(SoundOut, 2000, 150);
delay (200);
tone(SoundOut, 1000, 200);

EEPROM.write(1, 124); //mark eeprom inited
EEPROM.write(14, 0);
EEPROM.write(15, 84);
EEPROM.write(16, 127);
EEPROM.write(17, 160);
EEPROM.write(18, 190);
EEPROM.write(19, 255);

теперь должно нормально сохранять перенастроенные значения

romushock
alexeykozin;bt95418

поправил
tone(SoundOut, 2000, 150);
delay (200);
tone(SoundOut, 1000, 200);

EEPROM.write(1, 124); //mark eeprom inited
EEPROM.write(14, 0);
EEPROM.write(15, 84);
EEPROM.write(16, 127);
EEPROM.write(17, 160);
EEPROM.write(18, 190);
EEPROM.write(19, 255);

теперь должно нормально сохранять перенастроенные значения

Пасибки 😃

hippp

Нарисуйте, пожалуйста, схему подключения шести кнопок и светодиодов к Ардуине мини.

Compage
hippp;bt97891

Нарисуйте, пожалуйста, схему подключения шести кнопок и светодиодов к Ардуине мини.

пожалуйста:
orig

выходы А4 и А5 находятся около атмеги на поверхности платы ардуино.

hippp
Compage;bt97893

пожалуйста:

выходы А4 и А5 находятся около атмеги на поверхности платы ардуино.

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

Compage
hippp;bt97895

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

Я, например, беру на ебее.
Там продают наборы резисторов и конденсаторов ряда Е24, любых размеров - самые популярные 0603, 0804, 1206,
Также там есть вся остальная популярная smd-рассыпуха.

hippp

Собрал переключатель режимов автопилота по вашей схеме. При его использовании на экране пульта Turnigy 9x вижу, что показания плавают в пределах десятых долей. Допустим второй канал скачет от 23,2 до 23,8 единиц. Так и должно быть? Или что-то со сглаживающим каскадом не в порядке.

И еще. На вашем сайте написано, что можно разогнать PWM до 30Гц и ускорить переключение режимов. А как это сделать на практике?

P.S. Переключатель сделал на основе Arduino Mini.

alexeykozin

а что за единицы ? каков максимальный диапазон? если пара процентов от максимального диапазона то это нормально, если больше то нужно проверять каскады сглаживания -немного увеличивать номинал резистора и конденсатора и проверить что питание стабильное 5 вольт

alexeykozin

резисторы и смд конденсаторы продаются наборами по 20-30 штук каждого номинала, дешевле всего в китае и наебее.
в москве богатый набор резисторов 0603 может стоить до 1000р в китае 10-15 долл, но ждать 60 дней

hippp
alexeykozin;bt99675

а что за единицы ? каков максимальный диапазон? если пара процентов от максимального диапазона то это нормально, если больше то нужно проверять каскады сглаживания -немного увеличивать номинал резистора и конденсатора и проверить что питание стабильное 5 вольт

Турнига показывает на своем экране положение стиков и крутилок в процентах - от “-100” до “+100”. Диапазон дребезжания моего переключателя менее одного процента. Я опасался, что это может сказаться на стабильности переключения режимов Ардупилота. Но вы написали, что это нормально.

А как разогнать PWM до более высокой частоты?

alexeykozin

крайние модификации:

  1. в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф, третий каскад не требуется
  2. встроил переключалку в передатчик с 3,3 вольтовым питанием.
    тупо подал эти 3,3 вольта на питание ардуинки
    единственное пришлось существенно уменьшить номиналы шунтирующих светодиоды резисторов - иначе светятся тускло
ZayFly

Здравствуйте. Подскажите пож. а нельзя ли это чудо воплотить на arduino nano v3.0?

alexeykozin

можно

vldvv

Повторил ненеразмышляя, вот мой вариант. Автору спасибо.

Cepera77

Спасибо Алексей за замечательную идею!
Реализацию я правда изменил с целью уменьшения компонентов и всяческих затрат.
В моем исполнении в данном девайсе трудится ATtiny13. 3 кнопки, 6 команд
orig
Первые три позиции выбираются кратковременным нажатием на соответствующие кнопки 1, 2 или 3.Прозвучит короткий сигнал, можно отпустить. Диодик моргает редко.
Остальные 3 режима 4, 5, и 6, выбираются длительным нажатием(~1,5 сек) на кнопки 1,2 и 3 соответстванно. Звучит двойной сигнал. Диодик моргает часто.
orig
orig
На все про все, вместе с написанием кода потрачено день времени, самое сложное для меня было согласовать кнопочки с дырочками в корпусе. Работает исключительно, а главное уменьшился риск краша из за неверно выбранного режима.
Вот здесь всё: платы, схемы, исходник в CodeVision, hex файл итп rcopen.com/files/525109e59970730077846dbb

alexeykozin

кстати возможно на три выхода повесить 6 светодиодов. одни анодом на плюс другие анодом на минус
выдавая логический ноль или единицу зажигать один из диодов. а когда вывод в состоянии чтения- ни один не горит -читается кнопка.
для меня выбор тини или атмега не стоит цена атмеги 100 и их всегда в достатке…
на буззер если он катушечный надо ставить обратный диод чтоб самоиндукцией не выбило транзистор

Cepera77

светодиоды действительно можно повесить! а смысл? текущий режим прекрасно распознается, частотой моргания диодика, а вот увеличивать кол-во компонентов не хотелось бы.

для меня выбор тини или атмега не стоит цена атмеги 100 и их всегда в достатке…

Вам везет!😃

на буззер если он катушечный надо ставить обратный диод чтоб самоиндукцией не выбило транзистор

Вероятно вы правы, однако такая пищалка(без диода) стоит у меня на калитке, пищит мелодии уже лет 10, и пока транзистор жив.

alexeykozin
Cepera77;bt108765

Вам везет!😃

вот тут недорого, если брать хотябы десяток то получается меньше сотни за штуку с учетом доставки
www.elitan.ru/price/index.php?seenform=y&find=atme…

alexeykozin

дополнил статью свежими фотками 6 кнопочной версии,
всех с рождеством.

alexspy2
vldvv:

Повторил ненеразмышляя, вот мой вариант. Автору спасибо.

Платкой не поделитесь?

YRIY

Подскажите пожалуйста Я заказал в таком корпусе DIP28, который удобно паять обычным паяльником… Но у меня Нет кварца на 16МГц… есть на 12МГц какой кварц можно ещё на него установить? Читал что у него есть встроенный на 8МГц для чего тогда внешний. Скинте пожалуйста качественную схему … здесь всё неразборчиво невидать нумерацию выв.

alexeykozin

если цель экономия - купите 5шт универсальных ардуино контроллеров за 441 руб
(81 руб шт) с бесплатной доставкой
www.aliexpress.com/item/…/1013823257.html

YRIY
alexeykozin;bt124245

если цель экономия - купите 5шт универсальных ардуино контроллеров за 441 руб
(81 руб шт) с бесплатной доставкой
www.aliexpress.com/item/…/1013823257.html

Алексей цель не в экономии … Ну Куплю я их 5шт. одну использую для переключалки … а остальные в ящик … СМЫСЛ. Для вас экономней вы их реализуете раз вы занимаетесь сборкой и изготовлением моделей… вы же должны понимать моделистов… которые собирают для себя. Мне нужен совет… по предыдущим вопросам. ДА и всё равно наверное ардуино нужно будет перепаивать для переключалки… а такой чип обычным паяльником моделиста не перепаять.

fat_hamster

ламерски-преламерский вопрос 😉 (ну не силен я в электричестве)

в цепочке, которая на выходе (RC) - конденсаторы какие? не электролиты ж, а емкость 3.3 мкф, я таких емкостей просто не-электролитичных не встречал (22 пикофарад, 100 нанофарад - были)

а то вчера на макетке собрал по мотивам свой вариант, надо собрать и похвастаться, но сначала надо за детальками

alexeykozin

именно микрофарады, можно полярные

r_aleks

готовые перключалки не продаете?

YRIY
r_aleks;bt125865

готовые перключалки не продаете?

Да вот их продукция заказываете… hobby.msdatabase.ru/production_main/product

PSH

Господа, прошу помощи! Решил соорудить данный мод на основе arduino Pro Mini(5V) на Turnigy 9XR PRO и вот какая беда: померял напряжение на резисторе, на место которого хотел поставить перключалку, а он мне показывает 3.3V, померял остальные два - та же песня!
У меня слабые познания в электронике, но что-то мне подсказывает что моя пятивольтовая ардуинка тут не заработает))))
Переключалку планировал по этой схеме:
orig

Вопрос: можно ли внести какие нибудь изменения в схему или мне нужна 3.3V версия Ардуино?

Если возможен вариант всё же оставить 5V ардуинку, то можно сразу схемку поправить?!?

Заранее благодарен!!!

alexeykozin

как то давно подключал к 3.3 вольтовой аппе.
как есть вместо 5 вольт
вроде все работало…
хотя наверное зависит от фьюзов ардуины. бывает что в случае просадки напряжения - стоит детектор и перезагрузка.

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

PSH

Алексей, спасибо за такой оперативный ответ!!!

alexeykozin;bt127661

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

Если не сложно, можно всё что вы сказали выше исправить на схеме, думаю это будет полезно многим , т.к. аппы 9XR\9XR pro потихоньку вытесняют 9Х, а данный мод не утратит своей актуальности на новых версиях тоже!!!

alexeykozin

если ардуинка готовая то как правило там есть вход питания от батарей на котором значится 9-12 вольт.
найти место где после выключателя появляется напряжение батареи и завести питание на ардуинку
с выхода который у вас подписан как выходPWM а фактически является выходом аналогового уровня нужно последовательно включить два резистора, точка между резисторами будет являться выходом сигнала - ее подать вместо среднего контакта резистора-крутилки
крайнюю ногу второго резистора подключить на gnd
занчения сопротивлений выбрать так чтобы максимум был 3.3 вольта. тоесть делитель должен быть полтора раза.
грубо говоря сумарное сопротивление двух резисторов должно быть 5ком , который между “выходомPWM” и входом крутилки 1,8ком, а тот который от входа крутилки на GND 3.3ком

PSH

Так?

alexeykozin

ну наверное можно и так,
разве что проверить чтобы не слишком медленно переключались режимы,
в противном случае выкинуть один каскад rc например r9 и с3

Nivel

Собрал свою версию переключателя на ардуинке для встраивания в аппаратуру от коптера китайского происхождения Cheerson CX-20.
orig
orig
Напряжения питания, кстати у меня 3.3 В, все работает без проблем. Проблема вылезла в другом.
На каналах крутилок стоит непонятный мне алгоритм, по которому после первой подачи питания, при превышении крутилкой середины своего диапазона, реальное положение крутилки перестает иметь значение, а на выходе формируется максимальный сигнал. Снимается этот режим кратковременной установкой крутилки в верхнее положение, после чего сигнал становится адекватным ее положению. С переключателем это выглядело так: после подачи питания, при нажатии на кнопки 1-3, сигнал канала соответствовал нажатой кнопке, а при нажатии на кнопки 4 и 5, я получал на выходе максимальный сигнал, который должен был появляться только после нажатия на кнопку 6, но после хотя бы кратковременного нажатия шестой кнопки и четвертая с пятой начинали работать корректно.

www.youtube.com/watch?v=YcH1hzj9MuQ

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

Информация от Алексея Козина для тех, кто захочет повторить данную схему в аппаратуре Cheerson CX-20 или имеющих такую же проблему. Необходима правка кода:

Внутри

в процедуре setup
найдите такие строки
digitalWrite(SelBtn,0);

analogWrite (AnalogOut, BtnLevel(SelBtn));

и вставьте между ними чтоб получилось так
digitalWrite(SelBtn,0);

analogWrite (AnalogOut, 255); //максимальный сигнал
delay (3000); //задержка 3 секунды

analogWrite (AnalogOut, BtnLevel(SelBtn));

В результате получилось так

www.youtube.com/watch?v=tgQ3NTX4Djk

Алексей, громадное Вам спасибо за этот проект и за помощь в его реализации.

Serj=

Китайцы сделали переключатель goodluckbuy.com/apm-flight-controller-flight-mode-…

Epox

Не могу найти схему к сетчу MODESW2.
Подскажите как осуществляется подстройка уровней каналов без программатора.

alexeykozin

замыканием D8 если (не ошибаюсь) минус
или D9 плюс на массу при выбранном канале

если ошибаюсь значит наоборот.
при настройке канал начинает мигать светодиодом

Epox
alexeykozin;bt130138

замыканием D8 если (не ошибаюсь) минус
или D9 плюс на массу при выбранном канале

Спасибо за ответ!!! Буду делать…

SpbGrey

Ребята! Вы молодцы! У меня к Вам будет великая просьба написать программку для ардуинки чтобы надписи на экран от от NOKIA5110 выводились. У вас так красиво все получается, а у меня валяются два экрана… Вот бы один прилепить, тогда вообще все будет прекрасно… И стоит 150 руб. с доставкой… Я, к сожалению, в программировании совсем не силен…
www.ebay.com/itm/…/351096808460

Epox
SpbGrey;bt130622

Ребята! Вы молодцы! У меня к Вам будет великая просьба написать программку для ардуинки чтобы надписи на экран от от NOKIA5110 выводились. У вас так красиво все получается, а у меня валяются два экрана… Вот бы один прилепить, тогда вообще все будет прекрасно… И стоит 150 руб. с доставкой… Я, к сожалению, в программировании совсем не силен…
www.ebay.com/itm/…/351096808460

Тогда уж лучше выбрать дисплей с сенсором чтобы кнопки не воротить.

SpbGrey
Epox;bt130623

Тогда уж лучше выбрать дисплей с сенсором чтобы кнопки не воротить.

Можно и с сенсором, но для начала хоть такой - самый доступный бы нарисовать… Сенсоры на маленьком экране, мне кажется, не совсем удобны…
Вот тут zelectro.cc/nokia5110_module_arduino есть какое-то описание подключения и скетч…

У меня все готово 😃

gosha57
svir;bt94885

здравствуйте. у меня получилось исправить не правильные уровни сигнала на выходе, …, надо калибровать ещё и крутилки, откалибровал их и всё сразу заработало…или я один такой.

Т.е. сначала калибруем в МП (ДО перепайки управляющего вывода с движка резистора крутилки на “S” платки) , а потом перепаиваем и в МР назначаем соответствующие режимы ? 😒
У меня в Нове диапазон переключения частот от 1001 до 1087 с “некоторым шагом” МП показывает, при управлении с платки, а для переключения надо от 1000 до 2000 … 😵

Cepera77;bt108735

Спасибо Алексей за замечательную идею!
Реализацию я правда изменил с целью уменьшения компонентов и всяческих затрат.
В моем исполнении в данном девайсе трудится 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 сигналы на канале.
С уважением

bark5164

Можно ли использовать светодиоды со светодиодной ленты? Какие резисторы будут нужны?

nkarataev

Друзья, кто нить подключал к TARANIS PRO? откуда брали питалово? я нашел +/- на плате с выключателем у разъема. Но когда аппа выключена идет шум на динамик, видимо куда то не туда подрубился, а больше найти не могу ((( подскажите плиз

flaaanker
alexeykozin;bt101835

крайние модификации:

  1. в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф, третий каскад не требуется

Делаю мод под тараньку с питанием 3,3в.
Под рукой нашлись только 0,5 мкф (и 3,3 мкф).
Правильно ли я понимаю - что бы получить те же параметры фильтра надо порядка 10к? И можно ли в данной ситуации увеличить сопротивление? Или лучше оставить 3к и 3,3 мкф?

flaaanker
nkarataev;bt132836

Друзья, кто нить подключал к TARANIS PRO? откуда брали питалово? я нашел +/- на плате с выключателем у разъема. Но когда аппа выключена идет шум на динамик, видимо куда то не туда подрубился, а больше найти не могу ((( подскажите плиз

А разве нельзя взять питание со слайдера (или крутилки), вместо которого подрубаемся? Там же и “+3,3в” и “-” и “сигнал” - я так и собирался воткнуть.

flaaanker

…основной функционал работает, но вот калибровка ни в какую…
Сорри - непропай в одном месте. Всё работает как часы ))

flaaanker

Спасибо Алексей!
Оснастил переключателем Taranis. Подключился вместо “слайдера”. Питание 3,35в.
Осталось заказать надпись на “рокале” для вклейки под светодиодики.




flaaanker

ну вот и результат:

alexeykozin

Спасибо за видео!

art_80

Поддерживаю Павел Кулешов (SpbGrey), тоже бы хотелось, чтобы вместо светиков между кнопками расположился OLED дисплей 128*64. Допустим по краям напротив кнопок высвечиваются аббревиатуры режимов, а в центре экрана максимально крупно написан сам выбранный режим. В коде я не бельмеса, но дисплей уже заказал 😃. По мере возможности пытаюсь изучать программирование, но не могу найти модель экрана OLED 128*64 I2C под Протеус, чтоб проверять методом тыка хотя бы. Был бы очень рад, если бы спецы подсказали вектор движения, возможно через год-другой получилось бы реализовать задумку)) А тому, кто пришлёт готовый код под это дело - вышлю такой дисплей дропшипом!

Chico1

Друзья, может кто направит на путь. как подключить плату Алесея к аппаратуре Spektrum DX6i

appolinari

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

alexeykozin

на мой взгляд это реализуемо технически но неудобно.

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

Привет всем! Рассмотрел все варианты и делал по своему! У меня получилось так drive.google.com/folderview?id=0B5_6QQicLD5fNmlneE…

alexeykozin

большое спасибо за реализацию и подробный фототчет!
я тем временем на основе еще одной переключалки сделал расширитель числа каналов,
причем там декодером ардушка и поэтому можно не просто каналы а целые программы последовательности действий
примеры кода как реализовать типовые вещи уже есть
присоединяйтесь к обсуждению rcopen.com/blogs/99365/21274

art_80

Всем привет! После продолжительных исследований программирования наконец-то готов и мой вариант переключателя. Программа написана на баскоме, т.е. с нуля. В устройстве используется графический дисплей OLED 128*64.
Немного внутренностей:

Отверстие в корпусе пульта и панелька из оргстекла делались на самопальном чпу-станке.
Трепанация Тараниса
А тут как это работает:

Менюшку с выбором типа летательного аппарата сделал просто так, может пригодится, когда начну осваивать самолёты и полётные режимы будут другими. Пока у меня только коптер, поэтому после выбора того или другого программа попадает в коптерный список режимов. Это опционально и всегда можно удалить.
Также есть вариант программы под символьный дисплей 16*2, но встроенного решения с ним уж точно не получится))

konstantin_sakryukin

Доброго здоровья!
Извините, что снова поднимаю тему.
По схеме переключателя режимов (5 режимов)… там на входе (от разъёма JP1) конденсаторы по 3.3 мФ? А то с моим разрешением экрана я только догадываюсь о номиналах. Резисторы вроде угадал - 3 кОм.

Или же лучше использовать другие номиналы?
крайние модификации:

  1. в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф, третий каскад не требуется
alexeykozin

очень хорошо.

крайние модификации:

  1. в качестве сглаживающих каскадов хорошо себя показала rc цепочка из двух каскадов номиналами 4,7к и 1 мкф,
konstantin_sakryukin

ОК. Понял.

konstantin_sakryukin

Доброго здоровья!
Тут ещё вопрос всплыл.
Все версии переключателя режимов подключаются вместо крутилки.
Однако, на моей аппаратуре не могу привязать крутилку к пятому каналу.
Есть только возможность использовать любой трёхпозиционный переключатель и можно сделать комбинацию из двух переключателей.
Т.е. один из двухпозиционных будет работать как шифт и один из трёхпозиционных как переключатель режимов.
При таком раскладе заблудиться в ответственный момент очень легко!
Как можно использовать последнюю версию кнопочного переключателя режимов в моей ситуации?
Собираю переключатель режимов на Arduino Pro Mini.
Аппаратура RadioLink AT9 (прошивка 1.5.6 (AT9S)).

alexeykozin

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

konstantin_sakryukin
alexeykozin;bt155816

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

Проверил. Нет не аналогичен. Ситуация с переключателями такая: они через резистор 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 кОМ) уходят куда-то на контроллер.

konstantin_sakryukin

Доброго здоровья!
Извините пожалуйста, ну задёргал я уж людей со своим переключателем режимов!
Есть ещё вопрос.
На аппе AT9 стоит контроллер такой же как и на F4BY.
Так как многие уже знакомы с этим АРМ то пишу в этой теме.
Исходя из исследований приведённых постом выше, понятно что цифровые выводы контроллера коротятся через резистор на GND.
А если я вместо замыкания на GND подам логический 0 с Arduino или с любой другой платы, то это будет то же что и замыкание на GND для контроллера?
Быть может только 0 подавать не через штатный резистор, а обойдя его (ну или перемычку впаять), так же, да?
Просто хочу обойтись без лишних ключей или того хуже - оптронов. И при этом нужно не спалить ни чего в аппе.

konstantin_sakryukin

Доброго здоровья!
Всё! Сделал переключатель 6-и режимов полёта под RadioLink AT9/AT9S.
Работает! На экране АТ9 отображается всё правильно.
Сюда можно выложить схему и скетч для Arduino?
Или заводить свой дневник?

alexeykozin

да, можно, приветствуется, но если хотите можно и свой дневник

konstantin_sakryukin

Не, дневник пока не буду заводить.
Когда наберу критический объём информации о своём детище (имею в виду целиком гексакоптер), вот тогда заведу.
Пока здесь кину ссылку на другую ветку этого же форума, где я уже выложил схему и скетч. А чуть позже подготовлю нормальную схему и подробное описание настроек в аппе плюс места подключения сфотографирую.

Ссылка: 6-и позиционный переключатель полётных режимов АРМ для аппаратуры RadioLink AT9/AT9S).

alexeykozin

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

кроме того при инициализации можно установить подтяг входов к плюсу, при этом не нужно будет резисторов по входу

konstantin_sakryukin

Ну в принципе да, можно убрать резисторы-подтяжки и использовать встроенные в ардуино.
А вот с digitalRead(Ax), что-то у меня не получилось в ходе экспериментов.
Но всё же попробую ещё раз.

konstantin_sakryukin

Доброго здоровья!
Ну вот и готов полностью переключатель режимов для 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 мм подточил корпус для вывода шлейфа подключения переключателя режимов.

Вот вид на шлейф:

konstantin_sakryukin

Место подключения переключателя режимов APM в RadioLink AT9/AT9S.
Штатные разъёмы временно убрал (для фото сессии) для лучшего обзора.
Так же видно место откуда было взято питание 3.3 Вольта (красный и синий провода).

попробовал собрать по схеме для AT9/AT9S. в МП переключается только по трем позициям. в чем косяк? как исправить?

konstantin_sakryukin
vovka1021;bt156374

попробовал собрать по схеме для 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, главное, чтобы аппа выдавала правильный процент для каждого режима, а правильные названия можно настроить потом, когда из практики станет понятно какие режимы вообще нужны.

Константин Сакрюкин, разобрался, проценты были не те. как бы еще озвучку сделать?

konstantin_sakryukin
vovka1021;bt156399

разобрался, проценты были не те. как бы еще озвучку сделать?

Вы имеете в виду озвучку как у Тараниса?
Т.е., когда голосом человеческим молвит?
Для AT9 наверное это будет сложно сделать не покопавшись в её прошивке!
Что касается именно самого переключателя режимов и его озвучки, то он не знает какой режим включен.
Он просто заменяет собою два тумблера имитируя их состояния, а вместо механического клац-клац, просто попискивает зумером.
Можно конечно поставить и микруху туда типа ISD1416, но при смене режима в MissionPlanner придётся перезаписывать и озвучку режимов на кнопочном переключателе. А заставить Arduino управлять этой ISD не трудно.

Alebel
konstantin_sakryukin;bt156404

Для AT9 наверное это будет сложно сделать не покопавшись в её прошивке!

Для Radiolink AT9S - оказалось очень просто. Без всяких танцев и бубнов… Переписываете на пятый канал крутилку и все работает как часы.

konstantin_sakryukin
Alebel;bt158721

Переписываете на пятый канал крутилку и все работает как часы.

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

alexeykozin

озвучка делается элементарно на ардуине + дешевый звуковой модуль + сд карточка с требуемыми мелодиями или голосами.
по событию ардуина (можно дописать прямо в переключалку) передает по сериалу команду в звуковой модуль на воспроизведение определенного трека
модуль проигрывает, причем стерео, хоть моцарта записывай
типа такого banggood.com/DFPlayer-Mini-MP3-Player-Module-For-A…
примеры скетчей для управления им под ардуино есть

konstantin_sakryukin

Ну да я и писал, что озвучить сам переключатель режимов можно. Только не понятно как голосовое оповещение будет соответствовать режимам в МР и самом контроллере полётов? Разве что не говорить название режима, а только его номер произносить, ну или как предложили Вы: Моцарта записать! Связи же нет обратной с пультом, а по телеметрии (в радиолинке к прмеру) данные о полётных режимах не передаются. По сути же переключателю до фени как называются режимы и пульту до фени ему что пикать что Моцарта играть лишь бы было чем играть! Тут уже интерпретация звуков от пользователя зависит, а если речь будет вот тут и загвозка в соответствии названий режимов. Или же перестраивать как МР, так и пульт (переключатель) ксждый раз при изменении списка используемых режимов.

alexeykozin

если тип модели один например только коптеры - можно задать для всех одинаковый порядок режимов, если разные то под каждую модель своя карточка )