Un décodeur d'accessoires DCC (digital) avec un arduino
Le but de cet article est de montrer pas à pas comment créer un décodeur dcc (qui se pilote avec la centrale digitale roco multimaus, z21, uhlenbrock intellibox, esu ECOS ou autre)
Je suis moi-même un parfait débutant.
voici un exemple de ce que j'ai réalisé en 1h environ.
Je me suis inspiré de l'article suivant : http://sam95.fr/blog/2016/01/30/decodeur-daccessoires-avec-un-arduino-partie-1/
- I : acheter le matériel et l'arduino
Il faut un :
- 1 arduino UNO (environ 4€) et son câble usb (pas présenté sur la photo ci dessus) + en option une alimentation dédiée (transfo 5v 3A)
- des câbles (aussi appelé jumper wire)
pour relier la centrale DCC qui envoie du 16V à l'arduino qui fonctionne en 5V il faut un petit montage à base d'optocoupleur :
- 1 petite plaque de montage rapide (0,40€)
- 2 résistances de 10KOhm (0,04€ 10 resistances 10k)
- 1 résistance de 1Kohm (0,04€ resistance 1k)
- 1 diode 1N4148 (0,07€)
- 1 optocoupleur 6N137 (0,13€)
- II : le montage éléctronique
Un decriptif détaillé du montage de l'interface DCC est disponible en anglais ici : http://www.mynabay.com/dcc_monitor/
voici le shéma éléctronique à réaliser (il suffit de suivre les étapes ci dessous)
Je vais essayer de traduire les étapes en français :
1ère étape : insérer l'optocoupleur 6N137 sur la petite plaque de montage, la patte n°1 marqué d'un point en haut à droite (à noter que le composant chinois que j'ai acheté, n'a pas de point sur la patte n°1, donc j'ai mis l'écriture du composant à l'envers comme sur l'image ci dessous)
2ème étape : placer la diode 1N4148 entre la patte 2 et 3 (attention à l'orientation de la diode, le trait noir vers le bas)
3e étape : placer la résistance 1K entre la patte 2 et une ligne inutilisée (j'ai fais ce montage avec des resitances de couleur différente, verte par exemple, ça marche aussi)
4e étape : installet un morceau de cable entre la patte 8 et un slot (ligne) inutilisé : ceci sera l'alimentation en +5V
5e étape : insérer une résistance 10k entre la patte 7 et le slot +5V (de l'étape 4)
6e étape : placer l'autre resistance 10k entre la patte 6 et le slot +5V
7e étape : voici les cables qui seront relié au rails ou directement à la centrale digitale DCC (ici les 2 cables sont rouge) / un cable à la patte 3 et l'autre au slot de l'étape 3
8e étape : cabler le +5V à l'arduino, on utilise un cable orange
9e étape : cabler le GND (masse) à l'arduino, on utilise un cable vert ici connecté à la patte 5
10e étape : utiliser un cable bleu pour relier la patte 6 à l'entrée 2 de l'arduino
et voilà le montage fini, il reste plus qu'a relier les 2 fils rouge au digital DCC
- III : la partie logicielle
- pour installer le logiciel arduino (à télécharger ici), suivre les étapes d'installation installation_arduino_windows.pdf
- refermer le programme arduino
- ajouter la bibliothèque (librairie) DCC decoder, que l'on peut télécharger ici https://github.com/MynaBay/DCC_Decoder ou ici DCC_Decoder_master.zip
- décompresser le fichier .zip dans le repertoire C :\Program Files (x86)\Arduino\libraries (on trouve des explications aussi ici)
- lancer le programme arduino et choisir le port COM pour communiquer avec l'arduino (chez moi c'est le port COM3)
- charger l'exemple DCC_Monitor
- transférer le programme dans l'arduino (bouton flèche à droite)
- attendre la fin du transfert
- ouvrir la fenêtre serial monitor
- appuyer sur un bouton de la central Digital (intellibox ou multimaus) et on voit que la communication fonctionne ! l'arduino reconnait les commandes DCC ! (pour ceux qui veulent en savoir plus sur les trames DCC qui sont affichés : allez voir ici sur le site locoduino)
- IV : Allumer et éteindre un led verte avec sa centrale digitale
dans le logiciel arduino, charger maintenant un autre exemple : DCC_Basic_Acc_Decoder
remplacer dans le programme
void ConfigureDecoder() | |
{ | |
gAddresses[0].address = 714; | |
gAddresses[0].output = 0; | |
gAddresses[0].outputPin = 5; | |
gAddresses[0].isDigital = false; | |
gAddresses[0].isFlasher = false; | |
gAddresses[0].analogValue = 250; | |
gAddresses[0].durationMilli = 500; |
par
void ConfigureDecoder() | |
{ | |
gAddresses[0].address = 20; //activé par l'aiguille 20 sur la centrale digital | |
gAddresses[0].output = 0; | |
gAddresses[0].outputPin = 5; //pin 5 sur l'arduino où on branche la led (et aussi à la masse GND) | |
gAddresses[0].isDigital = false; | |
gAddresses[0].isFlasher = false; | |
gAddresses[0].analogValue = 250; | |
gAddresses[0].durationMilli = 0; //laisse la led tout le temps allumée |