Vous êtes sur la page 1sur 11

Fonctionnement du

servomoteur et interface avec


Arduino

Vous voulez ajouter du mouvement à votre prochain projet Arduino sans


construire un contrôleur de moteur? Alors les servomoteurs pourraient être le
point de départ solide pour vous.

Contrairement aux moteurs à courant continu, vous pouvez contrôler avec


précision le positionnement de ces moteurs. Indiquez-leur où pointer et ils le
feront pour vous.

Ils sont utiles dans de nombreux projets de robotique, comme pour faire
tourner les roues avant sur un modèle RC pour diriger ou faire pivoter un
capteur pour regarder autour d'un véhicule robotique.
Qu'est-ce que Servo?
Servo est un terme général pour un système de contrôle en boucle fermée .

Un système en boucle fermée utilise le signal de retour pour ajuster la vitesse


et la direction du moteur afin d'obtenir le résultat souhaité.

Le servomoteur RC fonctionne sur le même principe. Il contient un petit


moteur à courant continu connecté à l'arbre de sortie via les engrenages.

L'arbre de sortie entraîne un bras d'asservissement et est également connecté


à un potentiomètre (pot).

Le potentiomètre fournit un retour de position à l'unité de commande


d'asservissement où la position actuelle du moteur est comparée à la position
cible.

En fonction de l'erreur, l'unité de commande corrige la position réelle du


moteur pour qu'elle corresponde à la position cible.
Comment fonctionnent les servomoteurs?
Vous pouvez contrôler le servomoteur en envoyant une série d'impulsions à la
ligne de signal. Un servomoteur analogique conventionnel s'attend à recevoir
une impulsion environ toutes les 20 millisecondes (c'est-à-dire que le signal
doit être de 50 Hz).

La longueur de l'impulsion détermine la position du servomoteur.

 Si l'impulsion est élevée pendant 1 ms, l'angle d'asservissement sera


nul.

 Si l'impulsion est élevée pendant 1,5 ms, alors le servo sera à sa position
centrale.

 Si l'impulsion est élevée pendant 2 ms, le servo sera à 180 degrés.

 Des impulsions comprises entre 1 ms et 2 ms déplaceront l'arbre de


servo sur les 180 degrés de sa course.
La durée des impulsions peut parfois varier selon les marques et elles peuvent
être de 0,5 ms pour 0 degré et de 2,5 ms pour 180 degrés.

Brochage du servomoteur
Les servomoteurs ont généralement trois connexions et sont les suivants:

GND est un terrain commun pour le moteur et la logique.


5V est une tension positive qui alimente le servo.
Contrôler est entrée pour le système de contrôle.
La couleur des fils varie entre les servomoteurs, mais le fil rouge est toujours
5V et GND sera soit noir ou marron. Le fil de commande est généralement
orange ou jaune.

Câblage du servomoteur à Arduino UNO


Accrochons le servomoteur à l'Arduino.
Par exemple, utilisons le micro servomoteur SG90. Il fonctionne sur 4,8-6VDC
(5V typique) et peut tourner d'environ 180 degrés (90 dans chaque direction).

Il consomme environ 10 mA au ralenti et 100 mA à 250 mA lors du


déplacement, nous pouvons donc l'alimenter via une sortie de 5 volts sur
l'Arduino.

Si vous avez un servo qui consomme plus de 250 mA, pensez à utiliser une
alimentation séparée pour votre servo.

Connectez le fil rouge au 5V sur Arduino (ou prise CC) et le fil noir / marron à
la terre. Enfin, connectez le fil orange / jaune à la broche 9 activée par PWM.

Code Arduino - Balayage


Pour notre premier croquis Arduino, nous utiliserons l'un des exemples
intégrés fournis avec l'IDE Arduino.
Allez dans le sous-menu Exemples. Sélectionnez le servo et chargez l'esquisse
de balayage.

Allez-y et téléchargez le croquis. Vous verrez immédiatement le moteur se


déplacer dans un sens puis revenir dans un autre.

#include <Servo.h>

int servoPin = 9;
Servo servo;
int angle = 0; // servo position in degrees

void setup() {
servo.attach(servoPin);
}

void loop() {

// scan from 0 to 180 degrees


for(angle = 0; angle < 180; angle++) {
servo.write(angle);
delay(15);
}

// now scan back from 180 to 0 degrees


for(angle = 180; angle > 0; angle--) {
servo.write(angle);
delay(15);
}
}

Explication:
Contrôler les servos n'est pas une tâche facile, mais heureusement pour nous,
Arduino IDE contient déjà une très belle bibliothèque appelée Servo . Il
comprend des commandes simples afin que vous puissiez rapidement
demander au servo de se tourner vers un angle particulier.

Si vous envisagez d'utiliser ces commandes, vous devez indiquer à l'IDE


Arduino que vous utilisez la bibliothèque avec cette commande:

#include <Servo.h>

La prochaine chose que nous faisons est de déclarer la broche Arduino à


laquelle la broche de commande du servomoteur est connectée.

int servoPin = 9;

La ligne ci-dessous crée un objet servo.

Servo servo;
Vous pouvez en fait définir jusqu'à huit servos de cette manière, par exemple,
si nous avions deux servos, alors nous pourrions écrire quelque chose comme
ceci:

Servo servo1;
Servo servo2;

La variable angleest utilisée pour stocker l'angle actuel du servo en degrés.

int angle = 0;

Dans la fonction de configuration, nous lions l' servoobjet à la broche qui


contrôlera le servo à l'aide de cette commande:

servo.attach(servoPin);

La fonction de boucle contient en fait deux boucles for. La première boucle


augmente l'angle dans une direction et la seconde dans la direction opposée.

La commande ci-dessous indique au servo de mettre à jour sa position à


l'angle spécifié.

servo.write(angle);

Dépannage
Parfois, votre servo peut mal se comporter si vous décidez de l'exécuter
directement à partir de l'Arduino. La raison en est que le servo consomme une
puissance considérable, en particulier lors du démarrage, ce qui peut entraîner
la réinitialisation de la carte Arduino.

Si cela se produit, vous pouvez généralement résoudre ce problème en plaçant


un condensateur électrolytique assez grand (470uF - 1000uF) entre GND et 5V.

Le condensateur agit comme un réservoir d'électricité, de sorte que lorsque le


moteur démarre, il prend en charge le condensateur ainsi que l'alimentation
Arduino.

Le fil le plus long du condensateur doit être connecté à 5V et le fil négatif à


GND.
Contrôle du servo avec un potentiomètre
Notre prochaine étape consiste à ajouter un potentiomètre afin que nous
puissions contrôler la position du servo en tournant le bouton.

Ce projet peut être très utile lorsque vous souhaitez contrôler le panoramique
et l'inclinaison d'un capteur connecté au servo.

Câblage
Comme le montre le schéma de câblage, vous aurez besoin d'un
potentiomètre, toute valeur à partir de 10k sera OK. Connectez une extrémité
du pot à la terre, l'autre extrémité à l'Arduino 5V et l'essuie-glace à l'entrée
analogique A0.
Code Arduino
Le code permettant au servo de suivre la position du bouton est plus simple
que de le faire balayer.

#include <Servo.h>

int potPin = 0;
int servoPin = 9;
Servo servo;

void setup() {
servo.attach(servoPin);
}

void loop() {
int reading = analogRead(potPin);
int angle = map(reading, 0, 1023, 0, 180);
servo.write(angle);
}

Notez qu'il y a maintenant une nouvelle variable appelée potPin.


Dans la fonction de boucle, nous commençons par lire la valeur de la broche
analogique A0.

int reading = analogRead(potPin);

Cela nous donne une valeur comprise entre 0 et 1023. Mais nous devons la
réduire, car le servo ne peut tourner que de 180 degrés.

Une façon de faire est d'utiliser la fonction Arduino map () qui remappe un


nombre d'une plage à une autre. Ainsi, sous la ligne change la lecture pour
représenter l'angle entre 0 et 180 degrés.

int angle = map(reading, 0, 1023, 0, 180);

Enfin, nous utilisons la write()commande qui indique au servo de mettre à jour


sa position à l'angle sélectionné par le potentiomètre.

servo.write(angle);

Vous aimerez peut-être aussi