Construye un Gimbal Autoestabilizador Arduino con Control de 3 Ejes por Servos
En este tutorial aprenderemos a construir un Gimbal Arduino o una plataforma autoestabilizadora con servomotores. Este tutorial es en realidad una extensión del tutorial anterior sobre el MPU6050. Puedes ver el siguiente video o leer el tutorial escrito a continuación. Diseñé el gimbal usando un software de modelado 3D. Consiste en 3 servomotores MG996R para el control de 3 ejes, y una base sobre la cual se colocarán el sensor MPU6050, el Arduino y la batería. Puedes encontrar y descargar este modelo 3D, así como explorarlo en tu navegador en Thangs. Archivos STL: Usando mi impresora 3D Creality CR-10, imprimí en 3D todas las piezas y salieron perfectas. El ensamblaje del gimbal fue bastante fácil. Empecé instalando el servo de Yaw (guiñada). Usando tornillos M3 y tuercas lo aseguré a la base. Luego, usando el mismo método aseguré el servo de Roll (alanceo). Las piezas están específicamente diseñadas para ajustar fácilmente los servos MG996R. Para conectar las piezas entre sí usé los cuernos redondos que vienen como accesorios con los servos. Primero, necesitamos asegurar el cuerno redondo a la base con dos tornillos, y luego sujetarlo al servo previo usando otro tornillo. Repetí este proceso para ensamblar el resto de los componentes, el servo de Pitch (cabeceo) y la plataforma superior. Luego, pasé los cables de los servos a través de las aberturas de los soportes para mantenerlos organizados. Luego inserté el sensor MPU6050 y lo aseguré en la base con un tornillo y una tuerca. Para alimentar el proyecto, usé 2 baterías Li-ion que coloqué en este porta-baterías. Aseguré el porta-baterías a la base usando dos tornillos y tuercas. Las 2 baterías Li-ion producirán alrededor de 7.4V, pero necesitamos 5V para alimentar el Arduino y los servos. Por eso usé un convertidor buck (reductor) que convertirá 7.4V a 5V. Lo que queda ahora, es conectar todo junto. Aquí está el diagrama de circuito de este proyecto y cómo todo necesita conectarse. Al final apreté los componentes electrónicos y los cables dentro de la base, y los cubrí usando esta tapa en la parte inferior. Con esto, la plataforma auto-equilibrante o el gimbal Arduino está hecho y funciona bien como se esperaba. Lo que queda es echar un vistazo al programa. El código Arduino para este ejemplo es una modificación del ejemplo MPU6050_DMP6 de la librería i2cdevlib de Jeff Rowberg. Aquí puedes descargar el código: Descripción del código: Así que estamos usando la salida legible de yaw, pitch y roll. Una vez obtenemos los valores, primero los convertimos de radianes a grados. Luego esperamos o hacemos 300 lecturas, porque el sensor aún está en proceso de auto-calibración durante este tiempo. También capturamos el valor de Yaw, que al principio no es 0 como los valores de Pitch y Roll, sino que siempre es algún valor aleatorio. Después de las 300 lecturas, primero establecemos el Yaw a 0 restando el valor aleatorio capturado arriba. Luego mapeamos los valores de Yaw, Pitch y Roll, de -90 a +90 grados, a valores de 0 a 180 que se usan para impulsar los servos. Finalmente, usando la función write, enviamos estos valores a los servos como señales de control. Por supuesto, puedes deshabilitar el servo de Yaw si solo quieres estabilización para los ejes X e Y, y usar esta plataforma como gimbal de cámara. Ten en cuenta que esto está lejos de ser un buen gimbal de cámara. Los movimientos no son suaves porque estos servos no están diseñados para tal propósito. Los gimbals de cámara reales usan un tipo especial de motores BLDC para obtener movimientos suaves. Así que considera este proyecto solo con fines educativos. Eso sería todo para este tutorial, espero que lo hayas disfrutado y hayas aprendido algo nuevo. Siéntete libre de hacer cualquier pregunta en la sección de comentarios a continuación y no olvides revisar mi colección de Proyectos Arduino.Resumen



Ensamblaje








Diagrama de Circuito Gimbal Arduino

Componentes Necesarios


Código Arduino
Obtención y Conversión de Valores Yaw, Pitch, Roll
// Obtener valores de Yaw, Pitch y Roll
#ifdef OUTPUT_READABLE_YAWPITCHROLL
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
// Valores Yaw, Pitch, Roll - Radianes a grados
ypr[0] = ypr[0] * 180 / M_PI;
ypr[1] = ypr[1] * 180 / M_PI;
ypr[2] = ypr[2] * 180 / M_PI;
// Saltar 300 lecturas (proceso de auto-calibración)
if (j <= 300) {
correct = ypr[0]; // Yaw empieza en valor aleatorio, así que capturamos el último valor después de 300 lecturas
j++;
}
// Después de 300 lecturas
else {
ypr[0] = ypr[0] - correct; // Establecer Yaw a 0 grados - restar el último valor aleatorio de Yaw del valor actual para hacer Yaw 0 grados
// Mapear valores del sensor MPU6050 de -90 a 90 a valores adecuados para control de servos de 0 a 180
int servo0Value = map(ypr[0], -90, 90, 0, 180);
int servo1Value = map(ypr[1], -90, 90, 0, 180);
int servo2Value = map(ypr[2], -90, 90, 180, 0);
// Controlar los servos según la orientación del MPU6050
servo0.write(servo0Value);
servo1.write(servo1Value);
servo2.write(servo2Value);
}
#endifCode language: Arduino (arduino)// Valores Yaw, Pitch, Roll - Radianes a grados
ypr[0] = ypr[0] * 180 / M_PI;
ypr[1] = ypr[1] * 180 / M_PI;
ypr[2] = ypr[2] * 180 / M_PI;Code language: Arduino (arduino)// Saltar 300 lecturas (proceso de auto-calibración)
if (j <= 300) {
correct = ypr[0]; // Yaw empieza en valor aleatorio, así que capturamos el último valor después de 300 lecturas
j++;
}Code language: Arduino (arduino)// Después de 300 lecturas
else {
ypr[0] = ypr[0] - correct; // Establecer Yaw a 0 grados - restar el último valor aleatorio de Yaw del valor actual para hacer Yaw 0 grados
// Mapear valores del sensor MPU6050 de -90 a 90 a valores adecuados para control de servos de 0 a 180
int servo0Value = map(ypr[0], -90, 90, 0, 180);
int servo1Value = map(ypr[1], -90, 90, 0, 180);
int servo2Value = map(ypr[2], -90, 90, 180, 0);
// Controlar los servos según la orientación del MPU6050
servo0.write(servo0Value);
servo1.write(servo1Value);
servo2.write(servo2Value);
}Code language: Arduino (arduino)
Proceso de manufactura
- Construya su propio LUMAZOID: Visualizador de música DIY con Arduino
- Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
- Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04
- Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth
- Kit de Entrenamiento Arduino Completo con Mega 2560, Sensores, Motores y PCB Personalizada
- Construye un dispositivo de tratamiento radiónico EMR con Arduino DIY
- Simulador de Carreras 2D DIY con Arduino Nano y Servos SG90
- Papelera Inteligente con Arduino UNO: Apertura Automática de Tapa
- Control de Servos en Drone 3DR Solo con Arduino y Firmata
- Construye un Cerco RFID Portátil con Arduino – Guía Paso a Paso
- Fresadora CNC 3 Ejes DIY: Construye una Máquina de Precisión