Leçon 85 : Introduction aux servomoteurs | Cours Arduino Pas à Pas
Ce guide de projet vous initie au monde des servomoteurs à rotation continue, également appelés servos à 360 degrés. Contrairement aux servos standard qui se déplacent vers un angle spécifique (comme de 0 à 180 degrés), ces moteurs tournent en continu dans les deux directions. Cela les rend idéaux pour construire de petits robots, des chenilles de char, ou tout projet nécessitant des moteurs d'entraînement simples et abordables. Ce guide vous montrera comment en contrôler un à l'aide d'un Arduino et de quelques boutons-poussoirs, vous donnant un contrôle direct sur sa direction et sa vitesse.
Voici quelques applications pratiques pour un servo à 360 degrés :
- Construire une petite voiture robot à deux roues.
- Créer un support de caméra panoramique et inclinable qui tourne sans fin.
- Entraîner un petit tapis roulant ou un treuil.
- Fabriquer une plateforme de balayage simple pour radar ou capteur.

Matériel et Composants
Pour ce projet, vous aurez besoin des composants suivants :
- Carte Arduino (par exemple, Uno)
- Servomoteur à rotation continue (par exemple, FS90R ou similaire)
- Trois boutons-poussoirs
- Fils de connexion
- Plaque d'essai (optionnelle, pour un câblage plus facile)
Guide de Câblage
Le câblage pour ce projet est simple. Le servomoteur a trois fils : généralement marron (masse), rouge (alimentation), et orange ou jaune (signal). Les boutons-poussoirs sont câblés dans une configuration simple.
Voici une répartition des connexions :
- Servomoteur :
- Le fil marron (Masse) se connecte à la broche GND de l'Arduino.
- Le fil rouge (Alimentation) se connecte à la broche 5V de l'Arduino.
- Le fil orange/jaune (Signal) se connecte à la broche 9 de l'Arduino.
- Boutons-poussoirs :
- Un côté de chaque bouton est connecté à la broche GND de l'Arduino.
- L'autre côté du bouton "Anti-horaire" se connecte à la broche 2.
- L'autre côté du bouton "Stop" se connecte à la broche 3.
- L'autre côté du bouton "Horaire" se connecte à la broche 4.
Dans la vidéo, le créateur souligne que le fil de signal du servo doit être connecté à une broche compatible PWM sur l'Arduino, souvent marquée d'un tilde (~). La broche 9 est l'une de ces broches. Les boutons-poussoirs utilisent les résistances de tirage internes de l'Arduino, ce qui simplifie le câblage en éliminant le besoin de résistances externes (dans la vidéo à 07:02).
Explication du Code
Le code est conçu pour lire l'état de trois boutons-poussoirs et envoyer la commande correspondante au servomoteur. Décomposons les parties configurables par l'utilisateur.
Configuration des Broches et des Commandes
En haut du code, vous trouverez les définitions des broches et des valeurs de contrôle du servo. C'est ici que vous pouvez personnaliser le comportement de votre projet.
const int servoPin = 9; // Broche PWM pour le signal du servo
const int stopPin = 3; // Broche pour le bouton stop
const int cwPin = 4; // Broche pour le bouton horaire
const int ccwPin = 2; // Broche pour le bouton anti-horaire
Ces constantes définissent quelles broches Arduino sont connectées aux boutons et au servo. Si vous utilisez des broches différentes pour vos boutons, vous changerez les numéros ici. Le servoPin doit être une broche compatible PWM.
const int csServoCommand[3] = {106, 52, 0}; // {Anti-horaire, STOP, Horaire}
const String csServoCommandText[3] = {"Anti-horaire", "Arrêté", "Horaire"};
C'est la partie la plus importante à comprendre et à régler. Le tableau csServoCommand contient les valeurs envoyées au servo. Pour un servo continu, ces valeurs ne représentent pas un angle mais une vitesse et une direction.
- 106 est la valeur pour une rotation Anti-horaire à pleine vitesse.
- 52 est la valeur pour un arrêt complet.
- 0 est la valeur pour une rotation Horaire à pleine vitesse.
Ces valeurs ne sont pas universelles. En raison des différences de fabrication, la valeur "stop" (52) peut nécessiter un ajustement. Si votre servo dérive lentement lorsque vous appuyez sur le bouton stop, vous devrez affiner cette valeur. La vidéo démontre ce processus, montrant comment changer la valeur à 54 ou 51 peut affecter le comportement du moteur (dans la vidéo à 13:45).
Vous pouvez également ajuster les valeurs de rotation pour changer la vitesse du moteur. Par exemple, définir la valeur anti-horaire à 70 la fera tourner plus lentement qu'à 106 (dans la vidéo à 12:23).
Le tableau csServoCommandText contient les chaînes de texte imprimées sur le moniteur série pour afficher l'état actuel de la commande.
Fonction Personnalisée : servoCommand()
Le code utilise une fonction personnalisée pour gérer la logique de commande. Cette fonction prend un nombre (0, 1 ou 2) comme argument, met à jour le texte de statut et envoie la commande correspondante au servo.
void servoCommand(int n) {
statusText = csServoCommandText[n];
myservo.write(csServoCommand[n]);
Serial.println(csServoCommandText[n]);
Serial.println(csServoCommand[n]);
}
Cette fonction est appelée depuis la boucle principale lorsqu'un bouton est pressé. Elle centralise la logique de mise à jour de l'affichage et de contrôle du servo, rendant le code plus propre et plus facile à modifier.
Projet en Direct et Démonstration
Dans la vidéo, le créateur démontre le projet en action. Appuyer sur le bouton "Horaire" envoie la valeur 0 au servo, le faisant tourner dans une direction. Appuyer sur le bouton "Anti-horaire" envoie la valeur 106, le faisant tourner dans l'autre sens. Le bouton "Stop" envoie 52, ce qui devrait arrêter le moteur.
Le moniteur série est utilisé pour afficher l'état actuel et la valeur exacte envoyée au servomoteur. Cela est inestimable pour le débogage et pour trouver la valeur d'« arrêt » parfaite pour votre moteur spécifique. Comme indiqué dans la vidéo, la commande d'arrêt peut ne pas être parfaite en raison du circuit interne du servomoteur, et vous pourriez observer une dérive lente ou des vibrations. C'est une caractéristique courante des servomoteurs continus bon marché, qui peut être minimisée en ajustant la valeur d'arrêt dans le code (dans la vidéo à 01:15).
Chapitres
- [00:05] Introduction au servomoteur à rotation de 360 degrés
- [02:02] Composants et aperçu du matériel
- [02:40] Schéma de câblage détaillé et connexions
- [05:07] Explication du code : constantes, tableaux et configuration
- [09:56] Explication du code : la fonction servoCommand
- [10:54] Démonstration en direct et sortie du moniteur série
- [12:23] Réglage de la vitesse du servomoteur et des valeurs d'arrêt
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("received: ");
Serial.print (incomingByte);
if(incomingByte == 108){
Serial.println(" sent 0 Rotating CW ");
myservo.write(0);
}else if(incomingByte == 114){
Serial.println(" sent 180 Rotating CCW ");
myservo.write(180);
}else if(incomingByte == 60){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Randomly");
myservo.write(incomingByte);
}
}
}
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int servoPin = 9;// this pin must be of those with PWM ~
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
int CWBS, CCWBS, SBS;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);// set pin for push button STOP
pinMode(3,INPUT_PULLUP);// set pin for push button CCW
pinMode(4,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
}
void loop() {
CCWBS = digitalRead(2);// read status of button CCW
SBS = digitalRead(3);// read status of button STOP
CWBS = digitalRead(4);// read status of button CW
if(CCWBS == LOW){
Serial.println(" sent 0 Rotaing CW ");
myservo.write(0);
}else if(CWBS == LOW){
Serial.println(" sent 180 Rotaing CCW ");
myservo.write(180);
}else if(SBS == LOW){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Random");
myservo.write(48);
}
}// loop
Ce dont vous pourriez avoir besoin
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
Amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
AliExpress360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
AliExpress360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Ressources et références
Fichiers📁
Autres fichiers
-
Fiche technique du moteur SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB