Один из подписчиков имеет квадрокоптер с подвижным шасси, которое поднимается и опускается по нажатию кнопки на пульте. Он обратился ко мне за помощью, сделать так чтобы шасси самостоятельно поднималось и опускалось, при достижении определенной высоты, на пример полтора метра.
Так выглядит автоматический привод для шасси, который необходимо установить на квадрокоптер.
Для сборки понадобится:
Плата Arduino NANO, ультразвуковой датчик расстояния HC-SR04, 2 концевика, соединительные провода, макетная плата и сервомотор на 360 градусов.
Так как у меня не оказалось сервомотора на 360 градусов, то сервомотор Tenstar Robot SG90 180 градусов, пришлось переделать на 360 градусов. Я снял видео, о том как это сделать, и в ближайшее время постараюсь его опубликовать.
Сначала необходимо загрузить скетч, в котором есть только одна настройка.
Это переменная sm, которая хранит в себе высоту в сантиметрах. В данный момент стоит значение 10, я его таким и оставлю, а вы укажите свою высоту.
Так как для ультразвукового датчика расстояния HC-SR04 максимум составляет 400 сантиметров, то оптимально указать до 380. Слишком маленькую высоту указывать тоже не рекомендую, чтобы у шасси был запас времени для раскрытия при посадке.
//Начало скетча
#include "Servo.h"
Servo myservo;
#define trigPin 13
#define echoPin 12
int sm = 10; //расстояние в сантиметрах, для срабатывания шасси (максимум 380 см)
void setup() {
Serial.begin (9600); myservo.attach(9);
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(trigPin, LOW); delayMicroseconds(5);
digitalWrite(trigPin, HIGH); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1; // Результат в сантиметрах в переменной distance
Serial.println(distance);
int button6 = digitalRead(6);
int button7 = digitalRead(7);
if ((distance > sm) && (button7 == HIGH)) {
myservo.write(0); //отправка шасси в низ
}
if ((distance < sm) && (button6 == HIGH)) {
myservo.write(180); //отправка шасси в верх
}
if (((distance > sm) && (button6 == HIGH)) || ((distance < sm) && (button7 == HIGH)))
{
myservo.write(90); //остановка шасси
}
}
//Конец скетча
После загрузки скетча припаяйте провода к концевикам, согласно этой схемы.
Затем соберите все согласно одной из трех схем, которая вам подходит.
Если вы используете сервомотор, который работает от 5 вольт и потребляет до 500 миллиампер, то питание для него можно взять с платы Arduino NANO, как показано на этой схеме.
Если вы используете другой сервомотор, который потребляет более 500 миллиампер, то его линии питания следует подключать через отдельный понижающий преобразователь. На пример Mini 360 который имеет регулировку напряжения от 4.75 до 23 вольт, и выдерживает ток до 1.8 Ампера.
Если напряжение питания сервомотора, совпадает с напряжением используемой батареи, то его можно подключить на прямую к батарее.
И если все верно, то подключаем питание и проверяем работоспособность шасси, для начала простым поднятием, на высоту выше той которую вы указали в переменной sm. При этом ультразвуковой датчик должен быть направлен вниз, для измерения расстояния до поверхности места посадки.
“Автоматический привод шасси, для квадрокоптеров на подобие WLtoys Q333A и DJI Inspire, на базе Arduino NANO”