Il y a plus d'un an, je me suis lancé dans la réalisation d'une centrale DCC à base d'Arduino UNO. La seule solution pratique à l'époque était d'utiliser la librairie CmdrArduino qui m'a fait beaucoup transpirer et qui n'était pas très pratique à mettre en œuvre.
Depuis, le DCC++ est arrivé et les choses se sont brusquement éclaircies grâce à toutes les contributions et astuces développées sur LOCODUINO.
Le réseau dont je dispose n'est encore qu'un réseau d'essai (pour la suite, on verra…) sur lequel roulent 4 locos ROCO que j'ai converties au DCC via des décodeurs Standard + de Lentz (réf. 10231 V1 et V2). Mes autres machines attendent patiemment leur conversion.
Ma solution fait appel au système DCC++ associé à un contrôleur basé sur une télécommande à infrarouge telle que celles utilisées pour les TV, chaines HiFi ou autres décodeurs. Elle convient e.a. pour de petits réseaux avec commande manuelle des appareils de voie et accessoires.
Les ordres émis par le contrôleur sous forme de messages standardisés DCC++ (ex. < t1 3 50 1>") sont transmis via l'interface série à la centrale qui se charge de les interpréter, de les mettre en forme et de les amplifier (module LMD18200) en direction de la voie.
La solution développée est semblable à celle décrite dans l’article de bobyAndCo (voir
http://www.locoduino.org/spip.php?article185) sauf que le contrôleur est à base d’une télécommande à infrarouge.
Pour moi, l’utilisation de la télécommande offre deux avantages principaux :
- La liaison est sans fil;
- La construction mécanique du contrôleur est réduite à sa plus simple expression : il n'y a pas de clavier, d’inverseurs mécaniques ou autres boutons rotatifs à prévoir.
Ce que fait ce contrôleur :• Inscription de CV sur la voie principale (donc pas sur voie de programmation);
• Commande de vitesse (128 crans) et sens de marche des locos ;
• Configurée pour 4 locos (mais extensible car cela dépend du nombre de boutons disponibles sur la TLC); attention, dans la version actuelle, les numéros de décodeurs associés à chaque loco sont codés 'en dur' dans le programme.
• Conduite simultanée de plusieurs locos; chaque loco est appelée par un seul bouton de la TLC qui lui est dédié;
• Coupure/activation du signal DCC sur la voie par la TLC;
• Activation/désactivation d'une fonction via un bouton dédié (F0 = feux d'éclairage loco ON/OFF) ; une seule fonction est implémentée, mais on peut étendre car cela dépend du nombre de boutons disponibles sur la TLC);
• Affichage des paramètres de la loco active (numéro, vitesse, sens de marche);
• Commande de vitesse et sens de marche des locos en mode standard : flèche haut/bas = augmentation/diminution de vitesse;
• Le contrôleur est équipé d'un autre mode de commande de vitesse : l'appui sur une des touches numériques de la TLC commande une vitesse correspondant à sa valeur en dizaine de km/h; un appui sur le chiffre 4 commande 40 km/h, sur le 9, 90 km/h et le zéro, l'arrêt. Un réglage fin est évidemment toujours possible en combinant avec les flèches haut/bas. Attention! En pratique, le contrôleur impose un cran de vitesse (0 à 127) déterminé; un réglage du décodeur de chaque loco est nécessaire pour assurer la correspondance avec la vitesse à l'échelle. Ce système présente l'avantage d'économiser les touches de la TLC tout en garantissant une exploitation facile (p. ex la touche 4 = vitesse sur un appareil de voie en position déviée, la touche 1 = vitesse d'approche avant attelage, etc.).
Ce que ce contrôleur ne fait pas :
• Commander des aiguillages ou accessoires (quoique ce ne semble pas impossible à priori);
• Lire les CV d'un décodeur ;
La solution (déjà expliquée par ailleurs voir e.a.
http://forum.locoduino.org/index.php?topic=203.msg1804#msg1804) retenue pour la partie "centrale DCC++" est articulée autour de :
• 1 carte Arduino UNO;
• 1 booster à base de LMD 18200;
• 1 module convertisseur courant/tension MAX471.
Au sujet du module à base de LMD18200, je vous livre une petite astuce ; les commandes passées sur la baie ne permettent pas toujours de maîtriser parfaitement le matériel livré ; il peut arriver quelques surprises : sur le module qui m’a été livré, une partie des connections étaient étaient repérées en … chinois ! Comme mes connaissances en cette langue sont (très, très) lacunaires, j’ai du procéder par déduction. Voici les correspondances obtenues :
Indications sur le module -> correspondance
PWR -> PWR
chinois -> BRAKE
chinois -> DIR
GND -> GND
+5V ->+5V
La carte Arduino est chargée avec le programme standard tel que développé par Gregg E. Berman (donc pas la version pour Nano modifiée par Dominique).
Pour le contrôleur, il faut :
• 1 carte Arduino UNO;
• 1 afficheur LCD 2 lignes 16 caractères I2C (display I2C/TWI LCD1602 de DFROBOT, article DFR0063/TOY0046);
• 1 capteur infrarouge TSOP 4838;
• 1 télécommande IR; j'ai utilisé la télécommande d'un ancien lecteur/enregistreur de DVD de marque PANASONIC; une autre peut également convenir, à condition qu'elle comporte suffisamment de boutons…
Le tout, à l'état de prototype, est actuellement monté sur une planche en MDF (voir la photo).
A l'avant-plan, on observe de gauche à droite le convertisseur courant/tension MAX471, le booster à base de LMD18200 et la carte "Centrale DCC++"; la carte contrôleur se situe derrière l'afficheur LCD. Le pupitre à l'extrême droite ne fait pas partie du projet.
En haut à gauche, un moteur et son décodeur qui servent de banc d'essai pour la centrale mais aussi pour les décodeurs et les machines.
Chaque carte est alimentée par sa propre source de tension. La puissance est fournie au booster par une alimentation de PC portable (U = 19,5 VDC) dont la fiche DC a été adaptée en conséquence.
L'alimentation de PC dispose de sa propre protection contre les courts-circuits et est particulièrement efficace mais elle me pose un problème de sélectivité; en effet, elle déclenche toujours en premier lieu avant que les détections par logiciel n'aient pu détecter le problème. Ce qui signifie que quand une loco talonne un aiguillage dont le cœur est alimenté électriquement tout s'arrête et il faut faire un reset général.
Je joins le sketch Arduino à téléverser dans la carte « contrôleur ».
Attention ! Une adaptation à votre télécommande est nécessaire car il y a fort à parier que les codes seront différents. Modifier les codes en regard de chaque instruction #define du bouton correspondant.
Ainsi, si le code correspondant à « flèche haut » sur votre télécommande est, remplacer la ligne ‘#define arrow_up 3796283338’ par ‘#define arrow_up 4589652’.
Après avoir téléversé le sketch, activez le moniteur série de l’IDE et appuyez sur les différentes touches de votre télécommande ; vous verrez alors apparaître le code correspondant sur le moniteur.
La librairie à utiliser pour la télécommande peut être téléchargée en
https://github.com/cyborg5/IRLib ; elle doit ensuite être installée en \libraries\ de votre IDE.
Attention ! Comme vous disposerez de deux cartes Arduino UNO reliées par la liaison série TX/RX, vous devez retirer cette liaison temporairement lors du téléversement des sketches sous peine d’obtenir une erreur en fin de compilation.