LOCODUINO

Forum de discussion
Dépôt GIT Locoduino
Flux RSS

vendredi 23 juin 2017

32 visiteurs en ce moment

Un capteur RFID

Pour connaitre les numéros de trains à coup sûr !

. Par : Dominique

Il est difficile d’animer un réseau digital (en DCC  ) dans lequel peuvent évoluer plusieurs trains, avec des automatismes de conduite, sans que ceux-ci connaissent les numéros des trains.

La plupart des logiciels de pilotage demandent à l’opérateur de positionner les trains dans un état initial prédéterminé avant de démarrer. Mais la moindre désynchronisation peut aboutir à des catastrophes.

Certains systèmes adoptent la lecture d’un code-barre collé sous les locos.

Je vais présenter ici la solution basée sur la technologie RFID (radio identification).

RFID qu’est-ce que c’est ?

Selon Wikipedia, la radio-identification, le plus souvent désignée par le sigle RFID (de l’anglais radio frequency identification), est une méthode pour mémoriser et récupérer des données à distance en utilisant des marqueurs appelés « radio-étiquettes » (« RFID tag » ou « RFID transponder » en anglais).

Un système de radio-identification activé par un transfert d’énergie par onde électromagnétique se compose de marqueurs, nommés radio-étiquettes ou transpondeurs (de l’anglais transponder, en contraction des mots transmitter et responder) et d’un lecteur. Un marqueur est composé d’une puce et d’une antenne.

Voilà le détecteur-lecteur ID12 que j’ai choisi d’utiliser. Il n’y a pas beaucoup de choix d’ailleurs.

Ce détecteur est distribué par Sparkfun : choisir la version ID-12LA actuellement.

Il peut détecter la proximité de petites capsules de ce type :

J’en ai d’abord collé une sous une loco avec une goutte de colle epoxy, puis je me suis contenté de la placer dans un wagon du convoi. L’emplacement n’est pas critique et peut ainsi changer.

Tests d’un capteur RFID ID-12 de ID Innovations

Le schéma de montage est le suivant :

Avec un Arduino UNO, on connecte les pins suivantes de l’ID12 :

  • Pin 1 : Gnd au Gnd Arduino
  • Pin 2 : RST d’abord au +5V pour le programme de capture de tags, puis à la pin 13 Arduino pour le programme de reconnaissance
  • Pin 11 : +5V au +5V Arduino
  • Pin 7 : FS au Gnd
  • Pin 9 : D0 à la pin 0 (RX) de l’Arduino (débrancher ce fil lors des chargements de programme pour éviter un conflit avec l’IDE)

On trouvera des sketches de test sur le site Sparkfun :

J’utilise en fait 2 procédures :

  1. // -----------------------------------------------------
  2. // RFID
  3. // -----------------------------------------------------
  4.  
  5. void checkRFID1(void)
  6. {
  7. int readByte;
  8. while(Serial1.available()) {
  9. digitalWrite(13, HIGH); // led indicatrice de détection
  10. readByte = Serial1.read(); //lecture de l'octet suivant
  11. if(readByte == 2) RFIDreading1 = true; //debut de tag
  12. if(readByte == 3) RFIDreading1 = false; //fin de tag
  13. if(RFIDreading1 && (readByte != 2) && (readByte != 10) && (readByte != 13)) {
  14. tagString1[RFIDindex1] = readByte; //enregistrement du tag
  15. if (RFIDindex1 < 12) RFIDindex1 ++;
  16. }
  17. delay(10); // pour garantir l'arrivée du caractere suivant s'il existe
  18. }
  19. }
  20.  
  21.  
  22. ///////////////////////////////////
  23. //comparaison de 2 tags
  24. ///////////////////////////////////
  25.  
  26. boolean compareTag(char one[], char two[]){
  27.  
  28. if(strlen(one) == 0) return false; //vide
  29.  
  30. for(int i = 7; i < 12; i++){
  31. if(one[i] != two[i]) return false;
  32. }
  33.  
  34. return true; //valide
  35. }

Dans la routine checkRFID1(), je capture le tag envoyé par le détecteur et avec la routine compareTag(), je recherche si ce tag est bien parmi ceux attendus.

Premières conclusions

Ca marche ! Mais…
L’expérience à révélé 2 problèmes que j’ai contournés. Voici les résultats :

  • Si le détecteur ID12 est placé sous le support de voie, à environ 1 bon centimètre de la capsule, soit la moitié de la distance minimum de détection. La présence des rails métalliques et du moteur de la loco n’ont pas l’air d’affecter la détection (c’est une onde radio à 125 kHz, qui pourrait interférer avec le décodeur, mais en fait ça passe). Mais le gros SOUCI est la vitesse maxi de la loco : j’ai testé différentes vitesses et ça marche jusqu’à la valeur 36 sur un maximum de 128 (pour une commande DCC   en 128 pas), soit 1/3 de la vitesse maxi.
  • Finalement, j’ai testé un autre emplacement pour le détecteur : sur le coté de la voie, avec le transpondeur à l’intérieur d’un wagon (scotché sur la paroi latérale située du coté du détecteur). Et là les résultats sont plus qu’encourageants : la vitesse de détection est nettement meilleure et il semble qu’il n’y ait plus de vitesse limite.

Pour l’esthétique, le meilleur moyen est de cacher le détecteur dans une petite maison en bord de voie :

On verra plus loin qu’un autre emplacement bien pratique est "au-dessus" de la voie, ce qui n’est possible que dans un tunnel bien entendu.

Et si on voulait 2 détecteurs ?

Autre problème éventuel : Il est quasiment impossible de placer 2 détecteurs sur le circuit lorsque chaque détecteur est activé en permanence !

En effet, il se trouve que le détecteur émet des ondes à 125 kHz et le rayonnement est suffisant pour apporter l’énergie nécessaire à la capsule qui doit répondre aux interrogations du détecteur. Le détecteur est aussi très sensible pour recevoir le faible signal de réponse de la capsule. Tant qu’il n’y a qu’un seul détecteur, tout va bien car ce dernier émet et reçoit alternativement, jamais en même temps. Mais si deux détecteurs sont présents sur le circuit, il est impossible d’éviter qu’un détecteur ne reçoive pas le signal émis par un autre détecteur et alors les 2 détecteurs s’aveuglent mutuellement. Dans ce cas ils s’auto-inhibent et ne reçoivent plus rien.

Pour éviter cela, il faut faire fonctionner un seul détecteur à la fois ou blinder les zones de détection, ce qui est difficile !

J’ai donc décidé de limiter ma réalisation à un seul détecteur, ce qui est suffisant.

Et je trouve cela très encourageant, d’autant qu’il est facile de régler la position de l’ID12 et la capsule transpondeur se loge facilement dans quasiment tous les wagons et ne craint plus les perturbations éventuelles du moteur et du décodeur. Et tout est bien protégé de la poussière.

Tentative d’utilisation de 2 détecteurs

Si, comme c’est le cas pour moi dans mon nouveau réseau, celui-ci comporte deux sens de circulation indépendants, l’utilisation d’un seul détecteur RFID serait limitative.

En effet, pour détecter tous les trains, il faut qu’ils passent devant l’unique détecteur et cela impose des itinéraires non naturels, en tout cas peu commodes.

Le mieux serait donc d’utiliser deux détecteurs, l’un sur une des voies à une extrémité du réseau et l’autre sur la voie en sens inverse, à l’autre extrémité du réseau.

Pour qu’il puissent fonctionner tous les deux, le seul moyen est de les faire fonctionner à des instants différents, de préférence quand c’est nécessaire seulement.

J’ai donc imaginé le montage suivant que je réalise 2 fois :

Deux capteurs IR réflectifs (capteurs de distance) sont placés de part et d’autre du capteur RFID. Ils ont pour but de prévenir l’Arduino de l’approche d’un train. Dès qu’un train est détecté, le capteur RFID est mis en marche en libérant sa broche RESET. Dès qu’un train est bien détecté par le capteur RFID, celui-ci est placé de nouveau en hibernation en commandant sa broche RESET.

Le fait d’avoir un capteur de chaque coté du détecteur RFID permet d’en déduire aussi le sens de circulation du train.

Un petit montage de test donne ceci :

Les branchements sont les suivants :

  • La broche 4 de l’Arduino, programmée en sortie, est reliée à la broche 2 (Reset) de l’ID12.
  • La broche 5 de l’ID12 est reliée à l’entrée RX de l’Arduino.
  • Les broches 2 et 3 de l’Arduino, programmées en entrées, sont reliées aux sorties de 2 capteurs de distance réflectifs à infrarouge, du type TCR5000.

Le principe est simple : L’Arduino maintient sa broche 4 à LOW tant qu’aucun capteur IR n’a pas détecté de train d’un coté ou de l’autre.

Dès qu’un détecteur IR fait "monter" une des broches 2 ou 4, la broche 4 passe à HIGH et le capteur RFID fonctionne : il peut détecter la présence d’une capsule dans le train et transmettre son numéro au programme de gestion.

Le sens du train est déduit du fait qu’un des capteurs IR s’est manifesté avant l’autre. Le train "vient" du coté de ce capteur.

La probabilité que les 2 capteurs RFID, chacun associés à un Nano ou un Mini, par exemple et placés aussi loin l’un de l’autre que possible, soient activés en même temps, est très faible. Mais cela peut arriver. Dans ce cas la détection sera perdue, mais la détection suivante aura de bonne chance d’être valide. Petit à petit tous les trains seront bien détectés.

Conclusion

Le choix du RFID est interessant parce que c’est facile à intégrer à un projet Arduino et qu’il n’y a pas de carte électronique à développer.
A ce propos, Sparkfun distribue le nouveau module ID12LA qui semble plus intéressant (plus grande plage de tension d’alimentation), mais toujours à 29$.

Je suis totalement satisfait de la solution RFID. J’ai réalisé un suivi de mes trains en plaçant le lecteur en sortie de gare, point de passage obligatoire du trafic.

La connaissance de la position des trains est ainsi totalement dynamique. Le système découvre les trains les uns après les autres, n’empêchant aucune manœuvre manuelle.

Le TCO affiche les numéros de trains dans chaque canton à l’aide d’un afficheur à 7 segments.

A partir de cette connaissance des positions, j’ai réalisé un block-système simple.

7 Messages

Réagissez à « Un capteur RFID »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

Un chenillard de DEL

Enseigne de magasin

Feux tricolores

Multi-animations lumineuses

L’Arduino et le système de commande numérique DCC

Un décodeur d’accessoire DCC versatile basé sur Arduino

Un moniteur de signaux DCC

Une barrière infrarouge

Un capteur RFID

Un TCO xpressnet

Une animation sonore

L’Arduino au coeur des systèmes de pilotage analogiques ou numériques

Calcul de la vitesse d’un train miniature avec l’Arduino

La génèse d’un réseau 100% Arduino

Une horloge à échelle H0

Simulateur de soudure à arc

Un automatisme de Passage à Niveau

La rétro-signalisation sur Arduino

Décodeur pour aiguillage à solénoïdes sur Arduino

Un décodeur DCC pour les signaux à deux ou trois feux sur Arduino NANO/UNO

Etude d’un passage à niveau universel

Réalisation pratique d’un système de mesure de vitesse à l’échelle N

Une Passerelle entre le bus S88 et le bus CAN pour la rétro signalisation

Un décodeur DCC pour 16 feux tricolores

Block Automatique Lumineux avec la carte shield "Arduino 4 relays"

Réalisation d’un affichage de gare ARRIVEE DEPART

Comment piloter trains et accessoires en DCC avec un Arduino (1)

Comment piloter trains et accessoires en DCC avec un Arduino (2)

Comment piloter trains et accessoires en DCC avec un Arduino (3)

Comment piloter trains et accessoires en DCC avec un Arduino (4)

SGDD : Système de Gestion DD (1)

SGDD : Système de Gestion DD (2)

SGDD : Système de Gestion DD (3)

La PWM : Qu’est-ce que c’est ? (1)

La PWM : Qu’est-ce que c’est ? (2)

La PWM : Qu’est ce que c’est ? (3)

La PWM : Qu’est ce que c’est ? (4)

Mise en oeuvre du Bus CAN entre modules Arduino (1)

Mise en oeuvre du Bus CAN entre modules Arduino (2)

Un gestionnaire en C++ pour votre réseau (1)

Un gestionnaire en C++ pour votre réseau (2)

Un gestionnaire en C++ pour votre réseau (3)

Un gestionnaire en C++ pour votre réseau (4)

Réalisation de centrales DCC avec le logiciel libre DCC++ (1)

Réalisation de centrales DCC avec le logiciel libre DCC++ (2)

Réalisation de centrales DCC avec le logiciel libre DCC++ (3)

Contrôleur à télécommande infrarouge pour centrale DCC++

Gestion d’une gare cachée (1)

Gestion d’une gare cachée (2)

Gestion d’une gare cachée (3)

Les derniers articles

La PWM : Qu’est ce que c’est ? (4)


Jean-Luc

Block Automatique Lumineux avec la carte shield "Arduino 4 relays"


Christian Bézanger

Réalisation d’un affichage de gare ARRIVEE DEPART


Gilbert

Contrôleur à télécommande infrarouge pour centrale DCC++


Daniel

La PWM : Qu’est ce que c’est ? (3)


Jean-Luc

Réalisation de centrales DCC avec le logiciel libre DCC++ (3)


bobyAndCo

Un gestionnaire en C++ pour votre réseau (4)


Pierre59

Un décodeur DCC pour 16 feux tricolores


Dominique, JPClaude, Thierry

Réalisation de centrales DCC avec le logiciel libre DCC++ (2)


bobyAndCo

Réalisation de centrales DCC avec le logiciel libre DCC++ (1)


Dominique

Les articles les plus lus

La PWM : Qu’est-ce que c’est ? (1)

Comment piloter trains et accessoires en DCC avec un Arduino (1)

Mise en oeuvre du Bus CAN entre modules Arduino (2)

Comment piloter trains et accessoires en DCC avec un Arduino (3)

Mise en oeuvre du Bus CAN entre modules Arduino (1)

L’Arduino et le système de commande numérique DCC

La rétro-signalisation sur Arduino

Une barrière infrarouge

Calcul de la vitesse d’un train miniature avec l’Arduino

Réalisation de centrales DCC avec le logiciel libre DCC++ (3)