Velocímetro con MPU6050

July 27, 2019 | Author: Hector Flores | Category: Acelerómetro, Sistema coordinado, Fuerza, Avión, Movimiento (Física)
Share Embed Donate


Short Description

Uso del acelerómetro de 6 ejes, MPU6050 para la elaboración de un velocímetro...

Description

Centro de Enseñanza Técnica Industrial Organismo Público Descentralizado Federal 

Reporte de práctica 2do parcial Velocímetro con el uso de un acelerómetro MEMS





Héctor Daniel Flores León 12310134 Fredo Martín Avilán Flores 11310026 Edgar Bernardo Plazola Arnaíz 10310330

Ingeniería mecatrónica Sistemas micro electro mecánicos (MEMS) Matías Combs Roberto Centro de Enseñanza Técnica Industrial Plantel: Colomos Turno: Vespertino

Fecha: 03/05/16

1

Contenido Introducción ........................................................................................................................................ 3 Objetivos ............................................................................................................................................. 3 Marco teórico ...................................................................................................................................... 4 Sistemas de referencia y coordenadas ........................................................................................... 4 Acelerómetro .................................................................................................................................. 6 El MPU 6050 .................................................................................................................................... 7 Especificaciones .......................................................................................................................... 8 Conversión de aceleración a velocidad: .......................................................................................... 8 Materiales ........................................................................................................................................... 9 Desarrollo .......................................................................................................................................... 10 Diagrama esquemático ................................................................................................................. 10 Programa utilizado ........................................................................................................................ 10 Fotos de la práctica ....................................................................................................................... 24 Conclusiones ..................................................................................................................................... 25

Introducción La práctica consiste en utilizar algún dispositivo MEMS para realizar una aplicación de nuestra elección. Decidimos utilizar un acelerómetro, el MPU-6050, acelerómetro de uso general en los ejes X, Y y Z, así como también cuenta con giroscopio de 3 ejes. Nuestra aplicación es utilizar el acelerómetro para poder medir la velocidad aproximada de un cuerpo en desplazamiento, ya sea en el eje X o Y. El acelerómetro está posicionado sobre el cuerpo en movimiento, y la salida de velocidad puede observarse en un arreglo de 3 display de 7 segmentos ánodo común. La salida está en metros sobre segundo cuadrado. El control de variables y procesos matemáticos para la conversión de los datos del acelerómetro, así como la conversión de aceleración a velocidad, al igual que el control de los displays se realizó en el ARDUINO MEGA.

Objetivos Realizar una aplicación con el uso de dispositivos MEMS. Medir y mostrar la velocidad lineal de un cuerpo en movimiento de manera constante, mostrando la salida en tiempo real. Conocer el manejo y control del acelerómetro, para poder utilizar sus beneficios en futuras aplicaciones.  



Marco teórico Sistemas de referencia y coordenadas

Para localizar un punto en un sistema de coordenadas, lo primero es definir un sistema de referencia claro y a ser posible común entre los diferentes observadores. El más habitual en nuestra cultura es el llamado sistema cartesiano de referencia.

Para definir un punto en un espacio de 3 dimensiones necesitamos 3 números, que pueden ser la proyección del punto en tres ejes ortogonales. De este modo, una vez definida la unidad de medida, la posición de cualquier punto del espacio queda definido mediante las 3 coordenadas que llamamos x, y, z, con respecto a nuestro sistema de referencia. Hasta aquí todo bien, pero imaginaros un avión. ¿Cómo definimos su posición en el espacio? Con un único punto, de 3 coordenadas en el espacio, podemos fijar por ejemplo su centro de gravedad, pero resulta evidente de que necesitamos además especificar otros parámetros para saber si el avión vuela boca arriba o boca abajo, o si tiene un Angulo ascendente o descendente. Por eso para reflejar la situación y orientación de un avión o barco necesitamos más información: Los ángulos que cada uno de los ejes del aparato marca con respecto a la nuestra referencia. Estos ángulos de desviación respecto los ejes de referencia se llaman en ingles Yaw, Pitch y Roll, y en castellano corresponden a Guiñada, Cabeceo y Balanceo.

Por eso para definir la posición de un avión necesitamos tres coordenadas para fijar la posición y 3 ángulos que definan la orientación del avión con respecto a los ejes del sistema de referencia. Esta forma de referenciar la posición mediante ángulos en lugar de distancias cartesianas se llaman coordenadas angulares o polares.

Para controlar esas fuerzas se requieren sensores que nos den información temprana de cualquier fuerza que actúe sobre nuestra nave, para corregirla si se puede y estabilizarla. Y hay dos tipos de sensores que se usan para esto: Acelerómetros y Giróscopos. El principio de funcionamiento de giróscopos y acelerómetros se funda en la primera ley de Newton o ley de la inercia. Establece que todo objeto en movimiento tiene a mantener su estado (Inercia) hasta que una fuerza externa lo perturbe.

 A un sistema de referencia que no está sometido a ninguna fuerza externa se le llama un sistema de referencia inercial. Si aplicamos una fuerza externa nuestro sistema de referencia, deja de ser inercial por definición y percibimos una fuerza opuestas a las aplicadas que tienden a mantener nuestro movimiento previo. Para detectar este tipo de fuerzas usamos los acelerómetros.

 Acelerómetro

Un acelerómetro detecta las fuerzas de inercia que empujan al sensor y las descomponen en las tres direcciones principales de referencia.

Cuando un acelerómetro es sometido a una fuerza lateral en una dirección, el sensor interno (En la imagen la bolita) tiende a retrasarse en la dirección contraria a la fuerza que actúa y al detectar en que paredes choca y con qué intensidad, podemos calcular la dirección en intensidad de la fuerza aplicada. Hoy no se construyen ya acelerómetros mecánicos con bolitas como antaño, sino que se construyen como dispositivos electrónicos integrados y basándose en el efecto piezoeléctrico, que provoca pequeñas corrientes inducidas cuando la inercia deforma ligeramente cristales diseñados para ello.

También encontrareis referencias a estos sistemas como MEMS o Micro Electro Mechanical Systems, porque se construyen como un hibrido de semiconductores y sistemas micro mecánicos con partes semi móviles para detectar las inercias y las aceleraciones. Un acelerómetro, detecta la aceleración lateral que una fuerza externa provoca en el sensor y mezclando la información de los tres ejes determina mediante cálculo, la dirección de la fuerza que se le aplica. No se puede despreciar tampoco las interferencias, que como sabéis afectan a todos los aparatos electrónicos y los IMUs no son la excepción. Y por último sufren también de un problema que se llama deriva (Shift en inglés) y que se produce porque el procesador interno del IMU calcula las orientaciones, o si prefieres, los ejes de referencia por cálculo de aceleraciones, que por mucha precisión que se intente al final tendrán pequeños errores que se irán acumulando. El MPU 6050

El circuito integrado 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 al igual que en la velocidad angular. Rango De Escala Rango De Escala Sensibilidad del Sensibilidad del Completa Completa Giroscopio Giroscopio  Acelerómetro  Acelerómetro ±250

131

±2

16384

±500

65.5

±4

8192

±1000

32.8

±8

4096

±2000

16.4

±16

2048

Especificaciones 

Salida digital de 6 ejes.



Giroscopio con sensibilidad de ±250, ±500, ±1000 y ±2000 dps.



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 de 2.37 a 3.46 V.



10000g tolerancia de aceleración máxima.

Conversión de aceleración a velocidad:

El acelerómetro entrega valores de aceleración medidos en los ejes X, Y y Z. Dichos valores en bruto deben de interpretarse y convertirse a m/s^2 para poder utilizarse en la fórmula. La fórmula de velocidad lineal en el tiempo aplicada es:

       El tiempo de muestreo debe de ser lo más pequeño posible para reducir errores graves por falta de datos. Debido a la limitante de datos de salida del acelerómetro MPU 6050, el tiempo de muestreo se estableció en 10mS. La velocidad final fue considerada en los ejes X e Y únicamente, debido a que los datos que el acelerómetro mostraba en el eje Z variaban bastante, causando errores de acumulación mayores.

Utilizando la fórmula anterior, se calculan las velocidades en cada eje cartesiano en cada instante de tiempo. Para determinar el vector velocidad total, se consideró la magnitud de ambas velocidades obtenidas:

  √    Siendo esta última la que se muestra en el display.

Materiales 1 display de 7 segmentos, a 3 dígitos. Ánodo común. Acelerómetro MPU-6050. Tarjeta de desarrollo ARDUINO MEGA. 3 transistores NPN 2N2222A. 9 resistencias de 330Ω.         

6 resistencias de 1KΩ.

1 pila de 9 V. 1 push button (para establecer valores iniciales en 0). Conectores macho-macho.

Desarrollo Diagrama esquemático

Programa utilizado #include #include #include // I2C device class (I2Cdev) demonstration Arduino sketch for MPU6050 class using DMP (MotionApps v2.0) // 6/21/2012 by Jeff Rowberg // Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib // // Changelog: // 2013-05-08 - added seamless Fastwire support //

- added note about gyro calibration

//

2012-06-21 - added note about Arduino 1.0.1 + Leonardo compatibility error

//

2012-06-20 - improved FIFO overflow handling and simplified read process

// //

2012-06-19 - completely rearranged DMP initialization code and simplification 2012-06-13 - pull gyro and accel data from FIFO packet instead of reading directly

//

2012-06-09 - fix broken FIFO read sequence and change interrupt detection to RISING

//

2012-06-05 - add gravity-compensated initial reference frame acceleration output

// // // // //

- add 3D math helper file to DMP6 example sketch - add Euler output and Yaw/Pitch/Roll output formats 2012-06-04 - remove accel offset clearing for better results (thanks Sungon Lee) 2012-06-01 - fixed gyro sensitivity to be 2000 deg/sec instead of 250 2012-05-30 - basic DMP initialization working

/* ============================================ I2Cdev device library code is placed under the MIT license Copyright (c) 2012 Jeff Rowberg Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. =============================================== */ // I2Cdev and MPU6050 must be installed as libraries, or else the .cpp/.h files // for both classes must be in the include path of your project #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" //#include "MPU6050.h" // not necessary if using MotionApps include file

// 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 // class default I2C address is 0x68 // specific I2C addresses may be passed as a parameter here // AD0 low = 0x68 (default for SparkFun breakout and InvenSense evaluation board) // AD0 high = 0x69 MPU6050 mpu; //MPU6050 mpu(0x69); // 1 packet available // (this lets us immediately read more without waiting for an interrupt) fifoCount -= packetSize; #ifdef OUTPUT_READABLE_QUATERNION // display quaternion values in easy matrix form: w x y z mpu.dmpGetQuaternion(&q, fifoBuffer); Serial.print("quat\t"); Serial.print(q.w); Serial.print("\t"); Serial.print(q.x); Serial.print("\t"); Serial.print(q.y); Serial.print("\t"); Serial.println(q.z); #endif #ifdef OUTPUT_READABLE_EULER // display Euler angles in degrees mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetEuler(euler, &q);

 

Serial.print("euler\t"); Serial.print(euler[0] * 180/M_PI); Serial.print("\t"); Serial.print(euler[1] * 180/M_PI); Serial.print("\t"); Serial.println(euler[2] * 180/M_PI); #endif #ifdef OUTPUT_READABLE_YAWPITCHROLL // display Euler angles in degrees mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); Serial.print("ypr\t"); Serial.print(ypr[0] * 180/M_PI); Serial.print("\t"); Serial.print(ypr[1] * 180/M_PI); Serial.print("\t"); Serial.println(ypr[2] * 180/M_PI); #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);

//

Serial.print("areal\t");

//

Serial.print(aaReal.x);

//

Serial.print("\t");

//

Serial.print(aaReal.y);

// //

Serial.print("\t"); Serial.println(aaReal.z); #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); //

Serial.print("aworld\t");

// //

Serial.print(aaWorld.x); Serial.print("\t");

//

Serial.print(aaWorld.y);

//

Serial.print("\t");

//

Serial.println(aaWorld.z); #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]; Serial.write(teapotPacket, 14); teapotPacket[11]++; // packetCount, loops at 0xFF on purpose #endif

//

// blink LED to indicate activity

// //

blinkState = !blinkState; digitalWrite(LED_PIN, blinkState); t.update();

} } void CalculoVel() { if(cont >= 2000)//tiempo de estabilización del acelerómetro { if(cont2>2) { aRealT[0]=(aInterX[0]+aInterX[2])/2; aRealT[1]=(aInterY[0]+aInterY[2])/2; aRealT[2]=(aInterZ[0]+aInterZ[2])/2;

for(int i=1;i
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF