Description de la réalisation


La réalisation de cette nouvelle centrale, destinée à assurer le mouvement d'un train entièrement automatique, est décrite à des fins principalement didactiques. Celle-ci comprend en effet la résolution d’un ensemble de problématiques au sein d’un même projet Arduino, tels que :

- choix d’un modèle Arduino bien adapté aux connexions choisies,

- choix du booster,

- choix de la librairie de génération du signal DCC sous interruption et sa mise en oeuvre,

- fonctionnement multi-tâches, et aussi temps réel que possible,

- mise en oeuvre d’une interface utilisateur simple mais complète à base d’écran LCD et très peu de boutons,

- mise en oeuvre d’un automate programmable,

- intégration des capteurs de passage dans les évolutions de l’automate,

- suivi rapide de ce qui se passe dans la centrale (suivi de l’automate),

- et bien d’autres qui apparaitront plus loin.

La réalisation présentée ici est complète : elle couvre la totalité des besoins à l’exception du circuit ferroviaire et des trains. 

Elle est simple et très peu coûteuse (un Arduino Nano et un booster LMD18200, une alimentation 12V 2A, quelques Leds, interrupteurs et 2 potentiomètres, ainsi qu’un afficheur LCD coûtent au maximum 50€).

Le besoin est d’animer un réseau à voie unique ou un diorama en démonstration lors d'une exposition. Le trafic doit être automatique pour permettre aux organisateurs de se consacrer pleinement aux visiteurs. Chaque modéliste ferroviaire peut facilement trouver l’application de ce projet dans son propre réseau : il suffit de dédier une voie à ce projet, sans liaison avec le reste du réseau (rien n’empêche d’ailleurs de relier ce réseau au reste, avec l’aide d’un inverseur bipolaire pour couper la centrale Arduino durant cette liaison).

Voici le cahier des charges et les ingrédients nécessaires à la réalisation de cette centrale :


Fonctionnalités


Scénario : Sur une longueur de voie (paramètrable), une locomotive part d'une gare de départ en accélérant doucement, jusqu'à un palier de vitesse "avant", passe un premier détecteur de passage, circule à vitesse constante jusqu'à un deuxième détecteur, à partir duquel elle entame un ralentissement réaliste et une entrée en gare d'arrivée avec arrêt en douceur.

Après un temps d'arrêt, la locomotive repart en sens inverse et retourne à la gare de départ en marche arrière avec une vitesse "arrière" éventuellement différente.


Les fonctionnalités ont été décrites en détail dans le billet précédent.


Les ingrédients


 Vu le faible nombre de ports nécessaires, j'ai choisi un Arduino Nano, tout à fait suffisant avec ses 22 ports. 


Microcontrolleur : Atmel ATmega328

Voltage (niveau logique) : 5 V

Voltage (alimentation recommendée) : 7-12 V

Voltage (limites d’alimentation) : 6-20 V

Ports Digitaux I/O : 14 (of which 6 provide PWM output)

Ports Analogiques : 8

Port USB (programmation et alimentation) : 1

Current maximum par port I/O : 40 mA

Mémoire Flash : 32 KB (ATmega328) dont 2 KB occupés par le bootloader

SRAM :  2 KB (ATmega328)

EEPROM :  1 KB (ATmega328)

Vitesse d’horloge : 16 MHz

Dimensions : 1,85 x 4,32 cm

Au départ je n’avais pas prévu d’écran LCD car j’utilisais abondamment la console série de l’IDE Arduino, pour la mise au point, la configuration, l’affichage des informations pertinentes. Par la suite, j’ai décidé de ne pas  utiliser d’ordinateur extérieur : il a fallu greffer l’écran LCD. 

Ne disposant pas de ports en nombre suffisant pour une connexion parallèle (7 au minimum, dont un pour le rétro-éclairage), j’ai choisi un écran LCD équipé d’un convertisseur Série SerLCD : 3 fils suffisent pour le faire fonctionner (+5, 0v et Tx1).

 

Il faut évidemment le booster LMD18200, capable de délivrer 3 A: Ne pas oublier de relier la borne Brake au 0v.

Puis 2 détecteurs à barrières infrarouge (faits maison et décrits par ailleurs dans ce blog).  

Et enfin : 2 potentiomètres (10 K), 7 Leds (2 vertes, 3 jaunes et 2 rouges), 4 interrupteurs (inverseurs à clé) et un bouton poussoir. Sans oublier du fil de diverses couleurs, quelques résistance, fer à souder et soudure et des dominos de raccordement

Remarques :

  • La mémoire Flash permet de stocker le programme visé sans problème. celui-ci n’occupe que la moitié de la place disponible et permet donc de futures extensions.
  • La mémoire EEPROM est réservée au stockage des paramètres de configuration
  • La mémoire SRAM est petite (2K) et nécessitera des optimisations qui sont expliquées dans le code.

La compilation du logiciel décrit ci-après indique :

Binary sketch size: 16004 bytes (of a 30720 byte maximum, 52.10 percent).

Estimated memory use: 531 bytes (of a 2048 byte maximum, 25.93 percent).