modesw

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

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

Подключение вместо переменного резистора ("крутилки") хоббикинговского пульта:

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

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

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



6 кнопочная версия
лицевая сторона


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

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


Еще один вариант

SelectionFile type iconFile nameDescriptionSizeRevisionTimeUser
ċ

Скачать
Схема, печатная плата в формате Eagle  162 кб версия 2 15 мая 2012 г., 12:20 Alexey Kozin
Подстраницы (2): relay voltagesensor
Comments