ads

Servomoteur avec ARDUINO

Servomoteur avec ARDUINO

Construire des robots avec Arduino commence par savoir comment déplacer des objets à travers des moteurs. Il existe plusieurs types de moteurs utilisés dans les systèmes à microcontrôleur: moteurs à courant continu, moteurs pas à pas et servomoteurs. Dans cet article sur les servomoteurs Arduino, nous allons  discuter de ce qu'est un servomoteur et comment l'utiliser avec un Arduino.


Un servomoteur (vient du latin servus qui signifie « esclave ») est un moteur capable de maintenir une opposition à un effort statique et dont la position est vérifiée en continu et corrigée en fonction de la mesure. C'est donc un système asservi.
C’est un ensemble mécanique et électronique comprenant :
• un moteur à courant continu
• un réducteur en sortie de ce moteur diminuant la vitesse mais
augmentant le couple ;
• un potentiomètre (faisant fonction de diviseur résistif) qui génère une
tension variable, proportionnelle à l'angle de l'axe de sortie ;
• un dispositif électronique d'asservissement ;
• un axe dépassant hors du boîtier avec différents bras ou roues de
fixation.


A la différence d'un moteur continu, le Servomoteur ne tourne pas sur lui-même de façon continu. Un servomoteur tourne certes sur un axe, mais suivant un angle allant généralement de 0 à 180°. Certains peuvent également faire plusieurs tours, on les appelle parfois des servotreuils, d'autre ne vont qu'à 90° maximum ou encore jusque 360°, voir même plusieurs tours sans jamais s'arrêter, on les appelle alors servomoteur à rotation continue.

En réalité un servomoteur est un moteur continu équipé d'un réducteur (des engrenages), dont l'objectif est de réduire la vitesse et d'augmenter le couple (la puissance) ; et d’un potentiomètre qui permet au servomoteur de garder l’angle d’inclinaison choisit. En effet, l’un des intérêts des servomoteurs c’est de leur faire prendre et garder un angle.

Principe de fonctionnement

La largeur d'impulsion exacte peut varier selon le servomoteur. Si vous souhaitez obtenir la largeur d'impulsion exacte pour un angle spécifique, vous devez tester votre servomoteur.
Il y a un arrêt mécanique au niveau de l'engrenage pour limiter la rotation des servomoteurs à 180 degrés. Il y a deux raisons pour lesquelles les servomoteurs ne tournent pas sur un cercle complet:
Conçus à l'origine pour convertir un mouvement de rotation en mouvement linéaire, les servomoteurs n'ont pas besoin d'une rotation complète de 360 degrés (voir mécanisme de manivelle).
Les valeurs possibles limitées pour les signaux PWM doivent être mappées sur une plage plus petite (d'angles).
Il existe un moyen de créer un servo à rotation continue et est illustré dans ce didacticiel. Un servo à rotation continue est plus puissant qu'un moteur à courant continu ordinaire.

Asservissement ?

• C’est un moyen de gérer corriger une commande en fonction d’une consigne et d’un capteur de position
• Par exemple pour un servomoteur : on lui envoie un signal de commande qui défini l’angle désiré (consigne), et le moteur va corriger sans angle de départ pour tendre vers la consigne de l’utilisateur. Et il réalise cette opération en boucle.
• Pour pouvoir réaliser la correction de l’ange du bras, le servo utilise une électronique d’asservissement. Cette électronique est constituée d’un comparateur qui compare la position du bras du servo à la consigne.
• La position du bras est obtenue grâce à un potentiomètre couplé à l’axe du moteur. 

Signal de commande 

La consigne envoyée au servomoteur est un signal électronique de type PWM. Il dispose cependant de deux caractéristiques indispensables pour que le servo puisse fonctionner : la fréquence fixe et la durée de l’état haut
 LA FRÉQUENCE FIXE
• Le signal que nous allons devoir générer doit avoir une fréquence de 50 Hz. Autrement dit, le temps séparant deux fronts montants est de 20 ms.
• La fonction analogWrite() de Arduino ne pourra donc pas utiliser cette fonction car on ne peut pas régler la fréquence
• Après une rapide comparaison entre la consigne et valeur réelle de position du bras, le servomoteur (du moins son électronique de commande) va appliquer une correction si le bras n’est pas orienté à l’angle imposé par la consigne.

Signal de commande

LA DURÉE DE L’ÉTAT HAUT
• Cette durée indique au servomoteur l’angle précis qui est souhaité par l’utilisateur.

 • Un signal ayant une durée d’état HAUT de 1ms donnera un angle à 0° , le même signal avec une durée d’état HAUT de 2ms donnera un angle au maximum de ce que peut admettre le servomoteur.


Câblage du servomoteur avec Arduino 

Le servomoteur a besoin de trois fils de connexion pour fonctionner. Deux fils servent à son alimentation, le dernier étant celui qui reçoit le signal de commande :
 • rouge : pour l’alimentation positive (4.5V à 6V en général)
 • noir ou marron : pour la masse (0V)

orange, jaune, blanc, … : entrée du signal de commande



Utilisations du servomoteur 

Les servomoteurs ont été utilisés pour la première fois dans le monde de la télécommande (RC), généralement pour contrôler la direction des voitures RC ou les volets d'un avion RC. Avec le temps, ils ont trouvé leurs utilisations dans l-a robotique, l'automatisation et bien sûr, le monde Arduino.

Robots 

Voitures intelligentes 

Suiveur solaire 



Application de contrôler un servomoteur par potentiomètre 

Matériels 


  • Carte Arduino UNO 
  • servomoteur
  • potentiomètre 

Câblage 




Code 

Ce code c'est un programme pour contrôler un servomoteur par potentiomètre avec affichage des valeurs des angles du servomoteur sur une LCD (16.2).

#include <Servo.h>
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to

LiquidCrystal lcd(2,3, 4, 5, 6,7);
   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); 
lcd.begin(16,2);// attaches the servo on pin 9 to the servo object
}

void loop() {
  lcd.setCursor(3,0);
  lcd.print("SERVOMOTEUR");
  lcd.setCursor(2,1);
  lcd.print("angle: ");
  lcd.setCursor(8,1);
  lcd.print(val);
  
  
   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);


}


pour bien comprendre le câblage et la programmation du servomoteur avec Arduino
je vous laisse le lien de la vidéo sur notre chaine YouTube 
visitez notre chaine et abonnez-vous sans oubliez j'aime et commentaire 
laissez vos questions sur un commentaire   

la vidéo




Enregistrer un commentaire

0 Commentaires