Les choses avancent... Je planifie de travailler sur mon automate afin de créer un script de croisement de plusieurs trains. Pour cela, j'ai modifié mon mini-réseau de test pour ajouter deux embranchements. Je vais ainsi pouvoir tester la logique des aiguillages.
Certes, il ne s'agit pas d'une zone de dépassement. Mais le principe est le même: il est possible de gérer plusieurs trains et actionner les aiguillages en fonction des directions de chacun.
Ensuite, il me faut un module de contrôle pour les moteurs d'aiguillages. Voilà qui est fait:
Le principe est simple:
réception des deux signaux de commande d'aiguillage de l'automate
déplacement des moteurs (type servo)
positionnement des relais correspondant afin d'alimenter correctement les pointes de coeurs
L'Arduino peut se charger facilement de cette responsabilité: lecture sur un port d'entrée d'un signal de commande provenant de l'automate. En fonction de la valeur du signal, envoi d'un HIGH ou LOW sur une sortie. Celle-ci est branchée sur un transistor qui alimente un relais... Enfin, sur une autre sortie, branchement d'un servo et gestion de celui-ci avec l'aide de la bibliothèque Servo.h bien connue. On multiple le tout par deux et on peut commander deux aiguillages...
Enfin, j'ai aussi ajouté deux accessoires bien pratique sur le clavier de mon automate: un potentiomètre pour la vitesse et un interrupteur trois positions pour les changements de direction (marche avant-stop-marche arrière).
Prochaine étape: installation des moteurs sur le réseau et test...
Avancement du projet "automate", qui avait débuté par le développement de mon décodeur maison et que j'utilisais comme automate avec quelques modifications du programme. En effet, à l'aide de l'interface Loconet et du détecteur BDL168 de Digitrax, j'étais capable de récupérer les informations d'occupation des cantons et d'agir logiquement sur les deux locomotives au travers de ma centrale Zephyr. Je vous renvoie aux deux vidéos: va-et-vient et gestion d'espacement par cantons.
Aujourd'hui, le projet évolue vers un modèle autonome. Cette fois-ci, plus besoin de centrale! Le montage incorpore l'équivalent d'un booster (un pont en H). Plus besoin non plus de Loconet pour communiquer entre les éléments puisque toute la logique est centralisée dans l'Arduino. Enfin, plus besoin du détecteur BDL168 puisque, maintenant, je développe aussi mes propres détecteurs...
L'intérêt d'un tel montage se caractérise tout d'abord par sa simplicité: lors d'une exposition ou d'une démonstration, pas besoin d'emporter la centrale DCC, l'ordi et d'installer un logiciel complexe et de programmer les scripts d'automatisme. Je suis pourtant assez familier avec ces logiciels et informaticien de profession. Malgré cela, il n'est pas toujours évidant d'arriver rapidement aux résultats voulus...
Ici, mon objectif est de rendre l'utilisation d'un petit réseau DCC très simple pour qui désire seulement faire rouler quelques convois en va-et-vient, gérer le croisement de deux trains en gare, etc... Ainsi, il reste du temps pour discuter avec les visiteurs sans avoir le nez rivé sur la manette de commande... Certains se reconnaitront sûrement ;-)
Voici le prototype:
Certains pièces sont bien connues pour ceux qui développent autour de l'Arduino: le pont en H LMD18200 en haut, l'afficheur LCD au milieu et bien sûr l'Arduino mini sur la gauche de mon PCB. En attendant une intégration complète, je réutilise les différents éléments que j'ai sous la main, ce qui facilite le prototypage.
Le petit clavier est fait de 4 boutons poussoir. Mon PCB contient l'Arduino, un démultiplexeur pour ajouter des ports de sortie afin de commander des aiguillages, ainsi qu'un multiplexeur qui permet de gérer jusqu'à 16 cantons (détecteur de courant, barrière infra-rouge, ILS, etc...). Le montage s'adapte facilement à tous les besoins...
Comme vous avez pu le voir lors d'un précédent article sur mon "établi", la voie que j'ai installée au dessus de ma zone de travail est découpée en trois cantons, chacun équipé d'un détecteur maison basé sur le principe bien connu de détection de courant induit. Nous aurons sûrement l'occasion d'y revenir plus en détails dans un futur article.
Une fois le montage réalisé, il suffit de connecter le PCB au 5V, le "booster" au 12V, les cantons au multiplexeur, le signal DCC au booster et le tour est joué...
Bien évidemment, pour les premiers essais les seules actions possibles sont le réglage de la vitesse et le sens de marche. L'adresse de la loco est gravé dans le programme ainsi que l'allumage des feux, etc... Il suffira de compléter le programme avec toutes les fonctions utiles et écrire une petite interface qui s'adaptera à l'afficheur LCD.
Les règles que j'ai implantées dans l'automate sont simples: si la loco entre dans le canton de gauche, alors elle repart vers la droite. Idem pour le canton de droite. Le LCD affiche simplement le sens de marche, la vitesse et les états des 3 cantons pour une vérification visuelle rapide...
Voilà, rien de bien compliqué... Vous pouvez visionner la vidéo suivante qui présente les premiers essais concluants de cette phase d'intégration du prototype...
Si vous êtes intéressés par ce montage, n'hésitez pas à mon contacter par email.
Bon visionnement.
Dernièrement, j'ai ajouté une voie à mi-hauteur de mon plan de travail. J'en profite aujourd'hui pour faire quelques photos de mon "antre"... Une CC72000 trône devant moi ;-)
Sur la première photo, une vue générale de mon espace de travail. Il s'agit d'un ancien petit comptoir de cuisine style établi. J'ai fabriqué un arrière plan avec des étagères en hauteur afin de loger mon bric-à-brac et de supporter quelques bandeaux de leds pour un éclairage direct.
Le dernier ajout est donc la voie alimentée DCC et sectionnée en trois cantons. Cela me permet de faire les tests de mes nouveaux achats mais aussi de programmer les décodeurs.
Chaque canton est équipé d'un détecteur de présence que j'ai confectionné. Cela me permet par la même occasion de tester mes automates, mes montages DCC...
La seconde photo donne une idée de tout ce que peut contenir un tel endroit et du fouillis qui peut prendre possession des lieux assez rapidement... On y retrouve: l'alimentation PC convertie et le panneau d'alimentation qui en est issu (3,3V, 5V et 12V). Très pratique d'avoir sous la main toutes ces sources. Il suffit de confectionner quelques câbles avec à une extrémité des fiches bananes et à l'autre différentes terminaisons comme des double pins espacés de 2.5mm qui s'insèrent sur un breadboard, un embout 2,1mm rond qui peut par exemple se brancher à un Arduino, des fils nus pour les borniers à vis, etc...
Cette alimentation permet aussi d'alimenter les bandes de leds à moindre coût. Ensuite, l'oscilloscope pour le debugage des montages électroniques. La centrale DCC Digitrax reliée à ma voie de test. Vers la droite (photo précédente) le poste à souder et l'ordinateur sur un support élevé pour gagner de la place et y avoir accès rapidement...
Voilà pour cette petite parenthèse équipement. Même si je ne l'ai pas mentionné, je me sers aussi de cet espace pour tout ce qui est modèles réduits et bricolages ferroviaires... ;-)
Petit moment de détente cet après-midi... En faisant le tri des différents composants de ma boite à outils "électronique", j'ai remis la main sur des afficheurs 7 segments bien connus. Je n'ai jamais eu l'occasion de faire un projet avec ceux-ci. Alors, pour le plaisir, j'ai réalisé une horloge que j'installerai au dessus de mon établi afin de ne plus perdre la notion du temps lorsque je bricole... ;-)
Voici quelques photos de l'objet sans prétention...
Les 4 afficheurs individuels sont montés sur une plaquette insérée à la vertical sur la plaquette principale. Cette dernière contient un Arduino Nano, un module DS3232 incluant une horloge persistante (sauvegarde par pile) et 4 transistors qui permettent d'alimenter tour à tour chaque afficheur.
Quelques mots sur le montage... Les afficheurs sont des SMA42056 à cathode commune. Il serait préférable d'utiliser des afficheurs à anode commune, mais j'ai pris ce que j'avais sous la main ;-) Ce n'est pas d'une grande importance mais le second modèle aurait été plus simple à utiliser. J'y reviendrai prochainement dans le dossier Arduino...
Etant donné que chaque afficheur est commandé par 8 pins + commun, cela signifie qu'un Arduino comme le Nano n'a pas assez de ports pour maintenir les 4 afficheurs (32 outputs!). Vous imaginez bien qu'il y a une solution pour parer à cette difficulté sinon le monde de l'électronique serait bien désemparé dès qu'il s'agirait de commander plusieurs dizaines de LEDs... Là aussi, j'y reviendrai dans le dossier Arduino. Cependant je vais simplement introduire le sujet dans les lignes suivantes.
Vous connaissez déjà la notion de persistance rétinienne: afficher très rapidement une séquence de plusieurs informations entrelacées afin d'avoir l'impression qu'elles sont toutes affichées en même temps... Dans le cas présent, nous allons alimenter chaque afficheur l'un après l'autre et ce, très rapidement, de façon à n'utiliser que 8 ports de sortie au lieu de 32!
Ce mécanisme implique deux éléments. Mais avant de vous l'exposer, prenons l'exemple d'une simple LED. Mis-à-part la résistance de protection, l'anode de la LED doit être connectée à la source + et la cathode au 0 ou GND. Dans un montage de base, on connecte l'anode à une sortie de l'Arduino et la cathode au GND de l'Arduino. Ainsi, si le signal de sortie est HIGH, alors la LED s'allume puisque cela crée une différence de potentiels entre l'anode et la cathode. Si le signal est LOW, la différence est nulle et la LED reste éteinte. Donc, le port de sortie de l'Arduino a une fonction d'interrupteur en quelque sorte...
De la même façon, si le signal de sortie est HIGH en permanence mais que nous plaçons un interrupteur du côté de la cathode, la LED ne s'allumera que si l'interrupteur est fermé... Ce sera au transistor de jouer le rôle de l'interrupteur dans ce montage.
En résumé, les deux éléments mis en jeu sont:
les 8 ports de sortie, communs au 4 afficheurs
chaque cathode commune de chaque afficheur est contrôlée par un transistor.
Le programme fonctionnera alors ainsi:
définir les états des 8 sorties pour le premier afficheur et rendre le transistor 1 passant, créant ainsi un circuit fermé entre les segments dont les anodes sont à HIGH et la cathode qui est reliée au GND. Les autres transistors 2, 3 et 4 sont bloquants, donc les segments des afficheurs restent éteints.
définir les états des 8 sorties du deuxième afficheur et rendre le transistor 2 passant... Les transistors 1, 3 et 4 sont bloquants...
et ainsi de suite, à tour de rôle...
Pour information, voici à quoi ressemble le schéma de montage:
On notera que les mêmes segments des afficheurs sont reliés et que les cathodes communes ont toutes un transistor qui sert d'interrupteur d'alimentation...
A titre indicatif, les 8 résistances protégeant les afficheurs se situent autour de 560 Ohms. Les 4 résistances sur les bases des transistors sont des 2 kOhms. Les transistors sont des NPN 2N2222 très courants.
Remarques:
nous aurions pu utiliser une seule résistance par cathode (soient 4 au total) au lieu de 8. En effet, étant donné que chaque segment est alimenté l'un après l'autre, la résistance de protection peut être installée sur la cathode commune entre l'afficheur et le transistor... Mais cela ne fait qu'une économie de 4 résistances...
nous aurions aussi pu utiliser moins de sorties pour commander les segments en employant un registre à décalage ou un démultiplexeur. Dans ce cas, le montage aurait été légèrement différent puisqu'il aurait nécessité des afficheurs à anode commune! Nous aurons l'occasion d'y revenir...
Voilà dans les grandes lignes. Bien sûr, ces explications sont très succinctes mais je vous invite à surveiller le dossier Arduino pour plus de détails dans les jours à venir...
En fait, suite à la demande d'un collègue qui voulait un tel module pour son réseau et avant de lui en monter un, je voulais tester des transistors MOSFETs en remplacement des Darlington TIP122 que j'utilise habituellement. Voici un des modules testé et installé sous mon réseau:
Au milieu on remarquera le micro-contrôleur, juste à gauche le régulateur 5V et les deux MOSFETs. A droite, l'étage de communication avec le bus Loconet qui permet au module d'envoyer des commandes aux décodeurs de leds installés autour de la gare comme l'éclairage urbain, la cabine téléphonique, etc... pour ceux qui s'en souviennent... et aussi de recevoir des directives afin d'arrêter l'animation par exemple. En bas à droite, deux DIP switches permettent de jouer différentes séquences ou tester les branchements.
Après l'ajout de détails et de la grue, je profite du beau temps pour m'installer à l'extérieur et passer une couche d'apprêt sur la draisine. Je vais mettre de côté ce modèle dans l'attente d'autres montages afin de les peindre tous en même temps...
Changement de projet... Après l'électronique et l'Arduino, qui m'avaient éloigné du modélisme ferroviaire comme tel, c'est maintenant le retour aux sources avec le montage d'un kit de Christophe Phulpin: une draisine DU 84. Je ne me souviens plus exactement quand je la lui ai commandée, mais cela doit bien faire au moins 2 ans maintenant. Comme quoi, je prends mon temps... Ainsi, ce week-end, j'ai ressorti ce kit d'une de mes boites à trésors, et je me suis attaqué à son montage. Voici, en photos, les premières étapes que j'ai pu accomplir. La suite prochainement...
Nouvelle utilisation de mon décodeur: les automatismes. Vaste projet qui se concrétise enfin...
En effet, l'interface Loconet permet à la fois de décoder les messages DCC mais aussi d'en ré-injecter afin de commander d'autres décodeurs et, bien évidemment, des locomotives. Mais pour quoi faire me direz vous? Voici les trois premiers exemples qui m'intéressent tout particulièrement...
Premier cas: éclairage jour-nuit.
Je ne reviendrai pas dessus. Je voulais juste le mentionner dans ce résumé... Je vous renvoie à l'article correspondant.
L'Arduino sert d'horloge et commande les bandeaux de leds qui sont reliés aux sorties haute puissance (TIP122). L'éclairage de la gare et de la zone marchandise sont pilotés par des commandes DCC puisque ces leds sont connectés à un décodeur de fonction classique.
Deuxième cas: le va-et-vient en DCC.
Cette situation est typique lors des expositions. Un amateur veut pouvoir exposer son réseau DCC, mais ne veut pas nécessairement passer tout son temps à le piloter pour aussi discuter avec d'autres amateurs... Je plante le décor ainsi, car c'est le genre de discours que j'ai déjà pu entendre lors de mes visites: "le DCC c'est bien, mais pas en expo..." Et bien maintenant c'est possible! ;-)
L'arrivée du DCC a aussi apporté quelques points négatifs contrairement au réseau analogique: la simplicité de gestion par ILS ou relais n'est plus vraiment possible avec le numérique... Avec le numérique il faut bien souvent apporter un ordinateur avec le réseau, installer un logiciel, créer les automatismes nécessaires, etc... mais ce n'est pas nécessairement pratique ou à la portée de tous.
Voici un exemple: le petit réseau de test que j'ai créé est découpé en cantons et chacun d'eux est relié à un détecteur de consommation. Un Arduino renferme le plan du réseau, la logique qui relie les cantons entre eux et la liste des actions à effectuer. Ainsi, il est possible de connaitre la position d'un convoi et de suivre son déplacement en déduisant logiquement son trajet en fonction des messages propagés par les détecteurs. Il suffit ensuite d'envoyer les commandes nécessaires sur le bus Loconet afin de piloter le convoi en fonction des évènements: démarrage, arrêt, changement de vitesse ou de sens...
Voici ce que cela donne sur cette petite vidéo:
Troisième cas: le cantonnement ou bloc automatique.
Cette situation est particulièrement intéressante lorsqu'on désire "jouer" avec son réseau et qu'on est seul... Ici, il est possible d'automatiser le fonctionnement d'un convoi et de piloter le second manuellement.
Dans cet exemple, je pilote la BB67000 bleue pendant que l'Arduino s'occupe de gérer la BB66000 verte. Certe le réseau est simple, et la BB66000 tourne en rond, mais il est facile de comprendre l'intérêt de cet automatisme avec plusieurs locomotives pilotées individuellement par des Arduinos...
Une petite vidéo pour illustrer le fonctionnement: la BB66000 verte est à l'adresse 109. Je la supprime de ma station de commande pour montrer que je ne la contrôle pas. Puis j'ajoute l'adresse 03 qui correspond à la BB67000 bleue. Et c'est parti...
Voilà... Après quasiment deux années(!) de design, réflexion, essais, erreurs, pause du modélisme... je viens de franchir une étape importante dans mon projet: il s'agit de la mise en oeuvre du décodeur et du branchement de deux signaux réalisés un peu plus tôt!
Cet exemple suit le précédent article décrivant deux des animations que j'avais programmées la semaine dernière. Aujourd'hui, le pilotage des signaux SNCF est intégré au programme précédent. Les leds sont activées de manière réaliste. Tout du moins, l'extinction et l'allumage de celles-ci évoquent suffisamment bien la réalité...
Deux signaux sont connectés au décodeur. Les commandes sont acheminées par l'intermédiaire de ma station de contrôle Digitrax, le décodeur utilisant le bus Loconet...
Voici quelques-uns des affichages possibles:
Petite remarque: le signal de droite n'est pas tout à fait aligné avec la caméra: c'est pour cela que les leds semblent moins visibles ainsi que l'oeilleton.
Il ne me reste qu'à installer ces signaux sur mon réseau... Peut-être encore un an de réflexion avant d'y arriver? Allez savoir... ;-)
Le premier décodeur est enfin prêt... Du coup, ce week-end, j'ai pu consacrer un peu de mon temps libre à la programmation des éléments de base et confectionner les premières animations. Ce soir, je profite de l'occasion pour filmer (tant bien que mal) deux premiers effets: soudure à l'acétylène et soudure à l'acétylène (trois leds pour chacun d'eux).
Comme je n'ai pas pris le temps d'ajuster les durées des animations, la vidéo est un peu longue. Pas facile non plus d'avoir le meilleur rendu avec un téléphone... Mais bon, cela vous donnera une petit idée des résultats.
Tout le contenu original de ce blog (textes et photos) reste la propriété de son auteur (sauf mention contraire) en toutes circonstances. Il est cependant mis à votre disposition selon les termes de la Licence Creative Commons Paternité. Son utilisation en dehors de ce blog est autorisée tant que son origine est mentionnée.