|
| Module T-Trak quadruple Hieronymus-Station (Jicébé) | |
|
+10Gbo95 Dodesir SoriaNo jef34 Metienne78 CC72000 TRAINTRAIN95 patniste nordouest Jicébé 14 participants | |
Auteur | Message |
---|
Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Ven 20 Déc 2019 - 0:08 | |
| Menuiseries des modules : Erreur critique !- Cela fait maintenant plus d'un mois que je cherche à faire la menuiserie du module secondaire (la gare cachée) J'en ai besoin pour trois raisons : La plus évidente, il sera nécessaire pour boucler un jour le réseau. Il devra aussi servir de support pour le transport du module principal, fragile, qui sera au-dessus du module secondaire et solidarisé avec lui par des montants boulonnés. Il doit me servir MAINTENANT de brouillon pour valider la position des créatures, le plan de voies définitif, le positionnement des actionneurs divers. tant que je ne l'ai pas, je suis coincé pour la suite. J'ai donc dessiné les pièces à découper/assembler à partir d'une plaque de contre-plaqué de 1220 x 610x8 mm, comme d'habitude : puis demandé à OpenSCAD de me calculer les dimensions des pièces : Ensuite, la galère : recherche d'une plaque de CP correcte : Echec complet Chez tous mes fournisseurs, je suis sur le même problème que d'autres membres de ce forum ( https://le-forum-du-n.1fr1.net/t30323p125-le-nouveau-projet-de-grandcharles#p606191) Epaisseur_planche = 8; Les panneaux de CP étaient tous gondolés, et les bords souvent abîmés. La dernière fois que j'en ai utilisé, cela s'est fini à la déchèterie. | |
J'ai donc cherché une solution de repli, et j'ai trouvé du médium de 6 mm d'épaisseur, en plaques de mêmes dimensions que celles du CP. Heureux, j'ai donc changé la valeur de l'épaisseur : - Citation :
- Epaisseur_planche = 6;
au lieu de : - Citation :
- Epaisseur_planche = 8;
et OpenSCAD m'a tout recalculé, Les nouveaux panneaux : La façon de les raccrocher : Le résultat souhaité : et les dimensions de ces nouveaux panneaux : ce qui m'a permit de griffonner un plan de découpe : Hélas : en arrivant au magasin, mon plan de découpe à la main, PLUS DE MEDIUM de 6mm !!! provisoirement épuisé GRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR ! GRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR ! Donc, il ne me reste plus qu'à hiberner, en attente de CP de 8 mm ou de médium de 6 mm... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Jeu 26 Déc 2019 - 1:15 | |
| |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Ven 27 Déc 2019 - 1:09 | |
| Suite à une série de tests, je vais améliorer le plan de voies du module arrière. Au niveau des deux bretelles successives :J'ai découvert un parking longue durée pour locomotive (au singulier) : La rame de bière, en haut, voie 1, s'engage sur la voie principale, et va passer de droite à gauche dans le module principal. La rame de wagons tombereaux pleins, voie 2, coupe la voie 3 et s'engage sur la voie unique, via la voie 4. Le Public, devant le module principal va la voir ressortir de la grotte secondaire. A l'extrémité droite de la voie 2, une locomotive s'est endormie... En tassant bien, je dois pouvoir exceptionnellement y garer une rame courte de deux trémies pour laisser partir la rame suivante vers la grotte secondaire en stoppant momentanément le trafic de la voie 1. Au niveau du raccordement des voies 3 et 4, à gauche :Avec un aiguillage de plus, et trois rails courbes référence 20-170 /R218-45, formant un arc de 3x45° de rayon 218 mm, je dois pouvoir faire une zone de stockage en impasse d'un peu plus de 50 cm, ce qui permet d'y garer au moins la rame la plus à gauche de la voie 4 pour en laisser passer une autre. Remplacement des bretelles par un croisement.Test : Cela nécessite de supprimer les deux bretelles de raccordement, et de les remplacer (en plus du croisement) par une paire d'aiguillages. Mais en utilisant pour le raccordement voie 3/voie4/voie de stockage à gauche, les deux aiguillages ainsi récupérés peuvent être utilises. En gros : - Citation :
Echange paire d'aiguillages contre une bretelle. Le coût financier n'est que de 7 à 8 € pour un croisement. Mais le coût "travail" est plus élevé : il n'existe pas de croisement KATO convenant , et il me faudra donc en torturer un, en sciant proprement rails et ballast des deux branches obliques. A vue de nez, je dois gagner au moins 12 cm pour la voie 2, soit l'équivalent de deux tombereaux courts. Mais je perds la petite zone de repos pour une loco à droite. J'hésite... Qu'en pensez-vous ? |
| | | morfil Membre
Age : 77 Localisation : pas là Nombre de messages : 558 Date d'inscription : 12/06/2013
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Ven 27 Déc 2019 - 10:19 | |
| J'adore tes girls |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Dim 29 Déc 2019 - 0:20 | |
| La partie métrique :La voie est posée !!! A noter que "posée" est à prendre au sens propre : elle est déposée, non fixée, et est encore pleine de vie, elle bouge encore, la bougre... Le plan de voiesLa longueur :La longueur indiquée a été calculée par AnyRail, entre deux points que j'ai indiqués à la souris, alors, les 7 dixièmes de millimètres, ... La longueur exact correspond (pour la voie 2_Nm) à 4 aiguillages de 11 cm chacun, 3 coupons droits de 22 cm chacun et un coupon de 11 cm, soit 121 cm. Les voies N imposent 31 x4 = 124 cm. Il manque donc une longueur de 3 cm pour que cet ensemble de voies Nm rejoignent les voies Nm des modules d'angle. Ce n'est pas une erreur !Les 1,5 cm manquant de chaque côté seront garnis par des rails extensibles, comme indiqué pour la voie arrière dans la norme MOROP NEM 916. La largeur :Il reste encore de la place : 8 cm de libre vers le centre du réseau. Cela va me permettre de glisser plus au moins les voies Nm vers ce centre, en fonction des voies Nm des modules d'angles, elles-mêmes dépendant de la position de la voie Nm du module principal. Affaire à suivre... Heure de pointe sur le module arrière :Principe des circulations Nm :
- Voie 1_Nm : pose et dépose des rames.
- Voie 2_Nm : circulation dans le sens des aiguilles d'une montre.
Les spectateurs devant le module principal verront les rames arriver de la grotte secondaire et se diriger vers la galerie de mine-musée. Les wagons-tombereaux sont vides.
- Voie 3_Nm : circulation dans le sens contraire des aiguilles d'une montre.
Les spectateurs devant le module principal verront les rames arriver de la la galerie de mine-musée et se diriger vers la grotte secondaire. Les wagons-tombereaux sont pleins.
|
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Lun 6 Jan 2020 - 1:04 | |
| Une bien mauvaise nouvelle : - De notre reporter spécial, sur place : a écrit:
- Il semblerait que l'homme-trompette, chargé de prévenir de l'arrivé d'un train sur le module, était sur sa plate-forme, pour une répétition, quand soudain, celle-ci a soudainement basculé, sans signe annonciateur.
Ce fût très soudain ! L’homme-trompette a glissé, n'a pas pu se retenir, et a basculé dans le vide. Il a fait alors une interminable chute, de plus de 1000 mm !
La plate-forme après l'accident :Image d'archive, juste avant l'accident : Selon la police, dont les Experts ont enquêté longuement, ce n'est ni un meurtre, ni un suicide, mais un tristement banal accident. Toutefois, il n'est pas impossible que les fournisseurs de plaques de bois de qualité aient une part de responsabilité : S'ils avaient livré le bois demandé, il n'aurait pas été nécessaire de récupérer le bois d’occasion du module arrière, bois lui-même déjà récupéré on ne sais où, et de le compléter avec du carton plume beaucoup trop fragile. Quelques interview "sur le chaud" : - Le Monstre-Barbu a écrit:
- J'en tremble encore...
J'étais sur la plate-forme avec mon collègue, quand j'ai senti que celle-ci basculait. J'ai réussi de justesse à me retenir, mais j'ai vu mon pauvre collègue basculer dans le vide. Je vous laisse, j'ai rendez-vous avec un psy... - L'oiseau-Tour a écrit:
- Ben, vla : j'étais en train de dégager à coup de masse un bout de voie Decauville enseveli lors du tremblement de terre du XIXe siècle, quand tout a basculé.
Je n'ai pas vu grand chose, j'ai juste fait un grand saut en arrière ! Mais mon cœur en a pris un coup. - Le Danseur-Hibou a écrit:
- Moi, je n'ai pas vu grand chose, à part la muraille qui s'est mise à s'éloigner devant moi.
Je n'ai rien compris... - Le Poisson-roues a écrit:
- Je n'ai rien vu, rien entendu...
Mais je suis tout retourné... C'était à la fois un ami, et un partenaire : quand j'entendais son solo de trompette, je savais que je pouvais sortir tranquillement de ma grotte pour venir contempler le train qui passe. Dommage que cet horreur de diable-pot de chambre gâche tout à chaque fois avec son horrible ricanement m'obligeant à reculer précipitamment dans ma grotte ! En plus, ce monstre m'interdit formellement de faire "MEUH" chaque fois que je vois passer un train ! On devrait la chasser, cette terreur cannibale !!!!! - Le Diable-Pot de Chambre a écrit:
- Moi, j'étais pas là...
Mais je suis triste, l'homme-Musique et moi étions de bons partenaires: Lui jouait du cor, ou du clairon, ou un truc de ce genre là, pour prévenir de l'arrivée d'une rame. Moi, je poussais un petit rire charmant pour prévenir du départ de cette rame : http://jcbecker.free.fr/Modelisme/Mes_Modules/Hieronymus_Station/Sons/haharir.mp3
Et en plus, tout le monde a refus que je m'occupe du corps !!! Mais qu'est devenu le corps ?Aux dernières nouvelles, l'Homme-Trompette avait légué son corps à la Science, et celle-ci s'apprête à sortir disque -Dremel à tronçonner, et surtout petite perceuse pour voir s'il est possible de percer et enfoncer une vis dans son trou du quelque par pour le fixer plus solidement sur son support. Et l'avenir ???L'homme-trompette est issu d'une famille nombreuse, et un frère jumeau devrait prendre la relève d'ici quelques semaines. En mémoire à l'Homme-Trompette, mort pour le bien du Réseau, son célèbre solo de trompette, annonciateur d'un train :http://jcbecker.free.fr/Modelisme/Mes_Modules/Hieronymus_Station/Sons/2940.mp3 |
| | | patniste Membre
Age : 78 Localisation : Lamballe22400 Nombre de messages : 12738 Date d'inscription : 19/07/2011
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Lun 6 Jan 2020 - 17:21 | |
| JICEBEcomme écrit ci contre , complètement barré le gars Caiss tas fumé Doudou dis donc ! m'a l'air d’être costaud le truc Condoléances à la famille des instruments à vent |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Ven 10 Jan 2020 - 10:06 | |
| - patniste a écrit:
Caiss tas fumé Doudou dis donc ! m'a l'air d’être costaud le truc
N'insiste pas, je garde tout pour moi, non mais ! - patniste a écrit:
- complètement barré le gars
On se moque, on se moque... Mais je suis très fier de mon reportage, déjà proposé (en freelance) à plusieurs quotidiens, hebdomadaires et mensuels. Et je vise maintenant le prochain PULITZER. - patniste a écrit:
Condoléances à la famille des instruments à vent Merci pour ton soutien en cette douloureuse période. |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Sam 11 Jan 2020 - 0:37 | |
| Mon nouveau Clairon à pattes est commandé.. Plus qu'à attendre sa livraison, et le réapprovisionnement en bois de bonne qualité... Mais en arrivant au magasin de ma fournisseuse, surprise ! Une nouvelle version du Diable-Pot de Chambre en vitrine. La version que j'avais déjà était très édulcorée : alors que le Maître avait peint : La nouvelle version respecte mieux l’œuvre du Maître : Cela change de toutes ces maquettes avec un homme dans une cahute "au fond du jardin", assis sur son trône, porte ouverte, pantalon sur les chevilles, en train de lire son journal... A noter que ce genre de WC primitifs n'était pas rare chez les peintres flamands du XVI siècle. Voici la version de Pieter Brueghel l'Ancien ("Les Proverbes flamands", 1559) : Bon appétit. |
| | | patniste Membre
Age : 78 Localisation : Lamballe22400 Nombre de messages : 12738 Date d'inscription : 19/07/2011
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Sam 11 Jan 2020 - 15:41 | |
| Mangerai plus de poisson Beurk ! |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Sam 11 Jan 2020 - 23:18 | |
| C'est sans doute suite à ce problème qu'un célèbre verdâtre Très Grand ( bien que plutôt petit) Philosophe/Maître à Penser a dit - Citation :
- Le poisson, pour pêcher, en amont de la ville te mettras.
Le poisson, pour nettoyer, en aval de la ville te mettras. La suite est un peu floue... Il semblerait que la ville située juste en aval de la ville du célèbre verdâtre Très Grand ( bien que plutôt petit) Philosophe/Maître à Penser ait pris les armes et attaqué au cri de - Citation :
- NON! NON! NON!
Pas en aval de votre ville ! |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Ven 17 Jan 2020 - 0:08 | |
| En attendant le "bois nouveau", il est temps de s’intéresser plus à l'informatique.Tout d'abord une remarque : le pilotage du réseau (marche arrêt et réglage des vitesses des trains, commande des aiguillages, ... resteront entièrement manuels. les arduinos sont prévus uniquement pour animer le décor, en fonction de la position des trains sur la voie circulant de gauche à droite (en principe, la voie de gauche)Schémas des circuits électriquesPartie "courants de traction" :En noir, les fils amenant le courant de traction au détecteur Viessmann. En rouge, les fils distribuant le courant de traction aux huit zones, depuis le détecteur Viessmann. Partie "Courants de détection" :Chaque sortie "Travail" des relais 1 à 8 du détecteur Viessmann est relié, respectivement, à l'une des entrées 22 à 29 de chaque arduino. Ces entrées seront au niveau "Haut" (+5V) en présence d'un train, et au niveau "Bas" (0V) si la résistance de rappel a bien été placée Les contraintesQuand l'arduino découvre un niveau Haut sur une des entrées, il doit exécuter l'animation prévue pour la zone concernée par cette entrée. Mais ce test de l'entrée étant fait au moins une centaine de fois par seconde, il faut empêcher que cette animation soit lancée plusieurs fois lors du passage d'une rame. Pour cela , à chaque zone, j'associe ce qu'on nomme "un drapeau" ( "flag" en langue outratlanticaine...),et qui est une mémoire de un bit pouvant donc prendre uniquement deux valeurs, et que je prénomme "M" suivi du numéro de la zone concernée. Au départ, le drapeau sera à zéro, ce qui autorise l'exécution de l'animation. A la première détection d'un essieu détectable, l'animation constate que le drapeau est à 0, lance l'animation, et bascule le drapeau à 1. Aux autres détections, l'arduino constate que le drapeau est à 1, et ne relance plus cette animation. Il semble logique de faire le test des zones allant de la zone 1 à la zone 8 : Mais cela risque de mener à des erreurs : en cas de RESET, l'arduino ne va pas utiliser le premier, mais le dernier essieu détecté. Le test des zones se fera donc en allant de la zone 8 à la zone 1, en contresens de la circulation des trains. YAPLUKA (FAUKON) rédiger le programme... Prochainement... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Dim 1 Mar 2020 - 1:16 | |
| Après un petit passage à vide pour diverses raisons, reprise (lente) des travaux. Toujours au programme, la programmation des deux arduinos. Avant de se lancer dans des "choses compliquées", il est nécessaire de se munir des bons outils de travail, à savoir : une carte de géographie, un dictionnaire linguistique, et une bibliothèque ( entre autres). La carte de géographie :Les arduino "méga" sont les plus richement dotés en "entrées/sorties", c'est d’ailleurs pour cela que je les ai choisis. En plus de quelques prises de service, ils disposent de 16 entrées analogiques capable chacune de mesurer directement toute tension comprise entre 0 et +5 volts, et, avec l'aide d'un adaptateur, toute tension quelle qu'elle soit, y compris la tension entre les deux rails d'une voie.es entrées sont numérotées de "A0" à "A15" en langage arduino. Ils disposent en plus de 5 entrées/sorties digitales, numérotées de "0" ( sans "A") à 53. Toutefois, certaines de ces entrées/sorties peuvent être utilisées pour des usages spéciaux par les arduinos, et doivent donc pas être utilisées pour autre chose. J'ai regroupé dans ma page http://jcbecker.free.fr/Modelisme/Mes_Modules/Hieronymus_Station/Arduino/Brochage/Brochages.php, sous forme de tableaux, la totalité de ces entrées/sorties, avec leurs utilisations. En rouge : ce sont les entrées/sorties réservées aux arduinos. En jaune, celles que j'utilise déjà, avec diverses indications (ce à quoi elles sont reliées, et à quoi correspond leur état. Au fur et à mesure que je vais ajouter des périphériques, il me suffira alors de compléter les lignes correspondantes. A suivre : La Grande Bibliothèque.
|
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Lun 2 Mar 2020 - 0:04 | |
| < La Grande Bibliothèque.Chaque fois qu'on ajoute un périphérique, le programme téléchargé dans l'arduino doit savoir le gérer. Il faut donc que "quelqu'un" écrive "à la main" cette partie du programme, ce qui peut générer de très remarquables crises de nerfs dans certains cas. Si je prends l'exemple du shield "Ethernet" (la carte qu'on enfiche sur l'arduino), elle contient deux périphériques : un serveur WEB et une carte SD faisant office de disque dur. Pour utiliser le serveur, il faudrait gérer tout son fonctionnement, protocole TCP-IP compris, ce qui n'est réalisable que par des professionnels de la chose. Pour utiliser la carte SD, il faudrait gérer également tout son fonctionnement, ce qui n'est réalisable que par des professionnels de la chose. Enfin, ces deux périphériques communiquant avec l'arduino par le bus SPI, il faut le gérer, avec la prise indiquant si c'est le site WEB ou la carte Sd qui travaille, gérer le fil permettant les envois "arduino vers périphérique", le fil permettant les envois "périphérique vers arduino", et le fil "horloge" donnant un signal rectangulaire de forme et de fréquence corrects. Heureusement, la règle quand on créé un périphérique est d'écrire aussi les fichiers permettant de la gérer et de les regrouper dans ce qu'on appelle en langage arduino une bibliothèque, qui est ajoutée aux autres bibliothèques, quelque part sur le web Pour utiliser ces bibliothèques, il suffit d'ouvrir le menu déroulant de l'éditeur spécialisé de l'arduino, de descendre jusqu'au nom de la bibliothèque, et de la sélectionner. http://jcbecker.free.fr/Modelisme/Mes_Modules/Hieronymus_Station/Arduino/Brochage/Biblios.jpgUne copie de cette bibliothèque est alors installée au bon endroit sur le disque du PC. Pour l'utiliser, il suffit alors d'écrire en tête de programme la ligne "#include <"nom de la bibliothèque".h> en respectant majuscules et minuscules. Pour le shield avec serveur WEB, il faut donc télécharger les bibliothèques gérant la partie internet, la partie SD-carte et le bus SPI. ce qui donne, pour l'arduino "A" : - Code:
-
//===================== #include <Ethernet.h> #include <SD.h> #include <SPI.h> //===================== et pour l'arduino "B" : - Code:
-
//===================== #include <AudioSound.h> #include <SD.h> #include <SPI.h> //===================== Cette partie du programme (la zone des "includes") devra être complétée à chaque ajout d'un périphérique sur les arduinos. A suivre : le "dictionnaire linguistique" |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Mar 3 Mar 2020 - 0:21 | |
| Le "dictionnaire de langues".A quoi sert-il ? Il est très utile si on veut modifier facilement un programme écrit depuis un certain temps. Exemple concret : Je vais utiliser la portion de code suivant : - Code:
-
if ( digitalRead (25) == HIGH) { // Actions à effectuer } else { // Actions à effectuer }
Question qui peut se poser au bout du "un certain temps : Mais que fait ce code ??? Réponse :
- Il commence par "if", donc c'est un test.
Si le résultat du test est vrai, (OUI, HIGH, 1,...) alors on exécute les actions écrites dans la première paire d'accolades Si le résultat du test est faux, (NON, LOW, 0,...) alors on exécute les actions écrites dans la deuxième paire d'accolades
- La chaîne "==" indique qu'on vérifie que ce qui est à gauche de "==" a la même valeur que ce qui est à droite.
- Le mot "digitalRead" montre qu'on va lire une entrée digitale et la valeur 25 indique qu'il s'agit de l'entrée n°25.
Le test consiste donc à vérifier si l'entrée digitale n°25 est bien à l'état HIGH (Vrai, 1, +5volts, ...)
- Il faut maintenant suivre le fil arrivant à l'entrée 25 pour voir qui peut y envoyer du +5 volts.
On trouve (si on arrive à suivre ce fil...) , en vrac, un autre arduino, une résistance électrique, et la sortie "TRAVAIL" du relais numéro 4 du détecteur VIESSMANN Conclusion : on aura l'état HIGH quand le relai n°4 sera en position "travail", donc quand ce détecteur détectera quelque chose dans la zone surveillée n°4
- Mais que surveille le détecteur n° 4 ?
En suivant le fil d'alimentation traction n°4 sortant du détecteur Viessmann, on arrive à la zone Z_4 du module principal .
OUF ! Conclusion; on exécutera les instructions de la première paire d'accolades si quelque chose est détecté en zone Z_4, ou les instructions de la deuxième paire d'accolades si rien n'y est détecté.Quelqu'un d'organisé, et à condition de tenir soigneusement les tableaux comme ceux de la page http://jcbecker.free.fr/Modelisme/Mes_Modules/Hieronymus_Station/Arduino/Brochage/Brochages.php peut aller plus vite :
- Recherche de la ligne du pin 25 digitale de l'arduino "A" :
http://jcbecker.free.fr/Modelisme/Mes_Modules/Hieronymus_Station/Arduino/Brochage/Extrait_Pin25.jpg
- Recherche de la légende en haut du tableau :
et on a la réponse, à condition d'avoir maintenu ce tableau à jour. Mais il y a encore bien plus efficace : la création d'un dictionnaire bilingue. Ne manquez pas la prochaine fois : création et utilisation du dictionnaire bilingue |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Mer 4 Mar 2020 - 0:38 | |
| En faisant un état des lieux, nous constatons que nous sommes en présence de trois "entités" pratiquant deux langages différents : L'arduino pratique le langage "arduino", fait d'une suite de "1" et de "0" regroupés par paquets de huit, (les octets). Ce langage est totalement incompréhensible par la presque totalité des Humains. L'Humain, après apprentissage, parle parle l' "humain-arduino", une sorte de langage humain adapté à l'arduino, mais que l'arduino ne comprends pas. Le compilateur (qui est un programme informatique tournant sur un gros ordinateur), sait lire l' "humain-arduino" et le traduire en "arduino" dans un fichier rangé dans la mémoire vive du gros ordinateur. Mais, comprendre une ligne écrite en comme - Code:
-
if ( digitalRead (25) == HIGH) "humain-arduino" peut poser des problèmes de compréhension, comme vu dans le post précédent. L'idéal serait d'écrire à la place - Code:
-
if ( digitalRead (Z_4) == OCCUPE) qui se comprend tout de suite comme " Si qu'ya quekchose de détecté dans Z_4, alors faire..." L'option, ou plutôt deux options, existent pour réaliser cela. Première option :Au début du programme, on crée deux variables constantes (si, si, c'est bien comme ça qu'on dit) : - Code:
-
Constant int Z_4 = 25; Booleen OCCUPE = HIGH; et le code peut alors s'écrire - Code:
-
if ( digitalRead (Z_4) == OCCUPE) Z_4 et OCCUPE étant les noms des deux variables. C'est la méthode généralement conseillée. Mais elle a un très grave défaut : un énorme gaspillage d'une denrée rare et chère pour un arduino ; la mémoire vive. Chacune des 8 variable Z1..Z8, par exemple, va consommer deux octets de la mémoire vive de l'arduino. Alors, je crie NON !!! aux traditions et aux bons conseils de la majorité de mes collègues programmeurs, seule la deuxième option est valable pour un arduino. Deuxième option :On va utiliser des mots d'un troisième langage, Humain pur. Mais comme le compilateur ne va pas les comprendre, on va aussi lui fournir une sorte de dictionnaire "Humain pur"->"Humain-Arduino" De ce fait, le compilateur va pouvoir, dans un premier temps, traduire "Humain pur" en "Humain-Arduino", puis ensuite, traduire l' "Humain-Arduino" en Arduino pur. Avantage : tout le travail se fait dans le gros ordinateur, et non dans l'arduino, qui préserve donc la totalité de sa mémoire vive pour le travail utile. Ce dictionnaire est en fait une succession de ligne au format #define < mot "Humain-Arduino"> (define doit être en majuscule, et suivre sans espace le symbole dièse)
Ce qui donne,pour mes deux arduinos ;
- Code:
-
// ===== dictionnaire de langue : les "define" // 1.) les noms des PINs pour les détections #define Z_1 22 #define Z_2 23 #define Z_3 24 #define Z_4 25 #define Z_5 26 #define Z_6 27 #define Z_7 28 #define Z_8 29 // Le PIN commandant le relais pour couper le courant traction dans la zone Z_4 #define STOP_Z_1 30 // Le relais pour couper le courant traction dans la zone Z_4
// 2.)Les valeurs logiques possibles pour les occupations de zone #define LIBRE HIGH #define OCCUPE LOW
// 3.)Les valeurs logiques possibles pour les activités #define FAIT HIGH #define PAS_FAIT LOW Cette liste de #define n'est pas limitative, et sera complété au fur et à mesure des besoins.
A suivre, le debut du "SETUP()". |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Ven 6 Mar 2020 - 0:09 | |
| Le travail vu jusqu'à maintenant se passe uniquement dans le gros ordinateur relié à l'arduino par son bus USB. Si on compile et télécharge dans l'arduino, celui-ci ne reçoit rien, on s'est juste contenté de fabriquer les outils pour écrire le "croquis" (nom que l'arduino donne au programme). Le croquis se compose de deux parties : La première partie, le setup, - Code:
-
setup () {
}
contient entre les deux accolades toutes les lignes de code à exécuter une seule fois au démarrage de l'arduino. Il s'agit principalement de paramétrer les entrées/sorties, et de créer et initialiser les varizbles globales. Ce qui donne ici Pour les entrées/sorties : Pour initialiser une entrée/sortie digitale en entrée : - Code:
-
pinMode(Z_4,INPUT); Pour initialiser une entrée/sortie digitale en sortie : - Code:
-
pinMode(STOP_Z_1 30,OUTPUT); Pour créer une variable booléenne valant "Pas_Fait" : - Code:
-
const boolean trav_Z_4 = Pas_Fait; Ce qui nous donne le code : - Code:
-
void setup() { // Les tests des zones pinMode(Z_1,INPUT); pinMode(Z_2,INPUT); pinMode(Z_3,INPUT); pinMode(Z_4,INPUT); pinMode(Z_5,INPUT); pinMode(Z_6,INPUT); pinMode(Z_7,INPUT); pinMode(Z_8,INPUT);
// les drapeaux indiquant si le travail a déjà été fait ou non const boolean trav_Z_1 = Pas_Fait; const boolean trav_Z_2 = Pas_Fait; const boolean trav_Z_3 = Pas_Fait; const boolean trav_Z_4 = Pas_Fait; const boolean trav_Z_5 = Pas_Fait; const boolean trav_Z_6 = Pas_Fait; const boolean trav_Z_7 = Pas_Fait; const boolean trav_Z_8 = Pas_Fait;
//la sortie permettant de couper le courant de traction en zone Z_1 pinMode(STOP_Z_1 30,ROULE); // Le relais est au repos }
Cela nécessite d'ajouter deux nouvelles lignes dans la partie "#define" - Code:
-
#define STOP HIGH #define ROULE LOW
La suite prochainement... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Sam 7 Mar 2020 - 0:26 | |
| La boucle Après la phase d'initialisation vient ce qu'on appelle la boucle (loop en langage arduino) - Code:
-
void loop() { // ici le code des instructions à effectuer }
Le code sera exécuté de la première à la dernière instruction, puis l'arduino reprendra à la première ligne du "loop", et cela tant qu'on ne coupera pas son alimentation électrique. Pour mon module, la partie loop() sera divisée en trois parties : Le test des 8 zones Z1...Z8 et l’exécution du travail à faire pour chaque partie. lLes instructions ne dépendant pas du passage des trains (par exemple, déclenchement aléatoire d'un orage) La réinitialisation des drapeaux (les variables booléennes) Ce qui donne comme architecture du programme :http://jcbecker.free.fr/Modelisme/Mes_Modules/Hieronymus_Station/Arduino/Programmation/Principes_0_h440.jpgPour chacune des huit zones, le principe du travail à effectuer sera le même. Par exemple, pour la zone Z_4, et son drapeau, la variable booléenne trav_Z_4 : La zone est gérée par deux variables booléennes :
- L'état de l'entrée Z_4 (pin 25 de l'arduino) dépendant du module Viessmann, lui-même dépendant de l'état LIBRE/OCCUPE de la zone.
- L'état de la variable trav_Z_4.
Cela nous donne quatre configurations possibles : Entrée Z_4 = LIBRE et le drapeau trav_Z_4= Pas_FAIT : Le train n'est pas encore arrivé en Z_4, donc :
- Rien à faire en Z_4 et après (Z_5...Z_.
- Train possible en Z_1...Z_3 : il faut tester ces zones.
Entrée Z_4 = OCCUPE et le drapeau trav_Z_4= Pas_FAIT : Le train est en Z_4, les animations n'ont pas encore eu lieu, donc :
- On met trav_Z_4 à FAIT.
- On lance les animations.
- Rien à faire dans les autres zones.
Entrée Z_4 = OCCUPE et le drapeau trav_Z_4= FAIT : Le train est en Z_4, les animations ont eu lieu, donc :
- Il n'y a rien à faire en Z_4.
- Rien à faire dans les zones Z_1...Z_3 (avant Z_4) le train y est déjà passé.
- Train possible en Z_5...Z_8 : il faut tester ces zones.
Entrée Z_4 = LIBRE et le drapeau trav_Z_4= FAIT : Le train est passé en Z_4, et les animations ont étét faites, donc :
- Rien à faire en Z_4.
- Rien à faire en Z_1...Z_3.
- Train possible en Z_5...Z_8 : il faut tester ces zones
|
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Dim 8 Mar 2020 - 0:11 | |
| D'après le post précédent, il n'est pas nécessaire de traiter les quatre configuration possibles, mais seulement celles qui ,demande à l'arduino de faire une action. Ce qui donne, pour la zone 4, si on teste les zones de la dernière (Z_8 ) à la première (Z_1), le code : - Code:
-
if (trav_Z_4==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_4 n'ont pas encore été lancées... if (Z_4==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_4==FAIT; // les animations pour Z_4 ne pourront pas être relancées } // ----------Fin de " if (Z_4==OCCUPE)" else { // ici, on inclus le test de la zone précédente, soit Z_3. } } // ----------Fin de " if (trav_Z_4==Pas_FAIT)"
Le problème va être une imbrication des test des zones, le code d'une zone va être à l'intérieur du code de la zone suivante, lui-même à l'intérieur de la zone suivante, tel des poupées russes. On se trouve donc devant le choix : Soit on documente abondement le code à chaque crochet, ouvrant comme fermant. Soit on devient fou en cherchant où placer cette %$£&@$ de crochet fermant afin que le programme ne plante plus. Ce qui donne : - Code:
-
if (trav_Z_4==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_4 n'ont pas encore été lancées... if (Z_4==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_4==FAIT; // les animations pour Z_4 ne pourront pas être relancées } // ----------Fin de " if (Z_4==OCCUPE)" else { //========== Test de la zone 3 ============= if (trav_Z_3==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_3 n'ont pas encore été lancées... if (Z_3==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_3==FAIT; // les animations pour Z_3 ne pourront pas être relancées } // ----------Fin de " if (Z_3==OCCUPE)" else { // ici, on inclus le test de la zone précédente, soit Z_2 } } // ----------Fin de " if (trav_Z_3==Pas_FAIT)" } } // ----------Fin de " if (trav_Z_4==Pas_FAIT)"
La suite bientôt... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Lun 9 Mar 2020 - 0:24 | |
| Le code "poupées russes" pour le squelette de la partie "détection des trains" : - Code:
-
//========== Test de la zone Z_8============= if (trav_Z_8==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_8 n'ont pas encore été lancées... if (digitalRead(Z_8)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_8==FAIT; // les animations pour Z_8 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_8)==OCCUPE)" else { //========== Test de la zone Z_7 ============= if (trav_Z_7==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_7 n'ont pas encore été lancées... if (digitalRead(Z_7)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_7==FAIT; // les animations pour Z_7 ne pourront pas être relancées } // ----------Fin de " if (Z_7==OCCUPE)" else { // ===========Test de la zone Z_4 if (trav_Z_6==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_6 n'ont pas encore été lancées... if (digitalRead(Z_6)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_6==FAIT; // les animations pour Z_6 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_6)==OCCUPE)" else { //========== Test de la zone Z_5 ============= if (trav_Z_5==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_5 n'ont pas encore été lancées... if (digitalRead(Z_5)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_5==FAIT; // les animations pour Z_5 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_5)==OCCUPE)" else { // ===========Test de la zone Z_4 if (trav_Z_4==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_4 n'ont pas encore été lancées... if (digitalRead(Z_4)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_4==FAIT; // les animations pour Z_4 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_4)==OCCUPE)" else { //========== Test de la zone Z_3 ============= if (trav_Z_3==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_3 n'ont pas encore été lancées... if (digitalRead(Z_3)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_3==FAIT; // les animations pour Z_3 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_3)==OCCUPE)" else { // ===========Test de la zone Z_2 if (trav_Z_2==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_2 n'ont pas encore été lancées... if (digitalRead(Z_2)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_2==FAIT; // les animations pour Z_2 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_2)==OCCUPE)" else { //========== Test de la zone 1 ============= if (trav_Z_1==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_1 // n'ont pas encore été lancées... if (digitalRead(Z_1)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_1==FAIT; // les animations pour Z_1 // ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_1)==OCCUPE)" //else { Rien, car pas de Z_0... } Cette ligne est inutile //============================================================================= // tous les tests sont fait, il faut maintenant fermer les accolades, dans l'ordre inverse des ouvertures... //============================================================================= } // ----------Fin de " if (trav_Z_1==Pas_FAIT)" } // ----------Fin de " if (trav_Z_2==Pas_FAIT)" } // ----------Fin de " if (trav_Z_3==Pas_FAIT)" } // ----------Fin de " if (trav_Z_4==Pas_FAIT)" } // ----------Fin de " if (trav_Z_5==Pas_FAIT)" } // ----------Fin de " if (trav_Z_6==Pas_FAIT)" } // ----------Fin de " if (trav_Z_7==Pas_FAIT)" } // ----------Fin de " if (trav_Z_8==Pas_FAIT)"
N'importe quel informaticien programmeur sauterait au plafond en voyant ce code sans connaitre le contexte de son écriture, un peu comme un adepte farouche du fine-scale découvrant un bâtiment en pâte à modeler sur son réseau. Normalement il aurait fallu faire à la place une fonction récursive, mais celle-ci est beaucoup plus gourmande en occupation de la mémoire des données, et aurait limité le nombre d'animations possible. La suite bientôt : comparaison avec une fonction récurrente... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Mar 10 Mar 2020 - 0:36 | |
| La version "fonction récursive" : Il n'est plus possible de travailler avec les "#define" du "dictionnaire de langues". A la place, il va faloir utiliser des tableaux de données, qui vont coùter de précieux octets en mémoire. Dans le "setup()" : on créé et initialise les tableaux de variables - Code:
-
int tbl_num_zones [9] = {0,1,2,3,4,5,6,7,8}; //(Ce tableau occupe (gaspille ?) 2x9, soit 18 octets en mémoire des données) booleen tbl_mem_zones [9] = {PAS_FAIT,PAS_FAIT,PAS_FAIT,PAS_FAIT,PAS_FAIT,PAS_FAIT,PAS_FAIT,PAS_FAIT,PAS_FAIT}; //(Ce tableau occupe (gaspille ?) 1bit x9, soit 9 bits, qui vont être répartis sur deux octets en mémoire des données)
Petite remarque comme les indices dans les tableaux commencent à zéro, et que je veux faire correspondre les indices de ces tableaux avec les numéros des zones, qui commence à "1", j'ai donc créé une zone fantome n° 0. La partie présente dans le "loop()" : - Code:
-
function test_zone (num_zone) { if (num_zone>1) //sinon arrêt de la récursivité { if (tbl_mem_zones [num_zone]==Pas_FAIT) { if (digitalRead(tbl_num__zones [num_zone] )==OCCUPE) { // ----------Ici, on lance les animations pour la zone numéro "num_zone". tbl_mem_zones [num_zone]==FAIT; // les animations pour la zone de numéro "num_zone". ne pourront pas être relancées } // ----------Fin de " if (digitalRead(tbl_num__zones [num_zone])==OCCUPE)" } // === fin de if (tbl_mem_zones [num_zone]==Pas_FAIT) else { test_zone ((num_zone-1); on lance le teste pour la zone précédente } } // === fin de if (num_zone>1)
La suite bientôt : comparaison entre les deux versions, et mises en œuvre... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Dim 15 Mar 2020 - 22:14 | |
| Du très bon ,...et du pas bon du tout... Du très bon : J'ai le bois pour mes deux grands modules !!! Du beau médium de 6 mm, bien lisse, bien solide. Et parfaitement découpé, au millimètre près, en plaques de dimensions souhaitées. YAPLUKA (mais FOKON) coller/visser, avec quelques baguettes de renfort aux angles, et toute la menuiserie est terminée. Toute la voie est posée (mais en "volant", sur des planches provisoires). YAPLUKA (mais FOKON) poser/clouer la voie sur les modules définitifs, et le réseau est terminé. Pataras ! Je suis à 350 km de tout ça, revenu à Paris pour cause d'élections. Monsieur Coronavirus (à qui j'ai échappé jusqu'à maintenant) me bloque loin de mes morceaux de réseau, et de Marie aussi, confiné dans son home, pour plus de quatre semaines... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Mar 17 Mar 2020 - 12:25 | |
| Après les tests des zones Z_1 à Z_8, et l'exécution des animations concernées, il faut lancer les actions aléatoires (ne dépendant pas de la position des trains). Voici le code de cette partie : - Code:
-
//============ Début des actions aléatoires =============
// =========== Fin des actions aléatoires ===============
Que fait ce code ? Rien du tout, mais il le fait très bien. Ce sont deux lignes de commentaire entre lesquelles il faudra placer toutes les actions aléatoires Il reste un dernier problème à régler : la remise à zéro des drapeaux, sans laquelle le train suivant ne pourra pas déclencher les animations. Pour cela, on teste l'ensemble des zones, et si toutes sont libres, on remet les drapeaux à "PAS_FAIT". - Code:
-
//========== Remise à Zéro des actions liées aux zones Z1 à Z8 ============= if ( (digitalRead(Z_1)==LIBRE) &&(digitalRead(Z_2)==LIBRE) &&(digitalRead(Z_3)==LIBRE) &&(digitalRead(Z_4)==LIBRE) &&(digitalRead(Z_5)==LIBRE) &&(digitalRead(Z_6)==LIBRE) &&(digitalRead(Z_7)==LIBRE) &&(digitalRead(Z_8)==LIBRE) ) // Ce test rend VRAI si toutes les zones sont libres. { // ----------Tous les zones sont à LIBRE : la rame est donc passée, //on remet les drapeaux à PAS_FAIT pour autoriser à nouveau les animations. trav_Z_1 = PAS_FAIT; trav_Z_2 = PAS_FAIT; trav_Z_3 = PAS_FAIT; trav_Z_4 = PAS_FAIT; trav_Z_5 = PAS_FAIT; trav_Z_6 = PAS_FAIT; trav_Z_7 = PAS_FAIT; trav_Z_8 = PAS_FAIT; } // =======Fin de Remise à Zéro des actions à effectuer============= // L'arduino va maintenant recommencer son cycle au début de la boucle "loop ()"
A suivre ... |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Jeu 19 Mar 2020 - 14:43 | |
| J'ai regroupé tous les morceaux de code dans le fichier ci-dessous : - Code:
-
//===================== #include <Ethernet.h> #include <SD.h> #include <SPI.h> //===================== // ===== dictionnaire de langue : les "define" === // 1.) les noms des PINs pour les détections #define Z_1 22 #define Z_2 23 #define Z_3 24 #define Z_4 25 #define Z_5 26 #define Z_6 27 #define Z_7 28 #define Z_8 29 // Le PIN commandant le relais pour couper le courant traction dans la zone Z_4 #define STOP_Z_1 30 // Le relais pour couper le courant traction dans la zone Z_4
// 2.)Les valeurs logiques possibles pour les occupations de zone #define LIBRE HIGH #define OCCUPE LOW
// 3.)Les valeurs logiques possibles pour les activités #define FAIT HIGH #define PAS_FAIT LOW
// 4.)Les valeurs logiques possibles pour les feux rouge:vert #define STOP HIGH #define ROULE LOW //=========== Initialisations ======
void setup() { // Les tests des zones pinMode(Z_1,INPUT); pinMode(Z_2,INPUT); pinMode(Z_3,INPUT); pinMode(Z_4,INPUT); pinMode(Z_5,INPUT); pinMode(Z_6,INPUT); pinMode(Z_7,INPUT); pinMode(Z_8,INPUT);
// les drapeaux indiquant si le travail a déjà été fait ou non const boolean trav_Z_1 = Pas_Fait; const boolean trav_Z_2 = Pas_Fait; const boolean trav_Z_3 = Pas_Fait; const boolean trav_Z_4 = Pas_Fait; const boolean trav_Z_5 = Pas_Fait; const boolean trav_Z_6 = Pas_Fait; const boolean trav_Z_7 = Pas_Fait; const boolean trav_Z_8 = Pas_Fait;
//la sortie permettant de couper le courant de traction en zone Z_1 pinMode(STOP_Z_1 30,ROULE); // Le relais est au repos }
//================================================ //================ La boucle ======================= //================================================ loop () { //================================================ //========== Partie 1 : le test des zones ================= //================================================ //========= Test de la zone Z_8 =================== if (trav_Z_8==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_8 n'ont pas encore été lancées... if (digitalRead(Z_8)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_8==FAIT; // les animations pour Z_8 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_8)==OCCUPE)" else { //========== Test de la zone Z_7 ============= if (trav_Z_7==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_7 n'ont pas encore été lancées... if (digitalRead(Z_7)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_7==FAIT; // les animations pour Z_7 ne pourront pas être relancées } // ----------Fin de " if (Z_7==OCCUPE)" else { // ===========Test de la zone Z_4 if (trav_Z_6==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_6 n'ont pas encore été lancées... if (digitalRead(Z_6)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_6==FAIT; // les animations pour Z_6 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_6)==OCCUPE)" else { //========== Test de la zone Z_5 ============= if (trav_Z_5==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_5 n'ont pas encore été lancées... if (digitalRead(Z_5)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_5==FAIT; // les animations pour Z_5 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_5)==OCCUPE)" else { // ===========Test de la zone Z_4 if (trav_Z_4==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_4 n'ont pas encore été lancées... if (digitalRead(Z_4)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_4==FAIT; // les animations pour Z_4 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_4)==OCCUPE)" else { //========== Test de la zone Z_3 ============= if (trav_Z_3==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_3 n'ont pas encore été lancées... if (digitalRead(Z_3)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_3==FAIT; // les animations pour Z_3 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_3)==OCCUPE)" else { // ===========Test de la zone Z_2 if (trav_Z_2==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_2 n'ont pas encore été lancées... if (digitalRead(Z_2)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_2==FAIT; // les animations pour Z_2 ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_2)==OCCUPE)" else { //========== Test de la zone 1 ============= if (trav_Z_1==Pas_FAIT) { // Les animations prévues quand le train arrive en Z_1 // n'ont pas encore été lancées... if (digitalRead(Z_1)==OCCUPE) { // ----------Ici, on lance les animations. trav_Z_1==FAIT; // les animations pour Z_1 // ne pourront pas être relancées } // ----------Fin de " if (digitalRead(Z_1)==OCCUPE)" //else { Rien, car pas de Z_0... } Cette ligne est inutile //============================================================================= // tous les tests sont fait, il faut maintenant fermer les accolades, dans l'ordre inverse des ouvertures... //============================================================================= } // ----------Fin de " if (trav_Z_1==Pas_FAIT)" } // ----------Fin de " if (trav_Z_2==Pas_FAIT)" } // ----------Fin de " if (trav_Z_3==Pas_FAIT)" } // ----------Fin de " if (trav_Z_4==Pas_FAIT)" } // ----------Fin de " if (trav_Z_5==Pas_FAIT)" } // ----------Fin de " if (trav_Z_6==Pas_FAIT)" } // ----------Fin de " if (trav_Z_7==Pas_FAIT)" } // ----------Fin de " if (trav_Z_8==Pas_FAIT)"
//================================================ //========== Partie 2 : les actions aléatoires ============= //================================================
//============ Début des actions aléatoires =============
// =========== Fin des actions aléatoires ===============
//================================================ //========== Partie 3 : les réinitialisations =============== //================================================
//========== Remise à Zéro des actions liées aux zones Z1 à Z8 ============= if ( (digitalRead(Z_1)==LIBRE) &&(digitalRead(Z_2)==LIBRE) &&(digitalRead(Z_3)==LIBRE) &&(digitalRead(Z_4)==LIBRE) &&(digitalRead(Z_5)==LIBRE) &&(digitalRead(Z_6)==LIBRE) &&(digitalRead(Z_7)==LIBRE) &&(digitalRead(Z_8)==LIBRE) ) // Ce test rend VRAI si toutes les zones sont libres. { // ----------Tous les zones sont à LIBRE : la rame est donc passée, //on remet les drapeaux à PAS_FAIT pour autoriser à nouveau les animations. trav_Z_1 = PAS_FAIT; trav_Z_2 = PAS_FAIT; trav_Z_3 = PAS_FAIT; trav_Z_4 = PAS_FAIT; trav_Z_5 = PAS_FAIT; trav_Z_6 = PAS_FAIT; trav_Z_7 = PAS_FAIT; trav_Z_8 = PAS_FAIT; } // =======Fin de Remise à Zéro des actions à effectuer=============
//================================= } //========= Fin du loop() =========== //================================= // L'arduino va maintenant recommencer son cycle au début de la boucle "loop ()"
Etant malheureusement séparé de tout mon matériel par 350 km et une frontière, je n'ai pas pu le tester en entier... Dès la fin des "problèmes actuels, je finis de monter les modules et poser la voie, puis j'y raccorde les arduinos pour les essais. En attendant, vous pouvez copier/coller ce code, et le modifier comme vous le souhaitez. A bientôt. |
| | | Jicébé Membre
Age : 77 Localisation : Paris Nombre de messages : 5950 Date d'inscription : 28/07/2008
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) Dim 22 Mar 2020 - 16:10 | |
| Jusqu'à maintenant, malgré sa longueur, mon programme (Croquis en langue "Arduino") ne fait strictement rien de visible. Il est temps de le mettre au travail. Malheureusement, étant séparé de tout mon matériel par 350 km et une frontière, tout est reporté à une date ultérieure plutôt floue. Toutefois, voici quelques réalisations simples. Cahier des charges :
- Mettre en place un cantonnement automatique à l'entrée du module principal, sur la voie interne.
- Pouvoir agir en plus manuellement sur ce cantonnement.
Pour la coupure du courant de traction, le principe est simple : la zone Z_1 est alimentée par la sortie 1 de la partie "traction" du détecteur Viessmann. Il suffit donc de placer un relais sur ce fil. N'importe quel relais convient du moment qu'il soit commandé sous une tension de 5 V=, avec une intensité très faible, ce qui suppose que sa bobine est alimenté par une source de tension extérieur, à travers un montage amplificateur. Des schémas trainent partout dans les revues, les livres et sur le net, et je vais simplement considérer que la bobine du relais dispose de trois prises ; une est à relier au "+" d'une alimentation extérieure, une autre au "-" de la même alimentation, et la troisième, qui va imposer un état "Travail"/"Repos", directement à une sortie digitale libre de l'arduino commandant ce relais ( par exemple : la sortie 30). Il faut maintenant ajouter les lignes de code manipulant ce relais.Partie "bibliothèques" : en principe, il n'y a rien à ajouter. Partie "Dictionnaire de langue" : on crée quelques mots en langage "humain pur" : Pour le fil de commande : - Code:
-
#define STOP_Z_1 30 // Le PIN commandant le relais pour couper le courant traction dans la zone Z_1
Pour l'état souhaité, il y a une complication : - Code:
-
#define PEUT_ROULER HIGH #define DOIT_STOPPER LOW
ou bien - Code:
-
#define PEUT_ROULER LOW #define DOIT_STOPPER HIGH
suivant que le relais fonctionne en logique positive ou négative, et suivant que le fil de traction est relié au pole Travail ou Repos du relais Mais une erreur est sans conséquence, et on peut utiliser la fameuse méthode dite "par tâtonnements successifs : on choisit l'une des deux possibilitées au hasard, puis, conformément à la loi de Murphy, on constate qu'on s'est trompé, on corrige et on recompile Dans la partie void setup() : - Code:
-
pinMode(STOP_Z_1, OUTPUT); // met la broche STOP_Z_1 (30) en sortie
La ligne de code - Code:
-
digitalWrite(STOP_Z_1, DOIT_STOPPER);
va couper le courant dans la zone Z_1 "jusqu'à nouvel ordre". La ligne de code - Code:
-
digitalWrite(STOP_Z_1, PEUT_ROULER);
va rétablir le courant dans la zone Z_1 "jusqu'à nouvel ordre". (A suivre) |
| | | Contenu sponsorisé
| Sujet: Re: Module T-Trak quadruple Hieronymus-Station (Jicébé) | |
| |
| | | | Module T-Trak quadruple Hieronymus-Station (Jicébé) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |