Étape 2: Récepteur DCC paquet - circuit de base
Mise à jour 23 mars 2016 :
Circuit de sens courant pour protéger les bobines de participation et de dispositifs de pont en H a ajouté etc. plus de courant.
int analogPin = 7; const int Power_shut_off = 19; // A5 as digital pinMode(Power_shut_off, OUTPUT); digitalWrite(Power_shut_off, HIGH);
En void loop() :
amp = analogRead(analogPin); if (amp > 5){ Serial.println(amp); } if (amp > 200 ){ // approx 2 amps digitalWrite(Power_shut_off, LOW); }
Lorsque 2 ampères est dépassée, le TIP 120 coupe le courant (alimentation 12 ou 15 volts) pour les branchements.
_____________________________________________________________________
D’un excellent tutoriel par Geoff Bunza au forum Model Railroad Hobbyist Magazine. Il décrit comment un Arduino Pro Mini (une carte Arduino low cost) pourraient être câblé et programmé pour répondre aux touches de fonction sur un contrôleur de la CDC. Cela ouvre un vaste monde des options de contrôle pour les animations, sonores et autres options sur un chemin de fer modèle DCC équipée.
J’ai fait usage de ce circuit pour capturer les paquets DCC de mon Arduino base Station de commande
(voir instructable). La station de commande a également été modifiée pour permettre la participation de contrôle (8 branchements jusqu'à présent).
Paquet de décodeur base accessoire est :
10AAAAAA 0 1AAACDDD 0 ELAYAR 0 1
D’analyser les paquets utilisé par Lenz (Compact / Atlas) pour les points de contrôle, j’ai utilisé le format de paquet binaire suivant pour octets 1 et 2 :
tunAddr = 1
Taux de participation 1 a: 1000 0001 1111 1000 / 1 b taux de participation : 1000 0001 1111 1001
Branchement 2 a: 1000 0001 1111 1010 / 2 b taux de participation : 1000 0001 1111 1011
Branchement 3 a: 1000 0001 1111 1100 / branchement 3 b: 1000 0001 1111 1101
Branchement 4 a: 1000 0001 1111 1110 / participation 4 b: 1000 0001 1111 1111
tunAddr = 2
------------------------------------------------------------------------------------------------------------
Taux de participation 5 a: 1000 1000 de 1111 0010 / participation 5 b: 1000 1001 de 1111 0010
Branchement 6 a: 1000 1010 de 1111 0010 / 6 b taux de participation : 1000 0010 1111 1011
Taux de participation 7 a: 1000 1100 de 1111 0010 / 7 b taux de participation : 1000 1101 de 1111 0010
Taux de participation 8 a: 1000 0010 1111 1110 / 8 b taux de participation : 1000 0010 1111 1111
-----------------------------------------------------------------------------------------------------------
Taux de participation 9 a: 1000 0011 1111 1000 / 9 b taux de participation : 1000 0011 1111 1001
etc....
Par une manipulation du paquet binaire, nous pouvons extraire les branchements nécessaires et envoyer une impulsion de 350 ms.
Par exemple
regarder le premier octet:
0 x 80 en hexadécimal = 1000 0000 en binaire
tunAddr = (Msg->Data[0] - 0x80);
regardant le deuxième octet:
0x8f8 en hexadécimal = 1111 1000 en binaire, puis passer au niveau du bit >> 1 pour éliminer le dernier morceau
F1a sur :
if (tunAddr == 1){
if ((((Msg->Data[1]) - 0xf8>>1) + 1) == 1 && (Msg->Data[1] & 0x01) == 1){
digitalWrite(FunctionPin1a, 1); delay(350); digitalWrite(FunctionPin1a, 0); }
Le diagramme montre LED sorties. Remplacer les LEDs avec les pilotes de solénoïde par exemple TIP120 (2 arrêt requis pour chaque taux de participation) ou un pilote de Quad SN754410 (fournitures de bureau 2 branchements par IC).
Toutes les sorties numériques sont utilisés en paires pour produire une impulsion déclenchant les solénoïdes de participation via chauffeurs ou transistors darlington de puissance. Le code peut être modifié pour correspondre les pilotes utilisés par une « 1 » impulsion à une impulsion de « 0 ».
Télécharger NMRA bibliothèque ici
Télécharger le Code de l’Arduino :