Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

AR Drone 2.0 + 1Sheeld : Streaming de données de vol en temps réel vers PC

Composants et fournitures

Arduino Mega 2560 × 2
1Sheeld × 1
AR Drone 2.0 × 1
Module xBee × 2

À propos de ce projet

Ce projet permet de contrôler et d'enregistrer diverses données de vol capturées par un smartphone, puis de les transmettre en temps réel vers un ordinateur. Les capteurs exploités incluent l'accéléromètre, le GPS, le microphone (bruit du drone), l'orientation, le gyroscope, la luminosité, et bien plus encore.

L'architecture repose sur deux cartes Arduino : l'une embarquée sur le drone, l'autre connectée au PC. Deux modules xBee assurent la liaison radio pour transmettre les données du 1Sheeld vers l'ordinateur.

C'est une façon ludique et accessible de tirer parti de l'ensemble des capteurs d'un smartphone, tout en pouvant prendre de belles photos aériennes.

Code

Code Maître (C/C++)

Ce code s'exécute sur l'Arduino connecté au PC. Il pilote l'Arduino embarqué sur le drone via la liaison xBee.

Bibliothèque requise : 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("Commandes :");
  Serial.println("'o' - Valeurs capteur orientation");
  Serial.println("'a' - Valeurs capteur accéléromètre");
  Serial.println("'b' - Valeurs capteur luminosité");
  Serial.println("'g' - Position GPS");
  Serial.println("'m' - Bruit microphone");
  Serial.println("'p' - Prendre une photo");
  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') {
      // --- Orientation ---
      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--;
          if (Serial.available() > 0 && stop == Serial.read()) {
            Serial.println("Analyse arrêtée"); c = '0';
            afficherMenu(); xBee.print(c); i = 11;
          }
        }
      }
      // --- Accélération ---
      if (c == 'a') {
        Serial.println("Accélération");
        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--;
          if (Serial.available() > 0 && stop == Serial.read()) {
            Serial.println("Analyse arrêtée"); c = '0';
            afficherMenu(); xBee.print(c); i = 11;
          }
        }
      }
      // --- Luminosité ---
      if (c == 'b') {
        Serial.println("Luminosité");
        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--;
          if (Serial.available() > 0 && stop == Serial.read()) {
            Serial.println("Analyse arrêtée"); c = '0';
            afficherMenu(); xBee.print(c); i = 11;
          }
        }
      }
      // --- GPS ---
      if (c == 'g') {
        Serial.println("Position GPS");
        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--;
          if (Serial.available() > 0 && stop == Serial.read()) {
            Serial.println("Analyse arrêtée"); c = '0';
            afficherMenu(); xBee.print(c); i = 11;
          }
        }
      }
      // --- Microphone ---
      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--;
          if (Serial.available() > 0 && stop == Serial.read()) {
            Serial.println("Analyse arrêtée"); c = '0';
            afficherMenu(); xBee.print(c); i = 11;
          }
        }
      }
      // --- Photo ---
      if (c == 'p') {
        Serial.println("Prise de photo");
        c = '6'; xBee.print(c); delay(20); c = 'p';
        afficherMenu(); xBee.print(c);
      }
    }
  }
}

void afficherMenu() {
  Serial.println(); Serial.println("Commandes :");
  Serial.println("'o' - Orientation"); Serial.println("'a' - Accélération");
  Serial.println("'b' - Luminosité"); Serial.println("'g' - GPS");
  Serial.println("'m' - Microphone"); Serial.println("'p' - Photo");
}

Code Esclave (C/C++)

Ce code s'exécute sur l'Arduino monté sur le drone. Il récupère les données des capteurs du 1Sheeld et les renvoie via xBee.

Bibliothèques requises : AltSoftSerial et OneSheeld

#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("Axe X: "); xBee.print(OrientationSensor.getX());
    xBee.print(" Axe Y: "); xBee.print(OrientationSensor.getY());
    xBee.print(" Axe Z: "); xBee.println(OrientationSensor.getZ());
    variabile = 0;
  }
  if (variabile == 'a') {
    xBee.print("Axe X: "); xBee.print(AccelerometerSensor.getX());
    xBee.print(" Axe Y: "); xBee.print(AccelerometerSensor.getY());
    xBee.print(" Axe Z: "); xBee.println(AccelerometerSensor.getZ());
    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("Photo prise"); variabile = 0;
  }
  // Synthèse vocale pour feedback
  if (variabile == '1') { TextToSpeech.say("analyse orientation"); variabile = 0; }
  if (variabile == '2') { TextToSpeech.say("analyse acceleration"); variabile = 0; }
  if (variabile == '3') { TextToSpeech.say("analyse intensite luminosite"); variabile = 0; }
  if (variabile == '4') { TextToSpeech.say("analyse position GPS"); variabile = 0; }
  if (variabile == '5') { TextToSpeech.say("analyse decibels bruit"); variabile = 0; }
  if (variabile == '6') { TextToSpeech.say("prise de photo"); variabile = 0; }
  if (variabile == '0') { TextToSpeech.say("analyse arretee"); variabile = 0; }
}

Schéma de câblage

Le schéma ci-dessous montre la connexion entre l'Arduino et le module xBee. Le montage est identique pour l'Arduino côté PC et l'Arduino embarqué sur le drone.

AR Drone 2.0 + 1Sheeld : Streaming de données de vol en temps réel vers PC

Processus de fabrication

  1. La révolution du Cloud : Comment le Cloud Computing transforme l'IT, la sécurité et les carrières
  2. Évolution de l'industrie mondiale des teintures : virage écologique, rigueur réglementaire et innovation technologique
  3. Drone Pi : Quadricoptère Multiwii & Raspberry Pi double mode pour smartphone et radiocommande
  4. Comment les smartphones façonnent l'avenir des voitures connectées
  5. 6 façons dont l'IA et l'IoT révolutionnent les opérations business en 2019
  6. Insights Edge Computing & Stratégie IoT depuis IoT World 2019
  7. L'IA cartographie désormais les bidonvilles mondiaux depuis des satellites à basse résolution
  8. Elbit Systems : leader des solutions composites pour Israël et les USA
  9. Faut-il revêtir votre pompe ? Peser les avantages et inconvénients