AR Drone 2.0 + 1Sheeld: Streaming de datos de vuelo en tiempo real a PC
Componentes y suministros
| Arduino Mega 2560 | × | 2 |
| 1Sheeld | × | 1 |
| AR Drone 2.0 | × | 1 |
| Módulos XBee | × | 2 |
Sobre el proyecto
Este proyecto permite controlar y monitorizar diversos datos de vuelo registrados por un smartphone y transmitidos en tiempo real a tu PC: acelerómetro, posición GPS, nivel de ruido del dron, orientación, giroscopio y más.
Se utilizan dos placas Arduino para el control de datos: una montada en el dron y otra conectada al ordenador, junto con dos módulos XBee para comunicar los datos remotos del 1Sheeld al PC.
Una forma divertida y sencilla de aprovechar todas las características y sensores del smartphone, ¡y también tomar buenas fotos!
Código
Código Maestro (C/C++)
Este código se carga en el Arduino conectado al PC para controlar el Arduino del dron. Primero necesitas descargar la librería AltSoftSerial.
#include <AltSoftSerial.h>
int verifica=0;
AltSoftSerial xBee;
char c;
char h;
char stop='s';
void setup() {
Serial.begin(115200);
Serial.println("Master OK");
Serial.println();
Serial.println("Pulsa para:");
Serial.println("'o' valor sensor orientación");
Serial.println("'a' valor sensor aceleración");
Serial.println("'b' valor sensor brillo");
Serial.println("'g' posición GPS");
Serial.println("'m' ruido micrófono");
Serial.println("'p' tomar foto");
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'){
//--- Orientación ---
if(c=='o'){
Serial.println("Orientación");
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("Análisis detenido"); c='0';
Serial.println(); Serial.println("Pulsa para:");
Serial.println("'o' valor sensor orientación");
Serial.println("'a' valor sensor aceleración");
Serial.println("'b' valor sensor brillo");
Serial.println("'g' posición GPS");
Serial.println("'m' ruido micrófono");
Serial.println("'p' tomar foto");
xBee.print(c); i=11;
}
}
}
//--- Aceleración ---
if(c=='a'){
Serial.println("Aceleración");
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("Análisis detenido"); c='0';
Serial.println(); Serial.println("Pulsa para:");
Serial.println("'o' valor sensor orientación");
Serial.println("'a' valor sensor aceleración");
Serial.println("'b' valor sensor brillo");
Serial.println("'g' posición GPS");
Serial.println("'m' ruido micrófono");
Serial.println("'p' tomar foto");
xBee.print(c); i=11;
}
}
}
//--- Brillo ---
if(c=='b'){
Serial.println("Brillo");
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("Análisis detenido"); c='0';
Serial.println(); Serial.println("Pulsa para:");
Serial.println("'o' valor sensor orientación");
Serial.println("'a' valor sensor aceleración");
Serial.println("'b' valor sensor brillo");
Serial.println("'g' posición GPS");
Serial.println("'m' ruido micrófono");
Serial.println("'p' tomar foto");
xBee.print(c); i=11;
}
}
}
//--- GPS ---
if(c=='g'){
Serial.println("Posición 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=i-1;
if(Serial.available()>0);
if(stop==Serial.read()){
Serial.println("Análisis detenido"); c='0';
Serial.println(); Serial.println("Pulsa para:");
Serial.println("'o' valor sensor orientación");
Serial.println("'a' valor sensor aceleración");
Serial.println("'b' valor sensor brillo");
Serial.println("'g' posición GPS");
Serial.println("'m' ruido micrófono");
Serial.println("'p' tomar foto");
xBee.print(c); i=11;
}
}
}
//--- Micrófono ---
if(c=='m'){
Serial.println("Micrófono");
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("Análisis detenido"); c='0';
Serial.println(); Serial.println("Pulsa para:");
Serial.println("'o' valor sensor orientación");
Serial.println("'a' valor sensor aceleración");
Serial.println("'b' valor sensor brillo");
Serial.println("'g' posición GPS");
Serial.println("'m' ruido micrófono");
Serial.println("'p' tomar foto");
xBee.print(c); i=11;
}
}
}
//--- Foto ---
if(c=='p'){
Serial.println("Tomar foto");
c='6'; xBee.print(c); delay(20); c='p';
Serial.println(); Serial.println("Pulsa para:");
Serial.println("'o' valor sensor orientación");
Serial.println("'a' valor sensor aceleración");
Serial.println("'b' valor sensor brillo");
Serial.println("'g' posición GPS");
Serial.println("'m' ruido micrófono");
Serial.println("'p' tomar foto");
xBee.print(c);
}
}
}
}
Código Esclavo (C/C++)
Este código se carga en el Arduino montado en el dron, que proporcionará los datos al suelo. Necesitas las librerías AltSoftSerial y 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("Eje X: "); xBee.print(OrientationSensor.getX());
xBee.print(" Eje Y: "); xBee.print(OrientationSensor.getY());
xBee.print(" Eje Z: "); xBee.println(OrientationSensor.getZ());
variabile=0;
}
if(variabile=='a'){
xBee.print("Eje X: "); xBee.print(AccelerometerSensor.getX());
xBee.print(" Eje Y: "); xBee.print(AccelerometerSensor.getY());
xBee.print(" Eje Z: "); xBee.println(AccelerometerSensor.getZ());
variabile=0;
}
if(variabile=='g'){
xBee.print("Longitud: "); xBee.print(GPS.getLongitude());
xBee.print(" Latitud: "); xBee.println(GPS.getLatitude());
variabile=0;
}
if(variabile=='m'){
xBee.print("dB: "); xBee.println(Mic.getValue());
variabile=0;
}
if(variabile=='b'){
xBee.print("Lúmenes: "); xBee.println(LightSensor.getValue());
variabile=0;
}
if(variabile=='p'){
Camera.setFlash(ON);
Camera.rearCapture();
xBee.println("Foto tomada");
variabile=0;
}
if(variabile=='1'){ TextToSpeech.say("análisis orientación"); variabile=0; }
if(variabile=='2'){ TextToSpeech.say("análisis aceleración"); variabile=0; }
if(variabile=='3'){ TextToSpeech.say("análisis intensidad brillo"); variabile=0; }
if(variabile=='4'){ TextToSpeech.say("análisis posición GPS"); variabile=0; }
if(variabile=='5'){ TextToSpeech.say("análisis decibelios ruido"); variabile=0; }
if(variabile=='6'){ TextToSpeech.say("Tomando foto"); variabile=0; }
if(variabile=='0'){ TextToSpeech.say("análisis detenido"); variabile=0; }
}
Esquemáticos
Esta es la conexión entre Arduino y XBee, idéntica para el Arduino conectado al ordenador y el montado en el dron.

Proceso de manufactura
- Drone Pi: Quadcopter Multiwii y Raspberry Pi de doble modo para control por smartphone y mando a distancia
- La IA mapea asentamientos informales globales desde satélites de baja resolución
- Domine la documentación de mantenimiento: Un enfoque confiable para proteger sus activos
- ¿Debería recubrir su bomba? Evaluando beneficios e inconvenientes
- Mejora Precisión y Rendimiento de tu Máquina Waterjet
- La revolución cloud: cómo el cloud computing transforma TI, seguridad y carreras
- Cómo los Smartphones Moldean el Futuro de los Coches Conectados
- 6 formas en que IA e IoT revolucionan las operaciones empresariales en 2019
- Insights de Edge Computing y estrategia IoT desde IoT World 2019
- Elbit Systems: Soluciones de compuestos líderes para Israel y EE. UU.
- Evolución de la Industria Global de Colorantes: Cambios Eco-Friendly, Rigor Regulatorio e Innovación Tecnológica