| Comprar en OSOYOO | Comprar en EE. UU. |
Contenido
Este tutorial se centra en mejorar las capacidades autónomas del coche robot OSOYOO V3 utilizando el módulo MPU6050 (IMU) para mantener la dirección deseada. El MPU6050, un sensor de movimiento de 3 ejes, proporciona datos de velocidad angular (giroscopio) y aceleración lineal (acelerómetro), lo que permite al robot corregir activamente su trayectoria. Esta lección cubre las técnicas de fusión de sensores y los algoritmos de control PID para una conducción en línea recta estable.
Para esta lección, necesitas el siguiente componente. Asegúrate de tenerlo a mano antes de empezar.
| N.° | Imagen | Dispositivo | Cant. | Accesorios | Enlace |
| 1 | ![]() |
Giroscopio MPU6050 de 3 ejes | 1 | Haz clic aquí para comprar |
El MPU6050 integra un giroscopio de 3 ejes y un acelerómetro de 3 ejes. El giroscopio mide la velocidad angular, proporcionando información sobre la velocidad de rotación del robot alrededor de sus ejes X, Y y Z. La integración de estos datos a lo largo del tiempo da como resultado el desplazamiento angular (por ejemplo, el ángulo de guiñada). Sin embargo, los datos brutos del giroscopio están sujetos a deriva, lo que significa que acumulan pequeños errores con el tiempo. El acelerómetro mide la aceleración lineal, que puede utilizarse para determinar la orientación del dispositivo respecto a la gravedad. Aunque los acelerómetros son estables a largo plazo, son muy sensibles a las vibraciones y los movimientos bruscos, lo que hace que sus datos de orientación brutos sean ruidosos.

Paso 1: Realiza el ensamblaje de hardware básico descrito en la lección 1 del coche robot. Si ya terminaste la lección 1, deja todo como está.

Paso 2: Fija el módulo MPU6050 de forma segura en el chasis del robot como se muestra a continuación. (El MPU6050 se comunica con Arduino a través del protocolo I2C, que solo requiere dos líneas de datos: SDA (Serial Data) y SCL (Serial Clock), además de alimentación (VCC) y masa (GND).)

| Software Arduino de código abierto (IDE) |
![]() |
Descarga el software aquí: https://www.arduino.cc/en/Main/Software?setlang=en |
| 7-Zip es una utilidad gratuita para extraer archivos ZIP |
![]() |
Descarga 7-Zip gratis aquí: https://www.7-zip.org/ |
1. Configuración del Arduino IDE: Descarga e instala la última versión del Arduino IDE desde https://www.arduino.cc/en/Main/Software?setlang=en.

2. Descarga del código de ejemplo: Descarga el código de ejemplo para la lección 2 desde aquí. Extrae el contenido y encontrarás un archivo llamado v3car-lesson2.ino dentro de una carpeta llamada v3car-lesson2. Abre v3car-lesson2.ino en el Arduino IDE.

3. Instalación de librerías
Primero, descarga los archivos ZIP de las librerías desde los enlaces siguientes:
https://osoyoo.com/driver/2wd/MPU6050_light.zip
https://osoyoo.com/driver/2wd/PID.zip
No descomprimas los archivos. Abre el Arduino IDE -> Programa -> Incluir librería -> Añadir biblioteca .ZIP. Añade los archivos ZIP al Arduino IDE uno por uno.

4. Selección de placa y puerto: Conecta la OSOYOO Basic Board (compatible con Arduino UNO) a tu ordenador mediante un cable USB (Importante: asegúrate de que el interruptor del coche robot esté apagado y la batería desconectada antes de conectar la placa al PC). Abre el Arduino IDE. Ve a Herramientas > Placa y selecciona Arduino Uno. Luego ve a Herramientas > Puerto y selecciona el puerto serie correcto. Si no estás seguro, consulta el administrador de dispositivos de tu sistema operativo.

5. Cargar el código: Haz clic en el botón “Cargar” (icono de flecha hacia la derecha) para compilar y cargar el sketch en la OSOYOO Basic Board.

6. Comprobar si Arduino detecta el MPU6050
Abre el Monitor Serie (esquina superior derecha del Arduino IDE), ajusta la velocidad de transmisión a 9600 y deberías ver MPU6050 Found! como se muestra a continuación. ¡Felicidades! Arduino está detectando el MPU6050 — ya puedes probar el coche.

Nota: Si ves “Failed to find MPU6050 chip“, hay un problema de cableado. Asegúrate de que:
1) Los pines VCC/GND/SDA/SCL del MPU6050 estén correctamente conectados al shield OSOLINK Wi-Fi/BLE I/O según nuestras instrucciones
2) Los pines A4/A5 y SDA/SCL de Arduino no tengan otros cables conectados (en proyectos de seguimiento de líneas, A4/A5 pueden estar ya en uso por el sensor de seguimiento)
1) ¿Cómo controla la función Move() el movimiento y la dirección del coche?
El coche robot OSOYOO utiliza dirección diferencial. La función move(speedL, speedR) acepta dos parámetros, speedL y speedR, que representan la velocidad de rotación de las ruedas izquierda y derecha respectivamente. El valor de velocidad va de -255 a +255, donde un valor positivo indica rotación hacia adelante y un valor negativo indica rotación hacia atrás. Por ejemplo, move(-50, 100) significa que la rueda izquierda gira hacia atrás a velocidad 50 y la rueda derecha gira hacia adelante a velocidad 100, lo que provoca un giro brusco a la izquierda.
2) Introducción a la programación del MPU6050
Tras la inicialización, el giroscopio MPU6050 rastrea de forma constante la orientación del robot respecto a su dirección de partida. Cuando el coche robot se desvía de esta dirección inicial, el MPU6050 comunica la desviación a Arduino.
En nuestro código, la variable Direction representa la orientación del coche en el momento en que se coloca en el suelo (asumimos que apunta hacia adelante, por lo que establecemos Direction en 0).
Tras los cálculos de las primeras líneas de la función loop(), obtenemos la orientación actual del coche en la variable currentAngle en la línea 129.
Al combinar las respuestas a estas tres preguntas, el controlador PID realiza una corrección de dirección suave y eficiente.
PID_v1.h y tu código.setup()):// We tell the PID controller what to watch and what to control.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
Direction = 0; // Our TARGET is to have an angle of 0 degrees.
myPID.SetMode(AUTOMATIC); // Turn on the controller.
loop()):// 1. We get the sensor reading and put it into the Input variable.
Input = currentAngle;
// 2. We call the compute function. This is where the PID magic happens!
myPID.Compute();
// 3. We use the result to control the motors.
int speedL = baseSpeed - Output;
int speedR = baseSpeed + Output;
move(speedL, speedR);
myPID.Compute() realiza todo el trabajo internamente. Cada vez que se llama (la librería gestiona el tiempo según SetSampleTime), lleva a cabo los siguientes pasos:Output es +15, significa que el robot necesita una corrección de 15 unidades. La aplicamos reduciendo la velocidad de un motor (baseSpeed - 15) y aumentando la del otro (baseSpeed + 15), lo que hace girar al robot y reduce su error. Si el robot va perfectamente recto, Input será 0, el error será 0 y Output será 0, por lo que ambos motores funcionarán a baseSpeed.4) Cómo ajustar Kp, Ki y Kd para un movimiento estable
Ki = 0.0 y Kd = 0.0 en tu código.Kp estable que no oscile (o apenas oscile). Probablemente sea inferior a 1,5.banda muerta de unos 0,5 grados a tu bucle para ignorar el ruido del sensor.Kp sea estable, aumenta lentamente Kd para reducir cualquier sobreoscilación residual.Ki para eliminar la deriva a largo plazo.Siguiendo estas pautas y comprendiendo los principios subyacentes, puedes convertir el coche robot OSOYOO V3 en una plataforma capaz de navegación autónoma, sentando las bases para proyectos de robótica más avanzados.
DownLoad Url osoyoo.com