Attention : cette bibliothèque a été remplacée par Bibliothèque Commanders et Bibliothèque Accessories (1). Ces nouvelles bibliothèques sont plus simples à utiliser : presque plus de pointeurs et beaucoup d’autres simplifications... Elles gèrent aussi beaucoup plus de donneurs d’ordre (bus CAN ou I2C) et d’accessoires (moteur pas à pas...). Bref, je vous conseille vivement de passer aux successeurs de UAD !
La bibliothèque objet de cet article ne sera plus d’ailleurs maintenue pour cause de quantité de temps de son auteur limitée !
Un décodeur d’accessoires universel (1)
. Par :
. URL : https://www.locoduino.org/spip.php?article43Le pilotage d’accessoires est une partie souvent compliquée et/ou onéreuse à mettre en place. La grande diversité d’appareils à commander rend la généralisation difficile, et trouver, dans la jungle des fabricants et des modèles le décodeur DCC adapté à tel ou tel type d’accessoire, n’est pas toujours simple, et encore moins économique. Je vous propose d’utiliser une librairie dédiée qui va tenter de fédérer tous les accessoires sous une bannière Arduino, et pour un prix bien inférieur.
Voici l’organisation générale de la librairie. Ne soyez pas effrayés par l’apparente complexité du modèle. Tout s’explique !
Pour piloter quoi ?
Voyons d’abord quels types d’accessoires sont à piloter. Il s’agit du cadre ’Accessories’ à droite du schéma. Je les range en deux catégories : les motorisés (des actionneurs en jargon électronique), et les lumineux.
La catégorie ’motorisés’ comprend tous les aiguillages, les dételeurs, mais aussi les ponts tournants, les passages à niveau motorisés, jusqu’aux accessoires de décor type roue de fête foraine ou moulin à vent... Bref tout ce qui bouge grâce à un moteur ! Parmi les moteurs utilisés dans ces accessoires, il y une grande diversité. Prenons le cas des aiguillages. Il y a l’aiguillage classique, à double solénoïde (bobine pour simplifier) et trois fils qu’il faut commander par une impulsion (Jouef, Fleischmann, Arnold, Peco, Marklin...) . Il y a l’aiguillage à deux fils pour une seule bobine, type Kato ou Rokuhan, dont la direction de fonctionnement dépend de la polarité des fils de commande.
Toujours chez Kato, nous avons le double crossing :
Il s’agit d’une sorte de pool d’aiguillages qui regroupe quatre aiguillages, soit quatre bobines pour deux fils, et qui consomme surtout de 1.5 à 2 ampères à chaque mouvement ! Et comme cela ne suffisait pas, il y a les aiguillages commandés par des moteurs lents, type Fulgurex, Tortoise, Cobalt (deux fils) ou Conrad (trois fils). Il y a aussi les servos, catégorie à part de moteurs lents indexables, c’est à dire dont la position n’est pas limitée à une ou deux. Tout comme les moteurs pas à pas (stepper) pilotés en général par deux ou quatre fils. Donc on le voit, il existe quantité de motorisations différentes qu’il va falloir alimenter et piloter via une interface commune.
La seconde catégorie comprend tous les éclairages de ville, les feux de signalisation, routière ou ferroviaire. On peut y ajouter les clignotants de chantier, de passage à niveau, les enseignes publicitaires, de pharmacie, ou les simulations d’écran de télé ou de poste à souder... Bref tout ce qui s’allume, s’éteint, clignote...
En bas du dessin, il y a les groupes d’accessoires, utiles pour associer des positions ou des états d’accessoire sous un unique identifiant DCC. Les groupes d’accessoires sont pratiques pour faire bouger des aiguillages l’un après l’autre, ou changer l’état d’un feu de signalisation comprenant plusieurs leds.
Comment donner les ordres ?
Tout à gauche sur le schéma, il y a les Commanders (prononcez ’commandeur’, pour faire référence au grade de Commandeur dans l’univers Star Trek !) qui sont là pour simplifier le traitement de toutes les possibilités de commande. Il y a un Commander DCC qui utilise une librairie disponible sur Mynabay.com. Cette librairie analyse les paquets DCC sur la voie (à travers un petit montage électronique proposé sur ce même site, qui va réduire la tension de 18v à 5v de manière à être acceptable par l’Arduino) et les envoie à l’Arduino. Elle est également utilisée dans un article à paraître « Un moniteur de signaux DCC ». On n’a pas forcément envie d’utiliser du DCC pour piloter ses accessoires, et la librairie peut très bien s’en passer. Par contre elle utilise partout les codes DCC des accessoires pour les identifier de manière unique, il faut donc les remplir. Un code DCC est un numéro d’accessoire compris entre 1 et 1024, et un 0 ou un 1. Cela correspond sur ma commande DCC Mobile Station 2 de Trix aux numéros d’aiguillages de 1 à 320. Le 0 représente la touche Rouge, le 1 la touche Vert.
Le Commander pour les boutons peut gérer des poussoirs à une position, des interrupteurs à deux ou plusieurs positions, les potentiomètres...
Le Commander série est destiné à recevoir des ordres par une liaison série : console série de l’IDE Arduino ou récepteur BlueTooth/WiFi/RF ...
Donc moins de code à écrire pour les boutons, juste une déclaration dans un Commander.
Et avec quoi on fait ça ?
Au centre de tout ça en vert, le fichier ino de votre projet. Il contrôle l’Arduino et joue les chefs d’orchestre. J’utilise un Arduino Mega2560, une déclinaison de l’Arduino Uno qui dispose de bien plus de ports d’entrée/sortie en digital et en analogique. J’ai trouvé le mien, un Arduino Mega2560, autour de 10€ sur la toile. C’est un compatible asiatique (rappelons que ce n’est pas interdit puisque l’Arduino est Open Source...), mais il marche bien... 54 ports sont disponibles, ce qui fait que même si un shield pour Uno recouvre le Mega, une bonne partie des ports reste accessible pour d’autres applications.
Besoin de puissance ?
Mais l’Arduino, fut-il Mega, possède tout juste assez de puissance pour alimenter au plus une demi douzaine de leds, ou deux servos. Et il n’est pas capable d’alimenter le plus petit moteur... En effet, le Mega peut servir jusqu’à 50mA par port, et au maximum 500mA tous ports confondus. On voit bien que le moindre aiguillage réclamant 800mA, voire beaucoup plus, fera griller votre Arduino ou au mieux il disjonctera... Pour compenser cela, il faut disposer d’une source de puissance extérieure, en clair un petit transfo comme le chargeur de votre téléphone, et faire transiter cette puissance par des circuits spécialisés. C’est le rôle des Drivers en bleu sur le dessin. Chaque Driver dispose d’un certain nombre de ports qui sont physiquement les endroits où brancher les accessoires. Ces ports sont de types différents selon le type d’appareil à y connecter. Par exemple le DriverL293d, le shield Arduino ci dessous, dispose de quatre ports pour des moteurs/lumières (ce sont les mêmes...) en bleu foncé, de deux ports pour des servos en bleu clair, et d’un port pour un stepper en vert... Si sur le dessin il y a trois ports stepper, c’est qu’en réalité il est possible d’en brancher un par quatre fils, ou deux par deux fils chacun ! Il importe donc de choisir le bon port. Notez que certains driver comme les relais ou l’Arduino lui même n’ont pas un nombre fixe de ports. Cela dépendra de l’usage que vous en ferez ! Détaillons les différents types de driver disponibles aujourd’hui :
Il y a le shield L293D :
Ce module est disponible sur la toile pour moins de dix euros. Il peut commander quatre moteurs DC en PWM, ou deux servos et quatre moteurs DC, ou un stepper. La puissance est limitée à 0,6A par canal, et il n’est pas empilable avec d’autres shields. Sur un Arduino classique il est donc limité définitivement à quatre actionneurs. Tous les canaux PWM de l’Arduino sont monopolisés par le shield, même s’il ne les utilise pas tous ! Sur le Mega, seuls des pins analogiques et digitales restent disponibles pour d’autres applications.
Le module L298N :
Il s’agit un petit circuit trouvé sur la toile à moins de 8 euros. Deux moteurs DC ou un stepper sont pilotables, avec 2A Maxi pour chacun. Chaque moteur réclame deux pins numériques pour se mettre en route. Ce qui fait un vingtaine de moteurs pilotables sur un Mega !
Les relais :
Les barres de relais sont disponibles par un, deux, quatre, huit voire seize et tout à moins de dix euros ! Les relais sont bruyants, mais ils assurent une transmission de puissance bien supérieure à ce que permettent des H Bridges comme les deux précédents...
L’Arduino lui même est un Driver possible pour des actionneurs de faible puissance comme des servos, et bien sûr pour des leds. Il faut malgré tout faire attention de ne pas dépasser ses capacités en y branchant trop d’appareils consommateurs. Comme le driver de relais, l’Arduino n’a pas un nombre fixe de ports. La quantité voulue de ports de chaque type doit être spécifiée à la création du driver.
Faute de pouvoir tester, il y a encore beaucoup de drivers potentiels que je n’ai pas implémenté dans la librairie. C’est le cas des transistors. Un transistor peut être utilisé en commutation, par exemple pour commander une bobine de moteur d’aiguille, et se pilote en tout ou rien comme un relais.
La suite, pour ’décoder’ un exemple fourni dans la librairie, est présenté dans « Un décodeur d’accessoires universel (2) ».