Les Servomoteurs SG90 et MG90s
Le servomoteur est un moteur qui peut tourner de 180 degrés. (*)
Il est contrôlé par des pulsations électriques (PWM) depuis l'Arduino.
La pulsation donne au moteur la position qu’il doit prendre.
(*) Certains fabricants proposent des servomoteurs avec un angle de rotation à 360°
Le moteur a trois connexions.
- Le fil brun (GND)
- Le fil rouge (+Vcc)
- Le fil orange (signal )
Caractéristiques des servomoteurs SG90 et MG90s (1)
SG90 | MG90s | |
---|---|---|
Tension de fonctionnement | +4,8v à +6v | +4,8v à +6v |
Courant en position inactive | 10mA | 10mA |
Courant de fonctionnement | 100 - 250mA | 100 - 250mA |
Courant de décrochage | 700mA | 700mA |
Vitesse de fonctionnement | 0.12s/60° (+4.8 V) | 0,1s/60° (+4,8v) – 0,08s/60° (+6v) |
Angle de rotation (2) | 0° à 180° | 0° à 180° |
Poids | 9gr | 13,4gr |
Longueur du câble | 175mm | 175mm |
Dimensions | 22mm x 11,5mm x 27mm | 22mm x 12mm x 28mm |
Engrenage | Plastique | Métallique |
(1) Les caractéristiques peuvent être différentes suivant les fournisseurs
(2) Vous trouverez des Servomoteurs avec des angles de rotation différents de 0° à 90°, de 0° à 180° et de 0° à 360°
Code
Le Signal du servomoteur est relié à la pin 11 PWM
Servo myServo; //Initialisation du servomoteur nommé « myServo »
void setup() {
myServo.attach(11); //Attacher le servo à la pin 11 PWM
Serial.begin(9600); //Initialisation du moniteur série
}
void loop() {
myServo.write(0); //Position de départ 0°
delay(1000);
myServo.write(180); //Angle 180°
delay(1000);
}
Référence de la bibliothèque servo.h site officiel Arduino
Code
Le Signal du servomoteur est relié à la pin 6 PWM
#include <Servo.h> //Bibliothèque du Servomoteur
Servo myServo; //Initialisation du servomoteur, nommé « myServo »
void setup() {
Serial.begin(9600); // Initialisation du moniteur série
myServo.attach(6); // Attacher le servo à la pin 6 PWM
}
void loop(){
myServo.write(180); //servo.write(angle) 180°
Serial.println(myServo.read()); //Affichage de l’angle
delay(2000);
myServo.write(0); //servo.write(angle) 0°
Serial.println(myServo.read()); //Affichage de l’angle
delay(2000);
myServo.write(90); //servo.write(angle) 90°
Serial.println(myServo.read()); //Affichage de l’angle
delay(2000);
myServo.write(0); //servo.write(angle) 0°
Serial.println(myServo.read()); //Affichage de l’angle
delay(2000);
}
Controler un servomoteur avec un potentiomètre
Nous ajoutons un potentiomètre de 10 Kohms afin de contrôler la rotation du servomoteur
- Signal du servomoteur sur pin 9 PWM
- Potentiomètre entre +Vcc et Gnd
- Curseur du potentiomètre sur pin Analogique A0
Le curseur va retourner sur A0 une tension comprise entre 0v et 5v suivant la rotation du potentiomètre
Cette tension est convertie en "angle" afin défectuer la rotation du servomoteur
Code avec le potentiomètre
/*
Servo-Moteur controler avec un potentiomètre
*/
#include <Servo.h> //Bibliotheque du Servomoteur
Servo myServo; //Initialisation du servomoteur
int servoPin=9; //Pin 9 PWM pour le le servomoteur
int potPin=A0; //Pin A0 pour le potentiometre
int val; //Variable pour stocker la valeur de A0
void setup() {
Serial.begin(9600); //Initialisation du moniteur série
myServo.attach(servoPin); //Attacher le signal à la pin PWM 9
}
void loop(){
val=analogRead(potPin); //Lecture de la valeur sur A0
Serial.print("Decoupage: "); //Affichage du découpage
Serial.println(val);
val=map(val, 0, 1023, 0, 180); //Mapper les valeurs 0v à 5v découpé en 1024 valeurs en degré
Serial.print("Angle: "); //Affichage de l'angle
Serial.println(val);
Serial.println("----------------------------");
myServo.write(val); //Rotation du servomoteur suivant la valeur de "val"
delay(50);
}
Explication .... du void loop()
- La 1ere ligne, lecture de la valeur sur la pin A0
- Les lignes suivantes, "Serial.println ...." affichent la valeur du découpage dans le moniteur série
- La ligne val=map(val,0,1023,0,180); decoupage de la valeur de "val" (0 à 1023) en une valeur d'angle (0° à 180°)
- Les lignes suivantes, "Serial.println ...." affichent la valeur de l'angle dans le moniteur série
- La ligne myServo(val); , rotation du servomoteur
- Le moniteur série affiche les valeurs de "val"
Référence de la commande map site officiel Arduino