AR Drone 2.0 + 1Sheeld: потоковая передача данных полёта в реальном времени на ПК
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Mega 2560 | 2 | Один на дроне, второй на ПК |
| 1Sheeld | 1 | Щит для подключения смартфона к Arduino |
| AR Drone 2.0 | 1 | Квадрокоптер Parrot |
| Модули XBee (Series 1/2) | 2 | Для беспроводной связи между дроном и базовой станцией |
О проекте
Проект демонстрирует передачу телеметрии полёта с смартфона, установленного на дроне AR Drone 2.0, на компьютер в реальном времени. Используются датчики смартфона: акселерометр, GPS, гироскоп, датчик ориентации, микрофон (уровень шума), датчик освещённости. Данные собираются 1Sheeld, передаются по радиоканалу XBee между двумя Arduino Mega и выводятся на ПК через последовательный порт.
Архитектура: «Ведущий» (Master) Arduino подключён к ПК, «Ведомый» (Slave) — на дроне вместе с 1Sheeld и смартфоном. Управление запросом данных осуществляется через терминал ПК: пользователь выбирает тип телеметрии (ориентация, ускорение, GPS, шум, яркость, съёмка фото), Master отправляет команду по XBee, Slave считывает соответствующий датчик 1Sheeld и возвращает данные.
Также реализована голосовая обратная связь через Text-to-Speech на смартфоне (анонс режима).
Схемы подключения
Схема подключения XBee к Arduino одинакова для обеих плат: питание 3.3В, GND, TX/RX (через преобразователь уровней или напрямую, если используется 3.3В Arduino). На дроне 1Sheeld устанавливается на Slave Arduino, смартфон подключается по Bluetooth к 1Sheeld.
Программный код
Код Master (на ПК)
Требуется библиотека AltSoftSerial для программного последовательного порта XBee.
#include <AltSoftSerial.h>
AltSoftSerial xBee;
char cmd = 0;
char incoming = 0;
const char STOP_CMD = 's';
void setup() {
Serial.begin(115200);
xBee.begin(9600);
printMenu();
}
void loop() {
if (Serial.available() > 0) {
cmd = Serial.read();
if (isValidCommand(cmd)) {
handleCommand(cmd);
}
}
}
bool isValidCommand(char c) {
return c=='o' || c=='a' || c=='b' || c=='g' || c=='m' || c=='p';
}
void handleCommand(char c) {
char requestCode = getRequestCode(c);
Serial.println(getSensorName(c));
xBee.print(requestCode); // код запуска режима на Slave
for (int i = 0; i < 10; i++) {
delay(20);
xBee.print(c); // запрос данных
while (xBee.available() > 0) {
incoming = xBee.read();
Serial.print(incoming);
}
delay(getDelayForSensor(c));
i--; // бесконечный цикл до команды 's'
if (Serial.available() > 0 && Serial.read() == STOP_CMD) {
stopStreaming();
break;
}
}
}
char getRequestCode(char c) {
switch(c) {
case 'o': return '1'; // ориентация
case 'a': return '2'; // ускорение
case 'b': return '3'; // яркость
case 'g': return '4'; // GPS
case 'm': return '5'; // микрофон
case 'p': return '6'; // фото
}
return '0';
}
int getDelayForSensor(char c) {
return (c=='g') ? 500 : (c=='b') ? 50 : 100;
}
void stopStreaming() {
xBee.print('0');
Serial.println("\nAnalysis Stopped");
printMenu();
}
void printMenu() {
Serial.println("Master OK");
Serial.println("Commands:");
Serial.println("'o' - orientation sensor");
Serial.println("'a' - acceleration sensor");
Serial.println("'b' - brightness sensor");
Serial.println("'g' - GPS position");
Serial.println("'m' - microphone noise");
Serial.println("'p' - take a picture");
Serial.println("'s' - stop streaming");
}
Код Slave (на дроне)
Требуются библиотеки: OneSheeld и AltSoftSerial.
#include <OneSheeld.h>
#include <AltSoftSerial.h>
AltSoftSerial xBee;
char command = 0;
void setup() {
Serial.begin(115200);
OneSheeld.begin();
xBee.begin(9600);
Serial.println("Slave OK");
}
void loop() {
receiveCommand();
processCommand();
}
void receiveCommand() {
while (xBee.available() > 0) {
command = xBee.read();
}
}
void processCommand() {
switch (command) {
case 'o':
sendOrientation();
break;
case 'a':
sendAcceleration();
break;
case 'g':
sendGPS();
break;
case 'm':
sendMic();
break;
case 'b':
sendLight();
break;
case 'p':
takePicture();
break;
case '1': case '2': case '3': case '4': case '5': case '6': case '0':
announceMode(command);
break;
}
command = 0;
}
void sendOrientation() {
xBee.print("X: "); xBee.print(OrientationSensor.getX());
xBee.print(" Y: "); xBee.print(OrientationSensor.getY());
xBee.print(" Z: "); xBee.println(OrientationSensor.getZ());
}
void sendAcceleration() {
xBee.print("X: "); xBee.print(AccelerometerSensor.getX());
xBee.print(" Y: "); xBee.print(AccelerometerSensor.getY());
xBee.print(" Z: "); xBee.println(AccelerometerSensor.getZ());
}
void sendGPS() {
xBee.print("Lon: "); xBee.print(GPS.getLongitude());
xBee.print(" Lat: "); xBee.println(GPS.getLatitude());
}
void sendMic() {
xBee.print("dB: "); xBee.println(Mic.getValue());
}
void sendLight() {
xBee.print("Lux: "); xBee.println(LightSensor.getValue());
}
void takePicture() {
Camera.setFlash(ON);
Camera.rearCapture();
xBee.println("Picture taken");
}
void announceMode(char mode) {
const char* phrases[] = {
"analysis stopped",
"analysis orientation",
"analysis acceleration",
"analysis brightness intensity",
"analysis GPS position",
"analysis decibel noise",
"Taking a picture"
};
int idx = mode - '0';
if (idx >= 0 && idx <= 6) TextToSpeech.say(phrases[idx]);
}
Как это работает
- Подключите Slave Arduino с 1Sheeld и XBee к дрону, закрепите смартфон.
- Подключите Master Arduino с XBee к ПК через USB.
- Загрузите соответствующие скетчи.
- Откройте терминал (115200 бод) на ПК.
- Вводите команды:
o,a,g,m,b,pдля запуска потока данных. - Для остановки введите
s.
Применение и доработки
- Мониторинг полёта в реальном времени для FPV и анализа устойчивости.
- Логирование телеметрии для пост-обработки.
- Добавление автоматического управления дроном на основе данных сенсоров.
- Использование более дальнобойных радиомодулей (LoRa, Wi-Fi) для увеличения радиуса.
Производственный процесс
- Облачная революция: как облачные вычисления трансформируют IT, безопасность и карьеры
- Эволюция мировой красительной промышленности: эко-тренды, регулятивный контроль и технологические инноваци…
- Drone Pi: двухрежимный квадрокоптер Multiwii + Raspberry Pi для управления со смартфона и пульта
- Как смартфоны формируют будущее подключённых автомобилей
- 6 способов, которыми AI и IoT революционизируют бизнес-операции в 2019 году
- Инсайты по Edge Computing и стратегии ИоТ с IoT World 2019
- ИИ картирует неформальные поселения по спутниковым снимкам низкого разрешения
- Elbit Systems: ведущие композитные решения для Израиля и США
- Стоит ли покрывать ваш насос? Взвешивание выгод и недостатков
- Мастерство документации обслуживания: проверенный подход к защите ваших активов