Cardan Arduino bricolage | Plate-forme auto-stabilisante
Dans ce tutoriel, nous allons apprendre à construire un Arduino Gimbal ou une plate-forme auto-stabilisante avec des servomoteurs. Ce tutoriel est en fait une extension du tutoriel précédent sur le tutoriel MPU6050.
Vous pouvez regarder la vidéo suivante ou lire le didacticiel écrit ci-dessous.
J'ai conçu le cardan à l'aide d'un logiciel de modélisation 3D. Il se compose de 3 servomoteurs MG996R pour le contrôle 3 axes, et d'un socle sur lequel seront posés le capteur MPU6050, l'Arduino et la batterie.
Vous pouvez trouver et télécharger ce modèle 3D, ainsi que l'explorer dans votre navigateur sur Thangs.
Fichiers STL :
À l'aide de mon imprimante 3D Creality CR-10, j'ai imprimé en 3D toutes les pièces et elles sont tout simplement parfaites.
L'assemblage du cardan était assez facile. J'ai commencé par installer le servo Yaw. À l'aide de boulons et d'écrous M3, je l'ai fixé à la base.
Ensuite, en utilisant la même méthode, j'ai sécurisé le servo de roulis. Les pièces sont spécialement conçues pour s'adapter facilement aux servos MG996R.
Pour connecter les pièces entre elles, j'ai utilisé les cornes rondes qui viennent comme accessoires avec les servos.
Tout d'abord, nous devons fixer le klaxon rond à la base avec deux boulons, puis le fixer au servo précédent à l'aide d'un autre boulon.
J'ai répété ce processus pour assembler le reste des composants, le servo Pitch et la plate-forme supérieure.
Ensuite, j'ai passé les fils de servo à travers les ouvertures des supports afin de les garder organisés. Ensuite, j'ai inséré le capteur MPU6050 et je l'ai fixé sur la base avec un boulon et un écrou.
Pour alimenter le projet, j'ai utilisé 2 batteries Li-ion que j'ai placées dans ce support de batterie. J'ai fixé le support de batterie à la base à l'aide de deux boulons et écrous.
Les 2 batteries Li-ion produiront environ 7,4 V, mais nous avons besoin de 5 V pour alimenter l'Arduino et les servos.
C'est pourquoi j'ai utilisé un convertisseur abaisseur qui convertira 7,4 V en 5 V.
Ce qu'il reste maintenant, c'est de tout connecter ensemble. Voici le schéma de circuit de ce projet et comment tout doit être connecté.
Vous pouvez obtenir les composants nécessaires pour ce didacticiel Arduino à partir des liens ci-dessous :
À la fin, j'ai pressé les composants électroniques et les fils dans la base, et les ai recouverts à l'aide de ce couvercle en bas.
Avec cela, la plate-forme d'auto-équilibrage ou le cardan Arduino est terminé et cela fonctionne bien comme prévu. Il ne reste plus qu'à jeter un œil au programme.
Le code Arduino pour cet exemple est une modification de l'exemple MPU6050_DMP6 de la bibliothèque i2cdevlib de Jeff Rowberg.
Voici que vous pouvez télécharger le code :
Description du code : Nous utilisons donc le lacet, le tangage et le roulis lisibles en sortie.
Une fois que nous avons obtenu les valeurs, nous les convertissons d'abord de radians en degrés.
Ensuite, nous attendons ou effectuons 300 lectures, car le capteur est toujours en processus d'auto-étalonnage pendant ce temps. De plus, nous capturons la valeur de lacet, qui au début n'est pas 0 comme les valeurs de tangage et de roulis, mais c'est toujours une valeur aléatoire.
Après les 300 lectures, nous réglons d'abord le lacet à 0 en soustrayant la valeur aléatoire capturée ci-dessus. Ensuite, nous mappons les valeurs de Yaw, Pitch et Roll, de - 90 à +90 degrés, en valeurs de 0 à 180 qui sont utilisées pour piloter les servos.
Enfin, en utilisant la fonction d'écriture, nous envoyons ces valeurs aux servos en tant que signaux de contrôle. Bien sûr, vous pouvez désactiver le servo Yaw si vous souhaitez uniquement stabiliser les axes X et Y, et utiliser cette plate-forme comme nacelle de caméra.
Veuillez noter que ce n'est pas un bon cardan pour appareil photo. Les mouvements ne sont pas fluides car ces servos ne sont pas destinés à un tel usage. Les véritables cardans de caméra utilisent un type spécial de moteurs BLDC pour obtenir des mouvements fluides. Alors, considérez ce projet uniquement à des fins éducatives.
Ce serait tout pour ce tutoriel, j'espère que vous l'avez apprécié et appris quelque chose de nouveau. N'hésitez pas à poser des questions dans la section des commentaires ci-dessous et n'oubliez pas de consulter ma collection de projets Arduino.Aperçu
Assemblage
Schéma du circuit du cardan Arduino
Code Arduino
// Get Yaw, Pitch and Roll values
#ifdef OUTPUT_READABLE_YAWPITCHROLL
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
// Yaw, Pitch, Roll values - Radians to degrees
ypr[0] = ypr[0] * 180 / M_PI;
ypr[1] = ypr[1] * 180 / M_PI;
ypr[2] = ypr[2] * 180 / M_PI;
// Skip 300 readings (self-calibration process)
if (j <= 300) {
correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
j++;
}
// After 300 readings
else {
ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees
// Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 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);
// Control the servos according to the MPU6050 orientation
servo0.write(servo0Value);
servo1.write(servo1Value);
servo2.write(servo2Value);
}
#endif
Code language: Arduino (arduino)// Yaw, Pitch, Roll values - Radians to degrees
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)// Skip 300 readings (self-calibration process)
if (j <= 300) {
correct = ypr[0]; // Yaw starts at random value, so we capture last value after 300 readings
j++;
}
Code language: Arduino (arduino)// After 300 readings
else {
ypr[0] = ypr[0] - correct; // Set the Yaw to 0 deg - subtract the last random Yaw value from the currrent value to make the Yaw 0 degrees
// Map the values of the MPU6050 sensor from -90 to 90 to values suatable for the servo control from 0 to 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);
// Control the servos according to the MPU6050 orientation
servo0.write(servo0Value);
servo1.write(servo1Value);
servo2.write(servo2Value);
}
Code language: Arduino (arduino)
Processus de fabrication
- Visualiseur de musique Arduino DIY LUMAZOID
- Voltmètre DIY utilisant Arduino et Smartphone
- Obstacles pour éviter le robot avec servomoteur
- Planche à roulettes en réalité virtuelle DIY
- Plateforme de formation Arduino
- Traitement DIY Arduino RADIONICS MMachine
- Simulateur DIY 2D Motion Racing
- Arduino Trash-Bot (ouverture/fermeture automatique de la corbeille)
- Solo Servo Sweep