Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Arduino - Bloc automatique

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Re: Arduino - Bloc automatique

Publié: Mer 08 Oct 2014, 14:25 
Bonjour,
après avoir parcouru votre article sur le cantonnement avec un module Arduino,
je me suis intéressé à ce module qui présente énormément de possibilités pour le modélisme ferroviaire.
étant à la recherche d'un système de cantonnement digital qui n'est pas hors de prix, je me suis lancé dans l'étude du langage Arduino.
Après avoir mis au point la gestion d'un carrefour avec 4 feux je me suis lancée dans l'étude d'un cantonnement par le module Arduino. Je suis parti sur le principe d'utiliser un Arduino par canton ((plus simple de mon point de vue) le prix très raisonnable de l'arduino nano).
j'ai réussi mettre au point un programme qui fonctionne très bien sur banc test et sur un petit réseau (6 cantons en N).
-1 je suis à la recherche d'un système de détection de consommation de courant car le mien n'est pas trop sensible (je n'ai que quelques connaissances en électronique de base).
-2 j'aimerais q'une personne ayant des connaissances en langage Arduino analyse mon programme (conseil et optimisation car mes connaissances en programation sont plutot basic) avant l'installation sur un grand réseau (+ de 10 cantons pour essai).
Merci.
Luc Diouc
 
Messages: 13
Inscrit le: Lun 06 Oct 2014, 22:27
Echelle pratiquée: HO/N
Club: Brunoy Rail

Re: Arduino - Bloc automatique

Publié: Jeu 09 Oct 2014, 11:37 
Bonjour Luc,

1 - Voici un lien :
http://amfn.nice.free.fr/
Ensuite "Autres pages techniques" et ensuite "détecteur de présence et détecteurs de passage"
Puis enfin "réalisation de détecteur d'occupation".
Là, tu obtiens tout un tas de principes différents que tu peux mettre en œuvre pour détecter tes trains sur ton réseau (il n'y a qu'à choisir celui qui te convient le mieux).
Attention, les signaux obtenus doivent être mis en forme pour respecter les tensions de ton Arduino (5 V par exemple) et le mieux est de faire appel à des opto-coupleurs.

2- Met ton programme sur le forum et tu auras bien quelqu'un qui se penchera dessus (j'essaierai en fonction de mes disponibilités mais je suis actuellement assez pris et comprendre le programme d'un autre demande du temps).

Bon courage et à bientôt pour que tu nous fasses part de ta réussite dont je ne doute pas :wink:
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1698
Inscrit le: Mer 25 Sep 2013, 16:14

Re: Arduino - Bloc automatique

Publié: Jeu 09 Oct 2014, 14:03 
Luc Diouc a écrit:Bonjour,
-1 je suis à la recherche d'un système de détection de consommation de courant car le mien n'est pas trop sensible (je n'ai que quelques connaissances en électronique de base).

Bonjour je mets en fichier joint mon dossier de detection d'occupation de canton par consommation de courant - en digital - Cela fonctionne parfaitement.
Il me reste une dizaine de circuit imprimé. Si tu le souhaite, je t'en, envoie un pour test...
A+
trains/download/file.php?id=311431
Réseau N - MS Minitrix
Avatar de l’utilisateur
Class66240
Bavard
 
Messages: 65
Inscrit le: Sam 03 Oct 2009, 00:13
Localisation: Paris
Âge: 64

Re: Arduino - Bloc automatique

Publié: Jeu 09 Oct 2014, 15:53 
Merci, cela est intéressant et ont peut avoir ce que l'on veut derrière les optocoupleurs.

:applause:
Cordialement,

Christian.
Avatar de l’utilisateur
likiki
Causant
 
Messages: 277
Inscrit le: Dim 29 Avr 2012, 14:21
Localisation: Corbeil Essonne
Âge: 51
Echelle pratiquée: H0 3R
Prénom: Christian

Re: Arduino - Bloc automatique

Publié: Jeu 09 Oct 2014, 17:15 
Bonjour,
Je vous remercie pour vos réponses.
Je viens de regarder les systèmes de détection sur le site A M F N que vous m'avez conseillé, c'est à peu près le même système que j'utilise.
Pour tester le cantonnement avec le module Arduino j'ai utilisé mes anciens modules DCC qui ont une sortie sur relais. J'envoie comme signal par le relais du 5V au repos et du 0V en activation.( j'ai testé plusieurs modules de détection pour Arduino il fonctionne sur le même principe 5 volts au repos 0 volt en activation). Avec mon système de détection je voulais pouvoir faire la différence entre une locomotive et un wagon sur une zone; mon système de détection n'est pas trop sensible.
Pour la proposition de Class 66 je serai bien intéressé par un circuit imprimé pour essayer et comparer au mien; Je ne sais pas comment faire par contre pour contacter autrement que dans le forum; merci beaucoup.
Cordialement.
Luc Diouc
 
Messages: 13
Inscrit le: Lun 06 Oct 2014, 22:27
Echelle pratiquée: HO/N
Club: Brunoy Rail

Re: Arduino - Bloc automatique

Publié: Jeu 09 Oct 2014, 18:27 
Bonjour,
Je vous joins une version de mon programme pour l'arduino.
le fonctionnement est le suivant :
- chaque canton un module Arduino avec un module relais en sortie.
- alimentation par du 5 Volt tiré d'une alimentation de PC (très stable).
- chaque BALest relié la précédente et à la suivante.
- un feu tricolore par BAL (je ne connais pas grand-chose à la signalisation SNCF).

Exemple: circulation de l'amont vers l'aval, BAL 0, en amont BAL -1 et BAL -2 et en aval BAL +1.
A- aucune détection sur BAL 0 = feux vert et relais off.
B- détection BAL 0 = feu rouge et activation du relais (passage du courant à travers quatre diodes: j'utilise le système de freinage ABC de Lenz) et sortie d'un signal vers les BALs -1 et +1.
C- pour BAL -1 recevant un signal entrant de la BAL 0 = passage du feu au jaune
(juste pour visuel) avec comme condition à la réception d'un signal d'occupation de la BAL -2 (train montant) dans ce cas passage de la BAL -1 au rouge avec activation du relais pour protéger la BAL 0.
Voila, j'espère vous avoir aider à comprendre le fonctionnement de mon programme et j'attends vos suggestions car je suis peut être passé à coté de quelques choses ou je me suis trop compliqué la vie.
Je l'ai testé sur un petit réseau en N de 15 mètres avec 6 cantons et 2 convois, le premier au ralenti et le second plus rapide; sur 10h de test, aucun tamponnement.
Merci.

Image
Dernière édition par Luc Diouc le Jeu 09 Oct 2014, 18:39, édité 1 fois au total.
Luc Diouc
 
Messages: 13
Inscrit le: Lun 06 Oct 2014, 22:27
Echelle pratiquée: HO/N
Club: Brunoy Rail

Re: Arduino - Bloc automatique

Publié: Jeu 09 Oct 2014, 19:03 
Luc Diouc a écrit:Bonjour,
Je ne sais pas comment faire par contre pour contacter autrement que dans le forum.

Bonsoir Luc,
les membres peuvent échanger via la messagerie privée...
Je t'envoie un "MP" message privé pour test...
A+
Réseau N - MS Minitrix
Avatar de l’utilisateur
Class66240
Bavard
 
Messages: 65
Inscrit le: Sam 03 Oct 2009, 00:13
Localisation: Paris
Âge: 64

Re: Arduino - Bloc automatique

Publié: Ven 10 Oct 2014, 18:54 
Bonsoir class66240,
merci pour le conseil sur les messages privés.

Autrement j'ai joint mon programme comme une pièce jointe
et dans le message sur le forum il apparait comme une image.
Je ne sais pas si c'est normale.
A+
Luc Diouc
 
Messages: 13
Inscrit le: Lun 06 Oct 2014, 22:27
Echelle pratiquée: HO/N
Club: Brunoy Rail

Re: Arduino - Bloc automatique

Publié: Sam 11 Oct 2014, 00:33 
Bonsoir Luc
J'ai eu le même problème pour joindre le fichier pdf. En fait il faut virer la balise
[img]en tête et en fin de texte. Je mets le CI au courrier demain.
[img]xxxxxxxxxxxxxxxxx[/img]
A+
Réseau N - MS Minitrix
Avatar de l’utilisateur
Class66240
Bavard
 
Messages: 65
Inscrit le: Sam 03 Oct 2009, 00:13
Localisation: Paris
Âge: 64

Re: Arduino - Bloc automatique

Publié: Sam 11 Oct 2014, 23:02 
Luc Diouc a écrit:......
Autrement j'ai joint mon programme comme une pièce jointe
et dans le message sur le forum il apparait comme une image.
Je ne sais pas si c'est normale.
A+


Voici ce qu'il faut faire pour joindre un programme Arduino sur ce forum :
Dans l'environnement de développement d'Arduino (le logiciel qui sert à écrire du code pour Arduino), tu vas dans "édition" puis "copier pour le forum" (ou le raccourci CTRL + MAJ + C).
Ton programme est mis dans le presse papier de Windows.
Ensuite, sur le forum, à l'endroit où tu écris, il suffit de faire un simple "coller" (raccourci CTRL + V).
Tu obtiens ton programme en couleur, donc facile à lire.

Sinon, je crois bien avoir lu quelque part que le forum ne permet pas de joindre des fichiers PDF ; pour un document, on peut utiliser du JPG ou du TIF (il me semble).
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1698
Inscrit le: Mer 25 Sep 2013, 16:14

Re: Arduino - Bloc automatique

Publié: Dim 12 Oct 2014, 09:19 
Arduino a écrit:Sinon, je crois bien avoir lu quelque part que le forum ne permet pas de joindre des fichiers PDF ; pour un document, on peut utiliser du JPG ou du TIF (il me semble).

Bonjour Arduino, j'ai toujours plaisir à te lire, même si je ne manifeste pas beaucoup...
En ce qui concerne les fichiers à joindre, le fichier .pdf est accepté. Lorsque l'on veut inclure un source, après l'avoir mis dans le presse-papier, il suffit de cliquer sur la balise code
Code: Tout sélectionner
et inclure le source entre les deux balises par CTRL + V

j'ai remplacé [ par ( et ] par ) mais je ne sais pas si c'est plus clair !!!
(color=#FF0000](code]et inclure le source entre les deux balises par CTRL + V[/code)[/color)
Réseau N - MS Minitrix
Avatar de l’utilisateur
Class66240
Bavard
 
Messages: 65
Inscrit le: Sam 03 Oct 2009, 00:13
Localisation: Paris
Âge: 64

Re: Arduino - Bloc automatique

Publié: Dim 12 Oct 2014, 18:36 
Bonsoir,
Ayant un petit réseau Marklin (oui oui ne me jetez pas :ange: ) ,pour détecter la présence d'un train il suffit de couper un rail et de l'isoler ou non et de le relier à la borne du transfo (16V ~).
Donc des que la loco ou les wagons passent ,le courant passe par ce rail.
Un relais de type Roco marche mais de temps en temps il y a des faux contacts et cela met la m..... :cry:
Pour le moment j'ai 4 blocs avec des relais Roco qui fonctionnent une fois sur deux sans parler des problèmes de sens de passage .
Alors venons au fait ,comment utiliser ce type de contact pour fiabiliser mon affaire avec Arduino ?
Quelqu'un pourrait il me conseiller et me proposer un petit schéma avec les composants qui vont bien pour pouvoir raccorder chaque détection à une entrée Arduino ??
Merci
Le Belge
Avatar de l’utilisateur
Le Belge
Ingénieur des ponts
 
Messages: 3634
Inscrit le: Dim 26 Nov 2006, 10:04

Re: Arduino - Bloc automatique

Publié: Dim 12 Oct 2014, 19:26 
Je commencerais par prendre la tension au passage d'un convois Et le temps de l'impulsion.
Cordialement,

Christian.
Avatar de l’utilisateur
likiki
Causant
 
Messages: 277
Inscrit le: Dim 29 Avr 2012, 14:21
Localisation: Corbeil Essonne
Âge: 51
Echelle pratiquée: H0 3R
Prénom: Christian

Re: Arduino - Bloc automatique

Publié: Dim 12 Oct 2014, 19:38 
Je connais pas la valeur exacte mais l'impulsion est continue puisqu'on ferme un interrupteur en effet rail 1 à la masse tandis que le rail deux relie au relais Roco est isolé tant que les roues ne se présentent pas
Merci
Le Belge
Avatar de l’utilisateur
Le Belge
Ingénieur des ponts
 
Messages: 3634
Inscrit le: Dim 26 Nov 2006, 10:04

Re: Arduino - Bloc automatique

Publié: Dim 12 Oct 2014, 22:34 
Bonsoir,
merci pour ces renseignements; je vous remets sur le forum mon programme
sur le cantonnement.

/*
  DigitalReadSerial
 Reads a digital input on pin 4, prints the result to the serial monitor 
 
 This example code is in the public domain.
 */

// digital pin 4 est raccordée à la zone protegee courante. Entree:
const int zone_protegee = 4;
// digital pin 5 est raccordée à pin 7 de la puce de la section suivante. Entree:
const int arrive_signal_orange = 5;
// digital pin 6 est raccordée à pin 8 de la puce de la section suivante. Sortie:
const int sortie_signal_canton_aval = 6;
// digital pin 7 est raccordée à pin 5 de la puce de la section precedente. Sortie:
const int sortie_signal_orange = 7;
// digital pin 8 est raccordée à pin 6 de la puce de la section precedente. Entree:
const int arrive_signal_canton_amont = 8;
// digital pin 3 est raccordée à la zone d arret courante. sortie; la valeur LOW correspond à la coupure
// de la zone d'arret.
const int zone_arret = 3;
// digital pin 11 est raccordée au feux rouge courant. sortie; HIGH = activation.
const int feux_rouge = 11;
// digital pin 12 est raccordée au feux vert courant. sortie; HIGH = activation.
const int feux_vert = 12;
// digital pin 13 est raccordée au feux orange courant. sortie; HIGH = activation.
const int feux_orange = 10;
// la zone protégée est occupée en affichant un signal LOW; HIGH = zone libre.
int protegee = HIGH;
int orange = LOW;
int amont = LOW;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the zoneprotegee's pin an input:
  pinMode(zone_protegee, INPUT);
  pinMode(arrive_signal_orange, INPUT);
  pinMode(sortie_signal_canton_aval, OUTPUT);
  pinMode(sortie_signal_orange, OUTPUT);
  pinMode(arrive_signal_canton_amont, INPUT);
  pinMode(zone_arret, OUTPUT);
  pinMode(feux_vert, OUTPUT);
  pinMode(feux_orange, OUTPUT);
  pinMode(feux_rouge, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  protegee = digitalRead(zone_protegee);
  orange = digitalRead(arrive_signal_orange);
  amont = digitalRead(arrive_signal_canton_amont);
  
  // print out the state of the button:
  if (protegee == HIGH) {
    if (orange == LOW) {
       if (amont == LOW) {
         digitalWrite(zone_arret, HIGH);
         digitalWrite(sortie_signal_orange, LOW);
         digitalWrite(sortie_signal_canton_aval, LOW);
         digitalWrite(feux_rouge, LOW);
         digitalWrite(feux_vert, HIGH);
         digitalWrite(feux_orange, LOW);
         }
       else {
         digitalWrite(zone_arret, HIGH);
         digitalWrite(sortie_signal_orange, LOW);
         digitalWrite(sortie_signal_canton_aval, LOW);
         digitalWrite(feux_orange,LOW);
         digitalWrite(feux_vert,HIGH);
         digitalWrite(feux_rouge,LOW);
          }
    }
     else {
        if (amont == LOW) {
           digitalWrite(zone_arret, HIGH);
           digitalWrite(sortie_signal_orange, LOW);
           digitalWrite(sortie_signal_canton_aval, LOW);
           digitalWrite(feux_vert, LOW);
           digitalWrite(feux_orange, HIGH);
           digitalWrite(feux_rouge, LOW);
          }
        else {
          digitalWrite(zone_arret,LOW);
          digitalWrite(feux_rouge,HIGH);
          digitalWrite(feux_vert,LOW);
          digitalWrite(feux_orange,LOW);
          digitalWrite(sortie_signal_orange, HIGH);
          digitalWrite(sortie_signal_canton_aval, HIGH);
          
          while(digitalRead(arrive_signal_orange)== HIGH)
          {             
          digitalWrite(zone_arret,LOW);
          digitalWrite(feux_rouge,HIGH);
          digitalWrite(feux_vert,LOW);
          digitalWrite(feux_orange,LOW);
          digitalWrite(sortie_signal_orange, HIGH);
          digitalWrite(sortie_signal_canton_aval, LOW);
          }
            }
         }   
    }
    else {
    digitalWrite(zone_arret,LOW);
    digitalWrite(feux_rouge,HIGH);
    digitalWrite(sortie_signal_orange,HIGH);
    digitalWrite(sortie_signal_canton_aval,HIGH);
    digitalWrite(feux_vert,LOW);
    digitalWrite(feux_orange,LOW);
     }  
  delay(500); // delay in between reads for stability
}




Luc Diouc
 
Messages: 13
Inscrit le: Lun 06 Oct 2014, 22:27
Echelle pratiquée: HO/N
Club: Brunoy Rail

PrécédentSuivant

Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invité(s)