Table des matières:

Garden Train - Arduino Wireless NMRA DCC : 4 étapes (avec photos)
Garden Train - Arduino Wireless NMRA DCC : 4 étapes (avec photos)

Vidéo: Garden Train - Arduino Wireless NMRA DCC : 4 étapes (avec photos)

Vidéo: Garden Train - Arduino Wireless NMRA DCC : 4 étapes (avec photos)
Vidéo: Arduino | DCC Monitor 2024, Novembre
Anonim
Image
Image
Conception du système
Conception du système

Suite à la précédente instructable avec DCC sur le système de rail mort, j'ai développé l'idée plus loin avec une station de commande DCC à main avec clavier et écran LCD. La station de commande contient tout le codage requis pour les instructions NMRA DCC, mais au lieu de se connecter aux rails, les données sont transférées par le module radio RF24L01+ à un récepteur monté dans un camion ou sous la locomotive - partout où la place le permet.

Bien entendu, vos locomotives doivent être équipées d'un décodeur de capacité de charge adapté aux moteurs des moteurs.

Étape 1: Conception du système

Conception du système
Conception du système

L'Arduino Pro Mini est au cœur de la conception. Utilisation de Fritzing pour développer le circuit et produire des PCB.

J'ai pu utiliser le même PCB pour l'émetteur et le récepteur, économisant ainsi des coûts.

L'émetteur a des connexions pour le clavier et l'écran LCD tandis que le récepteur n'en a pas besoin et utilise le pont en H pour fournir la sortie DCC de la locomotive.

Un développement ultérieur comprend des connexions pour un pont en H plus grand si nécessaire pour des locomotives plus puissantes.

Le PCF8574 peut être supprimé si vous utilisez un écran LCD fourni avec le sac à dos permettant aux connexions SCA / SCL sur l'Arduino d'alimenter l'écran en utilisant seulement 2 fils. Liste des pièces: Total = environ 60 £ pour la station de commande DCC + 1 récepteurCoût des récepteurs supplémentaires = 10,00 £ environ chacun. + piles

Arduino Pro Mini. x 2 = 4,00 £

Clavier à membrane 4x3 = 3,00 £

Écran LCD 20 x 4 = 7,00 £

PCF5874 = 1,80 £

NRF24L01+. modules radio x 2 = 5,80 £

Fabrication de PCB pour 10 off (ou une carte Vero peut être utilisée) = 24 £ ou 4,80 £ pour 2 off

Régulateur 3,3 v = 0,17 £ (pack de 25 de RS Comp)

Régulateur 5v LM7805 = 0,30 £

Pont en H SN754410ne = 3,00 £

Piles AA 2700 maH rechargeables Lloytron x 12 = 22,00 £. (les batteries inférieures en maH sont moins chères)

Condensateurs, pots, broches, connecteurs, etc = 2,00 £ environ

Boîtier 190x110x60 mm = 8,00 £

Émetteur - chargeur de téléphone / batterie = 2,00 £

Étape 2: Émetteur

Émetteur
Émetteur

Le schéma de circuit est illustré où les broches D2 à D8 de l'Arduino Pro Mini sont connectées au clavier. Un potentiomètre de 100 k ohms est connecté à la broche analogique A0 pour le réglage de la vitesse. Les broches SDA et SCL forment la puce PCF8574 sont connectées aux broches A4 et A5 sur l'Arduino Pro Mini au moyen de fils soudés aux broches de la couche supérieure du Pro Mini.

Le croquis Arduino est joint pour téléchargement.

J'ai utilisé un écran LCD 20 x 4 permettant 4 lignes d'informations avec 20 caractères par ligne. Le clavier propose le menu suivant:

1 à 9 = adresse loco * = direction 0 = feux # = menu fonction pour les touches 1 à 8

Description de base de l'esquisse Arduino Pro Mini: Cette ligne de code organise le message DCC au format HEX. struct Message msg[MAXMSG] = {

{ { 0xFF, 0, 0xFF, 0, 0, 0, 0}, 3}, // msg inactif

{ { locoAdr, 0, 0, 0, 0, 0, 0}, 3} // 3 octets d'adresse

};

Pour stocker les paramètres de chaque locomotive, une série de tableaux sont configurés comme suit:

int la[20];// tableau pour contenir les numéros de locomotive

int sa[20];// tableau pour conserver les valeurs de vitesse

int fda[20];// tableau pour contenir dir

int fla[20];// tableau pour contenir les lumières

int f1a[20];// tableau pour contenir fun1…..

int f8a[20];// tableau pour contenir fun8

Pour permettre aux instructions DCC d'être modifiées au fur et à mesure:

Pour les instructions de vitesse: void amend_speed (struct Message & x) {

x.data[0] = locoAdr;

x.données[1] = 0x40; // locoMsg avec 28 pas de vitesse }

Pour les instructions de fonction:

void amend_group1 (struct Message & x) {

x.data[0] = locoAdr;

x.données[1] = 0x80; // locoMsg avec l'instruction du groupe un 0x80 }

La boucle principale du sketch:

void loop(void) { if (read_locoSpeed()) { assemble_dcc_msg_speed();

envoyer_données_1(); // envoyer des données sans fil

retard(10);

envoyer_données_3(); // afficher les données sur l'écran LCD

envoyer_données_4(); // afficher les données sur le moniteur série }

if (read_function()) {

assemble_dcc_msg_group1();

envoyer_données_1();

retard(10);

envoyer_données_3(); } }

Mettre à jour les données lorsque la vitesse change:

boolean read_locoSpeed () Ceci détecte une nouvelle adresse de locomotive, un nouveau réglage de vitesse ou de direction et modifie les "données" HEX en conséquence. Ici, j'ai spécifié 28 pas de vitesse et pour répondre à la norme NMRA S 9.2, les données de vitesse doivent être trouvées dans une table de recherche dans 'speed_step()'

void speed_step(){ switch (locoSpeed){

cas 1: données |= 0x02; Pause;

cas 2: données |= 0x12; Pause;

cas 3: données |= 0x03; Pause;

………

cas 28: données |= 0x1F; Pause; }}

Mettre à jour les données lorsque les fonctions changent:

booléen read_function()

if (fla[locoAdr] == 0) { data = 0x80;

} //phares éteints

if (fla[LocoAdr] == 1) {

données = 0x90;

} // phares allumés

Pour chaque fonction:

if (f2a[locoAdr] == 0) { data |= 0; }. // Fonction 2 désactivée

if (f2a[LocoAdr] == 1) {

données |= 0x02; // La fonction 2 sur }'data' est construite en combinant ['|=' composé au niveau du bit ou] les codes HEX pour chaque fonction.

Étape 3: récepteur

Destinataire
Destinataire

Le schéma de circuit est illustré où les broches 5 et 6 de l'Arduino Pro Mini sont utilisées pour fournir le signal DCC fourni au pont en H. Les paires de ponts en H sont connectées en parallèle pour augmenter la capacité de courant. Selon le courant consommé par la locomotive, un dissipateur thermique peut être nécessaire pour être connecté au dispositif DIP à 16 broches, ou un pont en H robuste peut être connecté à l'extérieur.

Le croquis Arduino est joint pour téléchargement. Le signal DCC est composé d'une horloge fonctionnant à 2MHZ

void SetupTimer2() fait ce travail.

L'horloge comprend des 'impulsions courtes' (58us) pour '1' dans les données DCC et des 'impulsions longues' (116us) pour '0' dans les données DCC.

La boucle void obtient les données de la radio et si une chaîne valide est trouvée, les données sont converties en données DCC.

void loop(void){ if (radio.available()){ bool done = false; done = radio.read(inmsg, 1); // lit les données reçues

char rc = inmsg[0]; // met le caractère lu dans ce tableau

si (rc != 0){. // si le caractère n'est pas égal à zéro

inString.concat(rc); // construire le message }

if (rc == '\0') { // si le caractère est '/0' fin du message

Serial.println(inString); // affiche le message assemblé

chaîne de caractères(); // déconstruit le message de chaîne pour obtenir les instructions DCC

} } }

Étape 4: Exécutez les locomotives

Courir les locomotives
Courir les locomotives

Pour éviter l'interruption des données dues à la circulation de plusieurs trains sur la même voie, vous devez déconnecter les contacts entre les roues et la voie pour chaque locomotive et camion utilisé.

Profitez de trains en libre-service quelles que soient les conditions de la voie - quelle différence ! Aucun tracas, aucun démarrage-arrêt et aucun nettoyage requis.

Les batteries que j'ai utilisées sont rechargeables LLoytron AA x 12. J'ai construit un chargeur spécialement pour eux qui charge 6 à la fois. (voir instructable)

Conseillé: