Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

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.

AR Drone 2.0 + 1Sheeld: потоковая передача данных полёта в реальном времени на ПК
Подключение XBee к Arduino (одинаково для обеих сторон)

Программный код

Код 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]);
}

Как это работает

  1. Подключите Slave Arduino с 1Sheeld и XBee к дрону, закрепите смартфон.
  2. Подключите Master Arduino с XBee к ПК через USB.
  3. Загрузите соответствующие скетчи.
  4. Откройте терминал (115200 бод) на ПК.
  5. Вводите команды: o, a, g, m, b, p для запуска потока данных.
  6. Для остановки введите s.

Применение и доработки

Производственный процесс

  1. Облачная революция: как облачные вычисления трансформируют IT, безопасность и карьеры
  2. Эволюция мировой красительной промышленности: эко-тренды, регулятивный контроль и технологические инноваци…
  3. Drone Pi: двухрежимный квадрокоптер Multiwii + Raspberry Pi для управления со смартфона и пульта
  4. Как смартфоны формируют будущее подключённых автомобилей
  5. 6 способов, которыми AI и IoT революционизируют бизнес-операции в 2019 году
  6. Инсайты по Edge Computing и стратегии ИоТ с IoT World 2019
  7. ИИ картирует неформальные поселения по спутниковым снимкам низкого разрешения
  8. Elbit Systems: ведущие композитные решения для Израиля и США
  9. Стоит ли покрывать ваш насос? Взвешивание выгод и недостатков
  10. Мастерство документации обслуживания: проверенный подход к защите ваших активов