亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

AR Drone 2.0 + 1Sheeld:实时飞行数据流式传输至 PC

组件与物料

组件 数量 备注
Arduino Mega 2560 2 一块安装在无人机上,一块连接电脑
1Sheeld 1 利用智能手机传感器
AR Drone 2.0 1 目标无人机平台
XBee 模块 2 用于地面站与无人机之间的无线通信

项目简介

本项目实现通过智能手机记录无人机的各项飞行数据,并经由 1Sheeld 实时传输至电脑端。可获取的数据包括:加速度计、GPS 位置、环境噪音、姿态角、陀螺仪等。

系统采用双 Arduino 架构:一块搭载于无人机,另一块连接地面电脑;两块 XBee 模块负责将 1Sheeld 采集的远程数据传回地面站。这是一种趣味性强且易于上手的方案,能充分发挥智能手机内置传感器的功能,同时还能拍摄精美照片。

代码

主控代码(地面站 Arduino)

该代码烧录在连接电脑的 Arduino 上,用于控制无人机上的从机 Arduino。使用前需安装 AltSoftSerial 库。

#include <AltSoftSerial.h>
int verifica = 0;
AltSoftSerial xBee;
char c, h, stop = 's';

void setup() {
  Serial.begin(115200);
  Serial.println("Master OK");
  Serial.println();
  Serial.println("Digit for:");
  Serial.println("'o' orientation sensor value");
  Serial.println("'a' acceleration sensor value");
  Serial.println("'b' brightness sensor value");
  Serial.println("'g' GPS position");
  Serial.println("'m' microphone noise");
  Serial.println("'p' take a picture");
  xBee.begin(9600);
}

void loop() {
  Serial.flush();
  if (Serial.available() > 0) {
    c = Serial.read();
    if (c == 'o' || c == 'a' || c == 'm' || c == 'g' || c == 'b' || c == 'p') {
      // 方向传感器
      if (c == 'o') {
        Serial.println("Orientation");
        c = '1'; xBee.print(c);
        for (int i = 0; i < 10; i++) {
          delay(20); c = 'o'; xBee.print(c);
          do { h = 0; h = xBee.read(); Serial.print(h); } while (xBee.available() > 0);
          delay(100); i = i - 1;
          if (Serial.available() > 0) if (stop == Serial.read()) {
            Serial.println("Analysis Stopped"); c = '0';
            Serial.println(); Serial.println("Digit for:");
            Serial.println("'o' orientation sensor value");
            Serial.println("'a' acceleration sensor value");
            Serial.println("'b' brightness sensor value");
            Serial.println("'g' GPS position");
            Serial.println("'m' microphone noise");
            Serial.println("'p' take a picture");
            xBee.print(c); i = 11;
          }
        }
      }
      // 加速度传感器
      if (c == 'a') {
        Serial.println("Acceleration");
        c = '2'; xBee.print(c);
        for (int i = 0; i < 10; i++) {
          delay(20); c = 'a'; xBee.print(c);
          do { h = 0; h = xBee.read(); Serial.print(h); } while (xBee.available() > 0);
          delay(100); i = i - 1;
          if (Serial.available() > 0) if (stop == Serial.read()) {
            Serial.println("Analysis Stopped"); c = '0';
            Serial.println(); Serial.println("Digit for:");
            Serial.println("'o' orientation sensor value");
            Serial.println("'a' acceleration sensor value");
            Serial.println("'b' brightness sensor value");
            Serial.println("'g' GPS position");
            Serial.println("'m' microphone noise");
            Serial.println("'p' take a picture");
            xBee.print(c); i = 11;
          }
        }
      }
      // 光照传感器
      if (c == 'b') {
        Serial.println("Brightness");
        c = '3'; xBee.print(c);
        for (int i = 0; i < 10; i++) {
          delay(20); c = 'b'; xBee.print(c);
          do { h = 0; h = xBee.read(); Serial.print(h); } while (xBee.available() > 0);
          delay(50); i = i - 1;
          if (Serial.available() > 0) if (stop == Serial.read()) {
            Serial.println("Analysis Stopped"); c = '0';
            Serial.println(); Serial.println("Digit for:");
            Serial.println("'o' orientation sensor value");
            Serial.println("'a' acceleration sensor value");
            Serial.println("'b' brightness sensor value");
            Serial.println("'g' GPS position");
            Serial.println("'m' microphone noise");
            Serial.println("'p' take a picture");
            xBee.print(c); i = 11;
          }
        }
      }
      // GPS
      if (c == 'g') {
        Serial.println("GPS Position");
        c = '4'; xBee.print(c);
        for (int i = 0; i < 10; i++) {
          delay(20); c = 'g'; xBee.print(c);
          do { h = 0; h = xBee.read(); Serial.print(h); } while (xBee.available() > 0);
          delay(500); i = i - 1;
          if (Serial.available() > 0) if (stop == Serial.read()) {
            Serial.println("Analysis Stopped"); c = '0';
            Serial.println(); Serial.println("Digit for:");
            Serial.println("'o' orientation sensor value");
            Serial.println("'a' acceleration sensor value");
            Serial.println("'b' brightness sensor value");
            Serial.println("'g' GPS position");
            Serial.println("'m' microphone noise");
            Serial.println("'p' take a picture");
            xBee.print(c); i = 11;
          }
        }
      }
      // 麦克风
      if (c == 'm') {
        Serial.println("Microphone");
        c = '5'; xBee.print(c);
        for (int i = 0; i < 10; i++) {
          delay(20); c = 'm'; xBee.print(c);
          do { h = 0; h = xBee.read(); Serial.print(h); } while (xBee.available() > 0);
          delay(100); i = i - 1;
          if (Serial.available() > 0) if (stop == Serial.read()) {
            Serial.println("Analysis Stopped"); c = '0';
            Serial.println(); Serial.println("Digit for:");
            Serial.println("'o' orientation sensor value");
            Serial.println("'a' acceleration sensor value");
            Serial.println("'b' brightness sensor value");
            Serial.println("'g' GPS position");
            Serial.println("'m' microphone noise");
            Serial.println("'p' take a picture");
            xBee.print(c); i = 11;
          }
        }
      }
      // 拍照
      if (c == 'p') {
        Serial.println("Take a picture");
        c = '6'; xBee.print(c); delay(20); c = 'p';
        Serial.println(); Serial.println("Digit for:");
        Serial.println("'o' orientation sensor value");
        Serial.println("'a' acceleration sensor value");
        Serial.println("'b' brightness sensor value");
        Serial.println("'g' GPS position");
        Serial.println("'m' microphone noise");
        Serial.println("'p' take a picture");
        xBee.print(c);
      }
    }
  }
}

从机代码(无人机端 Arduino)

该代码烧录在安装于无人机的 Arduino 上,负责向地面站发送传感器数据。同样需要 AltSoftSerial 库 以及 1Sheeld 库。

#include <OneSheeld.h>
#include <AltSoftSerial.h>

char variabile;
AltSoftSerial xBee;
char master;
int voce = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("Slave ok");
  OneSheeld.begin();
  xBee.begin(9600);
}

void loop() {
  receiveEvent();
  requestEvent();
}

void receiveEvent() {
  while (xBee.available() > 0) {
    master = xBee.read();
    variabile = master;
  }
}

void requestEvent() {
  if (variabile == 'o') {
    xBee.print("X: "); xBee.print(OrientationSensor.getX());
    xBee.print(" Y: "); xBee.print(OrientationSensor.getY());
    xBee.print(" Z: "); xBee.println(OrientationSensor.getZ());
    variabile = 0;
  }
  if (variabile == 'a') {
    xBee.print("X: "); xBee.print(AccelerometerSensor.getX());
    xBee.print(" Y: "); xBee.print(AccelerometerSensor.getX());
    xBee.print(" Z: "); xBee.println(AccelerometerSensor.getX());
    variabile = 0;
  }
  if (variabile == 'g') {
    xBee.print("Longitude: "); xBee.print(GPS.getLongitude());
    xBee.print(" Latitude: "); xBee.println(GPS.getLatitude());
    variabile = 0;
  }
  if (variabile == 'm') {
    xBee.print("dB: "); xBee.println(Mic.getValue());
    variabile = 0;
  }
  if (variabile == 'b') {
    xBee.print("Lux: "); xBee.println(LightSensor.getValue());
    variabile = 0;
  }
  if (variabile == 'p') {
    Camera.setFlash(ON); Camera.rearCapture();
    xBee.println("Picture taken"); variabile = 0;
  }
  // 语音提示
  if (variabile == '1') { TextToSpeech.say("analysis orientation"); variabile = 0; }
  if (variabile == '2') { TextToSpeech.say("analysis acceleration"); variabile = 0; }
  if (variabile == '3') { TextToSpeech.say("analysis brightness intensity"); variabile = 0; }
  if (variabile == '4') { TextToSpeech.say("analysis GPS position"); variabile = 0; }
  if (variabile == '5') { TextToSpeech.say("analysis decibel noise"); variabile = 0; }
  if (variabile == '6') { TextToSpeech.say("Taking a picture"); variabile = 0; }
  if (variabile == '0') { TextToSpeech.say("analysis stopped"); variabile = 0; }
}

原理图

Arduino 与 XBee 的连接方式,地面站端与无人机端相同:

AR Drone 2.0 + 1Sheeld:实时飞行数据流式传输至 PC

制造工艺

  1. Drone Pi:双模Multiwii+树莓派四轴飞行器,支持手机与遥控器控制
  2. 制造业的新旧世界:AI、设计与创新
  3. AI从低分辨率卫星影像自动识别全球非正规居住区
  4. 维护文档管理权威指南:守护资产的可信实践
  5. 泵需不需要涂层?权衡利弊做明智决策
  6. 水刀切割精度与性能优化实战:核心部件维护、工艺参数与消耗品管理
  7. 云革命:云计算如何重塑IT、安全与职业生涯
  8. 智能手机如何塑造联网汽车未来
  9. 2019年AI与物联网革新业务运营的六大方式
  10. IoT World 2019 洞察:边缘计算与物联网战略
  11. Elbit Systems:引领以色列与美国的复合材料解决方案
  12. 全球染料工业演进:环保转型、监管趋严与技术创新