- Ardu remote: очень простая и дешёвая аппаратура управления своими руками
- Arduino: ик-управление бытовой техникой
- Бортовой компьютер и сенсоры
- Безопасность
- Исходный код программы (скетча)
- Относительно дешевый quadcopter на arduino с управлением от телефона, планшета, пк
- Питание и контроллеры питания
- Скетч
- Создаем квадрокоптер на базе arduino
Ardu remote: очень простая и дешёвая аппаратура управления своими руками
Всем привет. Захотелось мне однажды маленькую удобную аппаратуру для дрона/крыла; usb-джойстик для симуляторов и Open.HD; найти оправдание построенной дельте (3d-принтеру) и пострадать ардуино. Сразу фото итога:
Размышления и гуглеж привели к выбору BetaFPV Lite radio как образца для внешнего вида. Хотелось, конечно, Taranis X-Lite, но стики были только крупные, от подаренной товарищем бесполезной ввиду древности аппаратуры. Переключатели на 60% были использованы от неё же.
Изначально делал только USB-версию. Оно отлично работало в симуляторе FPV Freerider и как управление в Open.HD линке, но мысль прилепить QCZEK и автономное питание уже овладела мной бесповоротно.
В итоге вышло что вышло.
→ Гитхаб
Видео:
На гитхабе скетч, схема, используемые библиотеки и всякое полезное, включая 3d-модели и исходники для solid.
Схема относительно проста и требует только пайки проводов за исключением резистивного делителя и светодиодов. Работу с qczek lrs я обойду стороной, для этого есть сайт разработчика и неплохие видеотуториалы в ютубе от Юлиана и Сани areyouroo.
Можно ограничиться только usb-версией без питания и lrs, в качестве lrs можно использовать другие проекты, где принимают на вход CPPM 8/10ch сигнал. При выборе QCZEK появляется выбор между 0.1 и 1вт модулями и частотами 433/868/915 МГц. Я не рекомендую 433, наводки от них дикие. Также не увидел смысла в 1вт, при 100мвт вполне реально пульнуть на 10км. Если планируете покупать антенны — смотрите на версии 915мгц и готовые антенны для популярных дальнобоек frsky. Недорого и какая-то гарантия попадания в приемлемый КСВ. Я же просто подпаял к хвосту с ipex два отрезка медной проволоки D0.4mm, длиной 8.21см и заложил это всё в корпус антенны прямо в середине печати на 3д-принтере. Побегал с аппаратурой по этажам многоквартирного дома — обрыва или падения rssi на модели в квартире не добился, устроило.
Для Open.HD (usb-версия) пока нет смысла в свичах sw4 и sw5, так как число каналов ограничено 8-ю. Возможно, в дальнейшем это ограничение будет снято. Имейте ввиду, что подключение к Open.HD с модулем зарядки даёт дополнительную нагрузку на usb-порт наземной raspberry по питанию. Имеет смысл заюзать хаб с внешним питанием.
Калибровка аппаратуры: подаём питание с зажатой SW_CALIBRATE при средних положениях yaw/roll/pitch и минимальных throttle/aux1; ждём гудка; двигаем всё с осями от минимума до максимума, пока есть пищание. Когда пищать уже не может — выключаем, калибровка завершена.
Также есть защита от высоких значений каналов при включении, пока не переместите первые три свича и газ вниз — будет коротко попискивать.
Каждые 30 секунд, если значения не изменились — короткий ненавязчивый писк. Естественно, все это легко изменить/отключить в скетче. Например, просто закоментировав дефайн.
В общем, заготовка для творчества вполне себе ничего. Нет триммирования, но оно и не нужно для полетов с полётным контроллером, а без него эта аппаратура врядли может пригодится.
Также я прилепил блютус-модуль jdy-30 к qczek и гоню в него мавлинк телеметрию, которую принимает DroidPlanner 2.8 или Telemetry Viewaver на андроид-смартфоне. Наверное, также засуну и mavlink-display. Пусть будет красиво, как у дорогих crossfire xD
Спасибо за внимание, жду вопросов и повторений / развитий сего рукожопства.
Arduino: ик-управление бытовой техникой
Здравствуй хабрачитатель! Меня зовут Константин и я программист, а именно занимаюсь программированием систем «Умный дом».
За четыре года работы в этой области, довелось попробовать много интересных контроллеров и ПО для решения задач домашней автоматизации. Одними из интереснейших устройств с которыми мне приходилось иметь дело — это устройства компании Global Cache серии IP2IR. Их предназначение состоит в том что-бы принять текстовую команду от клиента и излучить ее через светодиод ик-спектра.
Использование подобных устройств упрощает жизнь пользователям сразу по нескольким направлениям:
- в качестве ПДУ можно использовать планшеты, телефоны и ПК (с небольшой оговорочкой, нужен специальный софт);
- управление можно централизовать т.е. специальный софт можно поднять на сервере и обращаться к нему;
- в прицельной стрельбе нет необходимости, если с телевизором, например, таких проблем нет (мы в него и так смотрим), то вот для устройств вроде Blu-Ray проигрывателей или MediaServer’ов это может стать проблемой в случае если они заперты в шкафу или работают в режиме мультирум;
- одна кнопка ПДУ может выполнить целый макрос, например включить телевизор и Blu-Ray, затем переключить ТВ на нужный источник, например HDMI1, и пользователь может вообще не париться о том где и как у него подключены устройства.
Такая игрушка жизнь конечно упрощает, но и по карману тоже бьет, если мне не изменяет память, то GlobalCache для управления тремя устройствами стоит порядка 6000-7000 деревянных рублей. Не очень гуманное ценообразование, вот и было решено сделать собственную реализацию подобного устройства.
Честно признаться, идея крутилась достаточно давно, но вот опыта схемотехника и программиста МК у меня нет, ну или почти нет, вообщем из этих соображений была выбрана платформа Arduino со своей недосредой разработки. Поиски на просторах паутины дали мне готовое решение под названием IRRemote, как же я плевался обнаружив, что этот модуль заточен на работу с одним единственным выходом, явно не то что мне нужно, за то просмотр исходника дал мне уверенность в своих теоретических знаниях ИК управления оборудованием.
Теория проста, хоть и производители любят использовать собственные протоколы для описания команд, все сводится к одному и тому же принципу передачи данных. На некоторых сайтах можно найти команды для своих устройств в формате HEX или ProntoHEX, что по сути одно и тоже.
Команда в HEX формате выглядит следующим образом: 0000 FREQ CNT1 CNT2 ON_1 OFF1 ON_2 OFF2 ON_n OFFn.
Суть такова:
- 0000 — всегда четыре ноля, но мы для своих целей будем использовать первые два нуля заменяем на количество повторов кода, вторые два нуля это будет номер выхода на ардуинке. Таким образом код 010D — повторит команду дважды и отправит ее на выход 13 (тот что со встроенным светодиодом);
- FREQ — опорная частота сигнала. Обычно в диапазоне 35-40кГц и записывается хитро — 36кГц = 0073 = 115, не очень понятно почему десятичное 115 дает частоту 36кГц, скажу лишь, что посчитать это можно так 4145 / FREQ;
- CNT1 — не самая обязательная часть, я ее игнорирую;
- CNT2 — тоже игнорирую, если кому интересно, что это ссылка внизу;
- ON — а вот это уже данные. Это количество периодов на опорной частоте когда мы «мерцаем» ик-диодом;
- OFF — а это количество периодов когда мы держим на ножке логический ноль.
Что бы не заставлять Вас вдумчиво вчитываться в эту теорию просто проиллюстрируем выше сказанное:
Ну когда с теорией разобрались, самое время приступить к программированию, не буду описывать все трудности которые возникли у меня в начале работы с новым для меня зверьком и начнем пожалуй со следующего:
В составе среды ардуино существует специальная функция tone(pin,frequency,duration), она генерирует на порту вход/выхода сигнал — прямоугольную «волну», заданной частоты и с 50% рабочим циклом, используя прерывания таймера.
Сварганив на скорую руку, более или менее, рабочий вариант используя эту функцию, захотелось увеличить точность получаемых результатов, для этого в каталоге “Arduinohardwarearduinocoresarduino” был скопирован файл Tone.cpp и переименован в IR_Gen.cpp. Затем в получившемся файле я объявил недостающие переменные и удалил лишние, да и такие там тоже были. Функция tone модифицировалась в функцию startIR(frequency) которая ни где не объявлена и использовать ее можно только внутри этого файла.
Так же добавились еще две объявленные функции sendIR(char ir_string[]) и sendLastIR() — которые и вызывают бывший tone() (startIR()), однако перед тем как запустить модуляцию необходимо убедиться в том, что строка переданная в sendIR является набором данных ик-команды, с этой целью была включена функция парсига ParseIRString, она вернет ноль если данные не соответствую формату ик-команды и вернет значение опорной частоты если данные соответствуют. Приведу код на всякий случай, что бы стало ясно, как происходит парсинг строки:
unsigned int ParseIRString(char IRString[]){
byte xBool = 0;
unsigned int bInt = 0;
ir_data_array_length = 0;
unsigned int IR_Frequency = 0;
unsigned int IR_String_Length = 1024;
char Separator = ' ';
unsigned int i = 5;
char bChArr[4] = {0};
byte NumSys = 16;
ir_out_pin = 255;
if(IRString[0]=='s'){ //Если команда в формате Global Cache
ir_out_pin = (((IRString[7]-48)*3)-(3-(IRString[9]-48)))-1;
bChArr[0] = IRString[19];
bChArr[1] = IRString[20];
bChArr[2] = IRString[21];
bChArr[3] = 'r';
ir_repeat_count = StrToInt(bChArr,10)-1;
Separator = ',';
i = 13;
NumSys = 10;
}else{ //Если команда в формате HEX
bChArr[0] = IRString[3];
bChArr[1] = IRString[4];
bChArr[2] = 'r';
ir_out_pin = StrToInt(bChArr,16);
bChArr[0] = IRString[0];
bChArr[1] = IRString[1];
ir_repeat_count = StrToInt(bChArr,16);
}
if ((ir_out_pin>13)||(ir_out_pin<0)){return 0;}
for (i; i<IR_String_Length; i ){
if((IRString[i]>='a')&&(IRString[i]<='f')){IRString[i]-=32;} //UpperCase
if((IRString[i] != Separator)&&(IRString[i] != 'r')){ //Если число, а не сепаратор
if((IRString[i]>47)&&(IRString[i]<58)){ //Цифры в строке
bInt = bInt * NumSys (IRString[i] - 48); //Получение числа
}else{
if ((IRString[i]>='A')&&(IRString[i]<='F')&&(NumSys==16)){//буквы от A до F
bInt = bInt * NumSys (IRString[i] - 55); //Получение числа
}else{
return 0;
}
}
}else{
if(IR_Frequency==0){
if(NumSys==16){ //Если в HEX
IR_Frequency = (4145/bInt)*1000; //считаем значение частоты
}else{ //если Global Cache
IR_Frequency = bInt; //просто пишем частоту
}
xBool ;
}else{
if(xBool>2){
ir_data_array[ir_data_array_length]=bInt*2; //количество полупериодов
ir_data_array_length ;
}else{
xBool ;
}
}
bInt = 0;
if(IRString[i] == 'r'){Serial.println(IR_Frequency,DEC); return IR_Frequency;}
}
}
}
Затем исправляем прерывание таймера под наши цели и имеем в результате нечто вроде:
ISR(TIMER2_COMPA_vect){
if (ir_data_array[ir_data_current_step] > 0){
if(ir_data_current_step%2==0){
*timer2_pin_port ^= timer2_pin_mask; //мерцаем
}else{
*timer2_pin_port &= ~(timer2_pin_mask); //не мерцаем
}
ir_data_array[ir_data_current_step]--;
}else{
ir_data_array[ir_data_current_step] = ir_data_buffer;
ir_data_current_step ;
ir_data_buffer = ir_data_array[ir_data_current_step];
}
if (ir_data_current_step == ir_data_array_length){
if(ir_repeat_count>0){
ir_repeat_count--;
ir_data_current_step = 0;
}else{
stopIR(tone_pins[0]);
}
}
}
В конце этой феерии в файле Arduino.h необходимо объявить новоиспеченные функции byte sendIR(char ir_string[]); byte sendLastIR(); и вуа-ля, дело в шляпе. Результатом стала чуть расширенная среда ардуино, в составе которой есть готовое средство для управления бытовой техникой.
Знаю, не все фанатеют от исправления чего бы то ни было в среде разработки, но мне честно сказать так было удобнее, да и в конечном счете ничего не мешает сделать это просто сторонним модулем.
Информация по теме:
Сайт компании Global Cache
PDF с описанием API устройств Global Cache
Русскоязычная справка по функции tone
Как и обещал для любознательных, доп. инфа по ИК-управлению
Всем известная библиотека IRRemote
Бортовой компьютер и сенсоры
• гироскоп позволяет удерживать коптер под определенным углом и стоит во всех контроллерах; • акселерометр помогает определить положение коптера относительно земли и выравнивает его параллельно горизонту (комфортный полет); • барометр дает возможность удерживать аппарат на определенной высоте.
• компас и 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 твоего полетного контроллера, которая поможет приземлиться или вернуть коптер на точку старта при потере сигнала с пульта.
Исходный код программы (скетча)
intf_button=9; intb_button=8; intl_button=7; intr_button=6; intm1=2; intm2=3; intm3=4; intm4=5; voidsetup(){ pinMode(f_button,INPUT_PULLUP); pinMode(b_button,INPUT_PULLUP); pinMode(l_button,INPUT_PULLUP); pinMode(r_button,INPUT_PULLUP); pinMode(m1,OUTPUT); pinMode(m2,OUTPUT); pinMode(m3,OUTPUT); pinMode(m4,OUTPUT); } voidloop(){ if(digitalRead(f_button)==LOW) { digitalWrite(m1,LOW); digitalWrite(m3,LOW); digitalWrite(m2,HIGH); digitalWrite(m4,HIGH); } if(digitalRead(b_button)==LOW) { digitalWrite(m2,LOW); digitalWrite(m4,LOW); digitalWrite(m1,HIGH); digitalWrite(m3,HIGH); } if(digitalRead(l_button)==LOW) { digitalWrite(m1,LOW); digitalWrite(m2,HIGH); digitalWrite(m3,HIGH); digitalWrite(m4,HIGH); } if(digitalRead(r_button)==LOW) { digitalWrite(m1,HIGH); digitalWrite(m2,LOW); digitalWrite(m3,HIGH); digitalWrite(m4,HIGH); } } |
Относительно дешевый quadcopter на arduino с управлением от телефона, планшета, пк
Что вам понадобится для того, чтобы собрать и запустить в воздух свой квадрокоптер:
Ноутбук или компьютер с Processing[/b], скачать можно от сюда. Что такое “Processing”? Вот, что пишет об этом википедия :
Processing — открытый язык программирования, основанный на Java. Представляет собой лёгкий и быстрый инструментарий для людей, которые хотят программировать изображения, анимацию и интерфейсы.Используется студентами, художниками, дизайнерами, исследователями и любителями, для изучения, прототипирования и производства. Он создан для изучения основ компьютерного программирования в визуальном контексте и служит альбомным программным обеспечением (имеется в виду то, что каждый *.pde файл визуальной оболочки Processing’а представляет собой отдельное изображение или анимацию, и т. д.) и профессиональным производственным инструментом.
Arduino Software (IDE)[/b]
Андроид-устройство[/b], которое поддерживает режимUSB-хоста[/b](проверено на MotorolaXoom.
А так же паяльник, прямые руки, ножницы.
Что надо для изготовления рамы
Рама квадрокоптер делается из бамбуковых шашлычных палочек
Крепления двигателей к раме делаются из палочек для коктейля.
Изолента- используется для крепления платы приемника, электродвигателей к раме. Нитки нужны для скрепления деталей перед склейкой. Цианакриловый клей. Резинка для крепления аккумулятора к раме.
Список электроники для квадрокоптера.
Все эти детали могут быть повреждены во время пробных запусков или во время полетов, поэтому заказывайте с запасом. Ссылки даны для примера. Есть много поставщиков.
Лопасти для вертолета
Двигатели. Я не нашел двигатели с размерами 4х7 мм на Алиэкспресс нашел вот такие. Моторы должны быть без щеточные.
Плата приемника эта плата содержит все компоненты- гироскоп, акселометр, ESC (система курсовой устойчивости), CPU который все эти компоненты объединяет. Литий полимерный аккумулятор:1 x 240mah 1S ‘LiPo. Можно использовать разные аккумуляторы с меньшей или большей емкости. Если вы решите построить октакоптер, то вам понадобиться более емкая батарея.
Список аппаратного контроля квадрокоптера.
Это те части вашего будущего вертолета, которые позволят ему принимать ваши команды.
Приемопередатчик Учтите что в комплекте должны быть два модуля. И это не тоже самое что NRF24L01, что бы ни утверждал продаван.
Arduino DUE[/b]или аналогичный, он будет использоваться для связи вашего Андроид-устройства и A7105. Автор использовал именно эту плату Arduino потому, что она имеет USB подключенный к последовательному порту и может работать с 3.3в логикой, хотя можно применить преобразователь уровней 5-3.3в.
Макетная плата-на ней вы будете монтировать радио модуль и подключать его к Arduino. Резистор 22кОм- значение его не особо критично. Провода для соединения радио модуля. OTG переходник для вашего андроид устройства.
OTG
Hubsan-пульт дистанционного управления-это не обязательно, но удобно.
Создание каркаса.
Каркас изготавливается из бамбуковых палочек, скрепленных крест на крест с трубочками от коктейлей. Все это склеивается вместе супер клеем.
1: Распечатайте шаблон SVG в прикрепленном файле. Он сложнее, чем должен быть, но также используется для строительства октокоптера. Шаблон нужен, чтобы сделать правильный квадрат.
2. Отрежьте нитку по длине вашего предплечья.
3 Возьмите две палочки для коктейлей и держите их так, чтобы шашлычная палочка делила их пополам и они находились друг на против друга .
4 Начните оборачивать нитку сначала по одной диагонали , потом по другой, наматывайте равномерно ,пока нитка не кончится. Не беспокойтесь о том, что палочки смещаются, вы их позже приклеите клеем. Нитку возьмите длиной с ваше предплечье. Не волнуйтесь по поводу того, что палочки слишком длинные, позже они будут использоваться как крепления мотора и ноги квадрокоптера.
5. Возьмите еще две палочки для канапе и закрепите их как в предыдущем шаге , только на расстоянии 4 пальцев от ранее прикрепленных. Точное расстояние не важно, вы исправите его далее.
6. Положите шаблон на ровную поверхность, лучше использовать стекло.
7. Разместите ваши связанные вместе палочки, как показано на фото.
На данном этапе важно все сделать как можно точно. Квадрокоптеры не очень чувствительны к распределению веса, но если ваши моторы не будут направлены вертикально, вертолет будет не очень хорошо летать, так что проверьте все два раза. Чтобы крепления моторов были строго вертикальными, а все диагонали одинаковыми.
8 Пропитайте все ваши нити, связывающие палочки, супер клеем. Надо пропитать нити насквозь, стремитесь не сдвигать при этом ваш каркас. Подождите 2 минуты и переверните ваш шаблон, чтобы пропитать нитки клеем с обратной стороны. Еще через две минуты первая квадратный кронштейн будет готов готова.
9. Повторите все тоже самое для второго кронштейна.
10. Далее надо скрепить вместе два кронштейна, как было уже описано. Еще раз убедитесь, что все крепления моторов выставлены вертикально и кронштейны скрепляются строго по середине.
11. Обрежьте палочки примерно на длину 2 см с обеих сторон.
12. Отрежьте 4 палочки по 1.5 см , склейте их вместе квадратом, особо прочная склейка не нужна, это будет кронштейн для платы и батареи питания.
Следующий этап состоит из пайки ваших 4 моторов к плате 4Х приемника. Первое, что надо – это припаять провода питания на нижнюю часть платы. Далее мы будем ссылаться на эту ориентацию (плата лежит на “спине”)
Как подключать моторы.
На Hubsan х 4 платах есть контактные площадки для подключения светодиодов и моторов. Те, что для светодиодов имеют обозначение LED, туда НЕНАДО подключать моторы. Контакты для моторов помечены ve[/b]и–ve.[/b]
Возьмите один из ваших 4 моторов с черным и белым проводами и припаяйте их кЛЕВЫМ НИЖНИМ[/b]контактам платы, белым проводом к левому контакту пары. Возьмите мотор с красным и синим проводами и припаяйте его кЛЕВЫМ ВЕРХНИМ[/b]контактам, красным проводом к левому контакту пары.. Возьмите мотор с черными и белыми проводами и припаяйте их кПРАВЫМ ВЕРХНИМ[/b]контактам, черным проводом к левому контакту. Возьмите мотор с красным и синим проводами и припаяйте его кПРАВЫМ НИЖНИМ[/b]контактам, красным проводом к левому контакту пары.
В схеме подключения белый провод это черная пунктирная линия. Провода надо закрепить каплей горячего клея. Закрепите моторы двумя полосками изоленты шириной 5мм. Не стоит особо волноваться по поводу одинакового расположения моторов по высоте. После того,как моторы закреплены, надо надеть на оси пропеллеры. Используйте белый пропеллер для “переда”с противоположной стороны от проводов батареи) и чёрный пропеллер для”зада”. Это не так просто, как кажется, так. как одни лопасти сделаны для вращения по часовой стрелке, а другие , для вращения против часовой стрелки. На лопастях есть обозначения. Используйте лопасти с буквой “А[/b]” для левого верхнего и правого нижнего моторов. С буквой “В[/b]“, соответственно, для правого верхнего и левого нижнего моторов. Теперь вы можете прикрепить батарею к нижней части платы, автор использует для этой части резинку. Если у вас есть оригинальный hubsan контроллер, вы сможете поднять квадро в воздух. Если вертолёт трясёт в воздухе, значит, моторы стоят не строго вертикально. Подкладывая кусочки свернутой бумаги, можно выравнять моторы.
Сборка радиоуправления на arduino.
Этот пункт проекта расскажет как управлять вертолетом с помощью Андроид устройства,через последовательный порт Arduino.
Вам нужны 6 контактов на плате А7105. Слева GND. Справа-SDIO, SCK, SCS, GND, VCC.
Припаяйте жесткий одножильный провод, длиной 2 см, к каждому указанному выводу. Вставьте А7105 в макетную плату, так как показано на фото. Соедините выводы GND на плате arduino и два на А7105. Соедините вывод 3.3V на Arduino c выводом VCC на плате А7105. На разъеме SPI Arduino, соедините вывод MOSI с одним из выводов резистора , другой конец резистора соедините с пином SIDO на А7501.
По этой ссылке можно посмотреть где находится вывод MOSI
Вывод SCK Arduino c выводом SCK А7105 , SCS с платы А7105 на пин 10 Arduino . Синий резистор на фото не является частью проекта.
Arduino софт
Нижеследующий скетч использует хакнутую версию PhracturedBlue’s hubsan X4 и A7105 оригинал кода можно посмотреть здесь.
Подключить Ваш DUO к компьютеру через ‘Programming Port’. Скачайте зип фаил, загрузите скетч в Arduino и выгрузите его в DUO. Этот скетч обрабатывает команды с последовательного порта и преобразует их в команды платы управления вашего квадрокоптера. Этот скетч связывается с платой Hubsan по радио без последовательного порта, так что, если включите ваш коптер, а затем Arduino, и огни на коптере перестанут моргать, значит все в порядке.
Программное обеспечение для Андроид
Это программноеобеспечениедает вам простой контролер полета на базе андроид устройства. Для управления используется акселерометр и сенсорный экран вашего устройства. Планшет или телефон будет обмениваться данными с Arduino через порт USB.
Установка софта:
1 Надо разрешить отладку по USB и разрешить установку приложений не google play. Скачать приложение можно здесь
2Подключитесвое устройство через переходник OTG к Arduino, он будетзапитыватьсяот вашего телефона или планшета, поэтому проверьте, чтобы аккумулятор был полностью заряжен.
3 Подключите аккумулятор к коптеру и положите его на плоскую поверхность. Если огни перестали моргать, значит все в порядке.
4 Большой палец левой руки медленно сдвиньте по экрану, пропеллеры должны начать вращаться. Уберите палец и пропеллеры остановятся.
5 Проделайте все тоже самое, только разместите большой палец правой руки тоже на экране. Это позволит вам управлять вертолетом с помощью акселерометра, наклоняя ваше устройство вперед/назад, влево/вправо. Перемещая большой палец правой руки влево или вправо, вы будете закручивать вертолет влево или вправо вокруг оси. Если убрать правую руку с экрана, вертолет должен выровняться, не зависимо от положения акселерометра. Попробуйте. Перемещайте палец левой руки до тех пор, пока вертолет не взлетит. Помните – если убрать оба пальца- моторы остановятся.
Программное обеспечение для ПК
В архиве программа, которая управляет коптером через последовательный порт. Управляется коптер с помощью курсорных кнопок, и кнопок “A”/”Z”- дроссель. Автор сделал попытку заставить следовать коптер за объектом определенного цвета, но это пока не работает. Обещал выкладывать обновления.
Питание и контроллеры питания
Капитан подсказывает: чем больше мощность мотора, тем больше батарейка ему нужна. Большая батарейка — это не только емкость (читай, время полета), но и максимальный ток, которая она отдает. Но чем больше батарейка, тем больше и ее вес, что вынуждает скорректировать наши прикидки относительно винтов и моторов.
На сегодняшний день все используют литий-полимерные батарейки (LiPo). Они легкие, емкие, с высоким током разрядки. Единственный минус — при отрицательных температурах работают плохо, но если их держать в кармане и подключать непосредственно перед полетом, то во время разряда они сами слегка разогреваются и не успевают замерзнуть. LiPo-элементы вырабатывают напряжение 3,7 В.
При выборе батареи стоит обращать внимание на три ее параметра: емкость, измеряемую в миллиампер-часах, максимальный ток разряда в емкостях аккумулятора (С) и число ячеек (S). Первые два параметра связаны между собой, и при их перемножении ты узнаешь, сколько тока сможет отдавать этот аккумулятор продолжительное время.
Например, твои моторы потребляют 10 А каждый и их четыре штуки, а батарея имеет параметры 2200 мА · ч 30/40C, таким образом, коптеру требуется 4 • 10 A = 40 A, а батарея может выдавать 2,2 A • 30 = 66 A или 2,2 А • 40 = 88 А в течение 5–10 секунд, что явно будет достаточно для питания аппарата. Также эти коэффициенты напрямую влияют на вес аккумулятора. Внимание!
Если тока будет не хватать, то в лучшем случае батарея надуется и выйдет из строя, а в худшем загорится или взорвется; это же может произойти при коротком замыкании, повреждении или неправильных условиях хранения и зарядки, поэтому используй специализированные зарядные устройства, аккумуляторы храни в специальных негорючих пакетах и летай с «пищалкой», которая предупредит о разрядке.
Элементы батареи объединяют последовательно или параллельно. При последовательном включении увеличивается напряжение, при параллельном — емкость. Схему подключения элементов в батарее можно понять по ее маркировке. Например, 3S1P (или просто 3S) — это три последовательно подключенных элемента.
Однако моторы подключаются к батарее не напрямую, а через так называемые регуляторы скорости. Регуляторы скорости (они же «регули» или ESC) управляют скоростью вращения моторов, заставляя твой коптер балансировать на месте или лететь в нужном направлении. Большинство регуляторов имеют встроенный стабилизатор тока на 5 В, от которого можно питать электронику (в частности, «мозг»), можно использовать отдельный стабилизатор тока (UBEC).
Выбираются контроллеры скорости исходя из потребления мотором тока, а также возможности перепрошивки. Обычные регули довольно медлительны в плане отклика на поступающий сигнал и имеют множество лишних настроек для коптеростроительства, поэтому их перепрошивают кастомными прошивками SimonK или BLHeli.
Китайцы и тут подсуетились, и часто можно встретить регуляторы скорости с уже обновленной прошивкой. Не забывай, что такие регули не следят за состоянием аккумулятора и могут разрядить его ниже 3,0 В на банку, что приведет к его порче. Но в то же время на обычных ESC стоит переключить тип используемого аккумулятора с LiPo на NiMH или отключить уменьшение оборотов при разрядке источника питания (согласно инструкции), чтобы под конец полета внезапно не отключился мотор и твой беспилотник не упал.
Моторы подключаются к регулятору скорости тремя проводами, последовательность не имеет значения, но если поменять любые два из трех проводов местами, то мотор будет вращаться в обратном направлении, что очень важно для коптеров.
Два силовых провода, идущих от регулятора, надо подключить к батарейке. НЕ ПЕРЕПУТАЙ ПОЛЯРНОСТЬ! Вообще, для удобства регуляторы подключают не к самой батарейке, а к так называемому Power Distribution Module — модулю распределения энергии. Это, в общем-то, просто плата, на которой припаяны силовые провода регуляторов, распаяны разветвления для них и припаян силовой кабель, идущий к батарее.
Скетч
Как прошить контроллер через Arduino IDE.
- ir-remote.ino
// Библиотека для хранения данных во флеше вместо RAM#include <avr/pgmspace.h> // Библиотека для работы с ИК-приёмником и передатчиком#include <IRremote.h> // Имя пина, которому подключен приёмник#define RECV_PIN 4// Имя пина, к которому подключен передатчик#define SEND_PIN 9 // Создаём объект для ИК-приёмника IRrecv irrecv(RECV_PIN); // Создаём объект для ИК-передатчика IRsend irsend; // Создаём объект для декодированных команд с ИК-пульта decode_results results; // Массивы для хранения ИК-команд: On и Offconstunsignedint PROGMEM irSignalOn []={9050,4400,600,1600,650,1600,650,450,650,450,650,500,600,500,600,1600,650,1600,650,1600,600,1650,600,1600,650,1600,650,450,600,500,650,450,650,1600,650,450,650,450,650,450,650,500,600,500,600,1600,650,1600,650,1600,600,500,600,500,650,450,650,450,650,450,650,500,600,500,600,500,600,500,600,500,600,500,600,500,650,450,650,1600,600,1650,600,500,600,500,600,550,600,500,600,500,600,450,650,500,600,500,600,500,600,500,600,500,600,500,600,550,600,500,600,1600,600,550,600,500,600,500,600,500,550,550,600,500,600,500,600,500,600,500,600,500,600,550,550,550,600,500,550,550,600,500,600,500,600,500,600,500,600,500,600,550,550,550,600,500,550,550,600,1600,600,550,600,500,600,500,600,500,600,500,600,500,600,500,600,500,600,550,600,500,550,1650,600,550,550,1650,600,500,600,550,550,550,550,550,600,500,600,1600,650,1600,600,1650,600,500,600,1600,650,450,650,1600,650,1600,650}, PROGMEM irSignalOff []={9050,4400,650,1600,600,1650,600,500,600,500,600,500,600,550,550,1650,600,1600,600,1650,650,1600,600,1650,600,1600,600,550,600,500,600,500,600,1600,650,500,600,500,600,500,600,500,600,500,600,1650,600,1600,650,1600,650,500,600,500,600,500,600,500,600,500,600,500,600,500,600,550,550,550,550,550,600,450,650,500,600,450,650,1600,650,1600,600,500,600,500,650,450,650,500,550,500,650,450,600,550,600,500,600,500,600,500,600,500,600,500,600,500,650,450,600,1650,650,450,650,450,650,450,650,450,650,500,600,500,600,500,600,500,600,500,600,550,600,450,650,500,600,450,650,500,600,500,600,500,600,500,600,500,600,500,600,550,600,500,600,500,600,500,600,500,600,500,600,500,600,500,600,500,600,500,600,500,650,450,600,500,650,450,600,500,650,1600,650,500,600,1600,600,550,600,500,600,500,600,500,600,500,600,1600,650,1600,600,1650,600,500,600,1650,600,1600,650,500,550,1650,650}; // Переменная для хранения состояния режима "запись ИК-сигнала" bool recordState =/*true;*/false;// true - для режима чтения, false - для игнорирования режима чтения // Частота (КГц) с которой будут передаваться сигналыint khz =38; // Строка с хранением данных введенных в последовательный порт String command =""; void setup(){// открываем последовательный порт Serial.begin(9600);// если состояния режима "чтение ИК-сигнала", trueif(recordState){// Запускаем работу ИК-приёмника irrecv.enableIRIn();// производим процесс декодирование принятых сигналов reading (&results);}} void loop(){// пока в Serial port поступают символы...while(Serial.available()>0){// ...символ записываем в переменнуюchar symbol = Serial.read();// если приходит символ разрыва строки...if(symbol =='n'){// выводим полученную команду Serial.println(command);// идентифицируем полученную командуif( command =="ON"){// если пришла команда ON, выполняем отправку соответствующей команды sending (irSignalOn);// выводим сообщение об отправке Serial.println("Signal "ON" sent.");}elseif(command =="OFF"){// если пришла команда OFF, выполняем отправку соответствующей команды sending (irSignalOff);// выводим сообщение об отправке Serial.println("Signal "OFF" sent.");} for(int i =0; i <sizeof(irparams.rawbuf)/sizeof(irparams.rawbuf[0]); i ){ irparams.rawbuf[i]=0;} command ="";}else{// ... если символ не является символом разрыва строки, то вписываем его в последовательность command = symbol;}}} // функция отправки ИК-командvoid sending (unsignedint irSygnal[]){// если пришла команда , извлекаем массив команды из флеш памятиfor(int i =0; i <sizeof(irparams.rawbuf)/sizeof(irparams.rawbuf[0]); i ){ irparams.rawbuf[i]= pgm_read_word_near(irSygnal i);}// выполняем отправку команды irsend.sendRaw(irparams.rawbuf,sizeof(irparams.rawbuf)/sizeof(irparams.rawbuf[0]), khz);// выводим сообщение об отправке } // функция режима "чтение ИК-сигнала"void reading (decode_results *results){// "Введите команду с пульта дистанционного управления" Serial.println("Enter the command from the remote control. ");while(1){// ожидаем, пока придет команда с пультаif(irrecv.decode(results)){ Serial.print("irSygnal[");// имя массива Serial.print(results->rawlen -1, DEC);// размер массива Serial.print("] = {");// Дамп данныхfor(int i =1; i < results->rawlen; i ){ Serial.print(results->rawbuf[i]* USECPERTICK, DEC);if( i < results->rawlen -1) Serial.print(",");// ',' не нужна на последнемif(!(i &1)) Serial.print(" ");} Serial.println("};");// перезапустим ИК-приёмник irrecv.resume();break;}}// запускаем функцию вновь reading (results);}
Создаем квадрокоптер на базе arduino
Не обязательно покупать беспилотник в магазине — теперь вы можете сделать квадрокоптер на базе arduino самостоятельно. Дрон будет иметь мощное автономное питание и функционировать на стабилизационный системе, основой которой будет база Arduino. Если сделать летательный аппарат своими руками, можно сэкономить приличную сумму. Покупной коптер стоит минимум 80 долларов. Если вы создадите его самостоятельно, это обойдется примерно в 60 условных единиц.
Самодельный квадрокоптер — предмет отдельного разговора. Всегда были, есть и будут пользователи, которым мало просто летать. Им необходимо почувствовать себя великими конструкторами и быть уверенными, что дрон, сделанный собственноручно, будет летать так, как хочется именно им.
Летающую модель с 4 ножками можно сотворить своими руками. Процесс не покажется вам сложным, а наоборот, доставит удовольствие, но только при условии изучения инструкции и пошагового ее соблюдения. Прежде всего, перед процессом создания дрона, стоит определиться с элементами, которые будут использованы в работе. В качестве контролера, как и предполагалось, будем использовать платформу Arduino — это недорогая, но качественная база, которая обеспечит устройству бесперебойную работу.
Для создания беспилотника важно правильно подобрать двигатели. Бесщеточные достаточно мощные, но их стоимость составляет минимум 20 долларов, это означает, что устройство обойдется около 80 долларов. В данном случае стоит отдать предпочтение щеточному варианту — намного дешевле, и не требуют установки дополнительных контроллеров.
Так же необходимо позаботиться о приобретении качественного мотора, а затем заняться его стабилизацией. Здесь не обойтись без акселерометра и гироскопа. Так определим угол наклона и ускорение. Данные сенсоры — для создания мощной модели. Чтобы сделать квадрокоптер своими руками с управлением Arduino, вам понадобятся:
- аккумуляторы на 3,7 В литиевого типа;
- провода;
- транзистор не слабее ULN2003A Darlington Transistor;
- моторы Coreless Motors;
- микроконтроллер 0820 Coreless Motors;
- гироскоп;
- акселерометр;
- инструменты для спаивания;
- 3D принтер.
Первое, что следует сделать – это создать раму для будущего квадрокоптера. Каркас получится легким и прочным, если воспользоваться 3D принтером. Затем следует настроить акселерометр и гироскоп. Не нужно подключать к 5 В — это может привести к тому, что плата испортится. Лучше отдать предпочтение 3.3 В. Необходимо учесть, что в большинстве плат есть специальный регулятор напряжения.
После подключения акселерометра можно начать сборку электросхемы. Чтобы сделать все правильно, стоит просмотреть подробное видео, где доступно разъясняют способы сборки. Теперь у вас есть свой квадрокоптер, который вы сделали под нашим четким руководством.
Как оказалось – это вполне реальная задача. Процесс не доставит вам забот, зато можно сэкономить большую сумму. Если возникли сомнения по поводу запуска вашего устройства, инструкцию о том как это сделать читайте здесь. При правильном обращении квадрокоптер на базе arduino прослужит долго.
Шаблоны Инстаграм БЕСПЛАТНО
Хотите получить БЕСПЛАТНЫЙ набор шаблонов для красивого Инстаграма?
Напишите моему чат-помощнику в Telegram ниже 👇
Вы получите: 🎭 Бесплатные шаблоны “Bezh”, “Akvarel”, “Gold”
Telegram Viber Vkontakte
или пишите “Хочу бесплатные шаблоны” в директ Инстаграм @shablonoved.ru
Шаблоны Инстаграм БЕСПЛАТНО
Хотите получить БЕСПЛАТНЫЙ набор шаблонов для красивого Инстаграма?
Напишите моему чат-помощнику в Telegram ниже 👇
Вы получите: 🎭 Бесплатные шаблоны “Bezh”, “Akvarel”, “Gold”
Telegram Viber Vkontakte
или пишите “Хочу бесплатные шаблоны” в директ Инстаграм @shablonoved.ru