Содержание статьи
Содержание

Главная / Проекты с Arduino / Квадрокоптер на Arduino своими руками

Квадрокоптер на Arduino своими руками

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

Что такое квадрокоптер?

Уверен, что большинство читающих эту статью уже знают, что такое квадрокоптер. Если нет, привожу краткое описание этих замечательных устройств.

Квадрокоптер - это летающее устройство с четырьмя "ногами", на каждой из которых установлен мотор с пропеллером. Квадрокоптеры по своей сути схожи с вертолетами, но перемещение, поворот, наклон у них обеспечивается за счет синхронной работы четырех пропеллеров. Кроме того, у квадрокоптеров существует такое понятие как “pitch” (“тангаж”) – поворот вокруг продольной оси. Для того, чтобы стабилизировать полет квадрокоптера, два пропеллера вращаются в одно направлении (по часовой стрелке), а два - в противоположном направлении (против часовой стрелки). Благодаря этой возможности - зависать в одном положении в воздухе, квадрокоптеры в первую очередь используются для фотографии с воздуха и видеосъемки. Конечно же, квадрокоптеры и остальные подобные устройства со множеством двигателей, используются в спасательных операциях, полицией, военными и т.п. В последнее время стоимость компонентов для производства квадрокоптеров значительно уменьшилась и многие компании принялись за их производство. Купить готовое изделие на сегодняшний день не составит проблем.

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

Первое, что было сделано: гуглинг по магазинам в поисках компонентов, которые нам понадобятся для его изготовления. В большинстве случаев используются микроконтроллеры и безщеточные (вентильные) моторы. В качестве контроллера было решено использовать Arduino, так как это идеальная платформа с точки зрения цены. Первая проблема, которая возникла - безщеточные двигатели. Помните, мы ведь ориентируемся на бюджет в 60 $. А стоимость одного безщеточного двигателя, который можно использовать в нашей конструкции квадрокоптера, колеблется в диапазоне от 20 $ до 60 $! Кроме того, использование этих моторов предполагает установку дополнительных контроллеров - speedcontrollers. Так что было решено использовать щеточные двигатели. Габариты нашего квадрокоптера небольшие, так что были куплены моторы с относительно маленьким крутящим моментом. Гугл подсказал, что квадрокоптеры с подобными приводами существуют. Найденные моторы могут поднять до 55 грамм веса, что нас вполне устроило. Следующий шаг - решение проблем стабилизации моторов с помощью гироскопов и акселерометров. Гироскоп - это устройство, которое использует гравитацию Земли для определения угла наклона (ориентации) в пространстве. Классическая конструкция гироскопа состоит из свободно вращающегося диска, который называется ротором. Ротор установлен на оси, которая расположена по центру большего, более стабильного колеса. При вращении оси ротор остается в статичном состоянии, которое соответствует центру гравитации. Акселерометр же представляет из себя компактное устройство, которое используется для измерения ускорения. Когда объект выходит из состояния покоя (начинает двигаться) акселерометр фиксирует вибрации, которые возникают при этом движении. В акселерометрах используются микроскопические кристаллы, которые генерируют напряжение при ударах. Это напряжение снимается и формируется значение ускорения. Эти два сенсора обязательны в квадрокоптере. Именно на основании их показаний формируется управляющий сигнал, который регулирует скорость вращения двигателей для обеспечения крена, перемещения или стабилизации нашего квадрокоптера.

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

Необходимые узлы, детали и оборудование

Для проекта квадрокоптера с управлением от Arduino нам понадобятся:

3-D печать деталей квадрокоптера

Один из первых шагов - создание рамы нашего квадрокоптера. Было решено пойти по пути наименьшего сопротивления и напечатать раму на 3D принтере. Помимо простоты изготовления, каркас, напечатанный на 3D принтере, получается достаточно легкий благодаря печати "сотами". Детали были спроектированы в Solidworks. Ниже представлены все твердотельные модели. Все можете их спокойно скачать и отправлять на печать. Детали сохранены в формате .stl. Если хотите, можете их смело дорабатывать и изменять с использованием того же Solidworks. Модели параметрические, так что если вы решите использовать другие моторы, достаточно просто изменить несколько параметров в модели и вы получите готовый каркас под ваши габаритные размеры квадрокоптера.

3-D печать квадрокоптера 1

diy_bottom_plate.stl

3-D печать квадрокоптера 2

diy_motormount.stl

3-D печать квадрокоптера 3

diy_quad_boom.stl

В результате вы получите что-то вроде такого:

3-D печать квадрокоптера на Arduino 1 3-D печать квадрокоптера на Arduino 2

Настройка акселерометра-гироскопа (I2C)

MPU-6050 SparkFun

TL;DR:

1. Не подключайте к 5 В!

2. Рекомендуем использовать вот эту библиотеку для Arduino: Github.

В этом примере использовалась плата MPU6050 от SparkFun. На Amazon она стоит около $10, работает хорошо. Аналогичный Китай на Aliexpress или Ebay предлагает подобные платы по цене до 5 долларов. Тоже отлично работает.

Что такое I2C?

На простых платах акселерометра все логично и понятно: на ней предусмотрены отдельные аналоговые выходы для осей X, Y и Z. Каждый выход соответствует отдельной оси акселерометра. Если вы теперь взглянете на плату с I2C, поймете, что тут все несколько запутаннее. I2C - это стандарт обмена данными, при котором большие объемы информации передаются с помощью цифровых логических импульсов вместо аналоговых выходов. MPU6050 предоставляет вам 6 контролируемых осей (3 для гироскопа и 3 для акселерометра). Если бы они все были аналоговыми, нам пришлось бы задействовать все аналоговые порты на Arduino Uno. С протоколом I2C мы задействует гораздо меньше контактов для подключения.

Схема подключения Arduino

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

VDD -> 3.3v

GND -> GND

INT-> digital 2

SCL -> A5

SDA -> A4

VIO -> GND

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

Скетч для Arduino

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

После того как вы подключили MPU-6050 к вашему Arduino, включите его и загрузите скетч I2C scanner code.

Скопируйте код программы, вставьте его в пустой скетч и запустите. Откройте серийный монитор Arduino IDE (Tools->Serial Monitor) и убедитесь, что вы подключены к 9600 (нижний левый).

Если вы все сделали правильно, должно обнаружиться устройство I2C и ему присвоиться адрес 0x68 ил 0x69. Запишите его. Если появились ошибки, проверьте подключение.

Теперь вам надо загрузить скетч, который обрабатывает информацию с акселерометра/гироскопа. По сети гуляет не один вариант подобных скетчей, рекомендуем использовать вот этот. После перехода по ссылке, нажмите “Download Zip”. После скачки, разархивируйте архив. Потом этого откройте Arduino IDE. Перейдите в sketch->import library -> add library. Вам надо будет добавить обе папки: I2Cdev и MPU6050.

После того как вы установили библиотеки, откройте файл MPU6050_DMP6 (MPU6050 -> Examples). Рекомендую вам его просмотреть, даже если вы не особо ориентируетесь в коде. Если у вас присвоился адрес 0x69, вам надо раскомментировать одну строку в верхней части кода (после #includes), так как по умолчанию стоит 0x68. Теперь программа должна компилироваться.

Загрузите программу, откройте окно серийного монитора (в этот раз с 115200) и следуйте инструкциям. Поздравляю, так как сейчас вы должны были получить значения с акселерометра/гироскопа через Arduino!

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

Теперь запустите скетч для калибровки, который можно скачать здесь: MPU6050_calibration.ino (опять-таки, по умолчанию установлен порт 0x68, но вы можете его изменить). Запишите данные отклонений (offset), которые вы получите. Эти данные вы будете использовать в скетче MPU6050_DMP6 (и в дальнейшей программе для квадрокоптера).

Теперь у вас есть рабочий, безусловно полезный, акселерометр/гироскоп.

Подключение к Arduino

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

Начнем сборку электросхемы. На этом этапе нам понадобятся Arduino, моторы, транзисторы (монтажная плата и коннекторы). Схема подключения приведена ниже, под необходимыми текстовыми пояснениями. Подключите четыре ШИМ выхода (отмечены на Arduino знаком ~ ) к транзистору, как это показано на рисунках. После этого подключите коннекторы к моторам, которые подключены к источнику питания. В приведенном проекте квадрокоптера использовался источник питания 5 В, но должна подойти и батарея 3-5 В.

Убедитесь, что транзисторы заземлены, и земля на Arduino подключена к земле от источника питания. Убедитесь, что роторы двигателей вращаются в правильном направлении (они должны обеспечивать подъем квадрокоптера, а не крен). Если вы переключите контакт мотора с 5 В на транзистор, ротор двигателя начнет вращаться в противоположном направлении. После настройки изменять направление вращение двигателей больше не придется. Изменять мы будем только скорость.

После запуска акселерометра и его проверки, необходимо установить все на ProtoBoard (можно использовать монтажную плату, на которую напаять рельсы для установки на Arduino. Можно пойти по более элегантному пути и приобрести Proto Shield). Не стоит припаивать транзистор на плату для прототипирования. Лучше использовать для него сокет с контактами, чтобы вы могли его в любой момент заменить.

В нашем случае мы припаяли акселерометр к плате и только после этого провели калибровку. Но практика показывает, что это не совсем правильно. Для увеличения точности показаний гироскопа/акселерометра, его лучше сначала откалибровать на ровной поверхности и только потом припаять.

Подключение к Arduino 1 Подключение к Arduino 2 Подключение к Arduino 3 Подключение к Arduino 4 Подключение к Arduino 5 Подключение к Arduino 6 Подключение к Arduino 7 Подключение к Arduino 8

Программа для Arduino

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

Программа для Arduino

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

В нашем алгоритме для стабилизации используется два ПИД-контроллера: один для тангажа и другой для крена. Разница в скорости вращения пропеллеров 1 и 2 будет такой же как и разница в скорости пропеллеров 3 и 4. Аналогично для пар 1,3 и 2,4. После этого ПИД-регулятор изменяет разницу в скорости, выводя тангаж и крен в нуль.

Не забудьте проверить какие цифровые пины с Arduino идут к моторам и соответственно изменить скетч.

Дальнейшая модернизация квадрокоптера на Arduino

Квадрокоптер на Arduino 2

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

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

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

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!