Parlons Arduino > Débuter

Apprentissage electronique et arduino pour résau ferroviaire

(1/2) > >>

Dlpmaire:
Bonjour,

Suite au cours de Christian Bézanger sur l'éléctronique je me suis inspiré pour découvrir la programmation de l'arduino dans le but "d'informatiser"mon futur réseau : le "Train Des Alpes"

J'ai donc formalisé le contenu du chapitre 23 "La commande du réseau".

J'ai utilisé un arduino Nano et un ecran LCD_I2C.
Je me suis appliqué à comprendre le fonctionnement les différentes phases du programme en y indiquant le déroulé sur un écran LCD (avec la fonction "afficheLcd") et le moniteur de l'IDE (avec la fonction "sp").

Le programme se veut avant tout didactique pour moi en vue de me sensibiliser à la programmation.

Des photos et le programme joints seront plus utiles pour la compréhension de mon petit montage.

Je prévois d'améliorer ce tableau de commande en y ajoutant deux bandes de led néopixel pour simuler le déplacement des trains mais là il faudra prévoir un arduino micro voir un arduino Uno.......

Je tiens à remercier Christian Bézanger pour la qualité des ses articles.

Dlpmaire

Dlpmaire:
Bonjour,

J'ai apporté une amélioration toujours dans un but didactique avec la création d'une "BASCULE" permettant ainsi de choisir le mode manuel ou automatique au niveau de l'ILS: manuel on appuie le bouton ILS),  automatiquement (plus besoin d'appuyer sur le bouton ILS).

Pour ceux qui ont téléchargé le 1er fichier de programmation voici le nouveau.... il a été modifié, pour être le moins possible dans la répétion des données et alléger ainsi le programme.
Les Portions d'arrêt sont représentées en Tension avec led allumée, Hors Tension avec led éteinte.
Activation de la boucle While controlant l'ILS ou non.
Innitialisation de l'interrupteur nommé "BASCULE".

J'attends le ruban de  "led néopixel". A leur reception on améliorera..... A suivre.....

Bien à Vous

Dlpmaire

bobyAndCo:
Bonjour,

Je me permets juste une petite suggestion concernant les lignes 153 à 157 de ton code :


--- Code: ---//Selection mode auto_manuel
  if (digitalRead(BASCULE) ==  1) {
     while (digitalRead (ILS) == HIGH) {   // on attent le retour du train 1
     }
  }
--- Fin du code ---

La boucle while est infinie si aucun événement ne se produit, ici tant que ILS == HIGH. Or on sait qu'un ILS peut être un peu "capricieux". Quid donc si ton train passe sur l'ILS qui ne commute pas ?



Il serait à mon sens judicieux de dire que si au bout de x secondes l'ILS ne s'est pas commuté, alors j'arrête le train. Le principe du conducteur qui lâche les commandes d'un train trop longtemps.

Par ailleurs, puisque tu dis que ton montage à un "but didactique", je pense que tu devrais utiliser les interruptions pour détecter la commutation de ton ILS. Voir l'article de Jean-Luc à ce sujet : http://www.locoduino.org/spip.php?article64

Comme je le disais plus haut, les boucle while sont infinie et bloquent finalement le programme si l'événement ne se produit pas. Sous interruption, c'est l'inverse, le programme se déroule, jusqu'à ce qu'un événement soit intercepté. Plus prudent et élégant à mon sens.

Bien amicalement.

Christophe

Dlpmaire:
Bonjour,

Merci pour pour la suggestion. En effet si ma loco faute à un disfonctionnement venait à sortir du réseau et à choir sur le sol, cela ne ferait pas propre  :) :)

Pour le "but didactique" de mon montage, comme tu le soulignes, il est didactique avant tout pour mon apprentissage de la programmation pour un réseau ferroviaire.

Je vais donc suivre ton conseil et me pencher sur la notion d'interruption d'autant que je découvre la gestion des cantons et leur signalisation avec comme délimitation des ILS (à lame souple). A ce sujet je me demande si le capteur infrarouge serait plus fiable ou non ?

Bien à Toi

Daniel

bobyAndCo:
Bonsoir Daniel,

Concernant l'ILS, il n'y a pas particulièrement de problème de fiabilité (pas plus que pour un IR) si l'on respecte bien les pullup (ou pulldown). C'est surtout que le temps de commutation peut être très court et si la boucle (loop) est longue à s'exécuter, cette commutation peut être ignorée par le programme. Problème résolu dans le cas de l'interruption. Néanmoins, il est sans doute prudent d'avoir deux modes de détection : soit deux ILS à quelques centimètres de distance, soit un ILS et un IR ou détection de courant. Personnellement je me simplifierais la vie avec deux ILS.

Par ailleurs, si le temps de parcours jusqu'à l'ILS est à peu près constant, tu peux mettre une sécurité qui arrête ta loco avec la fonction millis() si le ou les ILS n'ont pas commutés après ce temps plus quelques secondes ou dizaines de secondes.

Bien amicalement.

Christophe 

Navigation

[0] Index des messages

[#] Page suivante

Utiliser la version classique