Différences entre les versions de « Boucle de retournement »
Ligne 93 : | Ligne 93 : | ||
La transition de l'état 1 vers l'état 0 n'a pas été implémentée. Elle était destinée à prendre en compte le train qui après avoir franchis le capteur 1 ferait marche arrière. Pour faire simple, nous nous interdisons les marches arrières dans la boucle de retournement. | La transition de l'état 1 vers l'état 0 n'a pas été implémentée. Elle était destinée à prendre en compte le train qui après avoir franchis le capteur 1 ferait marche arrière. Pour faire simple, nous nous interdisons les marches arrières dans la boucle de retournement. | ||
{{Clr}} | |||
= Le code ARDUINO = | = Le code ARDUINO = |
Version du 4 octobre 2018 à 15:54
← Accueil ← Nos Projets
== PAGE EN CONSTRUCTION ==
== PAGE EN CONSTRUCTION ==
VoLAB
Projet principal : Le petit train du VoLAB
Association VoRoBoTics
Date : 20/08/2018
Auteur : J.SORANZO
Relecteur : Gilbert, Daniel, Stéphane
Thème: Réseau ferroviaire modèle réduit H0
Projet : boucle de retournement du Petit Train du VoLAB
Problématique
Le réseau ferroviaire en modèle réduit du VoLAB comporte une boucle. Or dans ce genre de boucle, se produit un phénomène bien connu des modélistes ferroviaires une inversion de polarité des voies.
Ce phénomène est très bien illustré et décrit sur internet en particulier sur le site : Ho Ptit Train dont je reproduit ici l’illustration.
Celle du Petit Train du VoLAB :
Sans intervention, cette construction débouche sur un court-circuit entre les 2 voies. Il n’y a pas d’autres possibilité que de couper physiquement les rails à un endroit ou à un autre de cette boucle.
Nous avons choisi de couper le réseau après l’aiguillage 4184 du centre.
Cette coupure n’est portant pas suffisante. En effet lorsqu’une locomotive arrive à cet emplacement, lorsque son bogie avant passe la coupure, elle crée à nouveau le court-circuit. Il faut donc concevoir une boucle de retournement.
Architecture
Afin de résoudre ce problème, plusieurs solutions sont envisageables. Le site Ho Petit Train fournit un certain nombre de solutions. Compte-tenue du prix faible de ces derniers, nous avons décider de créer une solution à base de micro-controleur. Nous nous sommes orientés vers un clone d'ARDUINO Nano que nous avons déjà utilisé dans notre commande d'aiguillage. Cela nous à permis de conserver le même principe de carte mère et de conserver le support imprimé en 3D. L'alimentation se fait par la voie principale grâce à un pont redresseur et un condensateur de filtrage.
Dans le principe, nous avons décidé de faire une boucle de retournement sans court ciruit. Nous avons utilisé 3 capteurs de présence: 1 à l'entrée de la boucle, 1 dans la boucle et 1 à la sortie. 3 capteurs sont nécessaires parceque cette boucle est bi-directionnelle. Les capteurs d'entrée et de sortie changent de rôle selon le sens de la loco. Nous détectons la loco à l'entrée de la boucle, nous "alignons" les polarités des voies (si besoin) à l'aide d'un relais électro-mécanique à 2 contacts repos/travail. Lorsque la loco est détectée à l'intérieur de la boucle, nous pouvons permuter les polarités des voies. Et enfin, nous détectons la sortie de la loco de la boucle mais cela n'est pas vraiment nécessaire sauf pour remettre le sytème en état d'attente. Ce schéma de fonctionnement implique que le convoit ne fasse pas marche arrière lorsqu'il a franchi le deiuxième capteur, celui à l'intérieur de la boucle.
Choix du capteur
Nous avons exploré plusieurs types de capteurs de détection de présence de la loco. Cela peut être un simple contact placé sous la voies, un ILS, une barrière infra-rouge et nous avons même envisagé un capteur à ultra-son type SFR-04 (un poil trop volumineux) ou encore une barrière constitué d’une diode laser et d’une LDR. Bref tout type de capteur fonctionnant en mode tout ou rien qui change d’état au passage d’une locomotive. Notre choix final s’est porté sur un capteur à effet hall suffisamment petit pour être logé sous la voie.
S’est alors posé la question du choix du capteur à effet hall en lui-même. Nous avons découvert à nos dépends ce que signifiaient les termes unipolaire/bipolaire/linéaire figurant dans les datasheets de ces derniers.
Unipolaire : le capteur ne détecte un champ magnétique que dans un seul sens. C’est à dire que si on met l’aimant à l’envers : plus de détection…
bipolaire : le capteur détecte les champs dans les 2 sens
linaire : le capteur ne fonctionne pas en mode tout ou rien mais mesure réellement la valeur du champ magnétique, il faut alors souvent faire une mesure en analogique et faire un comparateur logiciel dans le code de l’ARDUINO.
Ah oui détail important ce choix impose de fixer un aimant sous la loco. Aimant qu’il faut choisir avec soin en fonction du capteur. En effet, on trouve dans la datasheet de ces derniers la valeur du champ à partir de laquelle ils réagissent. Le problème est que cette information est plus difficile à trouver côté aimants surtout ceux vendus sur le marché chinois. Heureusement, il est des sites plus sérieux qui fournissent cette information mais au prix d’un coût plus élevé naturellement comme par exemple https://www.supermagnete.fr.
Après bien des essais, nous avons choisi un A1104 du fabricant Allegro. De part les faibles dimensions du boîtier, il nous semble facilement dissimulable entre les voies.
Machine d’état
Nous avons basé le fonctionnement de notre boucle de retournement sur la machine d'état suivante que nous avons codé dans un ARDUINO Nano comme dit plus haut dans cet article.
Les états 0 à 5 correspondent au parcours du train dans le sens capteur 1 (C1) capteur 3 (C3) en passant par le capteur 2 (C2) naturellement.
Les étapes 0, 6 à 10 correspondent au parcours de la boucle dans l'autre sens.
L'état de repos est, vous l'aurez sans doute compris, l'état 0.
La transition de l'état 1 vers l'état 0 n'a pas été implémentée. Elle était destinée à prendre en compte le train qui après avoir franchis le capteur 1 ferait marche arrière. Pour faire simple, nous nous interdisons les marches arrières dans la boucle de retournement.
Le code ARDUINO
// // retour loop // VoLAB // mai 2018 // CC-0 // #define C1PIN 5 #define C2PIN 4 #define C3PIN 3 #define RELAISPIN 2 #define LEDRELAIS 13 int state; void setup(){ pinMode( C1PIN, INPUT_PULLUP ); pinMode( C2PIN, INPUT_PULLUP ); pinMode( C3PIN, INPUT_PULLUP ); pinMode( RELAISPIN, OUTPUT); pinMode( LEDRELAIS, OUTPUT); Serial.begin(9600); Serial.println("pret"); } void loop(){ // inversées à cause du INPUT_PULLUP int C1 = !digitalRead(C1PIN); int C2 = !digitalRead(C2PIN); int C3 = !digitalRead(C3PIN); char chaine[256]; // sprintf( chaine, "C1 : %d, C2 : %d, C3 : %d", C1, C2, C3); sprintf( chaine , "etat : %d", state); Serial.println( chaine ); //Machine d'état switch (state){ case 0: if (C1) state = 1; if (C3) state = 6; break; case 1: if (!C1) state = 2; break; case 2: if (C2) state = 3 ; break; case 3: if (!C2) state = 4 ; break; case 4: if (C3) state = 5 ; break; case 5: if (!C3) state = 0 ; break; //le train est sorti en C3 case 6: if (!C3) state = 7 ; break; case 7: if (C2) state = 8 ; break; case 8: if (!C2) state = 9 ; break; case 9: if (C1) state = 10 ; break; case 10: if (!C1) state = 0 ; break; default: state = 0; break; } //Décodage des états if ( state == 4 | state == 6 ){ digitalWrite( RELAISPIN, HIGH); digitalWrite( LEDRELAIS, HIGH); } if (state == 5 | state == 9){ digitalWrite( RELAISPIN, LOW); digitalWrite( LEDRELAIS, LOW); } }
Ce sketch est très simple. Il débute par l'assignation des broches de connections des 3 capteurs, de la sortie relais et d'une sortie d'affichage de l'état du relais.
Dans la déclaration de la fonction setup, on réalise la configuration des dites broches. Seule petite subtilité, les broches d'entrées des capteurs sont configurées en INPUT_PULLUP ce qui permet de se passer de résistances de tirage extérieures. La contre-partie est que le niveau actif de l'enrée est 0 au lieu de 1.
Ensuite vient la déclaration de la fonction loop qui commence par lire l'état des 3 capteurs en les inversant ( rôle du ! devant les digitalRead() ). Ensuite vient la machine d'état qui gère les transitions entre les états conformément à l'illustration 9 machine d'état. Et enfin la partie décodage des états pour piloter le relais (et la LED).
Schémas
Carte mère et ARDUINO Nano
Relais pinout
Transistor 2N7000 pinout
Ci-dessous le schéma de la petite carte mère que nous avons réalisé pour accueillir les quelques composants nécessaires... Nous avons commis ça grâce à Kicad.
Nous avons réalisé un routage même si nous n'avons pas fait de pcb et l'avons fait avec une carte VEROBOARD:
Comme le VEROBOARD utilisé est simple face, les autres couches du PCB sont des straps réalisés en fils de cuivre.
Raccordement aux voies
J1 est le connecteur principal et doit être raccordé à la voie principale.
J5 doit être raccordé aux rails de la boucle.
Il y a une petite subtilité : la vis de droite de J1 doit être raccordée au rail du même côté que la vis de droite de J5. Exemple au rail de droite – même si il n'y a pas vraiment ni de rail de droite, ni de rail de gauche étant donnée que les trains peuvent circulés dans les 2 sens. Il faut bien se fixer une convention à un moment ou un autre...
Nomenclature
Désignation | Ref fab | Fabricant/fournisseur | Repère |
Clone ARDUINO nano | NANO V3 | Banggood | U1 |
Relais | 114D | Teledyn | R1 |
Diode | 1N4004 | ? | D1 à D4 |
Transistor | 2N7000 | On semi | Q1 |
Condensateur | 100uF/16V | ? | C1 |
Connecteurs 2cts | Pas 5.08 à vis | Banggood | J1, J5 |
Connecteur 3cts | Pas 2.54 barette | Banggood | J2, J3 et J4 |
PCB | Plaque à pastille carrée | Radiospares part. | - |
2 vis | M2,5x6 | Bricovis | - |
Support de carte imprimé en 3D
Il s'agit d'un support très simple qui permet par la suite de fixer la carte au réseau grâce à 2 vis. Nous l'avons réutilisé du projet de commande d'aiguillage (d'où l'insription DCC Turnout). Sa conception bénéficie d'un de nos autres projets : Bobies.
On y fixe la carte mère grâce à 2 vis de 2.5 x 6 ( PLATCBZ02.5/006ZN disponibles chez BRICOVIS )
Fichiers sources
Source ARDUINO
Source du présent article au format open document
Version pdf
Schéma de cablage
Source Inkscape de la machine d’état
Source du support mécanique Fusion360
Les source kicad de la carte mère
datasheet du relais
Licence
Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution 4.0 International.
Paternité 'by' :L'œuvre peut être librement utilisée, à la condition de l'attribuer à l'auteur en citant son nom.
Note aux auteurs de documents du VoLAB, Vous avez la possibilité de changer de licence. Mais ce serait bien de rester libre et ouvert. Encore une fois ceci est une recommandation et pas une obligation.
Bibliographie
Ho Ptit Train
http://www.ho-ptit-train.be/Html/cablage_06.html
webographie
http://fr.wikipedia.org/wiki/Licence_Creative_Commons
Kicad
http://banggood.com (dealer de goodies!)
NANO V3 à 2.23€ (au 18/9/18) à condition de choisir « Ships from CN Warehouse »
On-semi (datasheet transistor)
Teledyn (relais)
Bricovis
https://www.bricovis.fr/std/accueil.php
Rédaction en langue française
Partant du constat de terrain qu'une énorme masse d'information concernant les sujets qui nous intéressent comme entre autres l'impression 3D n'étaient disponibles que dans la langue de Shakespeare et que de nombreuses personnes dans notre entourage ne maîtrisaient pas la dite langue et soucieux de diffuser encore plus l'information, nous avons pris le parti, au VoLAB, de rédiger nos documents de préférence en langue française.
VoLAB
Un mot sur le VoLAB. VoLAB est un fablab implanté à environ 30km au nord-ouest de Paris dans la commune de Vauréal dans l'agglomération de Cergy Pontoise. Il est animé par l'association VoRoBoTics.
Site internet www.vorobotics.com