Dans ce guide, nous explorerons comment utiliser le CodeCell pour contrôler un servomoteur. Nous verrons également comment contrôler la position angulaire du servomoteur grâce à la fonction de positionnement angulaire du CodeCell, particulièrement utile pour les applications robotiques comme les cardans ou le contrôle de la stabilité angulaire.
Un servomoteur est un actionneur rotatif permettant un contrôle précis de la position angulaire. Il est composé d'un moteur couplé à des engrenages et à un capteur de position. Il est couramment utilisé dans les applications de robotique, d'automatisation et de stabilisation.
CodeCell est équipé d'un capteur de mouvement BNO085 qui fusionne les données d'un accéléromètre, d'un gyroscope et d'un magnétomètre pour calculer les vecteurs de rotation. Ces vecteurs sont traités par CodeCell pour obtenir les angles de roulis, de tangage et de lacet en fonction de l'orientation de l'appareil dans l'espace.
Dans cet exemple, notre CodeCell surveille en continu l'angle d'inclinaison pour contrôler la position d'un servomoteur, lui permettant ainsi de réagir dynamiquement aux changements d'orientation. La valeur d'inclinaison permet de définir la position du servomoteur, lui permettant ainsi de pivoter en fonction de l'inclinaison de l'appareil.
Vous trouverez ci-dessous un exemple de code pour vous aider à démarrer. Assurez-vous que votre CodeCell est correctement connecté via USB-C. Vérifiez également que votre servomoteur peut être alimenté via USB-C (CodeCell peut fournir jusqu'à 500 mA via USB-C et jusqu'à 1 500 mA avec une batterie). Ajustez les limites angulaires du code en conséquence.
Pour cet exemple, vous devez installer la bibliothèque « ESP32Servo » pour contrôler le servomoteur avec votre CodeCell. Suivez les commentaires du code pour comprendre chaque étape.
#include <codecell.h>
#include <ESP32Servo.h>
CodeCell myCodeCell;
Servo myservo;
float Roll = 0.0;
float Pitch = 0.0;
float Yaw = 0.0;
int servo_angle = 0;
void setup() {
Serial.begin(115200); // Set Serial baud rate to 115200. Enable Tools/USB_CDC_On_Boot if using Serial
myCodeCell.Init(MOTION_ROTATION); // Initializes rotation sensing
myservo.attach(1); // Attaches the servo on pin 1 to the servo object
}
void loop() {
if (myCodeCell.Run(10)) {
// Read rotation angles from the BNO085 sensor
myCodeCell.Motion_RotationRead(Roll, Pitch, Yaw);
// Convert the pitch angle to a servo angle
servo_angle = abs((int)Pitch);
servo_angle = (180 - servo_angle);
// Limit the servo angle to the range 0-60 degrees
if (servo_angle > 60) {
servo_angle = 60;
} sinon si (servo_angle < 0) {
servo_angle = 0;
}
autre{
//Sauter
}
Serial.println(servo_angle); // Imprimer l'angle du servo pour le débogage
myservo.write(servo_angle); // Définir la position du servo
}
}
Cette fonctionnalité de base peut être étendue pour créer des interactions plus complexes, telles que :
servo_angle
dans le code. Dans cet exemple, nous utilisons un micro-servomoteur avec une plage de 60 degrés. Certains servomoteurs ne sont pas linéaires ; il peut donc être nécessaire de compenser les erreurs angulaires et mécaniques.Ce projet montre comment contrôler un servomoteur avec CodeCell grâce à ses capacités de détection de mouvement. Expérimentez avec le code, créez vos propres projets et consultez le dépôt GitHub de CodeCell pour plus d'exemples de code et de documentation technique !
Soyez le premier informé des nouveaux projets et bénéficiez d'offres intéressantes !
© 2025 Microbots.