dans ce tutoriel, nous allons apprendre comment fonctionnent les servomoteurs et comment contrôler les servos à l’aide du pilote Arduino et PCA9685 PWM. Vous pouvez regarder la vidéo suivante ou lire le tutoriel écrit ci-dessous.
Il existe de nombreux types de servo-moteurs et leur caractéristique principale est la capacité de contrôler avec précision la position de leur arbre. Un servomoteur est un système en boucle fermée qui utilise un retour de position pour contrôler son mouvement et sa position finale.,
dans les servomoteurs de type industriel, le capteur de rétroaction de position est généralement un encodeur de haute précision, tandis que dans les servos RC ou hobby plus petits, le capteur de position est généralement un simple potentiomètre. La position réelle capturée par ces dispositifs est renvoyée au détecteur d’erreur où elle est comparée à la position cible. Ensuite, en fonction de l’erreur, le contrôleur corrige la position réelle du moteur pour correspondre à la position cible.,
dans ce tutoriel, nous allons examiner en détail les servomoteurs hobby. Nous expliquerons comment ces servos fonctionnent et comment les contrôler à L’aide D’Arduino.
Hobby servos sont de petite taille actionneurs utilisés pour le contrôle de la RC jouets voitures, les bateaux, les avions, etc. Ils sont également utilisés par les étudiants en ingénierie pour le prototypage en robotique, la création de bras robotiques, de robots d’inspiration biologique, de robots humanoïdes, etc.,
Comment fonctionne le Servo RC/Hobby
Dans un servo hobby, il y a quatre composants principaux, un moteur À COURANT CONTINU, une boîte de vitesses, un potentiomètre et un circuit de commande. Le Moteur À COURANT CONTINU est à grande vitesse et à faible couple, mais la boîte de vitesses réduit la vitesse à environ 60 tr / min et augmente en même temps le couple.
Le potentiomètre est relié à la finale de l’engin ou de l’arbre de sortie, de sorte que le moteur tourne le potentiomètre tourne ainsi, produisant ainsi une tension qui est liée à l’angle absolu de l’arbre de sortie., Dans le circuit de commande, cette tension du potentiomètre est comparée à la tension provenant de la ligne de signal. Si nécessaire, le contrôleur active un pont en H intégré qui permet au moteur de tourner dans les deux sens jusqu’à ce que les deux signaux atteignent une différence de zéro.
un servomoteur est commandé en envoyant une série d’impulsions à travers la ligne de signal. La fréquence du signal de commande doit être de 50 hz ou une impulsion doit se produire toutes les 20 ms., La largeur de l’impulsion détermine la position angulaire du servo et ces types de servos peuvent généralement tourner à 180 degrés (ils ont une limite physique de déplacement).
généralement, les impulsions d’une durée de 1 ms correspondent à une position de 0 degré, d’une durée de 1,5 ms à 90 degrés et de 2 ms à 180 degrés. Bien que la durée minimale et maximale des impulsions peut parfois varier avec différentes marques et ils peuvent être 0.5 ms pour 0 degrés et 2.5 ms pour 180 degrés position.,
commande de servomoteur Arduino
mettons ce qui précède pour tester et faire un exemple pratique de contrôle d’un servo de passe-temps en utilisant Arduino. J’utiliserai le MG996R qui est un servo à couple élevé doté d’un engrenage métallique avec un couple de décrochage de 10 kg-cm. Le couple élevé a un prix et c’est l’étal actuel de la servo qui est de 2,5 A. Le courant est de 500mA à 900mA et la tension de fonctionnement est de 4,8 7,2 V.,
Les cotes actuelles indiquent que nous ne pouvons pas connecter directement ce servo à L’Arduino, mais nous devons utiliser une alimentation séparée pour cela. Voici le schéma de circuit pour cet exemple.
Nous devons simplement connecter la broche de contrôle du servo à n’importe quelle broche numérique de la carte Arduino, connecter la Terre et les fils positifs à l’alimentation externe 5 V, et également connecter la Terre Arduino à la terre servo.,
Vous pouvez obtenir les composants nécessaires pour cet exemple à partir des liens ci-dessous:
- MG996R Servo Moteur …………………………. Amazon / Banggood / AliExpress
- ou S90 Micro Servo ………..…………………… Amazon / Banggood / AliExpress
- Carte Arduino ……………………………………. Amazon / Banggood / AliExpress
- 5V 2A Alimentation CC …………………..….. Amazon / Banggood / AliExpress
divulgation: ce sont des liens d’affiliation. En tant qu’associé Amazon, je gagne des achats éligibles.,
Arduino Moteur Brushless de Contrôle Tutoriel | ESC | BLDC
Arduino commande de servomoteur Code
Maintenant, nous allons jeter un coup d’oeil au code Arduino pour contrôler le servomoteur. Le code est très simple. Nous avons juste besoin de définir la broche à laquelle le servo est connecté, définir cette broche comme une sortie, et dans la section boucle générer des impulsions avec la durée et la fréquence spécifiques comme nous l’avons expliqué plus tôt.,
Après quelques tests, j’ai trouvé les valeurs suivantes pour la durée des impulsions qui fonctionnent avec mon servo. Les impulsions d’une durée de 0,6 ms correspondaient à une position de 0 degré, de 1,45 ms à 90 degrés et de 2,3 ms à 180 degrés.
j’ai connecté un multimètre en série avec le servo pour vérifier la consommation de courant. Le courant maximum que j’ai remarqué était jusqu’à 0,63 Un stand. Eh bien, c’est parce que ce n’est pas le servo original TowerPro MG996R, mais une réplique moins chère, qui a évidemment des performances pires.,
néanmoins, examinons un moyen plus pratique de contrôler les servos à L’aide D’Arduino. C’est en utilisant la bibliothèque Arduino servo.
Il suffit ici d’inclure la bibliothèque, de définir l’objet servo, et à l’aide de la fonction attach() de définir la broche à laquelle le servo est connecté ainsi que de définir les valeurs minimales et maximales des durées d’impulsions. Ensuite, en utilisant la fonction write (), nous réglons simplement la position du servo de 0 à 180 degrés. Avec cette bibliothèque, nous pouvons conduire jusqu’à 12 servos en même temps ou 48 servos en utilisant Arduino Mega board.,
bras de Robot Arduino bricolage avec contrôle Smartphone
Arduino et PCA9685 PWM/ Servo Driver
Il y a aussi une autre façon de contrôle servos avec Arduino, et qui est en utilisant le PCA9685 servo pilote. Il s’agit d’un pilote PWM et servo 12 bits 16 Canaux qui communique avec Arduino en utilisant le bus I2C. Il a une horloge intégrée de sorte qu’il peut conduire 16 servos en cours d’exécution libre, ou indépendamment D’Arduino.,
ce qui est encore plus cool, nous pouvons connecter en série jusqu’à 62 de ces pilotes sur un seul bus I2C. Donc, théoriquement, nous pouvons contrôler jusqu’à 992 servos en utilisant uniquement les deux broches I2C de la carte Arduino. Les 6 broches de sélection d’adresse sont utilisées pour définir différents I2C adressés pour chaque pilote supplémentaire. Nous avons juste besoin de connecter les tampons de soudure selon ce tableau.
Voici le schéma du circuit et on peut encore une fois l’avis que nous avons besoin d’une alimentation séparée pour les servos.,
Vous pouvez obtenir les composants nécessaires pour cet exemple à partir des liens ci-dessous:
- MG996R Servo Moteur …………………………. Amazon / Banggood / AliExpress
- PCA9685 PWM Servo Pilote ………………. Amazon / Banggood / AliExpress
- Carte Arduino ……………………………………. Amazon / Banggood / AliExpress
- 5V 6A Alimentation CC …………………..….. Amazon / Banggood / AliExpress
divulgation: ce sont des liens d’affiliation. En tant qu’associé Amazon, je gagne des achats éligibles.
jetons maintenant un coup d’œil au Code Arduino., Pour contrôler ce servomoteur, nous utiliserons la bibliothèque PCA9685 qui peut être téléchargée à partir de GitHub.
PCA9685 Arduino Code
Nous devons donc d’abord inclure les bibliothèques et définir L’objet PCA9685. Ensuite, en utilisant L’instance Servo_Evaluator, définissez la durée des impulsions ou la sortie PWM du pilote. Notez que les sorties sont 12 bits, ou c’est une résolution de 4096 pas. Ainsi, la durée minimale de l’impulsion de 0,5 ms ou 0 degrés de position correspondrait à 102 pas, et la durée maximale de l’impulsion de 2,5 ms ou 180 degrés de position à 512 pas., Mais comme expliqué précédemment, ces valeurs doivent être ajustées en fonction de votre servomoteur. Dans mon cas, les valeurs de 102 à 470 correspondaient à la position de 0 à 180 degrés.
Dans la section configuration, nous devons définir la fréquence d’horloge I2C, définissez l’adresse du pilote et de régler la fréquence de 50Hz.
dans la section boucle, en utilisant les fonctions setChannelPWM() et pwmForAngle (), nous réglons simplement le servo à l’angle souhaité.,
j’ai connecté un deuxième servo au pilote, et comme je m’y attendais, il ne positionnait pas de la même manière que le premier, et c’est parce que les servos que j’utilise sont des copies bon marché et ils ne sont pas si fiables. Cependant, ce n’est pas un gros problème car en utilisant L’instance Servo_Evaluator, nous pouvons définir différents paramètres de sortie pour chaque servo. Nous pouvons également ajuster la position de 90 degrés au cas où elle ne serait pas précisément au milieu. De cette façon, tous les servos fonctionneront de la même manière et se positionneront à l’angle exact.,
contrôler beaucoup de servos avec Arduino et les pilotes PCA9685
Nous allons jeter un oeil à un autre exemple et qui contrôle beaucoup de servos avec plusieurs pilotes PCA9685 chaînés.
à cette fin, nous devons connecter les pilotes les uns aux autres et connecter l’adresse appropriée sélectionner des tampons de soudure. Voici le schéma du circuit:
prenons un coup d’oeil au code Arduino maintenant.,
nous devrions donc créer un objet PCA9685 séparé pour chaque pilote, définir les adresses pour chaque pilote ainsi que définir la fréquence à 50Hz. Maintenant, en utilisant simplement les fonctions setChannelPWM() et pwmForAngle (), nous pouvons définir n’importe quel servo à n’importe quel pilote pour positionner n’importe quel angle que nous voulons.