A.M.F.N.
Association des Modélistes Ferroviaires de Nice

Commande des aiguilles par servomoteur
depuis un Arduino, via des modules PCA9685
(cliquez sur les imagettes pour les agrandir)
Les photos seront mises à jour à la fin du confinement


Notre réseau HO date du début des années 70. À l'origine, les aiguilles étaient motorisée par de gros relais 48V.
(À titre muséographique, voici un exemplaire encore en place).
La gare terminus a été refaite dans les années 80 en utilisant pour la commande des aiguilles des moteurs GB Electronics.
Les moteurs GB sont collés sur une planchette fixée verticalement sous le réseau.

Le petit relais jaune est commandé en 48V et assure l'inversion de polarité du moteur.

La plaquette coulissante est entrainée par une vis sans fin. Elle comporte en dessous des frotteurs qui établissent les contacts sur le circuit imprimé.

Elle entraine également une tringle qui bascule autour de la cornière en Meccano pour actionner la traverse mobile des aiguilles.

Après quelques années, le manchon de caoutchouc sèche et patine, et les contacts glissants finissent par se rompre et n'établissent plus le contact.

L'exploitation de la gare étant devenue problématique, nous avons décidé de re-motoriser toutes les aiguilles.
Les quelques moteurs Tortoise utilisés étaient trop encombrants et trop chers à généraliser, et le câblage devait être mis au propre.
Nous avons donc cherché une solution facile à mettre en oeuvre et surtout économique, compte tenu qu'il y avait 31 aiguilles à traiter.
Finalement nous avons choisi d'utiliser de petits servomoteurs très répandus dans le monde de la radiocommande.
Pour leur mise en oeuvre, nous avons conservé le principe de fixation des moteurs GB.

Montage:

Les aiguilles sont par endroit très proches les unes des autres. Il fallait donc minimiser l'encombrement horizontal des moteurs. Mais nous ne sommes pas limités verticalement, le réseau se présentant un peu comme une table.
Après nombre d'essais, voici le design auquel nous sommes arrivés:
 
Un moteur comprend:

une pièce principale en contreplaqué de 15mm (hachurée).

deux petits morceaux de contreplaqué de 10mm Cette épaisseur permet de fraiser plus facilement les trous de fixation. Le trou oblong est indispensable pour faciliter l'ajustement du moteur.

un morceau d'équerre en PVC 15x15x1,5mm de 25mm de long (en bleu).

une tringle en corde à piano de 0,8mm ou 1mm, de 115mm de long (en rouge).

et un servomoteur type MG90S.

Les pièces en bois sont collées à la colle à bois, et le servomoteur à la colle néoprène.  L'équerre en PVC est fixée par deux vis M4.

Les dimensions, relevées sur nos moteurs, ne sont données qu'à titre indicatif. Toutes les pièces ne sont pas représentées sur ce dessin.

La course du servomoteur (coupe en bas du dessin) étant de 180°, il n'est soumis à aucun couple lorsqu'il est en fin de course. On peut alors le mettre hors tension sans qu'il bouge de sa position.
 

La tringle de commande de la traverse mobile est en corde à piano de 0,8mm pour les aiguilles souples et de 1mm pour les plus dures. Elle est dotée d'une tête qui la fait ressembler à une grosse épingle. Cette tête est réalisée en soudant une spire de fil de 0,5mm autour de l'extrémité.

Une fois en place, la tringle repose sur la traverse mobile, la tête l'empêchant de passer au travers.

Lors du fonctionnement, la tête de la tringle entraîne la traverse sur 2 à 3mm. L'autre extrémité, qui suit le palonnier du servomoteur, décrit un demi-cercle. C'est pour cette raison que l'équerre comporte une fente plutôt qu'un trou.

Le servomoteur est collé à 90° du support pour permettre à la tringle de dépasser suffisamment par en dessous sans qu'on doive en régler la longueur de façon précise. Il est parfois nécessaire d'ajouter un dispositif de blocage à cet endroit (morceau de domino ou autre) pour empêcher la tringle de remonter.

Les contacts:

Notre réseau étant "conventionnel", il faut mettre les sections de voie sous et hors tension en fonction des itinéraires établis.
Les servomoteurs ne comportant pas de contact auxiliaire comme les moteurs d'aiguille traditionnels, nous avons utilisé des relais séparés, disponibles sur Internet par blocs de 8.

Commande de l'ensemble:

Les servomoteurs devant être commandés par une électronique numérique quelconque, nous avons adopté une carte Arduino Mega pour commander l'ensemble de la gare.
La commande se fait via quatre modules PCA9685 à 16 canaux. Ces modules se connectent sur le bus I2C de l'Arduino, et chacun commande 16 servomoteurs ou 16 relais.
Les modules PCA9685 et les relais sont installés sur une planchette sous le réseau:
L'Arduino est connecté au bout du câble plat visible tout à fait en haut à gauche.
Le circuit en Veroboard est décrit plus bas.
Les deux modules PCA9685 de gauche commandent les servomoteurs, les deux autres les relais.
Les connexions sur les modules sont faites par câbles Dupont en ce qui concerne le bus USB, par connecteurs DIL "wrappés" en sortie des modules, et par bornier à vis en ce qui concerne les relais.
En fonctionnement, l'ensemble est protégé par un capot en Forex de récupération.
Ce schéma (cliquer dessus) montre l'ensemble des interconnexions, ainsi que le contenu de la petite carte en Veroboard.

Celle-ci assure plusieurs fonctions:
protection par fusible et distribution des alimentations,
séparation du 5V électronique et servomoteurs,
contrôle de la mise sous tension des relais,
supervision du fonctionnement des servomoteurs.
 

Fonctions de la carte en Verobard:

protection: les modules de relais fonctionnent en 12V afin de minimiser le courant consommé. La partie logique des PCA9685 et les servomoteurs fonctionnent en 5V. Chacune de ces alimentations est protégée par un fusible de 2A.

découplage du 5V: les servomoteurs génèrent au démarrage un appel de courant susceptible de perturber les circuits électroniques. C'est pourquoi le 5V des servomoteurs est isolé du 5V des circuits par une diode et un condensateur.

séquence de démarrage: les modules de relais, qui comportent leur propre électronique, ont des commandes actives à l'état bas. Mais à la mise sous tension, les PCA9685 ont leurs sorties au niveau bas. Pour éviter que tous les relais ne soient activés, même fugitivement, les barrettes ne sont alimentées qu'après que l'Arduino ait mis toutes les sorties des PCA9685 à l'état haut. C'est le rôle du relais.

supervision du fonctionnement des servomoteurs:
Lors de son fonctionnement, un servomoteur consomme un "certain" courant. Lorsqu'il arrive à la position choisie, la consommation devient très faible, sauf s'il est en butée (limite externe) ou en fin de course (limite interne).
En supervisant la consomation de courant on peut détecter que le servomoteur est en butée ou en fin de course, et également en  chronométrer le fonctionnement. C'est bien sûr l'Arduino qui s'en charge. On ne le fait qu'une fois, lors de l'installation.

En pratique tous nos moteurs ont les mêmes caractéristiques, aussi ce circuit n'est plus d'une utilité primordiale.

Câblage des servomoteurs:

Les servomoteurs sont câblés via de petits modules de distribution  prenant en charge 8 servos.

Ces "répartiteurs" sont installés au centre des groupes de 8 servos. Il sont réalisés à partir d'une plaque de "prototyping" qu'on croirait faite pour ça.

Les servos trop éloignés pour être connectés directement à un répartiteur le sont par des rallonges classiques à 3 conducteurs.

Le signal de commande est acheminé depuis les PCA9650 aux répartiteurs par des groupes de 8 fils wrappés d'un coté et de l'autre (petits fils blancs).

L'alimentation 5V est acheminée séparément (borniers).

Longueur des câbles:

C'est une question qui nous tracassait depuis le début. En définitive:

Bus I2C: il y a 1,10m entre l'Arduino et la carte en Veroboard. Chaque module PCA9650 est 30cm plus loin.
Le bus I2C atteint donc 2,30m. Il n'y a pas de terminateur coté PCA9650.

commande des servomoteurs: le câble le plus long entre PCA9650 et répartiteurs mesure 2,50m. Le servomoteur le plus éloigné est à 1,50m de ce module, soit 4m du PCA9650 qui le commande.

En dépit de ces longueurs inhabituelles, l'ensemble fonctionne très bien.

Des essais de sensibilité aux parasites génèrés par les locomotives restent néanmoins à faire.
 
 
Pupitre de commande:
 

Dans une première étape, nous avons récupéré tel quel le pupitre de commande existant.

Nous avons seulement remplacé les lampes témoin par des LEDs.

La partie "alimentations traction" est inchangée.

(photo provisoire).

Comme on le devine sur la photo, la partie "voyageurs" de la gare est gérée sur le principe des itinéraires, dont on voit les boutons origine et destination ( jaunes) et les boutons de destruction (rouges).

Les aiguilles des zones de remisage "voitures" et "autorails" sont commandées directement par le biais d'interrupteurs. 

Nous avons conservé ces interrupteurs, mais ils posent des problèmes de logique et d'ergonomie. Aussi nous envisageons de les remplacer plus tard par des boutons comme pour les autres voies.

L'Arduino Mega, caché sous son shield à borniers, est fixé sur une planchette collée au dessous du pupitre.

Les boutons, les interrupteurs et les voyants à LED lui sont connectés directement.

Le câble plat assure la liaison avec le circuit en Veroboard décrit plus haut, et achemine entre autres l'alimentation 5V et le bus I2C.

(photo provisoire).

Programmation:

Le "sketch" Arduino est d'une architecture classique: le microcontrôleur lit en permanence l'état des boutons et des interrupteurs, et en cas de changement d'état, fait "le nécessaire".

Quelques détails:

pour éviter des appels de courant trop importants (certains itinéraires doivent commander jusqu'à 9 servomoteurs), les commandes de servomoteurs sont échelonnées toutes les  200ms. Ainsi, le courant consommé ne dépasse pas 1,2A.

  pour éviter une sur-consommation si un servomoteur vient en butée, les servomoteurs sont désactivés 1s après utilisation.

lors de la destruction des itinéraires, les servomoteurs sont mis en point milieu, de sorte qu'aucune force ne s'exerce plus sur eux. Cette option est due à notre incertitude sur la tenue dans le temps du collage des servomoteurs à la colle néoprène. En cas de problème, nous utiliserons une autre colle, ou un autre mode de fixation.

le programme comporte de nombreuses commandes pour la mise au point. Elles sont bien entendu inutilisées en fonctionnement normal.

Concernant la commande des modules PCA9685, voir la page d'Aranacorp.

Bilan:

L'ensemble fonctionne parfaitement et l'objectif de prix de revient est atteint.

La seule petite surprise désagréable est le bruit que font les servos lors de leur fonctionnement, car nous les espérions plus silencieux. Mais c'est un inconvénient mineur, compte tenu du niveau sonore général (conversations, roulement des trains) dans le local.
Et puis, s'ils sont plus bruyants qu'un Tortoise, ils le sont quand même moins qu'un Lemaco, ou que les moteurs précédents.

Concernant la tenue dans le temps, seul l'avenir nous dira ce qu'il en est. Le premier système de motorisation à relais a vecu dix ans, le second à moteurs GB, vingt cinq ans,  celui-ci fera-t-il mieux?
 
page précédente: utilisez la touche "PRÉCÉDENT(E)" de votre navigateur