Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Burgasi Carvajal Espin Freire Paez Villarroel
Burgasi Carvajal Espin Freire Paez Villarroel
AMBATO - ECUADOR.
1 TEMA
Comunicación inalámbrica.
2 OBJETIVOS
2.1 Objetivo General
Investigar los diferentes tipos de comunicación inalámbrica que existen para el
diseño de prototipos autónomos logrando llevar dicha teoría a la práctica.
2.2 Objetivos Específicos
Implementar un guante autónomo que controle un carrito móvil haciendo el uso
de un giroscopio acelerómetro para emplear una comunicación Bluetooth entre
los dos dispositivos.
Contrastar con un sistema de monitoreo los datos obtenidos haciendo uso de la
Raspberry PI usando el protocolo MQTT para la visualización y
almacenamiento de estos mediante WIFI.
3 INTRODUCCIÓN
En el proyecto final del primer parcial hemos realizado un prototipo móvil autónomo
que se controla mediante de un giroscopio acelerómetro (MPU 6050), el Arduino mini,
la comunicación Bluetooth (HC-05) y una batería las cuales van conectadas en el
guante, en el carrito tenemos el otro sensor Bluetooth (HC-05), ESP 8266, el puente H,
baterías y los motores DC, la comunicación con el servidor lo hicimos mediante un
router y en el servidor podemos observar si el carrito va hacia delante, atrás, izquierda o
derecha, todo esto se va a poder observar en un marcador.
4 PALABRAS CLAVE
1 TEMA..................................................................................................................................2
2 OBJETIVOS.......................................................................................................................2
2.1 Objetivo General........................................................................................................2
2.2 Objetivos Específicos..................................................................................................2
3 INTRODUCCIÓN..............................................................................................................2
4 PALABRAS CLAVE.........................................................................................................2
(Bluetooth, Arduino, batería, ESP)...............................................................................................2
5 INDICE GENERAL...........................................................................................................3
6 GLOSARIO DE TÉRMINOS...........................................................................................4
7 FUNDAMENTACIÓN TEORICA...................................................................................5
7.1 COMUNICACIÓN INALAMBRICA.......................................................................5
7.2 MICROCONTROLADORES...................................................................................5
7.2.1 PLACA ARDUINO............................................................................................5
7.2.2 MÓDULOS.........................................................................................................6
7.3 SENSORES.................................................................................................................8
7.3.1 Sensor MPU- 6050..............................................................................................8
8 Materiales y equipos...........................................................................................................9
8.1 Software......................................................................................................................9
8.2 Componentes...............................................................................................................9
9 METODOLOGÍA..............................................................................................................9
9.1 Función del componente de hardware......................................................................9
9.2 Movimientos..............................................................................................................10
9.3 CÓDIGO DEL CARRO INALÁMBRICO.............................................................11
9.3.1 GIROSCOPIOACELERÓMETRO................................................................15
9.4 Controlador de guante inalámbrico ensamblado...................................................21
9.5 Carro inalámbrico ensamblado...............................................................................21
10 Implementación............................................................................................................22
10.1 Visualización de datos..............................................................................................22
11 ANEXOS.......................................................................................................................23
12 Conclusiones.................................................................................................................24
6 GLOSARIO DE TÉRMINOS
7 FUNDAMENTACIÓN TEORICA
NOTA:
No se configura nada en el microcontrolador, solamente la comunicación serial
7.2 MICROCONTROLADORES
El Microcontrolador es un circuito integrado que es el componente principal de una
aplicación embebida. Es como una pequeña computadora que incluye sistemas para
controlar elementos de entrada/salida. También incluye a un procesador y por supuesto
memoria que puede guardar el programa y sus variables (flash y RAM). Funciona
como una mini PC. Su función es la de automatizar procesos y procesar información.
El microcontrolador se aplica en toda clase de inventos y productos donde se requiere
seguir un proceso automático dependiendo de las condiciones de distintas entradas.
7.2.1 PLACA ARDUINO
Tabla 2 Características del Módulo HC05Elaborado por: Burgasi, Carbajal, Espín, Falcon, Paéz,
Villarroel
MÓDULO L298N CARACTERISTICAS
Tabla 3Características del Módulo HC05Elaborado por: Burgasi, Carbajal, Espín, Falcon, Paéz,
Villarroel
7.3 SENSORES
Los sensores son considerados como un dispositivo de entrada que provee una salida
manipulable de la variable física mediada, es decir es un dispositivo capaz de detectar
magnitudes físicas o químicas, siendo un intermediario entre la variable física y el
sistema de medición es decir el sensor se caracteriza por transformar la energía en
señales eléctricas a de salida, ya sean analógica o digitales. [2]
Tabla 5 Características del Sensor MPU- 6050Elaborado por: Burgasi, Carbajal, Espín, Falcon, Paéz
8 Materiales y equipos
8.1 Software
Software Proteus
Software Arduino
8.2 Componentes
Sensor giroscopio acelerómetro (MPU6050)
Arduino Pro Mini
Carro
Puente h (ese vele el integrado o el modulo vele cuánto está )
Baquela perforada pequeña
9 METODOLOGÍA
Fig 1. Componentes
9.2 Movimientos
9.3.1 GIROSCOPIOACELERÓMETRO
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps_V6_12.h"
//#include "MPU6050.h" // not necessary if using MotionApps include file
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8,9);
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
/*
==================================================================
=======
NOTE: In addition to connection 3.3v, GND, SDA, and SCL, this sketch
depends on the MPU-6050's INT pin being connected to the Arduino's
external interrupt #0 pin. On the Arduino Uno and Mega 2560, this is
digital I/O pin 2.
=================================================================
======== */
/*
==================================================================
=======
NOTE: Arduino v1.0.1 with the Leonardo board generates a compile error
when using Serial.write(buf, len). The Teapot output uses this method.
The solution requires a modification to the Arduino USBAPI.h file, which
is fortunately simple, but annoying. This will be fixed in the next IDE
release. For more info, see these links:
http://arduino.cc/forum/index.php/topic,109987.0.html
http://code.google.com/p/arduino/issues/detail?id=958
=================================================================
======== */
// ================================================================
// === INTERRUPT DETECTION ROUTINE ===
// ================================================================
volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high
void dmpDataReady() {
mpuInterrupt = true;
}
// ================================================================
// === INITIAL SETUP ===
// ================================================================
void setup() {
// join I2C bus (I2Cdev library doesn't do this automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.begin();
Wire.setClock(400000); // 400kHz I2C clock. Comment this line if having compilation
difficulties
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(400, true);
#endif
mpu.initialize();
pinMode(INTERRUPT_PIN, INPUT);
devStatus = mpu.dmpInitialize();
// supply your own gyro offsets here, scaled for min sensitivity
mpu.setXGyroOffset(51);
mpu.setYGyroOffset(8);
mpu.setZGyroOffset(21);
mpu.setXAccelOffset(1150);
mpu.setYAccelOffset(-50);
mpu.setZAccelOffset(1060);
// make sure it worked (returns 0 if so)
if (devStatus == 0) {
// Calibration Time: generate offsets and calibrate our MPU6050
mpu.CalibrateAccel(6);
mpu.CalibrateGyro(6);
Serial.println();
mySerial.begin(9600);
mpu.PrintActiveOffsets();
// turn on the DMP, now that it's ready
Serial.println(F("Enabling DMP..."));
mpu.setDMPEnabled(true);
dmpReady = true;
Serial.print(devStatus);
// ================================================================
// === MAIN PROGRAM LOOP ===
// ================================================================
void loop() {
// if programming failed, don't try to do anything
if (!dmpReady) return;
// read a packet from FIFO
if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { // Get the Latest packet
#ifdef OUTPUT_READABLE_QUATERNION
// display quaternion values in easy matrix form: w x y z
mpu.dmpGetQuaternion(&q, fifoBuffer);
#endif
#ifdef OUTPUT_READABLE_EULER
// display Euler angles in degrees
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetEuler(euler, &q);
#endif
#ifdef OUTPUT_READABLE_YAWPITCHROLL
// display Euler angles in degrees
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
mpu.getMotion6(&ax, &ay, &az, &gx, &ggy, &gz);
pitch=(float(ax)/1000);
yow=(float(az)/1000);
roll=(float(ay)/1000);
ax=-(ax/1000);
ay=-(ay/1000);
Serial.print("ypr\t");
yow=(ypr[0] * 180 / M_PI);
Serial.print(yow);
Serial.print("\t");
pitch=(ypr[1] * 180 / M_PI);
Serial.print(pitch);
Serial.print("\t");
roll=(ypr[2] * 180 / M_PI);
Serial.print(roll);
Serial.println();
//ADELANTE
if(ax<=-4 && ay>=-3 && ay<=3){
mySerial.print(tres);
mySerial.print(',');
mySerial.print(pitch);
mySerial.print(',');
mySerial.print(yow);
mySerial.print(',');
mySerial.println(roll);
}
//Atras
if(ax>=4 && ay>=-3 && ay<=3){
mySerial.print(cuatro);\
mySerial.print(',');
mySerial.print(pitch);
mySerial.print(',');
mySerial.print(yow);
mySerial.print(',');
mySerial.println(roll);
}
//Dete
if(ax>=-3 && ax<=3 && ay>=-3 && ay<=3){
mySerial.print(cinco);
mySerial.print(',');
mySerial.print(pitch);
mySerial.print(',');
mySerial.print(yow);
mySerial.print(',');
mySerial.println(roll);
}
// adelantar
if(ay<=-4 && ax>=-3 && ax<=3){
mySerial.print(uno);
mySerial.print(',');
mySerial.print(pitch);
mySerial.print(',');
mySerial.print(yow);
mySerial.print(',');
mySerial.println(roll);
}
// atras
if(ay>=4 && ax>=-3 && ax<=3){
mySerial.print(dos);
mySerial.print(',');
mySerial.print(pitch);
mySerial.print(',');
mySerial.print(yow);
mySerial.print(',');
mySerial.println(roll);
#endif
#ifdef OUTPUT_READABLE_REALACCEL
// display real acceleration, adjusted to remove gravity
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetAccel(&aa, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
#endif
#ifdef OUTPUT_READABLE_WORLDACCEL
// display initial world-frame acceleration, adjusted to remove gravity
// and rotated based on known orientation from quaternion
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetAccel(&aa, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetLinearAccel(&aaReal, &aa, &gravity);
mpu.dmpGetLinearAccelInWorld(&aaWorld, &aaReal, &q);
#endif
#ifdef OUTPUT_TEAPOT
// display quaternion values in InvenSense Teapot demo format:
teapotPacket[2] = fifoBuffer[0];
teapotPacket[3] = fifoBuffer[1];
teapotPacket[4] = fifoBuffer[4];
teapotPacket[5] = fifoBuffer[5];
teapotPacket[6] = fifoBuffer[8];
teapotPacket[7] = fifoBuffer[9];
teapotPacket[8] = fifoBuffer[12];
teapotPacket[9] = fifoBuffer[13];
teapotPacket[11]++; // packetCount, loops at 0xFF on purpose
#endif // blink LED to indicate activity
blinkState = !blinkState;
}
}
10 Implementación
.
10.1 Visualización de datos
Fig 8. Monitoreo.
- Se utilizó un router y una raspberry para que nos de los valores individuales del
pich, yow, roll. Con la dirección IP 192.168.0.101 y se realizó las respectivas
configuraciones.
11 ANEXOS
12 Conclusiones