Les servomoteurs AX-12 avec un Arduino
Par Martin le 17 Septembre 2011
Dans le top des servomoteurs, l'AX-12 tient une bonne place. Il est fabriqué en Corée par Robotis, vendu $45, et vous fera gagner un temps énorme. On le contrôle avec un bus série, de type RS-485 à trois fils, et un système d'adresses. Voici comment utiliser vos AX-12 (et peut-être d'autres produits Dynamixel) simplement avec un Arduino.
Datasheet :
Bibliothèque à mettre dans un dossier libraries dans votre Sketchbook :
https://github.com/7Robot/Eurobot-2012/blob/master/Arduino/libraries/ax12v2.0.rar (source)
Branchement
La commande s'effectue via un bus en daisy chain c'est-à-dire que chaque servo a deux connecteurs identiques, pour raccorder facilement plusieurs servos en parallèle.
Sur le schéma ci-contre Data transmet les données en série (TX / RX alternativement, cf RS-485).
Attention : VDD doit être entre 7V et 10V pour que le servo s'allume.
Nous allons utiliser les pins 0 (RX) et 1 (TX) de votre Arduino, car le pseudo RS-485 des servos n'est pas très différent du RS-232 classique. Il suffit de brancher TX ou RX sur le fil Data suivant la direction du flux. La datasheet des AX-12 parle du composant 74HC126 mais il suffit en réalité de faire passer alternativement les pins de l'arduino en haute impédance (tri-state). C'est ce que la libraire que nous utiliserons fait.
Résumé du branchement :
- GND sur le GND de votre Arduino
- VDD sur du 7V-10V, par exemple sur la pin Vin de votre Arduino, qui est reliée au connecteur d'alimentation de la carte ; et sur ce connecteur vous branchez un transformateur 9V par exemple.
- Data sur les pins TX et RX (1 et 0) de votre Arduino, par exemple en soudant le fil à deux pins d'une tulipe mâle.
Programmes de test
Voici deux programmes simples pour tester votre arduino, et comprendre l'utilisation d'ax12.h :
- ax12_aller_retour.pde : Le servo fait des aller-retour entre +90° et -90°.
- ax12_blink_id.pde : Fait clignoter les LEDs intégrées aux AX-12 pou afficher leur adresse. Trois flashs pour le servo numéro 3 par exemples. Utile quand plusieurs servos sont sur un même bus.
Utilisation de ax12.h
Après avoir installé la bibliothèque (soit quatre fichiers dans "Sketchbook/libraries/ax12/") voici les grandes étapes pour l'utiliser :
- Créer une instance de la classe : AX12 moteur(id);
- Dans setup() : AX12::init(1000000); pour régler la vitesse du port série.
-
L'AX-12 est vu comme une grande mémoire, reflétant la position, le couple, la température du servo, etc. Pour donner une consigne de position par exemple, on écrit à l'adresse GOAL_POSITION, avec l'instruction :
moteur.writeInfo(GOAL_POSITION, entier); où entier est une valeur entre 0 et 1023. On peut utiliser la fonction map pour utiliser des angles en faisant attention aux limites physiques de l'AX-12 (60° d'angle mort), par exemple :
entier = map(angle, -150, 150, 0, 1023); - Il existe aussi moteur.readInfo(adresse) ;
- La liste des adresses est au début de ax12.h, et leur explication dans la datasheet.
Pour le reste je vous laisse lire les sources de la librairie, dont on pourra déplorer que les commentaires soient en espagnol...