Publicado por el 18 julio, 2015 Deja tus dudas en los comentarios
Dificultad mediaComplejidad media
CC BY-SA 4.0

Usar un acelerómetro para medir aceleraciones es una de las cosas más sencillas del mundo de la electrónica y a su vez es extremadamente útil. Imagina que necesitas saber que inclinación tiene el terreno sobre el que está tu Robot o tu vehículo tele-controlado, podemos saberlo gracias a los datos del acelerómetro y a un poco de trigonometría.



Acelorómetro MPU_6050

Acelorómetro MPU_6050

Gracias a un acelerómetro no solo podemos medir la posición en base a la aceleración de la gravedad, si no que también podemos medir otro tipo de aceleraciones, por ejemplo la que es capaz de proporcionar un motor de combustión montado en un vehículo, es decir, el ya tan famoso «de 0 a 100 km/h en 4 segundos».

No vamos a dar muchas más vueltas así que te dejo con un par de vídeos sobre el acelerómetro y el código que se usa en Arduino para recibir la información del MPU-6050.

Acelerómetro y Arduino




El código de Arduino

/*
* Puedes distribuirlo y modificar el código.
*
* RincónIngenieril
* Versión: 1.0
* Fecha: 18/07/2015
*/
#include<Wire.h>
//Dirección I2C del acelerómetro
const int MPU=0x68;
// Variables para aceleración
int16_t AcX,AcY,AcZ;
// Variable para temperatura
int16_t Tmp;
// Variables para velocidad angular
int16_t GyX,GyY,GyZ;
void setup(){
Wire.begin();		//Iniciar I2C
Wire.beginTransmission(MPU);	//Iniciar comunicación
Wire.write(0x6B);  // Configurar regisstro
Wire.write(0);     // Despertar al múdulo de sleep
Wire.endTransmission(true);	//Finalizar transmisión
Serial.begin(9600);	//Abrir puerto serie
}
void loop(){
Wire.beginTransmission(MPU);	//Iniciar comunicación
Wire.write(0x3B);  // Registro desde el que empezamos a leer
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true);  // Pedimos 14 registros
//Recibimos los registos de la memoria del MPU-6050
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
//Imprimimos en el puero serie
Serial.print("AcX = "); Serial.print(AcX);
Serial.print(" | AcY = "); Serial.print(AcY);
Serial.print(" | AcZ = "); Serial.print(AcZ);
//La temperatura hay que calcularla
//temperatura = (tmp/340.00)+36.53
Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);
Serial.print(" | GyX = "); Serial.print(GyX);
Serial.print(" | GyY = "); Serial.print(GyY);
Serial.print(" | GyZ = "); Serial.println(GyZ);
delay(200);
}

Introducción a los acelerómetros


Sobre el autor
Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en enrique.rinconingenieril.es
Artículos relacionados
Deja un comentario