Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
MPU-6000 es un sensor de seguimiento de movimiento de 6 ejes que tiene un acelerómetro de 3 ejes y un giroscopio de 3 ejes integrados. Este sensor es capaz de realizar un seguimiento eficiente de la posición exacta y la ubicación de un objeto en el plano tridimensional. Puede emplearse en los sistemas que requieren un análisis de posición con la máxima precisión.
En este tutorial se ha ilustrado la interfaz del módulo sensor MPU-6000 con arduino nano. Para leer los valores de aceleración y ángulo de rotación, hemos utilizado arduino nano con un adaptador I2c. Este adaptador I2C hace que la conexión al módulo sensor sea fácil y más confiable.
Paso 1: Hardware necesario:
Los materiales que necesitamos para lograr nuestro objetivo incluyen los siguientes componentes de hardware:
1. MPU-6000
2. Arduino Nano
3. Cable I2C
4. Escudo I2C para arduino nano
Paso 2: Conexión de hardware:
La sección de conexión de hardware básicamente explica las conexiones de cableado necesarias entre el sensor y el arduino nano. Asegurar las conexiones correctas es la necesidad básica al trabajar en cualquier sistema para obtener la salida deseada. Entonces, las conexiones requeridas son las siguientes:
El MPU-6000 funcionará sobre I2C. Aquí está el diagrama de cableado de ejemplo, que demuestra cómo cablear cada interfaz del sensor.
Fuera de la caja, la placa está configurada para una interfaz I2C, por lo que recomendamos usar esta conexión si, por lo demás, es agnóstico.
¡Todo lo que necesitas son cuatro cables! Solo se requieren cuatro conexiones Vcc, Gnd, SCL y pines SDA y estos se conectan con la ayuda del cable I2C.
Estas conexiones se muestran en las imágenes de arriba.
Paso 3: Código para seguimiento de movimiento:
Comencemos ahora con el código arduino.
Mientras usamos el módulo de sensor con el arduino, incluimos la biblioteca Wire.h. La biblioteca "Wire" contiene las funciones que facilitan la comunicación i2c entre el sensor y la placa arduino.
El código arduino completo se proporciona a continuación para la conveniencia del usuario:
#incluir
// La dirección MPU-6000 I2C es 0x68 (104)
#define Addr 0x68
configuración vacía ()
{
// Inicializar la comunicación I2C como maestro
Wire.begin ();
// Inicializar la comunicación en serie, configurar la velocidad en baudios = 9600
Serial.begin (9600);
// Iniciar transmisión I2C
Wire.beginTransmission (Addr);
// Seleccione el registro de configuración del giroscopio
Wire.write (0x1B);
// Rango de escala completa = 2000 dps
Wire.write (0x18);
// Detener la transmisión I2C
Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr);
// Seleccione el registro de configuración del acelerómetro
Wire.write (0x1C);
// Rango de escala completa = +/- 16g
Wire.write (0x18);
// Detener la transmisión I2C
Wire.endTransmission ();
// Iniciar transmisión I2C
Wire.beginTransmission (Addr);
// Seleccionar registro de administración de energía
Wire.write (0x6B);
// PLL con referencia xGyro
Wire.write (0x01);
// Detener la transmisión I2C
Wire.endTransmission ();
retraso (300);
}
bucle vacío ()
{
datos int sin firmar [6];
// Iniciar transmisión I2C
Wire.beginTransmission (Addr);
// Seleccionar registro de datos
Wire.write (0x3B);
// Detener la transmisión I2C
Wire.endTransmission ();
// Solicita 6 bytes de datos
Wire.requestFrom (Dirección, 6);
// Leer 6 bytes de datos
si (Cable disponible () == 6)
{
datos [0] = Wire.read ();
datos [1] = Wire.read ();
datos [2] = Wire.read ();
datos [3] = Wire.read ();
datos [4] = Wire.read ();
datos [5] = Wire.read ();
}
// Convertir los datos
int xAccl = datos [0] * 256 + datos [1];
int yAccl = datos [2] * 256 + datos [3];
int zAccl = datos [4] * 256 + datos [5];
// Iniciar transmisión I2C
Wire.beginTransmission (Addr);
// Seleccionar registro de datos
Wire.write (0x43);
// Detener la transmisión I2C
Wire.endTransmission ();
// Solicita 6 bytes de datos
Wire.requestFrom (Dirección, 6);
// Leer 6 bytes de datos
if (Cable disponible () == 6)
{
datos [0] = Wire.read ();
datos [1] = Wire.read ();
datos [2] = Wire.read ();
datos [3] = Wire.read ();
datos [4] = Wire.read ();
datos [5] = Wire.read ();
}
// Convertir los datos
int xGyro = datos [0] * 256 + datos [1];
int yGyro = datos [2] * 256 + datos [3];
int zGyro = datos [4] * 256 + datos [5];
// Salida de datos al monitor en serie
Serial.print ("Aceleración en el eje X:");
Serial.println (xAccl);
Serial.print ("Aceleración en el eje Y:");
Serial.println (yAccl);
Serial.print ("Aceleración en el eje Z:");
Serial.println (zAccl);
Serial.print ("Eje X de rotación:");
Serial.println (xGyro);
Serial.print ("Eje Y de rotación:");
Serial.println (yGyro);
Serial.print ("Eje Z de rotación:");
Serial.println (zGyro);
retraso (500);
}
En la biblioteca de cables, Wire.write () y Wire.read () se utilizan para escribir los comandos y leer la salida del sensor.
Serial.print () y Serial.println () se utilizan para mostrar la salida del sensor en el monitor en serie del IDE de Arduino.
La salida del sensor se muestra en la imagen de arriba.
Paso 4: Aplicaciones:
MPU-6000 es un sensor de seguimiento de movimiento, que encuentra su aplicación en la interfaz de movimiento de teléfonos inteligentes y tabletas. En los teléfonos inteligentes, estos sensores se pueden emplear en aplicaciones tales como comandos de gestos para aplicaciones y control de teléfonos, juegos mejorados, realidad aumentada, captura y visualización de fotografías panorámicas y navegación para peatones y vehículos. La tecnología MotionTracking puede convertir teléfonos y tabletas en potentes dispositivos inteligentes 3D que se pueden utilizar en aplicaciones que van desde el control de la salud y el estado físico hasta servicios basados en la ubicación.