mercredi 31 octobre 2012

Un peu d'électronique


24 mars 2013: voir la note que j'ai ajouté ce jour concernant le Loconet Shield de John Plocher. Cependant, le plan présenté plus bas pour un montage sur un Veroboard fonctionne...
March 24th, 2013: please refer to the entry of that date about an error in the Loconet Shield Gerber files. However, my version built on a Veroboard (that can be found above) works well.

Attention: l'auteur de ce blog dégage toute responsabilité quant à l'utilisation des montages électriques et électroniques décrits dans ces pages. Il incombe au lecteur d'agir avec prudence lorsqu'il s'agit d'utiliser tout dispositif électrique.


Que faire après une journée de travail déconcertante? Passer une bonne soirée à bricoler sur son réseau!!! Et pour rendre cette tâche encore plus agréable, pourquoi ne pas se consacrer à la réalisation d'un petit montage électronique afin d'utiliser un Arduino dans un contexte de gestion de réseau?

Tout d'abord, qu'est-ce qu'un Arduino? Il s'agit d'un micro-contrôleur programmable capable d'exécuter un micro-programme et d'interagir avec son environnement à l'aide de ports d'entrée/sortie. Son architecture est open-source ce qui signifie que tous les plans sont disponibles et que de nombreux fabricants produisent différents modèles d'Arduino. Aussi, son prix est très accessible: les premiers modèles varient entre 15 et 30$. Pour de plus amples informations et pour examiner toutes les variantes basées autour de ce micro-contrôleur, je vous invite à consulter le site original. Dans mon cas, j'utilise le modèle le plus courant: un Arduino Uno.

Je connaissais l'existence de ce micro-contrôleur depuis quelques temps déjà, mais je ne m'y étais jamais intéressé de près... C'est maintenant chose faite! Ce micro-contrôleur va me permettre de concrétiser quelques projets que j'ai en tête depuis longtemps et qui auraient nécessité un design électronique conséquent et hors de portée (en ce qui me concerne...). La facilité d'utilisation et de programmation de ce micro-contrôleur rend la tâche beaucoup plus simple, même s'il reste qu'en même un minimum d'électronique (élémentaire) à faire. Le succès de cet Arduino tient du fait que toute la logique hard qu'il était nécessaire de designer en électronique est maintenant convertie en logique soft programmable. L'interface avec l'environnement (entrées/sorties) reste constante. Seul le micro-programme change en fonction des besoins!

Mon premier projet est une interface LocoNet, condition nécessaire à la réalisation des projets suivants... LocoNet est le protocole créé par Digitrax pour communiquer entre la centrale DCC et tous les composants d'un réseau (commandes, cartes de détection, décodeurs, etc...). Avec cette interface, je vais être capable de lire et d'interpréter les informations qui circulent sur le réseau ainsi que d'envoyer des commandes spécifiques au besoin.

Pour cela, je me suis inspiré du travail de John Plocher et plus spécialement de son interface LocoNet. N'ayant aucun moyen à ma disposition pour réaliser le PCB, j'ai converti le schéma logique afin d'implanter les composants sur une plaque Veroboard (d'un accès beaucoup plus simple et ne nécessitant aucun équipement particulier puisqu'il suffit de souder les composants dessus).

Le schéma de l'interface sur le site de John Plocher.



Mon implantation sur un VeroBoard.

Bien évidemment, mon schéma est réalisé avec les moyens du bord et un simple logiciel de dessin... La liste des composants est disponible sur le site de John Plocher. Je ne rentrerai pas dans les détails pour indiquer seulement une simplification: les points de couleurs vert, rouge, bleu, blanc, jaune et noir en haut du schéma correspondent aux couleurs des fils d'un câble LocoNet. Lors de la réalisation de ce montage, j'ai simplifié la démarche en supprimant les prises RJ12 femelles pour souder directement les fils de deux câbles LocoNet. Cela revient au même... Ce montage ne coûte que quelques dollars et prend moins d'une heure à réaliser.

Ensuite, il est nécessaire de charger le micro-programme qui permet de décoder les paquets LocoNet transitant par le bus. Ce micro-programme est compilé puis chargé dans l'Arduino à l'aide des outils fournis avec celui-ci.

Ici aussi, je ne rentrerai pas dans les détails puisque de nombreux exemples de code source sont disponibles. Je vous renvoie au projet open-source écrit par Alex Shepherd et intitulé mrrwa (Model RailRoad With Arduino) créant l'interface logicielle entre le bus LocoNet et l'Arduino. Entre parenthèse, il doit être assez facile d'écrire une librairie équivalente basée sur un autre protocole. Je n'ai pas fait de recherche sur le web mais peut-être que de telles variantes ont déjà été développées...

Place aux résultats...


De gauche à droite, l'Arduino Uno, l'interface LocoNet sur un Veroboard et les câbles LocoNet. Une fois l'un des câbles connecté à ma centrale Zephyr, je suis capable de visualiser les informations qui circulent sur le bus LocoNet sous forme de paquets d'octets:


On peut distinguer entre autres, les informations de vitesse envoyées à un décodeur par la centrale, le feedback des détecteurs de position et l'envoi d'une commande à un aiguillage...

Pour résumer:
  • les informations sous forme de paquets d'octets transitent par le câble LocoNet
  • ce câble est connecté à l'interface LocoNet qui convertit le train de bits en impulsions 0-5V et les transmet à l'Arduino par un des ports d'entrée
  • l'Arduino, qui exécute en boucle le micro-programme, interprète les impulsions captées par le port d'entrée et les transforme en messages
  • l'Arduino communique avec l'ordinateur par le port USB (qui sert aussi lors de la programmation) et les messages sont affichés dans une console.
Il suffit ensuite de gérer ces messages et, pourquoi pas, contrôler un des ports de sortie en fonction d'un évènement précis. Dans cette exemple, il serait facile de relier des LEDs aux différents ports de sortie de l'Arduino et contrôler leur allumage. Les messages, envoyés par les détecteurs de présence sur le bus LocoNet et interprétés par l'Arduino, permettraient d'allumer telle ou telle LED sur un TCO...

Voilà! Ce premier montage me permet de communiquer et d'interagir avec le bus LocoNet. Il ne reste plus qu'à trouver des applications intéressantes utilisant cette interface. Mais j'aurai l'occasion d'y revenir...



7 commentaires:

  1. Bonjour Patrick,

    Ça avance bien, dis-donc!
    Je vois que toi aussi, tu aimes taquiner l'électronique :-)
    Au fait, je crois que Jean-Pierre a dans ses projets, de valider le protocole Loconet aussi.

    Et merci pour ces explications!

    Guy

    RépondreEffacer
  2. Salut Guy,

    Oui, je ne dédaigne pas faire un peu d'électronique, mais il faut que ce soit simple. J'ai assez peu de formation (quelques cours à l'université) et seulement un peu de pratique lors de la réalisation de petits montages comme celui-ci. L'arduino, comme je l'ai indiqué dans cet article, permet de simplifier grandement les choses et de limiter la partie électronique à de petits montages simples et à peu près toujours les mêmes...

    Je suis content d'apprendre que JP s'intéresse au protocole Loconet. Il m'en avait déjà parlé il y a bien 2 ou 3 ans... Si jamais vous avez besoin d'info à ce sujet, je pourrai peut-être vous aider un peu...

    Concernant les prochains travaux autour de l'Arduino, j'ai quelques projets comme la réalisation d'automates DCC ou de décodeurs pour signalisation SNCF complexe... De heures de plaisir!

    Patrick

    RépondreEffacer
  3. Bonjour
    je suis Béotien en électronique.
    J'ai une Lokmaus, si je m'équipe avec arduino et quelques détecteurs (je sais pas les quel)puis-je facilement faire un "va et vient" avec une loco

    Merci

    RépondreEffacer
  4. Ce commentaire a été supprimé par l'auteur.

    RépondreEffacer
  5. Bonjour,

    Le principe du fonctionnement d'un automate est lié principalement à la capacité de lire et d'écrire des informations DCC et/ou protocole de la centrale. En fait, l'automate doit être capable de parler le même langage que celui de la centrale puisqu'il se substitue à elle en quelque sorte... Donc, la première étape consiste à développer une librairie de fonctions afin d'interpréter et d'envoyer les bons signaux électriques sur le bus de communication, les rails et les détecteurs. C'est le plus gros du travail à réaliser (dans mon cas, il s'agit de la librairie Loconet). Si vous n'êtes pas particulièrement à l'aise en informatique, je vous conseille de faire des recherches sur internet afin de trouver cette librairie déjà réalisée. Mais je ne sais pas si elle existe...

    Ensuite, il est nécessaire de programmer "l'automate logique" qui réagira à la présence de la locomotive dans tel ou tel canton et qui enverra les commandes d'arrêt et de démarrage à la locomotive. Ceci est la partie la plus simple puisqu'elle se résume à quelques lignes: "Si locomotive 1 en zone A alors stop. Attente de 5s. Positionner aiguillage 3 à gauche. Démarrage locomotive 1 en direction inverse. etc...". Chaque évènement correspond à une commande de la centrale. Sur ce point, je peux vous aider en vous communiquant des exemples d'automates que j'ai réalisés. Ils seront facile à adapter à vos besoins.

    Dernier point, mes automates sont "très simples" et ne permettent pas d'être programmés en direct par une centrale. Dans ce contexte, le terme "programmer" signifie deux choses: la programmation de l'automate au sens "informatique" (écrire la logique) et la programmation des fonctionnalités au sens "décodeur" (comme programmer une adresse de locomotive). Donc, si vous utilisez l'automate pour une locomotive précise d'adresse 1, il faudra redévelopper ou du moins modifier le programme de l'automate afin de l'utiliser avec une autre adresse, etc... Il serait possible d'ajouter un mode de programmation au sens "décodeur" du terme afin de modifier l'adresse de la locomotive à utiliser, mais je ne l'ai pas fait.

    Pour résumer:
    - trouver/développer une librairie de communication pour l'Arduino qui comprendra le protocole de la Lokmaus. Si vous avez cela, alors le reste est simple...
    - développer un automate qui réponde à vos besoins;
    - implanter le tout sur votre réseau.

    J'espère avoir clarifié le travail à faire. Si vous avez d'autres questions, n'hésitez pas. Je pourrai essayer de vous aider du mieux que je peux.

    Patrick

    RépondreEffacer
  6. Marc,

    J'ai oublié de mentionner que je ne sais pas si l'interface électronique (réalisée à partir des plans de John Plocher) qui fait le lien entre l'Arduino et le bus Loconet soit utilisable avec une autre centrale et/ou un autre protocole. Je ne connais ni la tension utilisée avec la Lokmaus, ni le protocole de communication, etc... L'exemple que je donne ici est adapté uniquement à une utilisation avec Digitrax/Loconet.

    Il me semblait bon de le préciser...
    Patrick

    RépondreEffacer
    Réponses
    1. Bonjour
      merci, je assimiler tous cela, et si je me sens de taille je me lancerais dans l'aventure

      Marc

      Effacer