Activity

Управление через один канал несколькими нагрузками (да и вообще самолетом)

Сама идея и код стырен hobby.msdatabase.ru/project-updates/…/modesw, :
передатчик инплантируется Arduino , один из выходов которой , генерирующий ШИМ (0-255) подключается вместо переменного резистора (крутилки) на передатчике, получается этакий импульсный преобразователь . Чем “выше” ШИМ тем больше напряжение подаваемое на вход АЦП передатчика. К Arduino подключаются в свою очередь, кнопки, переключатели, переменные резисторы значения которых и определяют частоту ШИМ на выходе платы.
На принимающей стороне Ardu подключается к соответствующему каналу приемника, задача платы определить ширину входящего импулса и в зависимости от его значения подключить соответсвующую нагрузку, а использовани функции myservo ,
позволяет управлять сервоприводами.
Исходный код, в части измерения длины импульсов, я до конца так и не постиг.
Но переделать автоматы преключения if () {} под свои хотелки получилось.
Кроме этого хотелось получить на принимающей стороне индикацию режимов работы посредством мигающих светодиодов. Чтобы не подвешивать контроллер вместо delay() были использованы прерывания по совпадению на таймере Т2. Код был как обычно стырен arduino.ru/forum/…/preryvaniya-po-taimeru?page=1
Целью проекта является полной переход на управление моделью по одному каналу, однако для начала я перевел на один канал управление полетными режимами автопилота FY -41rcopen.com/forum/f90/topic316066
На Тх скетч:
#define AnalogOut 3// PWM out, с этого пина снимаем ШИМ 0- //255 т.е напряжение
#define AP_RC_ABM_BUTTON_PIN 7
#define AP_LRP_BUTTON_PIN 6
#define AP_NAV_BUTTON_PIN 5
#define LED_PIN_1 10 //red
#define LED_PIN_2 9 //Blye
#define LED_PIN_3 13 // Green
int SelBtn = 1; // default
int BtnLevels[5]; //обьявляем массив
boolean RCABM;
boolean LRP;
boolean NAV;
volatile int cntr;
volatile int cntr2;
int LEDBLINK;
void setup()
{
cntr=0;
TIMSK2 &= ~(1<<OCIE2A); // запрещение прерывания по совпадению таймера/счетчика Т2
TCCR2B = (1<<CS22)|(1<<CS21)|(0<<CS20); // прескалер на 256
TCCR2A &= ~((1<<WGM22) | (1<<WGM20)); // Режим работы таймера/счетчика устанавливаю в
TCCR2B |= (1<<WGM22); // Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); // Выбор источника синхронизации таймера если
// AS2=0 от системного генератора
OCR2A = 250; // срабатывание таймера 16000000/256/250=250 раз в секунду
TIMSK2 |= (1<<OCIE2A); //Разрешение прерывания по совпадению.
// Serial.begin(9600);
BtnLevels[1] = 0; //RC 1000
BtnLevels[2] = 40; // ABC 1250
BtnLevels[3] = 80;// NAV 1500
BtnLevels[4] = 255;// LRP 1750

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

pinMode(AP_RC_ABM_BUTTON_PIN, INPUT_PULLUP);
pinMode(AP_LRP_BUTTON_PIN, INPUT_PULLUP);
pinMode(AP_NAV_BUTTON_PIN, INPUT_PULLUP);
pinMode (LED_PIN_1, OUTPUT);
digitalWrite(LED_PIN_1,LOW);
pinMode (LED_PIN_2, OUTPUT);
digitalWrite(LED_PIN_2,LOW);
pinMode (LED_PIN_3, OUTPUT);
digitalWrite(LED_PIN_3,LOW);
}

void loop()
{
RCABM = digitalRead(AP_RC_ABM_BUTTON_PIN);
LRP = digitalRead(AP_LRP_BUTTON_PIN);
NAV = digitalRead(AP_NAV_BUTTON_PIN);

if (!RCABM) { SelBtn=1; digitalWrite(LED_PIN_1,LOW);digitalWrite(LED_PIN_2,LOW);digitalWrite(LED_PIN_3,LOW);}//RC 0 не горит
if (RCABM && LRP&& NAV ) { SelBtn=2; digitalWrite(LED_PIN_1,LOW);digitalWrite(LED_PIN_2,LOW);digitalWrite(LED_PIN_3,HIGH);}//ABC 80 зеленый
if (!NAV&& LRP&& RCABM) { SelBtn=3; digitalWrite(LED_PIN_1,LOW);digitalWrite(LED_PIN_2,HIGH);digitalWrite(LED_PIN_3,LOW);}//NAV 160 голубой
if (!LRP && RCABM) { SelBtn=4; digitalWrite(LED_PIN_1,HIGH);digitalWrite(LED_PIN_2,LOW);digitalWrite(LED_PIN_3,LOW);}//LRP 240 красный

analogWrite (AnalogOut, BtnLevels[SelBtn]); // то пишется соответ знач массива

/*
Serial.print (“RCABM:”);
Serial.print(RCABM);
Serial.print (“\\LRP:”);
Serial.print(LRP);
Serial.print (“\\NAV:”);
Serial.println(NAV);
Serial.print("BtnLevels[SelBtn]😊;
Serial.println(BtnLevels[SelBtn]);
Serial.print(“SelBtn:”);
Serial.println(SelBtn);
//Serial.print(“ch11:”);
//Serial.println(ch11);

delay(3000);

*/}
ISR(TIMER2_COMPA_vect)
{
cntr++;
if (cntr >50 ) { // через каждые 125 вызовов прерывания перекидываем состояние светодиода
digitalWrite(LED_PIN_3, !digitalRead(LED_PIN_3)); //&& cntr2<LEDBLINK*2
cntr=0;
cntr2++; }
if (cntr2>LEDBLINK*2) { digitalWrite(LED_PIN_3, LOW); }
if (cntr2>LEDBLINK*2+4) { cntr2=0; }

}

kx-201

Есть настройки для нее, Вова такие ставит:

Код:
Exposure: AWB Sharpness ++ Exposure: Lower 1/3 (this will help fix the dark ground problem) Meter mode: Foreground Dynamic range bias ++ (this will help fix the dark ground problem) Dynamic range limit +++++
Вот все хорошо, но “+” это сколько? Может сообразит кто… 😃

го-про

andriver - расскажи про подлючение камеры (те где разъем брал, как усб воткнул и вообще фотку бы установи) и какой там майджик нужно делать каждый раз что бы лайф видео шло?
Сложного ничего нет. Главное найти разьемчик мини джек 2.5 мм на четыре контакта буквой Г. Что-то типа этого.

Второй шнурочек я взял обычный мини ЮСБ. Сразу где кончаеться сам разьем я снял обплетку с него и обрезал сигнальных два провода. Оставил только питание ЮСБ +5 вольт. Обычно это красный и черный. Вот их я подключил к беку приемника.

Мини джек соответсвеноо провода идут на телеметрию или на видео передатчик сразу.

Включение видео выхода можно делать двумя способами:

Первый На выключенной камере вынимаем карту памяти.
Включаем камеру, вставляем видео кабель.
Через 3-5сек вставляем шнурочек ЮСБ с питанием +5в.
Через 3-5сек вставляем карту памяти.

Второй На включенной камере вставляем шнурочек видео.
И на раз два три вставляем ЮСБ шнурок питания.

Весь прикол во втором способе включить ЮСБ не раньше и не поже определенного времени (где-то 1сек разницы). Быстро сказать РАЗ,ДВА, ТРИ обычно всегда срабатывает.

Потом ЮСБ можно отключать. Если оставить, то просто будет заряжаться батарейка гопро камеры. Тянет при этом дополнительные 0.3-0.4 Амп.

Если вы включили видео выход, то камера начинает работать как в обычном режиме. То есть можно лазить по меню, менять настройки, делать запись фото и видео. В режиме фото каждые 2сек. видео выход начинает притормаживать( картинка застывает пока делается фото). С видео никаких вопросов.
Когда закончилась карточка при записи видео, то камера вывела надпись КАРТА ЗАПОЛНЕНА и продолжала выдавать видео сигнал дальше.