Comment Contrôler les servomoteurs avec l’Arduino

l’Une des premières utilisations de servo-moteurs était de contrôler les mécanismes de pilotage des avions RC, voitures et bateaux. Aujourd’hui, vous pouvez les trouver dans des robots, des équipements industriels, et de nombreux projets Arduino.

Les servomoteurs sont capables de contrôler avec précision la rotation d’un arbre moteur. Ils vous permettent de définir un angle de rotation exact avec du code, ou avec des entrées telles que des joysticks, des boutons poussoirs ou des potentiomètres.,

dans ce tutoriel, nous allons voir comment fonctionnent les servomoteurs et comment utiliser un Arduino pour les contrôler. Nous examinerons également deux exemples de programmes que vous pouvez exécuter sur L’Arduino. Le premier programme vous montrera comment contrôler la direction et la position d’un servo à l’aide de deux boutons-poussoirs. Le deuxième programme vous montrera comment utiliser un potentiomètre pour contrôler la position du servo.

Bon, nous allons commencer!

BONUS: j’ai fait un guide de démarrage rapide pour ce tutoriel que vous pouvez télécharger et revenir plus tard si vous ne pouvez pas le configurer maintenant., Il couvre toutes les étapes, les diagrammes et le code dont vous avez besoin pour commencer.

fonctionnement des servomoteurs

Les servomoteurs sont des moteurs À COURANT CONTINU qui ont été orientés vers le bas pour réduire la vitesse et augmenter le couple du moteur. Ils ont également des circuits intégrés qui contrôlent l’angle de rotation un degré à la fois et maintiennent cette position jusqu’à ce qu’une autre entrée soit reçue., Les Servos tourneront d’un certain nombre de degrés en fonction de la largeur des impulsions électriques délivrées par L’Arduino:

Le servo attend une impulsion toutes les 20 ms. pour la plupart des servos, une impulsion de 1 ms dans une rotation de zéro degré, une impulsion de 1,5 ms entraîne une rotation de 90 degrés et une impulsion de 2 ms entraîne une rotation de 180 degrés.

Connexion du servomoteur à l’Arduino

Maintenant, nous allons voir comment utiliser un Arduino pour contrôler un servo-moteur., Voici les composants dont vous aurez besoin pour configurer les exemples de projets discutés ci-dessous:

  • Arduino Uno
  • SG90 Micro Servo
  • potentiomètre 10K
  • Résistances
  • condensateurs
  • 4x support de batterie AA
  • boutons-poussoirs tactiles

en fonction du servo que vous utilisez (les plus grands en particulier), vous ça. Sinon, le courant tiré par le servo pourrait endommager votre Arduino.,

Une fois que vous avez tous les composants, connectez-les à L’Arduino en suivant ce schéma de câblage:

programmation du Servo

Nous allons utiliser la bibliothèque servo intégrée de l’Arduino pour programmer le servo. Cette bibliothèque est incluse avec L’Arduino Arduino, il n’est donc pas nécessaire de l’installer.,

Une fois que vous avez connecté les pièces selon le schéma de câblage ci-dessus, ouvrez L’Arduino Arduino et téléchargez ce code sur la carte:

le servomoteur doit se déplacer à 0 degrés, faire une pause pendant une seconde, puis passer à 90 degrés, pendant une seconde, puis recommencez.

Sur la première ligne nous inclure la bibliothèque Servo avec des #include <Servo.h>., Sur la ligne suivante, nous créons un objet appelé servo1 pour référencer le servomoteur spécifique dans tout le code. Sur la ligne suivante, nous déclarons une variable pin appelée serverPin et la définissons égale à Arduino pin 9.

Dans la section configuration, nous initialisons le servo avec la balise attach() fonction. La fonction attach() prend un paramètre – la broche à laquelle le servo est connecté. Nous avons donc servo1.attach(servoPin).,

pour déplacer le servo, utilisez la fonctionwrite() avec l’angle de rotation comme argument. L’angle est en degrés, de 0 à 180 degrés. L’angle modifie la largeur d’impulsion envoyée au servomoteur, qui détermine alors la quantité de rotation. Nous appelons la fonction via l’objet servo1, nous utilisons donc servo1.write(angle), avec 0 degrés, 90 degrés et 180 degrés.

Le writeMicroseconds() la Fonction

Le write() fonction de travail pour la plupart des servos, mais pas tous., Certains servomoteurs ont une plage de 180 degrés, certains ont une plage de 90 degrés, et certains ont n’importe où entre les deux. L’utilisation de la fonction write() ne permet qu’un maximum de 180 pas. Cependant, il existe une fonction qui permet jusqu’à 1000 étapes, appelée writeMicroseconds(). Si vous souhaitez un contrôle plus précis de votre servo, vous pouvez utiliser la balise writeMicroseconds() fonction au lieu de write().,

Le schéma ci-dessous illustre l’utilisation de la balise writeMicroseconds() fonction:

Dans cette esquisse, nous avons remplacé chaque write() fonction avec un writeMicroseconds() fonction. Modifiez les valeurs angulaires de (0, 90, 180) degrés à (1000, 1500, 2000) microsecondes. Téléchargez et exécutez le programme en utilisant la même configuration matérielle. Pour un servomoteur capable d’une plage allant jusqu’à 180, les valeurs seront 1000 microsecondes = 0 degrés, 1500 microsecondes = 90 degrés et 2000 microsecondes = 180 degrés.,

selon le servomoteur que vous utilisez, vous remarquerez peut-être une différence. Fait intéressant lors de ma configuration, tout en surveillant les impulsions sur un oscilloscope, j’ai remarqué que lors de l’utilisation de servo1.write(0);, la largeur d’impulsion n’était que d’environ 700 microsecondes, pas 1000, ce qui est la façon dont la fonction devrait fonctionner lorsqu’elle est réglée à zéro degré. Mais lorsque vous utilisez servo1.writeMicroseconds(1000);, la sortie était exactement de 1000 microsecondes.,

Contrôler un Servo Avec Boutons-Poussoirs

Construire votre circuit comme indiqué dans le diagramme ci-dessus, puis télécharger le code indiqué ci-dessous.

Après avoir téléchargé le code compilé, ouvrez le moniteur série sur votre Arduino. Lorsque vous appuyez sur l’un ou l’autre bouton, le servo devrait augmenter ou diminuer comme indiqué sur le moniteur série. Initialement, le code réglera le servo à 90 degrés. Utilisez le bouton connecté à la broche 3 pour augmenter l’angle., Lorsque vous atteignez 180 degrés, le haut de gamme de la rotation, la LED connectée à la broche 5 s’allume. Lorsque vous atteignez l’extrémité inférieure de la plage qui est de 0 degrés, la LED connectée à la broche 6 s’allume.

Pour déterminer le résultat du bouton-poussoir, une instruction while vérifie le bouton et l’angle de l’arbre. while (digitalRead(pin3) == HIGH && pos < 180) détermine que le bouton a été poussé (haut) et que l’angle est inférieur à 180, donc le programme ajoute un degré et boucle. Le deuxième boutonwhile (digitalRead(pin4) == HIGH && pos > 0) détermine que le bouton a été poussé (haut) et que l’angle est supérieur à 0., Cela provoque une diminution de l’angle d’un et une boucle. Le niveau LedHi et LedLow pour les LED sont contrôlés par une instruction if qui vérifie l’angle pour voir s’il est 0 ou 180. Les LED sont éteintes dès que l’angle change dans chacune des deux instructions while.

Contrôler un Servo Avec un Potentiomètre

la construction du circuit, comme indiqué dans le diagramme à l’aide d’un potentiomètre de 10K pour contrôler le servomoteur. Téléchargez ensuite le code ci-dessous.,

Après avoir téléchargé le code, ouvrez le moniteur série sur votre Arduino. Lorsque vous ajustez le potentiomètre, la rotation du servo change en conséquence. Lorsque vous atteignez la limite inférieure de la gamme, la Faible LED s’allume, et quand vous atteignez la limite supérieure, la Haute LED s’allume.

Le code est simple. La première ligne de code dans la balise loop() fonction:

val = analogRead(pot); val = map(val, 0, 1023, 0, 180); servo1.write(val); 

analogRead() prend la tension du potentiomètre comme un signal analogique., Il accepte les valeurs de la gamme complète d’entrée acceptée dans un Arduino (0-5V). Il le capture comme un entier dans la plage de (0-1023). Ainsi, par exemple, une valeur DC de 0V serait capturé comme l’entier 0; une gamme complète de la valeur de 5V serait capturé comme l’entier 1023, et la moitié de la gamme d’entrée de 2,5 V serait capturé comme l’entier 512, la moitié de 1023.

La ligne de code suivante: val = map(val, 0, 1023, 0, 180); cartes la valeur de val dans la plage de 0, 1023, 0, 180.,

La ligne de code suivante: servo1.write(val); est la balise write() commande qui prend l’entier stocké dans le val comme argument, et l’applique à l’asservissement. Le servo reçoit une impulsion du servo1.write(val); et la largeur d’impulsion est déterminée par la valeur de val. Le servo utilise la largeur de cette impulsion pour déterminer sa rotation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *