Блок управления квадрокоптером ArDrone 2.0 на модуле ESP8266

Блок управления квадрокоптером ArDrone 2.0 на модуле ESP8266 Вертолеты

ESP-01

На ESP8266 самым популярным модулем является SP-01. Открытая PCB-антенна может покрыть диапазон 400 метров.

ESP-07

Он поставляется с керамической антенной, разъемом для подключения внешней антенны и металлическим экраном.

Esp8266 esp-07 вместе с adapter plate


Инструкция подключения ESP-07 (ESP-12) через UART-конвертер:

E SP-07 и адаптер были спаяны вместе с помощью паяльника. Адаптер рекомендуется использовать, поскольку он позволяет соединять макетную плату и провода без пайки. Мой источник питания – понижающий DC-DC преобразователь из Китая. Поскольку у меня были в наличии датчики DS18B20, я решил использовать их.

Этот пример я выбрал, поскольку не собирался сразу устанавливать HomesSmart. Схему и код повторять не нужно – они практически идентичны. Программа заработала не сразу, но когда были запущены Google и Tambourine, данные потекли в People Monitoring.

Сценарий был загружен с помощью программы ESplorer.


Жду компактный модуль питания 220AC — 3,3DC чтобы оптимизировать количество проводов.

Lolin v3 nodemcu (лолин)

Было рекомендовано прошить эту плату прошивкой NodeMcu, что можно сделать с помощью программы NodeMcu flasher. Прошивка собирается конструктором, поэтому включено только самое необходимое.

Предполагалось, что бра будет подключено к 2-канальному реле и управляться с двумя бра в спальне. Здесь я хочу отметить одну вещь. В китайской версии этого реле есть перемычка JD-VCC – VCC – GND. По умолчанию она установлена в положение JD-VCC – VCC.

Никогда не ставьте перемычку на контакты VCC – GND – это приведет к короткому замыканию! Эти три выключателя используются для подачи дополнительного питания на реле в случаях, когда управляющего выключателя может быть недостаточно для его работы. Если перемычка включена, это означает, что питание подается на “управляющие” контакты.

Использовался следующий скрипт:

Текст скрипта

#================= init.lua =================
-- вводим имя сети и пароль сюда
ssid,pass = "SSID","PASSWORD";

if (file.open('wificonf') == true)then
   ssid = string.gsub(file.readline(), "n", "");
   pass = string.gsub(file.readline(), "n", "");
   file.close();
end

wifi.setmode(wifi.STATION)
wifi.sta.config(ssid,pass)
wifi.sta.autoconnect(1);
print('IP:',wifi.sta.getip());
--print('MAC:',wifi.sta.getmac());

led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
restart=0;

gpio.write(led1, gpio.HIGH);
gpio.write(led2, gpio.HIGH);


t=0
tmr.alarm(0,1000, 1, function() t=t 1 if t>999 then t=0 end end)

srv=net.createServer(net.TCP, 1000)
srv:listen(80,function(conn)
    conn:on("receive",function(client,request)
    -- парсинг для отслеживания нажатий кнопок _GET
            local buf = "";
        local _, _, method, path, vars = string.find(request, "([A-Z] ) (. )?(. ) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z] ) (. ) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w )=(%w )&*") do
                _GET[k] = v
            end
        end
    -- это начало веб сайта
       -- в начале ставим <html><body>, в конце каждой строки знак 
   -- в конце последней строки не ставим знак , а </body></html>
    conn:send('HTTP/1.1 200 OKrnConnection: keep-alivernCache-Control: private, no-storernrn
   <!DOCTYPE HTML>
<html>
 <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
        <title>My control</title>
   </head><body>
        <div class="container">
            <section class="color-1">
                <p>
                    <a href="?pin=ON1"><button class="btn btn-4 btn-4a">Back ON</button></a>
                    <a href="?pin=ON2"><button class="btn btn-4 btn-4a">Bra ON</button></a>
                </p>
                <p>
                    <a href="?pin=OFF1"><button class="btn btn-5 btn-5a">Back OFF</button></a>
                    <a href="?pin=OFF2"><button class="btn btn-5 btn-5a">Bra OFF</button></a>
                </p>
            </section>
        </div>
</body></html>')
    -- это конец
    -- теперь опрос нажатых кнопок
        local _on,_off = "",""
        if(_GET.pin == "ON1")then
              gpio.write(led1, gpio.LOW);
        elseif(_GET.pin == "OFF1")then
              gpio.write(led1, gpio.HIGH);
        elseif(_GET.pin == "ON2")then
              gpio.write(led2, gpio.LOW);
        elseif(_GET.pin == "OFF2")then
              gpio.write(led2, gpio.HIGH);
        end
        
  
              
    conn:on("sent",function(conn) conn:close() end)
    collectgarbage();

    
    end)
    
end)

#========================================

Я не смог снова найти ссылку на первоисточник. Но схема проста: Мы подключаем реле 1 и реле 2 к выходам D3 и D4 (

led1 = 3 led2 = 4

). Далее перейдите на IP-адрес, указанный на нашем маршрутизаторе, и посмотрите:

Я еще не придумал, как добавить файлы стилей CSS, чтобы сайт выглядел лучше. Меня интересует именно участие отдельных файлов в выводе страницы, а не установка стилей.

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

Аппаратная часть

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

В чем была проблема и как сломался первый модуль, который я мучил, неизвестно, но, скорее всего, его убила нещадная статика. Мораль этого лирического отступления такова: если что-то не заработало по написанной ниже инструкции, не вините инструкцию – сначала проверьте и перепроверьте все контакты, а потом попробуйте на другом модуле.

1) Сборка схемы

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

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

2.1) Отсоединить модуль от источника питания

2.2) Подключаем пин GPIO 0  к GND

2.3) Подключить модуль к источнику питания

2.4) Теперь, когда аппаратное обеспечение завершено, приступим к работе над программным.

Внешний вид

Давайте рассмотрим этот модуль на примере его припаивания к Wi-Fi модулю Troyka от Amperka. Хотя они дороже, с ними гораздо приятнее иметь дело. Здесь уже есть припаянные контакты со стандартным шагом 2,54 мм, дополнительная защита и регуляторы напряжения, чтобы избежать неожиданного поведения и сбоев во время первых экспериментов.

Дистанционное управление микроконтроллером: ик-пульт, arduino, esp8266, 433 мгц

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

Виды

Существует два основных типа удаленной связи:

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

Беспроводной. При использовании этой опции электрическое соединение между цепями управления и привода не требуется. Беспроводная схема включает в себя два устройства: передатчик или пульт дистанционного управления (ПДУ) и приемник, который является частью схемы управления. Беспроводное управление также можно разделить на два типа:

  • Оптический сигнал. Системы такого типа есть в каждом доме, и поэтому они контролируют работу телевизора, кондиционера и других бытовых приборов.
  • По радиосигналу. Здесь есть целый ряд вариантов: Bluetooth, ZigBee, Wi-Fi, приемопередатчики 433 мГц и другие вариации на эту тему.
Смотрите про коптеры:  Как изготовить самолет на радиоуправлении

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

Инфракрасный пульт управления

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

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

Очевидно, что его недостатком является необходимость наведения пульта дистанционного управления на приемник. Кроме того, вам придется прицеливаться, когда в пульте сядут батарейки, поскольку триггеров становится все меньше и меньше.

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

Это типичный датчик. Поскольку принимается оптический сигнал, посторонние триггеры, такие как солнечный свет, лампочки и другие, не могут быть обнаружены. Еще один важный факт, который следует отметить, заключается в том, что ИК-сигнал принимается в основном на частоте 38 кГц.

Ниже приведена характеристика одного из инфракрасных сенсоров:

  • Несущая частота: 38 кГц;
  • Напряжение питания: от 2,7 В до 5,5 В;
  • Потребление тока: 50 мкА.

И схема электропроводки:

Можно использовать любой пульт дистанционного управления, работающий аналогичным образом; также подходят пульты дистанционного управления других производителей:

  • Телевизоры,
  • DVD-плееры,
  • Стереопроигрыватели,
  • Современные осветительные приборы, такие как умные люстры и светодиодные ленты, и т. д.

Этот пример демонстрирует, как можно использовать датчик с Arduino:

В нашем случае мы используем Arduino, которому для связи с датчиком требуется библиотека IRremote.h. Ниже приведен пример кода, показывающий, как считывать сигнал с датчика из Arduino IDE путем чтения последовательного порта:

#include “IRremote.h” // подключаем библиотеку для работы с ИК сигналом.

IRrecv irrecv(2); // определяет выход, к которому подключен приемник

Декодировать_результаты;

void setup() {

Serial.begin(9600); // установить скорость COM-порта

Irrecv.enableIRIn(); // начать прием

}

void loop() {

if ( irrecv.decode( &results )) { // если данные пришли

Serial.println( results.value, HEX ); // печатаем данные

Irrecv.resume(); // примите следующую команду

}

}

Если прошить arduink и начать “светить” пультом в приемник, то на мониторе последовательного порта появится следующая картинка:

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

Кроме того, с помощью этого кода можно управлять нагрузкой:

#include “IRremote.h”

I Rrecv irrecv(2); // задайте выход, к которому подключен приемник

Результаты декодирования ;

void setup() {

Irrecv.enableIRIn(); // начать прием

}

void loop() {

if ( irrecv.decode( &results )) { // если данные пришли

switch ( results.value ) {

case 0xFFA857:

digitalWrite( 13, HIGH );

break;

case 0xFFE01F:

digitalWrite( 13, LOW );

Переломы;

}

Irrecv.resume(); // принять следующую команду

}

}

Основным элементом кода является распознавание функцией switch, иногда называемой switchcase. Она аналогична ветвлению if, но имеет более приятную для восприятия форму. Случаи – это варианты, “если введен этот код, то…”. Код управляет выводом 13 по некоторым сигналам. Напомню, что встроенный светодиод на плате ARDUINO подключен к выводу 13, т.е. автор кода управлял светодиодом.

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

Прием и передача радиосигналов

Для использования с микроконтроллерами обычно применяются передатчики с рабочей частотой 433 МГц или 315 МГц, в зависимости от конкретной платы могут быть доступны и другие частоты, но эти являются наиболее распространенными. Система состоит из двух узлов, приемника и передатчика, что логично.

На картинке передатчик виден вверху справа, а приемник – внизу слева. Он ищет радиомодули 433 МГц, MX-05V/XD-RF-5V (приемник и передатчик) для этой цели.

Распиновка, как это часто бывает в случае с модулями, напечатана на плате, как и в случае с передатчиком:

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

В качестве примера, вот схема и код для подключения платы arduino к другой такой же плате, без проводов, для включения светодиода. Между приемником и передатчиком на обеих платах имеется прямое соединение:

Аппарат:МодульПины ардуино.
ПолучательVCC

GND

DATA

5V

GND

2

ПередатчикVCC

GND

DATA

5V

GND

2

Далее в IDE Arduino необходимо подключить библиотеку RCswitch.h.

(скачать её можно здесь https://github.com/sui77/rc-switch/archive/v2.52.zip)

Начнем с написания программы-передатчика:

#include

R CSwitchmySwitch = RCSwitch(); // создаем объект для работы с фронтом

void setup() {

MySwitch.enableTransmit(2); // сообщить программе, к какому выводу подключен информационный канал

}

void loop() {

mySwitch.send(B0100, 4);

Задержка (1000);

mySwitch.send(B1000, 4);

Задержку (1000) ;

}

Передатчик умеет передавать двоичный код, но его значения могут быть записаны в десятичном виде.

mySwitch.send(B0100, 4);

и

mySwitch.send(B1000, 4);

Это команды передачи, mySwitch – имя передатчика, которое мы указали в начале кода, а send – команда отправки. В этой функции аргументами являются:

Transmission.send(значение, размер импульсного пакета, отправляемого в эфир);

Символ B1000, или число 8, означает двоичное число, может быть записано как B 1000. в десятичном представлении. Вы также можете набрать “1000” как строку (в кавычках).

Следующий шаг – написать код для приемника (код прошивается в плату, к которой подключается приемник):

#присоединиться

RCSwitch mySwitch = RCSwitch();

void setup() {

pinMode( 3, OUTPUT );

mySwitch.enableReceive(0);

}

void loop() {

if( mySwitch.available() ){

int value = mySwitch.getReceivedValue();

if( value == B1000 )

Цифровая запись( 3, HIGH ) ;

else if( value == B0100 )

digitalWrite( 3, LOW );

mySwitch.resetAvailable();

}

}

Наша функция switch.getReceivedValue() сохраняет полученное значение в переменной Value. Это означает, что приемник подключен к контакту 2, как описано в mySwitch.enableReceive(0).

В коде, приведенном ниже, мы устанавливаем контакт №3 в высокое состояние (лог единица) при получении сигнала 0100 и в низкое состояние (лог ноль) при поступлении сигнала 1000.

Интересное:.

Строкой mySwitch.enableTransmit(0) мы сообщаем программе, что на выводе 2 находится приемник, и режим приема включен. Самые внимательные заметят, что аргументом этого метода является не номер пина “2”, а “0”, потому что метод enableTransmit(number) принимает не номер пина, а номер прерывания, а у atmega328, которая используется в Arduino Uno, nano, promini и некоторых других, на втором пине (PortD pin PD2) есть прерывание с номером ноль. На распиновке Atmega, применимой к плате Arduino, вы можете увидеть номера выводов, записанные в розовых квадратах.

Передача и прием просты и недороги, комплект из приемника и передатчика в настоящее время стоит около 1,50 долл.

Wi-Fi, адруино и ESP8266

Начнем с того, что ESP8266 – это микроконтроллер с аппаратной поддержкой Wi-Fi, который продается как в виде отдельного чипа, так и впаянным в плату, подобно arduino. Он имеет 32-битное ядро и программируется через последовательный порт (UART).

Карты обычно имеют 2 или более свободных выводов GPIO, также всегда есть выводы для прошивки, но это нужно делать через переходник с USB на последовательный порт. Управление осуществляется с помощью AT-команд, полный список которых можно найти на официальном сайте ESP8266 и на github.

Платы NodeMCU были бы интересным вариантом, поскольку они имеют возможность прошивки через USB, так как преобразователь USB-UART уже находится на плате, обычно построенной на чипе CP2102. Node MCU – это прошивка, что-то вроде операционной системы, проект, основанный на скриптовом языке Lua.

Микропрограмма может выполнять сценарии Lua, принимая их через последовательный порт или воспроизводя алгоритмы, хранящиеся во флеш-памяти.

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

Плата работает с интерфейсами

У него есть целый ряд функций:

  • Модуль шифрования;
  • Планировщик заданий;
  • Часы реального времени;
  • Протокол синхронизации часов SNTP;
  • Таймеры;
  • Канал АЦП (один);
  • Воспроизведение аудиофайлов;
  • Формирование ШИМ сигнала на выходах (до 6);
  • Слотовое приложение, поддержка FatFS, позволяющее подключать SD карты и т.п.

Вот краткий список того, над чем может работать совет:

  • Акселерометры ADXL345;
  • Магнитометры HMC5883L;
  • Гироскопы L3G4200D;
  • Датчики температуры и влажности AM2320, DHT11, DHT21, DHT22, DHT33, DHT44;
  • Датчики температуры, влажности, атмосферного давления BME280;
  • Датчики температуры, атмосферного давления BMP085;
  • Многочисленные дисплеи, работающие через шины I2C и SPI. С возможностью работы с различными источниками;
  • TFT дисплеи ILI9163, ILI9341, PCF8833, SEPS225, SSD1331, SSD1351, ST7735;
  • Интеллектуальные светодиоды и LED драйверы – WS2812, tm1829, WS2801, WS2812.

Еще интересно то, что на сайте https://nodemcu-build.com/ можно самому собрать прошивку из нужных модулей, таким образом, вы сэкономите место, исключив из неё ненужные элементы, для своего полезного кода. И вы можете залить эту прошивку на любую плату ESP8266.

Для программирования платы можно использовать Lua, а также IDE Arduino.

E SP8266 может использоваться как самостоятельное устройство или как модуль для беспроводной связи с Arduino.

Для обсуждения всех особенностей и функций этой платы потребуется серия статей.

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

Использование одной платы ESP8266 – самый простой способ работы с микроконтроллером. Схему wi-fi розетки можно найти ниже.

Для сборки этой цепи потребуется модуль реле, или обычное реле подключенное к пину через транзистор. Для начала потребуется программа для смартфона RoboRemoFree, (https://www.roboremo.com/). В ней вы настроите подключение к ESP и сделаете интерфейс для управления розеткой. Чтобы описать, как ей пользоваться нужно написать отдельную статью, поэтому опустим пока этот материал.

Установите через ESPlorer (программа для работы с платой) следующую микропрограмму.

–WiFi AP Settup

wifi.setmode(wifi.STATIONAP)

cfg={}

cfg.ssid=”ESPTEST”

cfg.pwd=”1234567890″

wifi.ap.config(cfg)

-Установка режима шпинделя

Мой_номер_контакта = 1

–gpio.mode(my_pin_nummber, gpio.OUTPUT)

gpio.mode(my_pin_nummber, gpio.OPENDRAIN)

— создание сервера

sv=net.createServer(net.TCP)

Функция приемника (sck, данные)

if string.sub (data, 0, 1) == “1” then

–gpio.write(my_pin_nummber, gpio.HIGH)

gpio.write(my_pin_nummber, gpio.LOW)

Эллерсы

if string.sub (data, 0, 1) == “0” then

–gpio.write(my_pin_nummber, gpio.LOW)

gpio.write(my_pin_nummber, gpio.HIGH)

СМОТРИТЕ НА

Конец .

Распечатать(данные)

end

if sv then

sv:listen(333, function(conn)

Conn:on(“получать”, приемник)

conn:send(“Hello!”)

end)

end

-Создать HTTP сервер

http=net.createServer(net.TCP)

function receive_http(sck, data)

Вывести(данные)

local request = string.match(data,”([^r,n]*)[r,n]”,1)

if request == ‘GET /on HTTP/1.1’ then

–gpio.write(my_pin_nummber, gpio.HIGH)

gpio.write(my_pin_nummber, gpio.LOW)

end

Если запрос == “GET /off HTTP/1.1” далее

–gpio.write(my_pin_nummber, gpio.LOW)

gpio.write(my_pin_nummber, gpio.HIGH)

Кончить.

sck:on(“sent”, function(sck) sck:close() collectgarbage() end)

local response = “HTTP/1.0 200 OKrnServer: NodeMCU on ESP8266rnContent-Type: text/htmlrnrn”..

“”..

NodeMCU on ESP8266

“..


“..

On Off“..

“”

Sck:send(ответ)

end

if http then

http:listen(80, function(conn)

conn:on(“receive”, receive_http)

Окончательный)

end

print(“Started.”)

С помощью Roboremo или любого веб-браузера вы можете управлять программой. Для этого достаточно в адресной строке в режиме wi-fi точки прописать IP-адрес платы – 192.168.4.1.

В Кодексе есть такой пункт:

“”..

NodeMCU on ESP8266

“..


“..

On Off“..

“”

Это своего рода ответ, который выдается браузеру при обращении к доске. Он содержит HTML-код, т.е. простейшую WEB-страницу, подобную той, на которой вы сейчас читаете эту статью.

Для просмотра этой страницы используется смартфон на базе Android. Если вас заинтересовала эта информация, пишите комментарии, и мы рассмотрим и напишем об этом статью. Приведенное выше описание не является полноценной инструкцией, так как это потребовало бы много времени и усилий.

Алексей Бартош

Код прошивки

Для прошивки всех используемых ниже модулей используется один и тот же код.

Основные функции:

  1. Установление Wi-Fi соединения
  2. Подключение к объекту в платформе Rightech IoT Cloud по протоколу MQTT
  3. Отправка случайных значений температуры (“base/status/temperature”) и влажности (“base/status/humidity”) каждые 5 секунд (PUB_DELAY)
  4. Получение сообщений о переключении света (“base/relay/led1”)

Модули на базе esp8266

Модули на базе E SP8266 можно использовать двумя различными способами:

  1. Работа с AT-командами (в стандартной прошивке Wi-Fi модуль взаимодействует с платой управления посредством “AT-команд” по протоколу UART);
  2. Wi-Fi модуль как автономный контроллер (все представленные модули очень умные: внутри чипа находится целый микроконтроллер, который можно программировать на языке С через Arduino IDE).

В этой статье мы рассмотрим второй вариант – прошивку модулей как независимого законченного устройства. Кроме того, существуют две различные версии прошивки в зависимости от аппаратного обеспечения:

  1. Через плату Arduino;
  2. Через адаптер USB-последовательный порт.

Настройка среды программирования arduino ide

По умолчанию IDE настроена только для плат AVR. Вам необходимо добавить дополнительную поддержку перечисленных ниже платформ в менеджере плат.

Откройте ПО Arduino IDE.

Отправка команд взлета и посадки

Давайте добавим в наш проект взлет и посадку квадрокоптера с пультами дистанционного управления. Чтобы взлететь, необходимо послать команду

AT*REF=[порядковый номер], 290718208

Для проведения

AT*REF=[Номер последовательности], 290717696

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

AT * FTRIM = [Номер последовательности].

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

Добавим в скетч переменную из предыдущей главы, чтобы использовать кнопку:

int pinButton=5;

int lastButtons1=0;

int currentButtons1=0;

boolean onLand=true;

Процедуру борьбы с дребезгом:

// проверка на дребезг

int debounce(int last,int pin1)

 {

 int current = digitalRead(pin1);  // Считать состояние кнопки

 if (last != current)   // если изменилось...

   {

   delay(5);   // ждем 5мс

   current = digitalRead(pin1);  // считываем состояние кнопки

   return current;   // возвращаем состояние кнопки

   }

 }

И управление нажатиями кнопок:

// проверка нажатия кнопки

  currentButtons1 = debounce(lastButtons1, pinButton);

  if (lastButtons1 == 0 && currentButtons1 == 1) // если нажатие...

   {

   // изменить состояние реле

   onLand=!onLand;

   // вывести в порт

   Serial.print("onLand=");Serial.println(onLand);

   if(onLand==false) { // takeoff

   String tmr="AT*FTRIM=";

   tmr  = String(sequence);

   sendPacket(tmr);

   delay(50);

   tmr = "AT*REF=";

   tmr  = String(sequence);

   tmr  = ",290718208";

   sendPacket(tmr);

   }

   else { // landing

   String tmr = "AT*REF=";

   tmr  = String(sequence);

   tmr  = ",290717696";

   sendPacket(tmr);

   }

  }

  lastButtons1 = currentButtons1;

Запустите квадрокоптер ArDrone 2.0, загрузите скетч ardrone_esp8266_02.ino () в плату ESP8266 и проверьте работу кнопки. При нажатии на кнопку можно взлетать, садиться и т.д.

Соединение MPU6050 для управления Ardrone 2.0

С помощью датчиков положения можно управлять квадрокоптерами. Помимо акселерометра и гироскопа, микросхема MPU6050 также содержит датчик температуры. Основным компонентом GY-531 является MPU-6050 (рис. 5.) 15.44).

Кроме этой микросхемы на плате модуля необходима обвязка MPU6050, включая подтягивающий резистор интерфейса I2C, а также стабилизатор напряжения на 3,3 вольта с небольшим падением напряжения (при 3,3 вольтах питания на выходе стабилизатора будет ровно 3 вольта) с фильтрующими конденсаторами.

Соединение с микроконтроллером через протокол I2C.

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

uint8_t* data = i2cRead(0x3B,14);  accX = ((data[0] << 8) | data[1]);

 accY = ((data[2] << 8) | data[3]);

 accZ = ((data[4] << 8) | data[5]);  //tempRaw = ((data[6] << 8) | data[7]);  gyroX = ((data[8] << 8) | data[9]);

 gyroY = ((data[10] << 8) | data[11]);

 gyroZ = ((data[12] << 8) | data[13]);



 /* Calculate the angls based on the different sensors and algorithm */

 accYangle = (atan2(accX,accZ) PI)*RAD_TO_DEG;

 accXangle = (atan2(accY,accZ) PI)*RAD_TO_DEG;   double gyroXrate = (double)gyroX/131.0;

 double gyroYrate = -((double)gyroY/131.0);

 // Calculate gyro angle without any filter

 gyroXangle  = gyroXrate*((double)(micros()-timer)/1000000);  gyroYangle  = gyroYrate*((double)(micros()-timer)/1000000);

И значения, получаемые при использовании комплиментарного фильтра и фильтра Кальмана:

// значения при применении комплиментарного фильтра

compAngleX = (0.93*(compAngleX (gyroXrate*(double)(micros()-timer)/1000000))) (0.07*accXangle);

compAngleY = (0.93*(compAngleY (gyroYrate*(double)(micros()-timer)/1000000))) (0.07*accYangle); // значения при применении фильтра Кальмана

kalAngleX = kalmanX.getAngle(accXangle, gyroXrate, (double)(micros()-timer)/1000000);

kalAngleY = kalmanY.getAngle(accYangle, gyroYrate, (double)(micros()-timer)/1000000);

Команда, посылаемая ArDrone для управления полетом

AT*REF=[порядковый номер ],[битовое поле флага],[крен],[подъем],[газ],[рыскание]

Значения крена и тангажа от -1 до 1 получены из таблицы const int floats[]. Согласно данным датчика MU6050, их индексы представляют собой углы отклонения.

Установите скетч ardrone_esp8266_03.ino на плату ESP8266, включите квадрокоптер ArDrone 2.0 и проверьте работу пульта дистанционного управления.

А также видео о работе

Питание

Если вы подадите напряжение выше 3,3 В на любой из трех выводов питания, связи или ввода-вывода, вы повредите модуль.

Платы на базе esp8266

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

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

Как аппаратное, так и программное обеспечение в этих двух вариантах идентично.

1) Выбираем плату: Tools (Инструменты) -> Board(Плата)Generic ESP8266 Module.

2) Введите приготовленный код.

Задайте данные для Wi-Fi соединения и идентификатора вашего объекта на платформе.

4) Скомпилируйте и загрузите скетч.

5) Контакт 0 GPIO должен быть свободен для нормальной работы модуля (не для режима прошивки), поэтому отключите его от GND.

6) Снова подключите питание к ESP-12 (например, выньте и снова вставьте адаптер).

7) Мы видим, как появляются данные на платформе.

Подключение периферии

  • Цифровые контакты ввода/вывода: 21 контакт 1-5, 12-19, 21-23, 25-27, 32 и 33 Контакты ввода/вывода общего назначения. Контакты могут быть сконфигурированы как входные или выходные. Логический уровень единицы равен 3,3 В, а нуля – 0 В. Максимальный выходной ток составляет 12 мА.
  • Цифровые входы: 4 контакта 34-36 и 39Входы общего назначения. Они могут быть настроены только на вход.
  • ШИМ: все входные/выходные контакты Позволяют выводить аналоговые значения в виде ШИМ-сигнала с разрядностью 16 бит. Максимальное количество каналов – 16.
  • АЦП: 15 контактов 2, 4, 12-15, 25-27, 32-36 и 39Вывод аналоговых напряжений в цифровой формат с шагом 12 бит. ЦАП: контакты 25 (ЦАП1) и 26 (ЦАП2)Аналоговый выход цифро-аналогового преобразователя, который позволяет генерировать 8-битные уровни напряжения.

Максимальный выходной ток от гнезда 3 В3: 1 A

Программная часть

1) Выбираем плату: Tools (Инструменты) -> Board(Плата)Generic ESP8266 Module.

2) Введите приготовленный код.

Установка Wi-Fi соединения и идентификатора вашего объекта на платформе – это шаг 3.

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

Для нормальной работы модуля (не в режиме прошивки) вывод 0 GPIO должен быть свободен. Отсоедините этот вывод от GND.

6. Снова подключите блок питания к ESP-01 (например, вытащив и вставив обратно адаптер).

7) Мы видим, как появляются данные на платформе.

Средняя цена

~100 рублей.

Текущая цена

~ 850 рублей

Оцените статью
Радиокоптер.ру
Добавить комментарий

Adblock
detector