8 905 915 7070

info@vsekomponenti.ru

Блог

Управляемая защелка для квадрокоптера Syma X8

Так-с, у нас опять игрушечки.

Среди радиоуправляемых игрушек марки Syma отдельного внимания заслуживает серия «больших» квадрокоптеров X8. В отличие от мелких собратьев, X8 – полноценный «уличный» аппарат с удачным, в плане переносимости ударов судьбы об землю, корпусом, и способный оторвать от земли, кроме себя самого, еще пару-тройку сотен грамм веса. Оставаясь при этом в «игрушечном» ценовом диапазоне. Кроме того, продаются комплекты апгрейда для Syma X8, заменяющие моторы на бесщеточные, на которых квадрокоптер способен оторвать от земли почти полкило.

Так нельзя ли эту игрушечку запрячь в качестве носителя каких-нибудь полезных штук — игрушечных парашютистов, конфетти или осенних листьев, если вдруг кому надо, чтобы «раз!» и посыпались? Иными словами, как можно X8 оснастить дистанционно управляемой защелкой?

Решение на поверхности — микросервомашинка, управляемая отдельным каналом. Но, в отличие от радиоуправляемых самолетов, у Syma X8 вся электроника (радиоприемный тракт, полетный контроллер, токовые усилители моторов) выполнена на одной плате и сервомашинку там воткнуть некуда. Зато на корпусе есть отдельное гнездо для питания и управления камерой, подвешиваемой под брюхом квадрокоптера. Гнездо, конечно, для данной цели неудачное — обычный 3,5 мм стерео-джек. Впрочем, если полеты не сопровождаются жесткими посадками, то проблем с ним нет. Три контакта позволяют подавать 5 вольт для питания и управляющий сигнал для запуска или остановки видеозаписи или получения фотографии. Попробуем отцепить камеру и приспособить имеющиеся коммуникации для управления сервомашинкой.

Для начала надо понять, как происходит управление камерой. Оказалось все очень просто — при подаче соответствующей команды с пульта, на управляющем контакте камеры появляется импульс низкого уровня. Осциллограф показывает, что разница между тем, снимаем ли мы фото или запускаем/останавливаем видео, только в ширине импульса. Для фото это около 400 мс, для видео — около 800 мс.* Просто так, правда, сервомашинку на такое управление не повесишь. Нужен преобразователь. Им выступит микроконтроллер ATTiny85 – он будет измерять продолжительность импульса и выдавать ШИМ-сигнал для управления сервомашинкой.

Чтобы не сильно морочиться изготовлением обвязки для микроконтроллера, воспользуемся готовой платой аля Digispark от Digistump. Это интересная штучка на основе ATTiny85, совместимая с Arduino IDE. Точнее даже мы возьмем её клон, где USB-порт выведен на Micro USB, а на самой плате есть крепежные отверстия.

Подключим сервомашинку и кабель питания и управления с джеком** к Digispark'у следующим образом:

- концевой контакт джека - к линии 5V платы микроконтроллера и проводу питания сервомашинки
- центральное кольцо джека - к пину P2 платы микроконтроллера (это будет вход управления)
- основание джека - к земле (GND) платы микроконтроллера и сервомашинки
- провод управления сервомашинки (третий, который не питание и не земля) - к пину P0 платы микроконтроллера


Код прошивки довольно простой - измеряем ширину импульса и крутим сервомашинку в ту или иную сторону, фиксируя или освобождая тем самым сбрасываемый объект. Есть ньюансы:

а) для программирования Digispark'а на данный момент лучше скачать специальную версию Arduino IDE, т. к. обновленная версия «обычной», хоть и может быть расширена для поддержки Digispark, опять это делает неправильно;

б) в силу ограничений таймеров в архитектуре ATTiny (в сравнении с ATMega), на Digispark не работает стандартная ардуиновская библиотека Servo. Поэтому будем использовать Adafruit SoftServo. При этом также аргумент угла, передаваемый библиотеке, будет довольно странно соотноситься с реальным поворотом машинки, но это можно настроить на месте;

в) из-за пункта б) нельзя использовать в коде паузы (delay) длиннее примерно 25 мс, т. к. необходимо периодически вызывать servo.refresh.

Код скетча:
-----------------------------------------------
//Descent clamp

#include <Adafruit_SoftServo.h>

//положение "открыто"
#define CL_OPENED 0

//положение "закрыто"
#define CL_CLOSED 180

Adafruit_SoftServo servo;

bool lastLOW = false;
unsigned long pulseDuration = 0;
unsigned long pulseStart;
unsigned long pulseStop;

void setup(){
 servo.attach(0);    //пин сервомашинки
 pinMode(2, INPUT);  //вход управления
 pinMode(1, OUTPUT); //встроенный светодиод
 servo.write(CL_OPENED);
 digitalWrite(1, LOW);
}

void runAction() {
 pulseDuration = pulseStop - pulseStart;
 //реакция на короткий импульс (кнопка "фото")
 if (pulseDuration < 600) { servo.write(CL_OPENED); }  
 //реакция на длинный импульс (кнопка "видео")
 if (pulseDuration > 600) { servo.write(CL_CLOSED); }
}

void loop(){
 if (digitalRead(2) == LOW && lastLOW == false) {
     lastLOW = true;
     pulseStart = millis();
     digitalWrite(1, HIGH);
   }
 if (digitalRead(2) == HIGH && lastLOW == true) {
     lastLOW = false;
     pulseStop = millis();
     digitalWrite(1, LOW);
     runAction();
 }    
//паузы не должны превышать 25 мс, иначе сервомашинка не заработает
delay(20);  
servo.refresh();
}
-----------------------------------------------------


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

ВНИМАНИЕ! Также как и камеру, подключать наше устройство можно только при выключенном питании квадрокоптера! А для модификации X8AMG – только при отключенном аккумуляторе! Это еще один минус джека в качестве соединителя.

Выполним увязку пульта и квадрокоптера и, не запуская двигатели (тем не менее исключив возможность попадания частей тела под лопасти!), подергаем переключатель фото-видео. Если все получилось, то в ответ на команду с пульта, сервомашинка будет поворачивать вал в ту или другую сторону. Управляющий импульс дублируется на встроенный светодиод Digispark'a для визуального контроля и отладки, если вдруг крутиться не будет.

Самая творческая часть истории — это механика защелки. Суть простая — вал сервомашинки с насаженным на него рычажком и служит защелкой непосредственно или в качестве преобразователя углового перемещения в линейное, как попробуем сделать мы. В качестве корпуса защелки можно приспособить подходящих размеров пластиковую коробочку, а крепление к дну квадрокоптера арендовать у снятой с него камеры. Ну или пофантазировать на эту тему с помощью моделирования и 3D-принтера.

Наспех вырисовалась нижеописываемая конструкция. Щеколдой служит разогнутая скрепка, обрезанная до нужной длины, которая подбирается так, чтобы в закрытом положении скрепка опиралась на рамку, а в открытом позволяла грузу свободно с себя соскочить. Это проще подобрать экспериментально. Так же может потребоваться потвикать значения CL_OPENED и CL_CLOSED в коде — они отвечают за положения вала сервомашинки.

Для крепления к квадрокоптеру используется деталь отсюда.
Наша модель в STL (и код прошивки) лежит здесь.
Материал — какой-нибудь не хрупкий пластик (ABS, PETG или подобное). На картинках — наша защелка в сборе.

01.jpg

02.jpg

03.jpg

04.jpg

Дальше — испытания!


-------------------------
Примечания:
* - эти значения вполне в рамках возможностей "ручного" управления человеком. Т.е. камеру от X8 (кроме камер с индексом "W"), можно запускать вручную, подавая импульс нужной длительности. Более того, под задней крышкой камеры с индексом "G" на плате уже даже имеется эта кнопочка, нужно только проделать отверстие в крышке. Ну это если охота использовать камеру отдельно от квадрокоптера)

** - коммуникации можно сделать из обрезков обычно длинного хвоста сервомашинки. Кроме того, если есть "хвостик" джек - микро USB (от камеры с индексом "G") можно приспособить его, только придется прокинуть контакт 4 (ID/Sense) micro USB на P2 тоненьким проводом.