L'Arduino n'est pas seulement utile pour faire clignoter des LEDs, il peut servir à bien d'autres choses comme activer des moteurs... On trouvera de nombreuses applications comme la création de petites animations ou la motorisation d'un aiguillage...
Je ne m'étendrai pas énormément sur le sujet car la mise en oeuvre de ces moteurs est très simple et les exemples nombreux. Il existe des librairies incluses dans l'environnement de programmation de l'Arduino comme
Avant toute chose, je profite de l'occasion pour décrire brièvement la raison d'être des librairies. Jusqu'à maintenant, nous n'avons utilisé que des fonctions élémentaires de l'Arduino. Mais il existe aussi des librairies regroupant des fonctionnalités supplémentaires à ajouter à un programme. Celles-ci sont le plus souvent développées pour un matériel ou des composants électroniques spécifiques.
Il y a deux raisons principales à l'utilisation des librairies. D'une part, un programmeur ayant développé des fonctions pour supporter le protocole DCC ou commander un MAX7219 (afficheur numérique à LED), peut regrouper son travail dans une librairie et la diffuser sur internet. Chacun peut alors la réutiliser, lui évitant ainsi de reprogrammer les mêmes fonctionnalités...
D'autre part, cela limite la taille des programmes compilés. En effet, afin de pouvoir fonctionner, un programme doit être compilé avec toutes les fonctionnalités dont il a besoin. Par exemple, si
Attention: un petit point de droit concernant les librairies qu'il est possible de trouver sur internet et qui ne font pas partie de l'environnement de base de l'Arduino: elles ne sont pas nécessairement libres de droits. Le développeur d'une librairie peut décider de limiter son usage, en interdisant par exemple son utilisation dans un produit commercial qu'il n'aurait pas lui-même développé. C'est le cas le plus fréquent. Il est à noter qu'il peut aussi interdire la rediffusion de son code dans une autre librairie. Il est préférable de bien se renseigner auprès du ou des auteurs avant de les utiliser.
Entrons rapidement dans le vif du sujet... Il en existe plusieurs types mais au contraire d'un moteur classique, un servo-moteur ne peut tourner que sur un intervalle angulaire précis: en général de 0 à 180°, soit un demi-tour seulement. On retrouve généralement de tels servo-moteurs en aéro-modélisme, où ils sont utilisés pour actionner les volets ou les dérives des appareils.
Une des applications pratiques pour notre hobby est la manipulation des aiguillages. En effet, nous avons besoin d'un moteur ayant assez de couple et dont l'angle de rotation puisse être contrôlé avec suffisamment de précision. En voici un de petite taille mais suffisant pour nos besoins:
Pour le contrôle, nous disposons de trois fils: en général de couleur marron, rouge et orange, ou équivalent. On peut aussi trouver: noir, rouge et jaune. Le fil marron se connecte au ground, le fil rouge au +5V et le fil orange à un port de l'Arduino. C'est aussi simple que cela. On fera attention de choisir un servo dont la tension est 5V. Dans le cas d'un servo alimenté en 12V, il faut alors opter pour une alimentation externe... Aucun autre composant est nécessaire comme le montre ce montage:
Maintenant, passons à la programmation... Voici un premier exemple de programme qui permet d'actionner le servo-moteur entre deux angles: 45 et 90°.
Servo moteur;
int commande = 7;
void setup()
{
moteur.attach( commande );
}
void loop()
{
moteur.write( 90 );
delay( 1000 );
moteur.write( 45 );
delay( 1000 );
}
Remarque préliminaire: pour les besoins de ce tutoriel, nous utilisons une librairie spécifiquement développée pour simplifier le contrôle des servos. Cependant, un tel moteur peut être commandé sans elle, en envoyant le bon nombre de pulsations, à intervalles réguliers. Je pourrai ajouter quelques lignes sur le sujet si nécessaire...
Tout d'abord, examinons la première ligne. C'est une nouveauté par rapport aux exemples précédents, et elle illustre l'utilisation d'une librairie externe qui est incluse spécifiquement pour ce programme par la directive
Ensuite, nous déclarons les variables: un servo
Puis, dans la fonction
Ensuite, dans la fonction principale
Deux remarques importantes concernant le fonctionnement des servo-moteurs:
- il n'y a pas de "sens" ou de "direction" de déplacement. Chaque position est identifiée par un angle de 0 à 180°. En faisant une analogie avec une horloge, on commandera à celle-ci de se placer à 6h puis à 2h en lui indiquant
horloge.write( 6 ) ethorloge.write( 2 ) . On ne lui demandera pas se déplacer de -4h avechorloge.write( -4 ) ... Nous verrons qu'il n'en est pas de même avec les moteurs pas-à-pas. - dans le même ordre d'idée, il n'y a aucune indication de "vitesse" de déplacement. Le servo-moteur se déplace à sa vitesse nominale.
{
for ( int i = 90; i >= 45; i-- )
{
moteur.write( i );
delay( 30 );
}
delay( 1000 );
}
Le délai dépendra du type de servo-moteur utilisé. On peut aussi modifier la valeur en fonction des goûts... Quant au dernier appel
Aussi, on remarquera qu'une fois arrivé à 45°, le moteur se repositionnera à 90° rapidement, puisque si on déroule la suite des étapes, la dernière commande
Petit exercice: remplacer le
A venir...
Aucun commentaire:
Publier un commentaire