Заметка юзера Gol

Arduino + MMA7260 = Автогоризонт для самолётика

самолёт видео железки arduino ардуино

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

Те кто видел недавно снятые видеоролики с борта самолёта, стопудово испытывали приступы тошноты из-за дикого расколбаса картинки. При наблюдении с земли трудно самолёт удержать ровно, особенно при сильном ветре. Так что нужно что-нибудь, автоматически удерживающее самолёт ровно. Вроде бы такая штука называется "автогоризонт", но у меня её нету. Но зато есть аксель и валяется лишняя Ардуина (которая Nano). Единственная из подаренного SysCat, чему ещё не нашлось применения. А, не, вру. Ещё экранчик есть, его я тож пока нигде не задействовал.

Arduino Nano хороша тем что она очень нано. В смысле, маленькая по габаритам. Так что на самолёте место для неё всегда найдётся.

Floater-Jet решил пока не трогать, а поэкспериментировать на подаренном Дядей Васей летающем крыле конструкции "Вжик". "Вжик" сейчас слегка в полуубитом состоянии, так что как раз для экспериментов сойдёт.

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

Проблем со считыванием осей не было, но у акселя довольно сильная погрешность, значения скачут как блохи в неприлично большом диапазоне. Соответственно, рули колбасятся нипадецки. Тут на помощь пришёл Low-pass фильтр. И в результате простейшей обработки простейшим вариантом этого фильтра стало всё отлично - показания акселя сглаживаются и рули ведут себя пристойно.

Результат см. на видео.

Продолжение...




Скорость реакции рулей можно и пошустрей сделать, сейчас стоит задержка 50мс.

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

Собссно, пока всё. Как будет лётная погодка - попробую испытать в действии. Только вот переставлю с крыла на более спокойнолетающий флоатер.

P.S. Кстати низкочастотный фильтр оказался мегаклёвой штукой. Для градусника он очень пригодится, показания сглаживать, ибо там тож скачет нехило.

UPD> Хорошая инфа по акселям и гироскопам
Фильтр Калмана в IMU

UPD> Ну и скетч, на всяк случай.



#include <Servo.h>

#define SERVA1_PIN 6
#define SERVA2_PIN 7

#define K 0.1

#define PIN_X 4
#define PIN_Y 5
#define PIN_Z 6

int x, y, z;

int dx=330;
int dy=455; //калибровка датчика
int dz=0;

int newX, oldX;
int newY, oldY;
int newZ, oldZ;

int kren;
int tangaj;

Servo myservo1;
Servo myservo2;


void setup()
{
Serial.begin(115200);
pinMode(SERVA1_PIN , OUTPUT);
pinMode(SERVA2_PIN , OUTPUT);
myservo1.attach(SERVA1_PIN); // подключаем нашу серву
myservo2.attach(SERVA2_PIN); // подключаем нашу серву
}

void loop()
{
x=analogRead(PIN_X) - dx;
y=analogRead(PIN_Y) - dy;
z=analogRead(PIN_Z) - dz;

// low-pass filter
newX = (x * K) + (oldX * (1.0 - K));
newY = (y * K) + (oldY * (1.0 - K));
newZ = (z * K) + (oldZ * (1.0 - K));

// high-pass filter
//newX = x - (x * K) + (oldX * (1.0 - K));
//newY = y - (y * K) + (oldY * (1.0 - K));
//newZ = z - (z * K) + (oldZ * (1.0 - K));

oldX = newX;
oldY = newY;
oldZ = newZ;

kren = newY;
tangaj = newX;

myservo1.write(10 + tangaj - kren);
myservo2.write(180 - tangaj - kren);

delay(50);
}


Ну и схема подключения


UPD> На Хабре хороший топик про фильтр Калмана
Копия в ЖЖ Gol      Среда, 2 Ноября, 2011 07:09       14


Добавить комментарий
 

Dmitry Четверг, 3 Ноября, 2011 00:05 цитировать ссылка на коммент

Аксели во время разгона и торможения самолета будут думать, что уходит горизонт :)
Dmitry

 

 

Gol Четверг, 3 Ноября, 2011 00:25 цитировать ссылка на коммент

Главное взлететь и на высоту подняться, автогоризонт отключаемый. Точнее, подключаемый вручную.

 

 

Gol Четверг, 3 Ноября, 2011 00:36 цитировать ссылка на коммент

2 Гость:
Дим, ты б зарегался хоть шоп из-под гостя не писать :-) Намёк про уход понял, уже проверил. Действительно, при резком рывке аксель срабатывает. Но задумывалось для планирования с высоты, где есть только G. Так что надо практические испытания провести.

 

 

Gol Четверг, 3 Ноября, 2011 00:42 цитировать ссылка на коммент

Мне тут подсказывают про ПИД-регулятор. Пока не понял толком шо за зверь и с чем его готовить.

 

 

Гость Среда, 4 Января, 2012 05:54 цитировать ссылка на коммент

"К" это степень доверия к датчику 0<K<1

 

 

Гость Воскресенье, 21 Октября, 2012 21:41 цитировать ссылка на коммент

Автор-молодец! На практике применил использование фильтра. В русскоязычных источниках интернета примеров больше не нашел. Спасибо!

 

 

Gol Воскресенье, 21 Октября, 2012 21:59 цитировать ссылка на коммент

2 Гость:
Да ладно, я ж не сам это придумал, позаимствовал где-то. И это лишь жалкое подобие Калману. Но вроде работает, и то ладно.

 

 

Gol Вторник, 19 Февраля, 2013 21:35 цитировать ссылка на коммент

 

 

Гость Пятница, 7 Августа, 2015 13:42 цитировать ссылка на коммент

а куда сервы вставлять ?можно схему для непосвященных?)

 

 

Гость Воскресенье, 9 Августа, 2015 16:17 цитировать ссылка на коммент

2 Гость:
Поручик, молчать!

 

 

Гость Пятница, 8 Января, 2016 08:29 цитировать ссылка на коммент

в начале скеч указоно про сервы)))

 

 

Гость Пятница, 8 Января, 2016 08:33 цитировать ссылка на коммент

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

 

 

dimaris Среда, 7 Декабря, 2016 15:04 цитировать ссылка на коммент

Хотелось бы узнать, у этой темы будет продолжение? Мне нужно не сервой управлять а ШИМом одним из двух моторов при отклонении от горизонта.

 

 

Gol Понедельник, 12 Декабря, 2016 19:19 цитировать ссылка на коммент

2 dimaris:
Не, тема протухла. Эт мои первые опыты были с акселями. А потом я узнал про гироскопы, пиды и прочую хреномантию. Так что всё что тут описано - аццкий наивняк :-)

 

Сколько букв в слове Гол?

Вы вошли как Гость      

Сейчас на сайте: 1 и 7 гостей









Страница сгенерирована за 0.058128118515015 мкс