El módulo MPU6050 es una unidad inercial que mide la evolución de un objeto en el espacio. Puede medir las aceleraciones lineales y angulares en los tres ejes del espacio. Este componente se puede encontrar en varias aplicaciones como los controladores de videojuegos o los teléfonos inteligentes. Se puede usar para realizar el control de actitud de un dron o para equilibrar un robot sobre dos ruedas.
Para este tutorial, usaremos el módulo GY-521 en el que está integrado el MPU6050.
Prerrequisito: comunicación I2C
Hardware
- Computadora
- Arduino UNO
- Cable USB A macho a B macho
- MPU6050 (Module GY-521)
Principio de funcionamiento
El módulo GY-521 es un tablero de desarrollo para el sistema microelectromecánico MPU6050 (MEM- Sistemas microelectromecánicos). El módulo MPU6050 consta de un sensor de temperatura y dos sensores micromecánicos: un giroscopio para medir las rotaciones y un acelerómetro para medir las aceleraciones en el espacio. Estos sensores suelen constar de una parte mecánica y una parte piezoeléctrica. Cuando el objeto está en movimiento, la parte mecánica se mueve contra la parte piezoeléctrica que envía una señal eléctrica.
Esquema
El módulo puede ser alimentado directamente a través de la clavija de 5V en el tablero de Arduino. El módulo GY-521 utiliza la comunicación I2C para interactuar con el microcontrolador.
- SDA al pin A4
- SCL al pin A5
- VCC al pin 5V
- GND al pin GND
Código
Para interactuar con el módulo GY-521, y por lo tanto con el MPU6050, utilizaremos la biblioteca del mismo nombre Adafruit_MPU6050.h. Es importante tener en cuenta que, dependiendo del módulo utilizado, puede ser necesario modificar la dirección I2C para poder recuperar las mediciones. El código propuesto aquí es el programa básico para mostrar y utilizar las mediciones del sensor. La biblioteca ofrece muchos más ajustes y parámetros. Para más funcionalidades, no dude en consultar la documentación y los ejemplos de la biblioteca.
//Libraries #include <Wire.h>//https://www.arduino.cc/en/reference/wire #include <Adafruit_MPU6050.h>//https://github.com/adafruit/Adafruit_MPU6050 #include <Adafruit_Sensor.h>//https://github.com/adafruit/Adafruit_Sensor //Objects Adafruit_MPU6050 mpu; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init i2c (Default pins A4, A5) Wire.begin(); if (!mpu.begin(0x69)) { Serial.println("Failed to find MPU6050 chip"); while (1) { delay(10); } } mpu.setAccelerometerRange(MPU6050_RANGE_16_G); mpu.setGyroRange(MPU6050_RANGE_250_DEG); mpu.setFilterBandwidth(MPU6050_BAND_21_HZ); } void loop() { readMPU(); delay(100); } void readMPU( ) { /* function readMPU */ ////Read acceleromter data sensors_event_t a, g, temp; mpu.getEvent(&a, &g, &temp); /* Print out the values */ Serial.print("Acceleration X: "); Serial.print(a.acceleration.x); Serial.print(", Y: "); Serial.print(a.acceleration.y); Serial.print(", Z: "); Serial.print(a.acceleration.z); Serial.println(" m/s^2"); Serial.print("Rotation X: "); Serial.print(g.gyro.x); Serial.print(", Y: "); Serial.print(g.gyro.y); Serial.print(", Z: "); Serial.print(g.gyro.z); Serial.println(" rad/s"); Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println("°C"); }
Resultado
Una vez que el código ha sido cargado en el Arduino, si mueves el sensor, puedes ver que los valores de aceleración cambian en diferentes direcciones en el espacio. También puede comprobar el funcionamiento del sensor de temperatura pegando el dedo sobre el módulo.
Aplicaciones
- Estabilizar un UAV
- Controlar un robot con los movimientos de la mano
- Darle equilibrio a un robot de dos ruedas
Fuentes
- https://github.com/ElectronicCats/mpu6050/blob/master/src/MPU6050.h
- https://www.arduino.cc/en/reference/wire
- https://github.com/adafruit/Adafruit_MPU6050
- https://github.com/adafruit/Adafruit_Sensor
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código