PROJET : COMMANDE AIGUILLAGES ET AUTRES ACCESSOIRESHistorique :
Étape 1 :Au début des années 1990 j’ai utilisé des cartes E/S avec un PC 486 pour commander les aiguillages et lumières. Un petit circuit munis d’un OPTOCOUPLER permettait la commande des aiguillages via les sorties de la carte des SORTIES . La position de l’aiguillage était confirmée via une carte des ENTRÉES.
J’ai aussi conçu un logiciel avec VisualBasic permettant de tracer à l’écran un schéma de réseau ferroviaire permettant d’utiliser la souris pour commander les aiguillages à l’aide de carte I/O normales installées dans un ordinateur 486.
Voici quelques exemples des icones disponibles pour tracer le réseau :
et
exemples de réseau :
Figure #1 – Logiciel pour dessiner un réseau
Figure #2 – Exemple réseau Littletown
Il suffisait de cliquer sur l’aiguillage à l’aide de la souris pour en changer la position. Voir les Figures 1 et 2.
Étape 2 :Il y a quelques années j’ai conçu avec un copain une carte pour commander les trains miniatures de toutes les échelles de Z à G.
Cette carte utilise un microprocesseur PIC30F6010 et est pourvue de :
1. alimentation de 10A avec sorties 5 Vcc et 20Vcc;
2. 30 entrées numériques;
3. 46 sorties numériques;
4. 4 sorties avec transistors de puissance pour commander la vitesse de deux (2) trains;
5. un circuit de décharge de condensateur pour actionner les aiguillages.
Cette carte me permet donc de:
1. commander des bobines d'aiguillages;
2. commander des moteurs d'aiguillages;
3. commander des lumières (ampoules ou DEL);
4. commander des feux de circulation (trains, routes, rues…);
5. simuler un appareil de soudure à arc;
6. commander des barrières de passages à niveau avec feux clignotants;
7. contrôles la circulation de deux trains au travers de croisements;
8. empêcher des déraillements sur aiguillages en repositionnant l'aiguillage selon la direction d'arrivée du train pour ensuite remettre l'aiguillage dans sa position originale;
9. contrôler la circulation d'un train au travers d'une boucle de retour;
10. contrôler la circulation de voies d'évitement;
11. contrôler la circulation dans une cours de triage;
12. commander directement la vitesse de deux (2) trains;
13. contrôler automatiquement deux (2) trains sur un parcours pré sélectionné (départ, arrêt, accélération, ralentissement…)
Cette solution peut être facilement implantée sur un réseau existant car les entrées numériques reçoivent leurs signaux à partir de «reed switch» qui peuvent être facilement ajoutées sous les rails et même remplacer une traverse de voies ferrées à l'échelle HO. Il ne reste qu'à ajouter un petit aimant sous une locomotive ou un wagons pour actionner les «reed switch» au moment opportun.
J'ai implanté cette solution sur mes propres réseaux HO, N et Z.
Cette solution est compatible avec le DCC car la conduite des trains n'est aucunement affectée mais a l'avantage d'automatiser tout le reste.
Projet Arduino :Dernièrement, j’ai décidé de me tourner vers une solution Arduino car cette solution est probablement beaucoup moins coûteuse que la carte du microprocesseur PIC30 qui est de fabrication spéciale pour cette application.
Objectifs :Utiliser Arduino pour :
1. commander des bobines d'aiguillages;
2. commander des moteurs d'aiguillages;
3. commander des lumières (ampoules ou DEL);
4. commander des feux de circulation (trains, routes, rues…);
5. simuler un appareil de soudure à arc;
6. commander des barrières de passages à niveau avec feux clignotants;
7. contrôles la circulation de deux trains au travers de croisements;
8. empêcher des déraillements sur aiguillages en repositionnant l'aiguillage selon la direction d'arrivée du train pour ensuite remettre l'aiguillage dans sa position originale;
9. contrôler la circulation d'un train au travers d'une boucle de retour;
10. contrôler la circulation de voies d'évitement;
11. contrôler la circulation dans une cours de triage;
12. contrôler automatiquement des trains sur un parcours pré sélectionné (départ, arrêt, accélération, ralentissement…)
13. contrôler trains et accessoires à partir d’un ordinateur avec une interface« Processing »
Les éléments de base de la solution Arduino que j’entrevois sont :
1. Interface aiguillage (voir Figure # 3)
2. Décharge de condensateur (voir Figure # 4)
3. Arduino et shift register (voir Figure # 5)
4. Reed switch pour les entrées (voir Figure # 6 et # 7)
Figure # 3 - Interface aiguillage
Figure # 4 - Décharge de condensateur
Note : Seulement deux (2) circuits des sorties du 74HC595 sont indiquées. Le circuit complet comporte huit (
circuits optocoupleurs pour la commande de quatre (4) aiguillages ou accessoires.
Figure # 5 - Arduino et shift register
Figure # 6 – Reed switch
Figure # 7 – Position des reed switch sur un aiguillage
Travail à date :Commande des aiguillages :Suite au visionnement d'un article sur YouTube de Kevin Darrah, «Part 2 - How to Control a Ton of Inputs using Shift Registers!» (
), j’ai conçu un circuit de base avec un SN74HC595 pour les entrées/sorties. Entrées via «reed switch» et les sorties via optocoupleurs et Mosfett (ou transistors) pour commander les aiguillages et/ou la vitesse des trains via les sorties PWM.
J’ai utilisé un circuit d’essais afin de vérifier le bon fonctionnement du circuit électronique proposé (voir Figure # 8 et Figure # 9).
Figure # 8 – Circuit d’essais de commande de quatre (4) aiguillages
Les bobines des aiguillages ont été remplacées par des DEL afin de simplifier la vérification.
Figure # 9 – Circuit d’essais – 8 entrées SN74HC595 – 8 sorties SN74HC595
J’ai réussi à programmer 8 entrées/sorties avec deux SN74HC595.
Voir la programmation ci-dessous :
#include <SPI.h>
byte Input, Output, Check=1;
int j;
int NombreBit; // nombre pour inscrire 1 dans tous les bit du registre de sortie
int NombreOUT; // nombre SORTIES
int NombreButtons; // nombre de BOUTONS de INPUT
int BitEguale1; // pour mettre bit a 1
int LatchPin = 4; // declaration pin Ardduino pour Latch
int ReedSwitch = 2; // declaration pin Ardduino pour INPUT
void setup(){
Serial.begin( 9600 ); // active le Serial Monitor
Serial.println( "in setup" ); // Annotation pour suivit de progression sur le Serial monitor
pinMode(13, OUTPUT);// (BRUN) CLOCK = MUST USE THIS PIN because of SPI
pinMode(11, OUTPUT);// (VERT) DATA = MUST USE THIS PIN because of SPI
pinMode( LatchPin, OUTPUT ); // (BLANC) LATCH
pinMode( ReedSwitch, INPUT ); // (ROUGE) INPUT from BUTTONS
BitEguale1 = pow( 2, 8 )-1 ; // = 255 pour un byte de 8 bits = 11111111
NombreButtons = 8;
// Setup pour SPI
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV2);
SPI.begin();
SPI.transfer(BitEguale1); // set all outputs to high on first register
Serial.println( " SENT 255 " ); // Annotation pour suivit de progression sur le Serial monitor
SPI.transfer(0); // set all outputs to low on first register and transfer 255 to second register to set all pins high
Serial.println( "SENT 0" ); // Annotation pour suivit de progression sur le Serial monitor
digitalWrite(LatchPin, HIGH); // activate register output to display LED
digitalWrite(LatchPin, LOW); // deactivate so that output will n ot change
attachInterrupt(0, pin_read, RISING);
Serial.println( "...done with setup!" ); // Annotation pour suivit de progression sur le Serial monitor
}//setuup
void loop(){
}//loop
void pin_read(){
Serial.println( "in pin_read" ); // Annotation pour suivit de progression sur le Serial monitor
for(j=0; j<50; j++)
delayMicroseconds(1000);
Check=1;
for(j=0; j<8; j++){
SPI.transfer(Check);
SPI.transfer(Output);
digitalWrite(LatchPin, HIGH);
digitalWrite(LatchPin, LOW);
delayMicroseconds(500);
if(digitalRead(ReedSwitch)==HIGH)
bitWrite(Output, j, 1); // lire pin #2 ecrire 1 si HIGH
else
bitWrite(Output, j, 0); // ecrire 0 si LOW
Serial.print( "Byte=" );
Serial.print( j );
Serial.print( ", position=" );
Serial.print( j );
Serial.println( " Next loop " );
Serial.print ( Output );
Check = Check<<1;
}//j
SPI.transfer(BitEguale1); // set all outputs to high on first register
SPI.transfer(Output);
digitalWrite(LatchPin, HIGH);
digitalWrite(LatchPin, LOW);
}//pin_readLe programme semble fonctionner correctement sauf :
Le premier DEL ne fonctionne pas PROBLEME RÉGLÉ: LE PREMIER OPTO ETAIT DEFECTUEUXQUESTION : 1) erreur de programmation
Je n’arrive pas à trouver l’erreur. - PROBLEME RÉGLÉ
2) Je n’arrive cependant pas à trouver la programmation avec trois (3) SN74HC595 en série pour les 24 entrées et trois (3) autres SN74HC595 en série pour les sorties.
La raison des trois SN74HC595 est pour avoir 24 entrées et 24 sorties pour commander huit (
aiguillages (avec trois reed switch par aiguillages) ou 12 aiguillages (reed switch D1 et D2 branchées en parallèle, Figure #5)
Prochaine étape :Suite à la suggestion de Dominique, je vais essayer le même circuit mais avec un SN74HC597 pour les entrées et un SN74HC595 pour les sorties.
À suivre...