Construire un gimbal auto-stabilisant Arduino à 3 axes avec servos
Dans ce tutoriel, nous allons apprendre à construire un gimbal Arduino ou une plateforme auto-stabilisante avec moteurs servo. Ce tutoriel prolonge le précédent sur le MPU6050. Vous pouvez regarder la vidéo suivante ou lire le tutoriel écrit ci-dessous. J'ai conçu le gimbal en modélisation 3D. Il comporte 3 servomoteurs MG996R pour le contrôle 3 axes, et une base accueillant le capteur MPU6050, l'Arduino et la batterie. Modèle 3D disponible en téléchargement et exploration navigateur sur Thangs. Fichiers STL : Impression de toutes les pièces sur mon Creality CR-10, résultat parfait. Assemblage assez simple. Début par le servo Yaw (lacets). Fixation sur la base par boulons/écrous M3. Même méthode pour le servo Roll (roulis). Pièces conçues pour s'adapter parfaitement aux servos MG996R. Connexion des pièces entre elles via les disques ronds fournis en accessoires avec les servos. D'abord, fixation du disque rond à la base par deux boulons, puis fixation au servo précédent par un autre boulon. Répétition pour le servo Pitch (tangage) et la plateforme supérieure. Passage des fils des servos dans les ouvertures prévues pour les maintenir organisés. Insertion et fixation du capteur MPU6050 sur la base par boulon/écrou. Alimentation : 2 batteries Li-ion dans support batterie, fixé à la base par deux boulons/écrous. 2 batteries Li-ion = ~7.4V, mais Arduino et servos ont besoin de 5V. Convertisseur abaisseur (buck converter) pour passer 7.4V → 5V. Reste à tout connecter. Schéma de câblage du projet : Composants nécessaires : Finalement, composants électroniques et fils tassés dans la base, couverts par le cache inférieur. La plateforme auto-équilibrante / gimbal Arduino est terminée et fonctionne comme prévu. Reste à examiner le programme. Le code est une modification de l'exemple MPU6050_DMP6 de la bibliothèque i2cdevlib de Jeff Rowberg. Téléchargement du code : Description du code : Utilisation de la sortie lisible yaw, pitch, roll. Une fois valeurs obtenues, conversion radians → degrés. Attente 300 lectures : capteur en auto-calibration. Capture valeur Yaw (au début aléatoire, pas 0 comme Pitch/Roll). Après 300 lectures : mise Yaw à 0 par soustraction valeur aléatoire capturée. Mapping Yaw, Pitch, Roll de -90/+90° vers 0-180 pour servos. Envoi valeurs aux servos via write(). On peut désactiver le servo Yaw pour stabilisation seulement X/Y (gimbal caméra). Attention : Loin d'un bon gimbal caméra. Mouvements pas fluides car ces servos ne sont pas faits pour ça. Vrais gimbals caméra utilisent moteurs BLDC spéciaux pour fluidité. Considérez ce projet uniquement à but éducatif. C'est tout pour ce tutoriel. J'espère qu'il vous a plu et apporté des connaissances. Questions en commentaires, et découvrez ma collection de projets Arduino.Vue d'ensemble



Assemblage








Schéma circuit gimbal Arduino



Code Arduino
// Obtention valeurs Yaw, Pitch, Roll
#ifdef OUTPUT_READABLE_YAWPITCHROLL
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
// Yaw, Pitch, Roll - Radians vers degrés
ypr[0] = ypr[0] * 180 / M_PI;
ypr[1] = ypr[1] * 180 / M_PI;
ypr[2] = ypr[2] * 180 / M_PI;
// Ignorer 300 lectures (auto-calibration)
if (j <= 300) {
correct = ypr[0]; // Yaw commence valeur aléatoire, capture dernière valeur après 300 lectures
j++;
}
// Après 300 lectures
else {
ypr[0] = ypr[0] - correct; // Yaw à 0° - soustraction dernière valeur aléatoire
// Mapping valeurs MPU6050 -90 à +90 vers 0-180 pour servos
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);
// Contrôle servos selon orientation MPU6050
servo0.write(servo0Value);
servo1.write(servo1Value);
servo2.write(servo2Value);
}
#endif// Yaw, Pitch, Roll - Radians vers degrés
ypr[0] = ypr[0] * 180 / M_PI;
ypr[1] = ypr[1] * 180 / M_PI;
ypr[2] = ypr[2] * 180 / M_PI;// Ignorer 300 lectures (auto-calibration)
if (j <= 300) {
correct = ypr[0];
j++;
}// Après 300 lectures
else {
ypr[0] = ypr[0] - correct;
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);
servo0.write(servo0Value);
servo1.write(servo1Value);
servo2.write(servo2Value);
}
Processus de fabrication
- Construisez votre propre LUMAZOID : Visualiseur musical DIY Arduino
- Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
- Robot Évitement d'Obstacles Piloté par Servomoteur : Construction avec Arduino et HC-SR04
- Construisez un skateboard VR DIY avec Arduino, Google Cardboard et Bluetooth
- Kit de Formation Arduino Complet : Mega 2560, Capteurs, Moteurs et PCB Personnalisé
- Dispositif de Traitement Radionique EMR DIY avec Arduino Nano
- Simulateur de Course 2 Axes DIY : Arduino Nano & Servos SG90
- Poubelle intelligente Arduino à ouverture automatique du couvercle
- Contrôle servo Solo Drone avec Arduino : configuration facile et tutoriel balayage