Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 INTRODUCCIÓN
El chip MPU6050 es conocido en la actualidad como un IMU (Inertial Measurement Unit). A lo largo del
presente trabajo se quiere abordar el uso del chip MPU6050 para su aplicación en diversos campos
como puede ser:
Topografía.
GPS.
Control de posición e inclinación.
UAVs
Es común que en la actualidad, un vehículo aéreo no tripulado (Dron) lleve incorporado un dispositivo
de estas características.
A lo largo del presente trabajo se quiere ilustrar su funcionamiento. Además se incluirá el código
necesario para implementarlo sobre una placa de desarrollo Arduino.
2.1 EL ACELERÓMETRO
Para obtener las lecturas de aceleración, el chip opera de la siguiente manera. Si el chip está alineado
con el suelo, su eje Z se encontrará perpendicular, de manera que marcará 9,8, mientras que los otros
ejes marcarán 0.
Si se inclina 90 grados, en este caso el eje X marcará 9,8.
De esta manera y aplicando fórmulas de trigonometría, será posible calcular el ángulo de inclinación de
la IMU.
𝑥2
𝐴𝑛𝑔𝑢𝑙𝑜 𝑋 = 𝑎𝑡𝑎𝑛 ( )
√𝑦 2 + 𝑧 2
2.2 EL GIRÓSCOPO
Mediante el giróscopo será posible medir la velocidad angular. Anteriormente se a descrito a obtención
del ángulo inicial de la IMU, por lo que, al sumarle el nuevo ángulo en cada momento se obtendrán las
lecturas de inclinación de manera instantánea. Así, mediante la fórmula:
int16_t AcX, AcY, AcZ, GyX, GyY, GyZ; // Valores en enteros de 16 bits
float Acc[2]; //Se definen los vectores para guardar las lecturas.
float Gy[2];
float Angle[2];
void setup()
{
Wire.begin(); //Comenzamos la transmisión en la dirección 0x68.
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0); //"Despertamos el chip"
Wire.endTransmission(true);
Serial.begin(9600);// Si se conecta a un PC, podremos leer las lecturas por puerto serie.
void loop()
{
Wire.beginTransmission(MPU);
Wire.write(0x3B); //Se pide el registro 0x3B, correspondiente al AcX
Wire.endTransmission(false);
Wire.requestFrom(MPU,6,true); //Se piden 6 registros de datos.
}
else if (Angle[0] < 5 and Angle[0] < 40 and Angle[0] < -5 and Angle[0] > -40){
digitalWrite(4, HIGH); //La inclinación empieza a ser considerable, luz amarilla.
digitalWrite(3, LOW);
}
delay(10); //0.010, el intervalo en cada medida.
}
4 VÍDEO DE LA PRÁCTICA
Se incluye el vídeo en la carpeta compartida en el zip adjunto.