Arduino - Servomoteur

Un servomoteur est un petit appareil doté d'un arbre de sortie. Cet arbre peut être positionné à des positions angulaires spécifiques en envoyant au servo un signal codé. Tant que le signal codé existe sur la ligne d'entrée, le servo maintiendra la position angulaire de l'arbre. Si le signal codé change, la position angulaire de l'arbre change. En pratique, les servos sont utilisés dans les avions radiocommandés pour positionner les gouvernes comme les ascenseurs et les gouvernails. Ils sont également utilisés dans les voitures radiocommandées, les marionnettes et, bien sûr, les robots.

Les servos sont extrêmement utiles en robotique. Les moteurs sont petits, ont des circuits de commande intégrés et sont extrêmement puissants pour leur taille. Un servo standard tel que le Futaba S-148 a un couple de 42 oz / pouces, ce qui est fort pour sa taille. Il tire également une puissance proportionnelle à la charge mécanique. Un servo légèrement chargé ne consomme donc pas beaucoup d'énergie.

Les entrailles d'un servomoteur sont illustrées dans l'image suivante. Vous pouvez voir les circuits de commande, le moteur, un ensemble d'engrenages et le boîtier. Vous pouvez également voir les 3 fils qui se connectent au monde extérieur. L'un est pour l'alimentation (+ 5 volts), la terre et le fil blanc est le fil de commande.

Fonctionnement d'un servomoteur

Le servomoteur a des circuits de commande et un potentiomètre (une résistance variable, aka pot) connecté à l'arbre de sortie. Dans l'image ci-dessus, le pot peut être vu sur le côté droit du circuit imprimé. Ce potentiomètre permet au circuit de commande de surveiller l'angle actuel du servomoteur.

Si l'arbre est à l'angle correct, le moteur s'arrête. Si le circuit trouve que l'angle n'est pas correct, il fera tourner le moteur jusqu'à ce qu'il soit à l'angle souhaité. L'arbre de sortie du servo est capable de se déplacer à environ 180 degrés. Habituellement, il se situe quelque part dans la plage de 210 degrés, mais cela varie en fonction du fabricant. Un servo normal est utilisé pour contrôler un mouvement angulaire de 0 à 180 degrés. Il est mécaniquement incapable de tourner plus loin en raison d'une butée mécanique intégrée au pignon de sortie principal.

La puissance appliquée au moteur est proportionnelle à la distance à parcourir. Ainsi, si l'arbre doit tourner sur une grande distance, le moteur fonctionnera à pleine vitesse. S'il ne doit tourner qu'une petite quantité, le moteur fonctionnera à une vitesse plus lente. C'est appeléproportional control.

Comment communiquez-vous l'angle auquel le servo doit tourner?

Le fil de commande est utilisé pour communiquer l'angle. L'angle est déterminé par la durée d'une impulsion appliquée au fil de commande. C'est appeléPulse Coded Modulation. Le servo s'attend à voir une impulsion toutes les 20 millisecondes (0,02 seconde). La longueur de l'impulsion déterminera jusqu'où le moteur tourne. Une impulsion de 1,5 milliseconde, par exemple, fera tourner le moteur en position de 90 degrés (souvent appelée position neutre). Si l'impulsion est inférieure à 1,5 millisecondes, le moteur tournera l'arbre plus près de 0 degré. Si l'impulsion est supérieure à 1,5 millisecondes, l'arbre se rapproche de 180 degrés.

Composants requis

Vous aurez besoin des composants suivants -

  • 1 × carte Arduino UNO
  • 1 × servomoteur
  • 1 × IC de conduite ULN2003
  • Résistance 1 × 10 KΩ

Procédure

Suivez le schéma de circuit et effectuez les connexions comme indiqué dans l'image ci-dessous.

Esquisser

Ouvrez le logiciel Arduino IDE sur votre ordinateur. Le codage en langage Arduino contrôlera votre circuit. Ouvrez un nouveau fichier d'esquisse en cliquant sur Nouveau.

Code Arduino

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

Code à noter

Les servomoteurs ont trois bornes - alimentation, masse et signal. Le fil d'alimentation est généralement rouge et doit être connecté à la broche 5V de l'Arduino. Le fil de terre est généralement noir ou marron et doit être connecté à une borne du CI ULN2003 (10 -16). Pour protéger votre carte Arduino contre les dommages, vous aurez besoin d'un pilote IC pour le faire. Ici, nous avons utilisé ULN2003 IC pour entraîner le servomoteur. La broche de signal est généralement jaune ou orange et doit être connectée à la broche Arduino numéro 9.

Connexion du potentiomètre

Un diviseur de tension / diviseur de potentiel sont des résistances dans un circuit série qui mettent à l'échelle la tension de sortie à un rapport particulier de la tension d'entrée appliquée. Voici le schéma de circuit -

$$ V_ {out} = (V_ {in} \ times R_ {2}) / (R_ {1} + R_ {2}) $$

V out est le potentiel de sortie, qui dépend de la tension d'entrée appliquée (V in ) et des résistances (R 1 et R 2 ) de la série. Cela signifie que le courant traversant R 1 circulera également à travers R 2 sans être divisé. Dans l'équation ci-dessus, lorsque la valeur de R 2 change, le V out est mis à l' échelle en conséquence par rapport à la tension d'entrée, V in .

En règle générale, un potentiomètre est un diviseur de potentiel, qui peut mettre à l'échelle la tension de sortie du circuit en fonction de la valeur de la résistance variable, qui est mise à l'échelle à l'aide du bouton. Il a trois broches: GND, Signal et + 5V comme indiqué dans le schéma ci-dessous -

Résultat

En changeant la position NOP du pot, le servomoteur changera son angle.