Está en la página 1de 22

UNIVERSIDAD TÉCNICA DE AMBATO

FACULTAD DE INGENIERÍA EN SISTEMAS, ELECTRÓNICA E INDUSTRIAL

CARRERA DE INGENIERÍA EN ELECTRÓNICA Y COMUNICACIONES

Módulo:
VLSI

Nivel y Paralelo:
Octavo “A” _E

Tipo de Aporte y Número de Aporte:


Informe N° 4

Tema del Aporte:


Comunicación inalámbrica entre un nodo sensor y nodo actuador

Integrantes:
 Wellington Andaluz
 Silvio Garzón
 Byron Palacios
 Darío Pillajo
 Darío Solís

Fecha de Envío:
05/04/2018.

Fecha de Entrega:
09/05/2018.

Docente:
Ing. Edgar Patricio Córdova Córdova

MARZO 2018 – AGOSTO 2018

AMBATO - ECUADOR
I. TEMA

Comunicación inalámbrica entre un nodo sensor y nodo actuador

II. OBJETIVOS

a. Objetivo General

 Implementar un circuito de comunicación con el sensor acelerómetro/giroscopio


MPU6050 formando un sistema de nodo actuador/sensor.

b. Objetivos Específicos

 Utilizar el sensor MPU6050 Giroscopio necesarias para la implementación de un circuito


sensor y actuador de un sistema mediante servomotores.
 Adecuar de manera lógica cual es el punto cero o home en los ejes X, Y y Z en el diseño
del circuito.
 Conocer el manejo y control del acelerómetro, para poder utilizar sus beneficios en
futuras aplicaciones
 Verificar una buena comunicación inalámbrica entre el nodo actuador y nodo sensor.

III. INTRODUCCION

Cuando iniciamos una nueva tarea que requiere de un nuevo dispositivo al que no habíamos
tenido la ocasión de utilizar, lo propio es tener dudas y naturalmente buscamos información que
nos aclare los conocimientos que se requieren para manejar. El MPU-6050 tiene un precio
aceptable, especialmente teniendo en cuenta el hecho de que combina un acelerómetro y un
giroscopio en el mismo dispositivo [1].

Actualmente, estamos inmersos en la que se denomina revolución tecnológica de las


comunicaciones inalámbricas, una revolución similar a la que protagonizaron en su momento la
electricidad, la televisión, el ordenador o las mismas comunicaciones con cable.[2]

Una de las principales ventajas de esta tecnología es la movilidad, no depender del cable. El
hecho de que el punto de entrada en la red de comunicaciones no esté ligado a una ubicación fija
y que el medio de transmisión ya esté preparado favorece su expansión, que puede ser más
rápida que la de cualquier otro tipo de tecnología. [2]
IV. FUNDAMENTACIÓN TEÓRICA

EL SENSOR MPU-6050.
La unidad de procesamiento de movimiento mpu-60x0 es la primera solución del mundo en
procesamiento de movimientos, con la fusión integrada de sensores con 9-ejes, la fusión de sensores
utiliza su motor propiedad motion fusion probado en el campo de teléfonos móviles, tabletas,
aplicaciones, controladores de juegos, mandos a distancia, puntero de movimiento y otros dispositivos de
consumo.
 YL-38:
 Dimensiones: 30×16 mm
 Pin VCC: pin de entrada de corriente:
 Voltaje de entrada 3.3-5 V
 Corriente necesaria: 35mA
 Pin GND: pin tierra.

 A0: Salida analógica, se conecta directamente al puerto analógico del


microcontrolador que utilicemos.
 D0: salida digital, se conecta a puerto digital del microcontrolador que usemos.

Fig1. YL-38

MPU6050, Acelerómetro y Giroscopio.


El MPU6050 es un sensor y acelerómetro para Arduino con 6 grados de libertad. La primera
será mostrar lo que es un acelerómetro y giroscopio y la lectura de valores del MPU-6050
utilizando un Arduino Uno. También se mostrarán las mediciones en el monitor serial. La
segunda parte será de la implementación de una Unidad de Medición Inercial – IMU por sus
siglas en ingles. (Inertial Measurement Unit).
Fig2. MPU6050

SENSOR GIROSCÓPICO
Un giroscopio es un dispositivo que funciona para medir las velocidades angulares basándose
en el mantenimiento del impulso de rotación. Si intentamos hacer girar un objeto que está
girando sobre un eje que no es el eje sobre el que está rotando, el objeto ejercerá un momento
contrario al movimiento con el fin de preservar el impulso de rotación total. El giroscopio
muestra el cambio de rango en rotación en sus ejes X, Y y Z.

ACELERÓMETRO
Mide la aceleración, inclinación o vibración y transforma la magnitud física de aceleración en
otra magnitud eléctrica que será la que emplearemos en los equipos de adquisición estándar.
Los rangos de medida van desde las décimas de g, hasta los miles de g.

Tabla1. Diagrama y conexión para el mpu6050 con arduino pines utilizados

El circuito integrado MPU-6050 contiene un acelerómetro y giroscopio MEMS en un solo


empaque. Cuenta con una resolución de 16-bits, lo cual significa que divide el rango dinámico
en 65536 fracciones, estos aplican para cada eje X, Y y Z al igual que en la velocidad angular.
El sensor es ideal para diseñar control de robótica, medición de vibración, sistemas de
medición inercial (IMU), detector de caídas, sensor de distancia y velocidad, y muchas cosas
más.
El MPU-6050 contiene un giroscópico, un acelerómetro, además de un sensor de temperatura,
mediante I2C regresa unos valores conocidos como raw o “crudos” según el registro
seleccionado.

Rango De Escala Completa Sensibilidad del Rango De Escala Sensibilidad del


Giroscopio Giroscopio Completa Acelerómetro
Acelerómetro
±250 131 ±2 16384
±500 65.5 ±4 8192
±1000 32.8 ±8 4096
±2000 16.4 ±16 2048
Tabla2. Rangos De Escala Y El Valor Máximo Raw.

ESPECIFICACIONES DEL MPU6050


 Salida digital de 6 ejes.
 Giroscopio con sensibilidad de ±250, ±500, ±1000, y ±2000dps
 Acelerómetro con sensibilidad de ±2g, ±4g, ±8g y ±16g
 Algoritmos embebidos para calibración
 Sensor de temperatura digital
 Entrada digital de video FSYNC
 Interrupciones programables
 Voltaje de alimentación: 2.37 a 3.46V
 Voltaje lógico: 1.8V±5% o VDD
 10000g tolerancia de aceleración máxima

Servo Motor
Diminuto y ligero con alta potencia de salida. El servo puede rotar aproximadamente 180
grados (90 en cada dirección), y funciona igual que los tipos estándar pero más pequeños.
Puede usar cualquier servo código, hardware o biblioteca para controlar estos servos. [4]
Especificaciones:
• Peso: 9 g
• Dimensión: 22.2 x 11.8 x 31 mm aprox.
• Par de parada: 1.8 kgf · cm
• Velocidad de funcionamiento: 0.1 s / 60 grados
• Voltaje de funcionamiento: 4.8 V (~ 5V)
• Ancho de banda muerta: 10 μs
• Rango de temperatura: 0 ºC - 55 ºC
 Dimensiones compactas: Largo 22.2 mm, ancho 11.8 mm, altura 31 mm aprox.
 Largo del cable: 25 cm aprox.
 Piñonería plástica de nylon

 Incluye 3 brazos o cuernos (horns) y su tornillo de sujeción, 2 tornillos para montaje del
servo y cable de conexión con conector

 Conector universal tipo "S" compatible con la mayoría de receptores incluyendo Futaba,
JR, GWS, Cirrus, Blue Bird, Blue Arrow, Corona, Berg, Spektrum y Hitec, entre otros

Fig3. Micro cervo SG90

Plataforma Arduino
Con esta placa de programación Arduino UNO desarrolla dispositivos o realiza proyectos de
manera sencilla, aplicada para estudiante, técnico o profesional. La placa Arduino UNO puede
tomar información del entorno a través de sus entradas analógicas y digitales para controlar casi
cualquier cosa como luces, motores y otros actuadores. El software de programación de esta
placa es abierto, la distribución de sus pines es XBee. Tiene 6 pines de entrada analógica y
además es compatible con campos extra para funciones como Bluetooth, infrarrojo y otros
sensores.[3]
Fig4. Placa Arduino UNO

Características:
 Microcontrolador: ATmega328P
 Alimentación: 5 - 12 Vcc
 Frecuencia de operación: 20 MHz
 6 puertos análogos de entrada
 13 puertos de entrada/salida digital (incluyendo PWM)
 Capacidad de memoria flash: 32 Kb
 SRAM: 2 KB
 EEPROM: 1 KB
 Comunicación a PC por USB

Módulo bluetooth HC-05


Transceiver Bluetooth montado en tarjeta base de
6 pines para fácil utilización, interface serial, puede ser
configurado como maestro o como esclavo, Bluetooth
v2.0 + EDR, 2.4 GHz, alcance 5 m a 10 m.
Niveles lógicos de 3.3 V.
Fig5. Módulo bluetooth HC-05

En esta sesión, vamos a utilizar su hermano mayor el modulo HC-05, que puede configurarse
tanto como Master que como Slave, y que además dispone de bastante más parámetros de
configuración y capacidades de interrogación.
La conexión es sencilla aunque requiere algún cable más que el modulo HC-06, y algún cambio

Fig6. Conexión Arduino y Módulo bluetooth HC-05

En primer lugar, para que el HC-05 entre en modo comandos AT, requiere que cuando se
enciende el modulo, el pin KEY este HIGH. Por eso hemos conectado la tensión Vcc del módulo
BlueTooth al pin 8 de nuestro Arduino

Características:
 Especificación bluetooth v2.0 + EDR (Enhanced Data Rate)
 Puede configurarse como maestro, esclavo, y esclavo con autoconexión (Loopback)
mediante comandos AT
 Chip de radio: CSR BC417143
 Frecuencia: 2.4 GHz, banda ISM
 Modulación: GFSK (Gaussian Frequency Shift Keying)
 Antena de PCB incorporada
 Potencia de emisión: ≤ 4 dBm, Clase 2
 Alcance 5 m a 10 m
 Sensibilidad: ≤ -84 dBm a 0.1% BER
 Velocidad: Asincrónica: 2.1 Mbps (max.)/160 kbps, sincrónica: 1 Mbps/1 Mbps
 Seguridad: Autenticación y encriptación (Password por defecto: 1234)
 Perfiles: Puerto serial Bluetooth

 Módulo montado en tarjeta con regulador de voltaje y 6 pines suministrando acceso a


VCC, GND, TXD, RXD, KEY y status LED (STATE)
 Consumo de corriente: 50 mA

 El pin RX del módulo requiere resistencia de pull-up a 3.3 V (4.7 k a 10 k). Si el


microcontrolador no tiene resistencia de pull-up interna en el pin Tx se debe poner
externamente.

 Niveles lógicos: 3.3 V. Conectarlos a señales con voltajes mayores, como por ej. 5 V,
puede dañar el módulo
 Voltaje de alimentación: 3.6 V a 6 V
 Dimensiones totales: 1.7 cm x 4 cm aprox.
 Temperatura de operación: -20 ºC a +75 ºC

Aplicación con acelerómetro/giroscopio


V. MATERIALES Y EQUIPOS
Material Cantidad
Protoboard 2
Resistencias de 220ohm 5
Diodo led 1
Cable UTP 2m
Arduino UNO 2
Sensor MPU6050 1
Plataforma de Arduino
Servo motores 3
Modulo Bluetooth HC-05 2
Laptop 2
Tabla4. Materiales Aplicación Acelerómetro/giroscopio

VI. CARACTERISTICAS DEL TRABAJO

Realizar una aplicación con el sensor acelerómetro/giroscopio para una comunicación


inalámbrica entre un nodo sensor y nodo actuador, obteniendo los diferentes parámetros de giro
en los ejes expresados de dicha magnitud, es decir lo que se mueva en el giroscopio expresar lo
mismo en el nodo actuador.

Como primera parte se tiene el código para la transmisión de información mediante el módulo
bluetooth HC-05 especificado como maestro.
#include <MPU6050_tockn.h>

#include <Wire.h>

MPU6050 mpu6050(Wire,0.1,0.9);

#include <SoftwareSerial.h>

SoftwareSerial BT(4,5); // RX, TX recorder que se cruzan

float x,y,z;

float ang_x,ang_y,ang_z;

const int dataPin=4;

int ax,ay,az;

void setup() {

BT.begin(57600);
Serial.begin(9600);

Wire.begin();

mpu6050.begin();

//mpu6050.setGyroOffsets(-2.85, -2.14, -2.14);

mpu6050.calcGyroOffsets(true);

void loop() {

mpu6050.update();

x=mpu6050.getAngleX();

y=mpu6050.getAngleY();

z=mpu6050.getAngleZ();

ang_x=x+180;

ang_y=y+180;

ang_z=z+180;

if(x>=-90 && x<=90){ang_x=x;}

if(y>=-90 && y<=90){ang_y=y;}

if(z>=-90 && z<=90){ang_z=z;}

if (x>90){

ang_x=90;

}else if(x<-90){

ang_x=-90;

if (y>90){

ang_y=90;

}else if(y<-90){

ang_y=-90;

if (z>90){
ang_z=90;

}else if(z<-90){

ang_z=-90;

// if (y>=360){

// ang_y= y - (360);

// }else if(y<0){

// ang_y= y +(360);

// }

// if (z>=360){

// ang_z= z - (360);

// }else if(z<0){

// ang_z= z +(360);

// }

ax=ang_x*-90;

ay=ang_y*-90;

az=ang_z*-90;

//Serial.print("angleX : ");

//Serial.print(x);

Serial.print("Pitch : ");

Serial.print(ang_x);

// Serial.print("\tangleY : ");

//Serial.print(y);

Serial.print("\tRoll : ");

Serial.print(ang_y);

// Serial.print("\tangleZ : ");

//Serial.println(z);

Serial.print("\tYaw : ");

Serial.println(ang_z);

/////////////////////////////////////////////
// BT.print('a');

// BT.print(ang_x);

// BT.print(',');

// BT.print('b');

// BT.print(ang_y);

// BT.print(',');

// BT.print('c');

// BT.print(ang_z);

// BT.print(',');

// BT.print('d');

// BT.println(',');

// delay(1000);

BT.print("S");

BT.print(ang_x);

BT.print("T");

BT.print(ang_y);

BT.print("D");

BT.print(ang_z);

// BT.flush();

//BT.flush();

delay(1000);

////////////////////////////////////////////

Como segunda parte se tiene el código para el receptor de información mediante el módulo
bluetooth HC-05 especificado como esclavo.
#include <SoftwareSerial.h>
SoftwareSerial BT(5, 6); // RX, TX recorder que se cruzan
#include <Servo.h>
Servo servoMotor,servoMotor1,servoMotor2; //libreria
int a=0,b=0,c=0;
String str = "";
const char separator = ',';
const int dataLength = 3;
float data[dataLength];
int angulo,angulo1,angulo2;
String leeCadena[3];
int cont=0;
float x,y,z;
void setup()
{
//inicializa la comunicacion serial
Serial.begin(9600);
BT.begin(57600);
BT.setTimeout(50);
pinMode(9,OUTPUT); // Tiempo PWM
pinMode(10,OUTPUT); // Tiempo
pinMode(11,OUTPUT); // Tiempo PWM
servoMotor.attach(9); //libreria
servoMotor1.attach(10); //libreria
servoMotor2.attach(11); //libreria
}
void loop()
{
// while (BT.available())
// {
//
// //delay(50);
// char c = BT.read(); // Lee los caracteres
// if(c=='a'){
// cont =0;
// c='0';
// }
// if(c=='b'){
// cont =1;
// c='0';
// }
// if(c=='c'){
// cont =2;
// c='0';
// }
// if(c=='d'){
// data[0]= leeCadena[0].toFloat();
// data[1]= leeCadena[1].toFloat();
// data[2]= leeCadena[2].toFloat();
// leeCadena[0]="";
// leeCadena[1]="";
// leeCadena[2]="";
// cont =3;
// c='0';
// }
// leeCadena[cont] += c;
// }
if (BT.available() > 0)
{
if (BT.read() == 'S') {
x = BT.parseFloat();
}
if (BT.read() == 'T') {
y = BT.parseFloat();
}
if (BT.read() == 'D') {
z = BT.parseFloat();
}}
Serial.print("PITCH : ");
Serial.print(x);
Serial.print("\tROLL : ");
Serial.print(y);
Serial.print("\tYAW : ");
Serial.println(z);
a=data[0];
b=data[1];
c=data[2];
///pich
if (a>=0 && a<=180) {
//angulo=-8.88*c+2100;
angulo=(8.88*c)-500;
// if(a>=0&&a<=90)
// angulo=0.9*a+18;
// if(a>=91&&a<=180)
// angulo=0.977777778*a+11;
}
///roll
if (b>=0 && b<=180) {
//angulo1=-8.88*c+2100;
angulo1=(8.88*c)-500;
// if(b>=0&&b<=90)
// angulo1=-1.011111111*b+174;
// if(b>=91&&b<=180)
// angulo1=-0.922222222*b+166;
}
///yaw
if (c>=0 && c<=180) {
//angulo2=-8.88*c+2100;
angulo2=(8.88*c)-500;
//if(c>=0&&c<=90)
// angulo2=-1.1*c+178;
// if(c>=91&&c<=180)
// angulo2=-0,577777778*c+131;
}
libreria();
}
void libreria() {
servoMotor.write(angulo);
servoMotor1.write(angulo1);
servoMotor2.write(angulo2);
delay(1000);
}
Como tercera parte establecimiento del punto home para tener nuestro punto de partida en cero.
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire,0.1,0.9);
float x,y,z;
int n=0,m=0,o=0 ,a=1,b=1,c=1;
float ang_x,ang_y,ang_z;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
//mpu6050.setGyroOffsets(-2.90, -2.18, -2.18);
//mpu6050.setGyroOffsets(-3.03, -2.20, -2.20);
mpu6050.calcGyroOffsets(true);
}
void loop() {
mpu6050.update();
x=mpu6050.getAngleX();
y=mpu6050.getAngleY();
z=mpu6050.getAngleZ();
if(x>=0 && x<360){ang_x=x;}
if(y>=0 && y<360){ang_y=y;}
if(z>=0 && z<360){ang_z=z;}
if (x>=360){
ang_x= x -(360);
}else if(x<0){
ang_x= x +(360);
}
if (y>=360){
ang_y= y - (360);
}else if(y<0){
ang_y= y +(360);
}
if (z>=360){
ang_z= z - (360);
}else if(z<0){
ang_z= z +(360);
}
//Serial.print("angleX : ");
//Serial.print(x);
Serial.print("angle_X : ");
Serial.print(ang_x);
// Serial.print("\tangleY : ");
//Serial.print(y);
Serial.print("\tangle_y : ");
Serial.print(ang_y);
// Serial.print("\tangleZ : ");
//Serial.println(z);
Serial.print("\tangle_z : ");
Serial.println(ang_z);
}

III. RESULTADOS ESPERADOS Y RESULTADOS OBTENIDOS.

 Tener una comunicación inalámbrica estable entre el nodo sensor y el nodo actuador.
 Ubicar el punto cero en los 3 ejes de rotación del mpu 6050.

 Como resultados esperados se pudo observar en la practica la comunicación inalámbrica entre el


nodo sensor y el nodo actuador pero la comunicación no era tan eficiente como la comunicación
que queríamos tener para que mueva nuestra plataforma.

 En l practica también se pudo visualizar el punto cero en los 3 ejes de rotación con sus valores de
compensación.

IV. CONCLUSIONES Y RECOMENDACIONES

a. Conclusiones:

Durante la calibración debemos mantener el sensor sin moverlo en la posición de inicio,


entonces el programa empieza por leer los valores el programa trata de corregir los errores
de las medidas, para ello modifica constantemente el valor, usando un filtro y cada 100
lecturas comprueba los valores si se acercan a los que deseamos leer, aumentando o
disminuyendo los valores de compensación. Esto hará que las lecturas filtradas se
acerquen a:-aceleración: x=0, y=0, z=0 -velocidad angular: x=0, y=0, z=0

El MPU6050 es un sensor de movimiento el cual es capaz de medir la aceleración y el


giro en los tres ejes del movimiento (x,y,z) con una precisión bastante considerable tal
como indica en el monitor debemos anotar las compensaciones obtenidas para
configurarlas en nuestra práctica.

Tiene un conversor ADC de 16 bits, este conversor, convierte los datos a un valor digital y
envía dichos datos al Arduino mediante I2C y poder controlar los servomotores
conectados para simular cada uno de los movimientos como son en X (roll), Y(pitch),
Z(yaw) .

La comunicación entre el sensor y los servomotores es de vital importancia ya que dentro


de las necesidades de la aplicación se abordó el análisis de los tipos de comunicación de
tipo I2C, necesaria para obtener datos del MPU6050.

b. Recomendaciones:
 Es recomendable que el nodo sensor obtenga una calibración adecuada para poder obtener
los datos más exactos en los ejes que se pide tanto en el Yaw, Pitch y Roll.
 En el nodo actuador se debe obtener una visualización mucho más exacta que un simple
control de motores ya que estos actuadores serán quienes representen el movimiento en el
Yaw, Pitch y Roll.
Se recomienda obtener una óptima comunicación para que los datos enviados por el nodo
sensor mediante el transmisor llegue a cumplir lo requerido en el nodo actuador ubicado en la
parte de recepción

V. BIBLIOGRAFÍA

[1] Diseño e implementación de un sistema de transmisión, Universidad Nacional de


Chimborazo, disponible en:http://dspace.unach.edu.ec/bitstream/51000/3054/1/UNACH-ING-
ELC-TEL-0032.pdf
[2] Introducción a los sistemas de comunicación inalámbricos, José Prieto Vásquez

[Online].Available:https://www.exabyteinformatica.com/uoc/Informatica/Tecnologia_y_desarrol
lo_en_dispositivos_moviles/Tecnologia_y_desarrollo_en_dispositivos_moviles_(Modulo_1).pdf
[3]"Comenzando con arduino. [Online]. Available:
http://www.uca.es/recursos/doc/Unidades/Unidad_Innovacion/Innovacion_Docente/ANEXOS_2
011_2012/22232441_310201212102.pdf
[4] Servo Motor [Online]. Available: http://akizukidenshi.com/download/ds/towerpro/SG90.pdf