Как сделать своими руками дрон на Ардуино Уно – самодельный квадрокоптер при помощи микроконтроллера

Как сделать своими руками дрон на Ардуино Уно - самодельный квадрокоптер при помощи микроконтроллера Вертолеты

Бортовой компьютер и сенсоры

• гироскоп позволяет удерживать коптер под определенным углом и стоит во всех контроллерах; • акселерометр помогает определить положение коптера относительно земли и выравнивает его параллельно горизонту (комфортный полет); • барометр дает возможность удерживать аппарат на определенной высоте.

• компас и GPS вместе добавляют такие функции, как удержание курса, удержание позиции, возврат на точку старта и выполнение маршрутных заданий (автономный полет). К установке компаса стоит подойти внимательно, так как на его показания сильно влияют расположенные рядом металлические объекты или силовые провода, из-за чего «мозги» не смогут определить верное направление движения;

• сонар или УЗ-дальномер используется для более точного удержания высоты и автономной посадки; • оптический сенсор от мышки используется для удержания позиции на малых высотах; • датчики тока определяют оставшийся заряд аккумулятора и могут активировать функции возврата на точку старта или приземление.

Сейчас существует три основных открытых проекта: MultiWii, ArduCopter и его портированная версия MegaPirateNG. MultiWii самый простой из них, для запуска требует Arduino с процессором 328p, 32u4 или 1280/2560 и хотя бы одним датчиком-гироскопом. ArduCopter — проект, напичканный всевозможным функционалом от простого висения до выполнения сложных маршрутных заданий, но требует особого железа, основанного на двух чипах ATmega.

Продвинутый девяти- канальный пульт
Продвинутый девяти-
канальный пульт

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

Наконец, стоит упомянуть еще один компьютер — PX4, отличающийся от клонов Arduino тем, что у него есть UNIX-подобная операционная система реального времени, с шеллом, процессами и всеми делами. Но надо предупредить, что PX4 — платформа новая и довольно сырая. Сразу после сборки не полетит.

Настройка полетных параметров, как и программы настройки, очень индивидуальна для каждого проекта, а теория по ней могла бы занять еще одну статью, поэтому вкратце: почти все прошивки для мультикоптеров основаны на PID-регуляторе, и основной параметр, требующий вмешательства, — пропорциональная составляющая, обозначаемая как P или rateP.

Безопасность

Все новички, думая о безопасности, вспоминают AR.Drone и его защиту винтов. Это хороший вариант, и он работает, но только на мелких и легких аппаратах, а когда вес твоего коптера начинает приближаться к двум килограммам или давно перевалил за эту цифру, то спасти может только прочная железная конструкция, которая будет весить очень много и, как ты понимаешь, сильно уменьшит грузоподъемность и автономность полета. Поэтому лучше сперва тренироваться подальше от людей и имущества, которое можно повредить, а уже по мере улучшения навыков защита станет и не нужна. Но даже если ты пилот со стажем, то не забывай о технике безопасности и продумывай возможные негативные последствия твоего полета при нештатных ситуациях, особенно при полетах в людных местах. Не стоит забывать, что сбой контроллера или канала связи может привести к тому, что аппарат улетит от тебя далеко, и тогда для поиска может пригодиться GPS-трекер, установленный заранее на коптер, или же простая, но очень громкая пищалка, по звуку которой ты сможешь определить его местоположение. Настрой и заранее проверь функцию fail safe твоего полетного контроллера, которая поможет приземлиться или вернуть коптер на точку старта при потере сигнала с пульта.

Квадрокоптер на arduino

Главная задача, которую поставил перед собой автор самоделки – сделать недорогой квадрокоптер, полет которого будет стабилизироваться за счет Arduino. Еще квадрокоптер имеет автономное питание. Итоговая стоимость такой самоделки порядка 60$.

Если есть более солидная сумма, то перспективнее оснастить самоделку моторами без щеток с соответствующими контроллерами.

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

Материалы и инструменты:
– литиевые аккумуляторы (на 3.7 В);
– провода;
– транзистор ULN2003A Darlington Transistor (можно использовать и более мощные транзисторы);
– двигатели типа 0820 Coreless Motors;
– микроконтроллер Arduino Uno;
– плата MPU-6050 (это одновременно и гироскоп и акселерометр);
– наличие 3D-принтера или доступ к нему;
– необходимые инструменты.

Процесс изготовления:

Шаг первый. Создаем корпус квадрокоптера
Корпус делается очень быстро и просто. Он распечатывается с помощью 3D-принтера. Создание каркаса, таким образом, хорошо тем, что он выходит легким, все это благодаря печати «сотами». Проектирование деталей происходило в программе Solidworks. С помощью этой программы можно отредактировать параметры корпуса, внести в него свои изменения, если это нужно.

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

Шаг второй. Подключаем Arduino

Как подключать плату MPU6050 можно увидеть на схеме ниже. Важно понимать, что библиотека Arduino подразумевает подключение именно через эти контакты. Если используется схема другого производителя, то важно проследить, чтобы контакты располагались в такой же последовательности.

Для питания платы используется напряжение только 3.3 В, если запитать ее от напряжения 5 В, она испортится. На некоторых платах MPU6050 имеется предохранитель, который защищает систему от высокого напряжения, но лучше не рисковать. Если на плате имеется контакт AD0, его нужно подключить к земле (GND). В данном случае VIO подключен к выходу AD0 непосредственно на плате, поэтому подключать контакт AD0 не нужно.

Чтобы Arduino могла управлять двигателями, понадобятся транзисторы, благодаря ним можно будет подавать большое напряжение на двигатели. Более подробно увидеть, как подключаются все элементы, можно на схеме.

Шаг третий. Скетч для Arduino
После того как MPU-6050 будет подключен к Arduino, его нужно включить и загрузить скетч I2C scanner code. Далее нужно скопировать код программы и вставить его в пустой скетч. После этого нужно открыть серийный монитор Arduino IDE (Tools->Serial Monitor) и убедится в том, что подключен 9600.
Если все сделано верно, будет обнаружено устройство I2C, ему будет присвоен адрес 0x68 или же 0x69, его нужно записать.
Далее загружается скетч, который обрабатывает информацию с гироскопа и акселерометра. Их в интернете есть много, но лучше всего использовать вот этот.

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

Шаг четвертый. Программа для Arduino
благодаря программе, которая выложена здесь, квадрокоптер стабилизируется и зависает в стабильном состоянии. Далее с помощью этой программы происходит управление квадрокоптером.

Для стабилизации квадрокоптера используется два ПИД-контроллера. Один нужен для тангажа, а второй для крена. Контроллер измеряет скорости вращения винтов и на основе этого происходит управление квадрокоптером.


Шаг пятый. Модификация квадрокоптера

Главная проблема маленького и дешевого квадрокоптера – это его вес. Чтобы решить эту проблему, нужно установить более мощные и легкие двигатели, лучше всего подойдут безщеточные, их еще называют вентильными. Они на много лучше щеточных, но к ним нужно покупать еще и контроллеры скорости, поэтому стоимость самоделки резко возрастает.

Чтобы конструкция была легче, лучше всего использовать контроллер Arduino Uno, с нее можно снять уже прошитый чип микропроцессора и затем поставить его непосредственно на ProtoBoard. В итоге получится выиграть около 30-ти грамм веса, что довольно неплохо. В качестве альтернативного варианта можно использовать Arduino Pro Mini.

Программа, которая была создана для управления самоделкой, может быть легко расширена. Но самая главная задача – стабилизация квадрокоптера в полете, на этом этапе была полностью решена. Чтобы управлять самоделкой удаленно, можно использовать модуль bluetooth или же присмотреться к трансмиттерам/ресиверам.

Моторы и пропеллеры

Из-за вращения моторов в разные стороны приходится использовать разнонаправленные пропеллеры: прямого вращения (против часовой) и обратного вращения (по часовой). Обычно используются двухлопастные пропеллеры, их легче балансировать и найти магазинах, в то время как трехлопастные дадут больше тяги при меньшем диаметре винта, но доставят много головной боли при балансировке.

Плохой (дешевый и неотбалансированный) пропеллер может развалиться в полете или вызвать сильные вибрации, которые передадутся на датчики полетного контроллера. Это приведет к серьезным проблемам со стабилизацией и вызовет сильное смазывание и «желе» на видео, если ты снимаешь что-то с коптера или летаешь с видом от первого лица.

Регулятор скорости,  он же ESC
Регулятор скорости,
он же ESC

У любого пропеллера есть два основных параметра: диаметр и шаг. Их обозначают по-разному: 10 × 4.5, 10 × 45 или просто 1045. Это означает, что диаметр пропеллера 10 дюймов, а его шаг 4,5 дюйма. Чем длиннее пропеллер и больше шаг, тем большую тягу он сможет создавать, но при этом повысится нагрузка на мотор и увеличится потребление тока, в результате он может сильно перегреться и электроника выйдет из строя.

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

Также чем больше винт, тем больше его инерция. Если нужна маневренность, лучше выбрать винты с большим шагом или трехлопастные. Они при том же размере создают тягу в 1,2–1,5 раза больше. Понятно, что винты и скорость их вращения нужно подбирать так, чтобы они смогли создать тягу большую, чем вес аппарата.

Смотрите про коптеры:  Как управлять квадрокоптером с помощью разных режимов
А вот и моторчик  на 850 kV
А вот и моторчик на 850 kV

И наконец, бесколлекторные моторы. У моторов есть ключевой параметр — kV. Это количество оборотов в минуту, которые сделает мотор, на поданный вольт напряжения. Это не мощность мотора, это его, скажем так, «передаточное число». Чем меньше kV, тем меньше оборотов, но выше крутящий момент. Чем больше kV при той же мощности, тем больше оборотов и ниже момент.

Info

Более прочный материал — дюраль (Д16Т). Практически не гнется, достаточно пружинистый, и его применяют в авиации. Профили из него в ОБИ не продаются, но можно поймать на Митинском рынке на третьем этаже, на рынке ТВЦ «Строй» тоже были.

Полетный контроллер на ардуино? на stm32f104! руководство по сборке.

«В настоящее время рядом с нами их (азербайджанцев) проживает человек 150-200, и каждый месяц еще появляется человек десять… Мы боимся за жизнь своих детей и внуков… Мы обращались и к местной власти, и в милицию, но там нам сказали, что выселить их может лишь миграционная служба. Но, наверное, пока не грянет гром, как у нас обычно бывает, ничего не произойдет… Просим принять срочные меры к гражданам Азербайджана, которые проживают у нас в селе, пока не случилась трагедия. Они угрожают нашим жизням и жизням наших детей и внуков».

Смотрите про коптеры:  Важная информация по роботам-динозаврам Плео: обзорная статья от Slonotop
Смотрите про коптеры:  4k камеры для quadcopter на АлиЭкспресс — купить онлайн по выгодной цене

Система автопилотирования для радиоуправляемого вертолета. часть 2: перехват управления

Это продолжение

статьи

по разработки системы автопилотирования для радиоуправляемого вертолета.

Так как у меня в плане нет строительства полноценного БПЛА, по большей части это все таки вертолет с ручным управлением, и совсем убирать из него приемник я не буду. Поэтому надо как нибудь реализовать коммуникацию между Arduino, радиоприемником и контроллером двигателей.

Первым делом я решил разобраться каким образом приемник общается с контроллером. Раз сервоприводы подключены к приемнику также как и контроллер, значит принцип управления моторами такой же как и сервоприводами, в основе которого лежит ШИМ.

Затем я решил попробовал подчитывать значения с выходов приемника.

Расположение контактов на приемнике и контроллере двигателей: 1-GND, 2-VCC, 3-сигнал.

image

Для этого подключаем выходы сигнала приемника (их всего 4, верхние 2 — сервоприводы, следующие 2 — для контроля двигателями) к Arduino pin 5,6,7,8, один из входов VCC к 5v Arduino, а один из входов GND к GND arduino. С помощью функции pulseIn(), считывающей длину сигнала на заданном входе, мы получаем значения, выдаваемые приемником. Максимально отклоняя рычаги на пульте управления я зафиксировал необходимые мне значения. Это значения от 1080 до 1800, при этом выдаваемые значения, когда ручки находятся в нормальном состоянии для крена, тангажа и курса — 1450, а для газа — 1080.

image

Скетч достаточно простой:

int c1;
int c2;
int c3;
int c4;
void setup() {

  pinMode(5, INPUT); 
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8,INPUT);

  Serial.begin(9600); 

}
void loop() {

  c1 = pulseIn(5, HIGH, 25000);
  c2 = pulseIn(6, HIGH, 25000);
  c3 = pulseIn(7, HIGH, 25000);
  c4 = pulseIn(8, HIGH, 25000);

  Serial.print("C1:"); 
  Serial.println(c1);   
  Serial.print("C2:");
  Serial.println(c2);
  Serial.print("C3:");
  Serial.println(c3);
  Serial.print("C4:");
  Serial.println(c4);
}

Ну, собственно казалось бы все, можно уже передавать управление в руки Arduino? Соединяем теперь уже контроллер двигателей(Arduino pin 5 и 6) и сервоприводы(Arduino pin 7 и 8) с Arduino и пишем еще один скетч:

#include <Servo.h> 
Servo right;
Servo left;
Servo rightmot;
Servo nizmot;
int rightmot_pin = 5;  
int nizmot_pin = 6;
int serv_left_pin=7;
int serv_right_pin=8;
int js_position = 800;
int max_position = 3000;
int spd1_now;

void setup() 
{
  left.attach(serv_left_pin, js_position, max_position);    
  right.attach(serv_right_pin, js_position, max_position); 
 rightmot.attach(rightmot_pin, js_position, max_position);   
    nizmot.attach(nizmot_pin, js_position, max_position);    
} 
void loop() 
{
for(int i=1080,j=1800;i<1800,j>1080;i  ,j--)
{
left.write(i);
right.write(j);
}
for(int j=1800,i=1080;j>1080,i<1800;j--,i  )
{
left.write(j);
right.write(i);
}
}

Заливаем, ждем, и вот тут то начинаются проблемы. Во-первых, долго пришлось ломать голову над тем, почему контроллер включается, но не может откалиброваться и начать работу. Через полчаса я нашел решение: проблема была в том, что включается и моргает он при любом напряжении, а вот работать начинает только при использовании аккумулятора с минимальным напряжением 7.4 Вольт. Вообще, это даже пошло на пользу, Arduino очень даже хорошо питается и работает от аккумулятора через контроллер, и не прийдется ставить один аккумулятор на управление а другой на контроллер двигателей (Обычно для контроллера стоит мощный аккумулятор с большой емкостью и напряжением 11.1V, а на управлении аккумулятор небольшой емкости(850 мАч) и напряжения 7.4V).

Подключаем батарею, пробуем снова. Опять просто мигает. На решение этой проблемы ушло часа 3. Оказывается, чтобы контроллер заработал, ему нужно каким-то образом при включении повзаимодействовать с приемником. Как именно, мне пока не удалось узнать, возможно приемник посылает в него какие-то особенные значения. Чтобы это решить, подключаем к Arduino еще и приемник(Arduino pin 9,10,11,12), считываем с него значения поступающие с пульта, и передаем их контроллеру:

#include <Servo.h> 
Servo right;
Servo left;
Servo rightmot;
Servo nizmot;
int rightmot_pin = 5;  
int nizmot_pin = 6;
int serv_left_pin=7;
int serv_right_pin=8;
int js_position = 800;
int max_position = 3000;
int c1;
int c2;
int c3;
int c4;
int spd1_now;

void setup() 
{
 pinMode(9, INPUT); 
  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(12,INPUT);
  left.attach(serv_left_pin, js_position, max_position);    
  right.attach(serv_right_pin, js_position, max_position); 
 rightmot.attach(rightmot_pin, js_position, max_position);   
    nizmot.attach(nizmot_pin, js_position, max_position);    
} 
void loop() 
{
  c1 = pulseIn(5, HIGH, 25000);
  nizmot.write(c1);
  c2 = pulseIn(6, HIGH, 25000);
  rightmot.write(c2);
  c3 = pulseIn(7, HIGH, 25000);
  left.write(c3);
  c4 = pulseIn(8, HIGH, 25000);
  right.write(4);
}

Заливаем, подключаем, работает!

Теперь приемник подключен к контроллеру через Arduino, который перехватывает сигнал и отправляет на нужный канал контроллера. Даже несмотря на то, что сигнал изменяется (обычно значение уменьшается на 15-20 единиц), вертолет Даже получается поднять в воздух.

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

Скетч:

#include <Servo.h> 
Servo right;
const int SEL = 2; // digital

Servo left;
Servo rightmot;
Servo nizmot;
int rightmot_pin = 5;  
int nizmot_pin = 6;
int serv_left_pin=7;
int serv_right_pin=8;
int js_position = 800;
int max_position = 3000;
int c1;
int c2;
int c3;
int c4;
int spd1_now;

void setup() 
{
  pinMode(SEL,INPUT);

  digitalWrite(SEL,HIGH);
 pinMode(9, INPUT); 
  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(12,INPUT);
  left.attach(serv_left_pin, js_position, max_position);    
  right.attach(serv_right_pin, js_position, max_position); 
 rightmot.attach(rightmot_pin, js_position, max_position);   
    nizmot.attach(nizmot_pin, js_position, max_position);    
} 
void loop() 
{ 
 if(SEL == HIGH)
{
  c1 = pulseIn(5, HIGH, 25000);
  nizmot.write(c1);
  c2 = pulseIn(6, HIGH, 25000);
  rightmot.write(c2);
  c3 = pulseIn(7, HIGH, 25000);
  left.write(c3);
  c4 = pulseIn(8, HIGH, 25000);
  right.write(4);
}
else
{
for(int i=1080,j=1800;i<1800,j>1080;i  ,j--)
{
 
left.write(i);
right.write(j);

}
for(int j=1800,i=1080;j>1080,i<1800;j--,i  )
{
 
left.write(j);
right.write(i);
}
}
}

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

В этом примере с помощью цикла (для плавности хода сервопривода) изменяется угол наклона лопастей. В дальнейшем, этим же способом будет осуществляться управление вертолетом в полете.

Демонстрация работы:

Оцените статью
Добавить комментарий

Adblock
detector