LOCODUINO

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

mardi 19 mars 2024

Visiteurs connectés : 24

Une barrière infrarouge

Simple mais avec de multiples possibilités grâce à l’Arduino

.
Par : Dominique

DIFFICULTÉ :

Pour détecter le passage des trains, plusieurs solutions sont possibles. La plus populaire est la détection de courant car elle est invisible mais elle nécessite de couper un rail.

Mais la barrière infrarouge a tout de même ses avantages :

  • Pas de coupure de rail,
  • Pas de chute de tension d’alimentation des rails (c’est indépendant)
  • On détecte la tête et la queue du train à un point précis du circuit !

<

Commençons par un exemple. Le schéma est simple.

Les ingrédients :

  • Un diode émettrice SFH415, émettant une lumière infrarouge de longueur d’onde 950 nano-mètre (nm pour les intimes). Il est important de noter cette longueur d’onde car le récepteur doit être accordé sur cette même valeur. Il est aussi préférable de choisir un diode dont l’angle d’ouverture est assez faible pour éviter d’influencer d’autres récepteurs. Cette diode est alimentée exactement comme une diode LED à lumière visible, avec une résistance série de 470Ω soit un courant de 10 mA sous 5V. Voir à ce propos « Fonctionnement et pilotage d’une DEL ».
  • Une diode réceptrice SFH205 dont la plage de réception est centrée sur 950 nm. Cette diode est montée en inverse et en série avec un résistance de forte valeur (220 KΩ). En présence de lumière infrarouge, un effet d’avalanche permet le passage d’un faible courant (25 micro-ampères) qui ne peut être détecté que par l’intermédiaire d’un amplificateur, ici un simple transistor.
  • N’importe quel transistor NPN devrait faire l’affaire. J’en ai profité pour utiliser mes fonds de tiroirs.
  • Une résistance de 2,2KΩ alimente le collecteur du transistor. C’est là qu’on récupère le signal de détection.
  • Une capacité de 10 microFarad stabilise le 5V au plus près du montage. N’oublions pas que nous sommes dans un milieu fortement parasité.
  • Un bornier à 3 points : +5V, Gnd et signal. On aurait pu aussi souder un de ces câbles à 3 conducteurs avec une prise femelle 3 points à un extrémité, qui servent beaucoup en radiocommande.

Voici un exemple de réalisation de 2 détecteurs dont j’ai monté les composants discrets sur une plaque pastillée. Les diodes sont soudées sur les connecteurs 2 points et raccordées au montage avec des fils assez longs pour pouvoir les placer facilement dans le décor en passant par des trous aménagés à cet effet.

On place les diodes IR émettrice et réceptrice de chaque coté des rails, de sorte que l’émettrice arrose la réceptrice. Ici le faisceau de l’émettrice est émis dans l’axe de la diode (son bout bombé sert de lentille convergente). La surface sensible de la réceptrice est la face bombée.

Il faut lire attentivement les fiches caractéristiques pour trouver ces détails primordiaux (sinon ça ne marche pas !).

Bien entendu, il faudra cacher ce détecteur dans le décor. Pour la diode réceptrice, j’ai confectionné une petite cabine technique de bord de voie avec une ouverture coté voie pour la réception de la lumière infrarouge. La diode émettrice est intégrée dans les buissons et les arbres du décor.

Astuce : Pour savoir si la diode émettrice fonctionne bien, on utilise un smartphone en mode appareil photo. La lumière infrarouge est visible par la caméra du smartphone et on la voit allumée.

La gestion du capteur par l’Arduino

Raccordons le signal sur une entrée digitale (il faut une entrée par capteur).

Un programme simple permet de tester le bon fonctionnement du capteur :

const int IRDetectorPin = 2;
const int ledPin =  13;

void setup() {
  pinMode(ledPin, OUTPUT);      
  pinMode(IRDetectorPin, INPUT);     
}

void loop(){
    digitalWrite(ledPin, digitalRead(IRDetectorPin));  
}

Ce programme se contente de recopier l’état du détecteur sur la led : celle-ci s’allume quand la barrière est interrompue.

La détection sophistiquée de la tête et la queue du train

Avec une dose plus importante de logiciel, on peut faire des miracles : Ce morceau de programme va :

  • valider la détection de début et de fin de convoi après une petite temporisation pour éliminer les détections parasites (moustique passant pas hazard)
  • éliminer les "trous" entre voitures ou wagons, par une autre temporisation

Ce croquis est tiré de l’exemple « Debounce » de l’IDE :

// constantes (car elles ne changent pas)
const int IRDetectorPin = 2; // pin du detecteur IR
const int ledPin = 13;       // pin de la LED

// Variables (car elle changent)
int ledState = LOW;      // led eteinte
int IRState;             // etat courant du detecteur IR
int lastIRState = LOW;   // etat precedant du detecteur IR (pour detecter un changement)

// variable de temps en millisecondes
long lastDebounceTime = 0;   // derniere fois que le detecteur a change
long debounceDelay = 1000;   // delai d'une seconde pour valider un changement

//------------------- SETUP ----------------
void setup() {
  pinMode(IRDetectorPin, INPUT);
  pinMode(ledPin, OUTPUT);

  // initialisation de la led
  digitalWrite(ledPin, ledState);
}

//-------------------- LOOP ----------------
void loop() {
  // lecture du detecteur IR dans une variable locale
  int reading = digitalRead(IRDetectorPin);

  // si le faisceau est coupe (reading == HIGH ou 1)
  // on attend assez longtemps pour ignorer les detections parasites
  // et en particulier les intervalles entre wagons 

  // le detecteur a-t-il change
  if (reading != lastIRState) {
    // armement du timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // si le delai est atteint, le changement est valide
    // sinon le changement est ignore (parasite ou inter-wagon)

    // changement valide
    if (reading != IRState) {
      IRState = reading;
      // on repercute le changement sur le led
      ledState = IRState;
      digitalWrite(ledPin, ledState);
      
      // si IRState est HIGH, il s'agit de la tete du train
      // *** appeller ici le traitement de tete de train
      // par exemple : l'entree du train dans un canton
      
      // si IRSate est LOW, il s'agit de la queue du train
      // *** appeller ici le traitement de queue de train
      // par exemple : la sortie effective du canton 
      }
    }
   // on sauve l'etat du detecteur pour le tour de loop suivant
  lastIRState = reading;
  // ainsi, le moindre changement avant la fin du delai debounceDelay
  // va reinitialiser ce delai

}

Autre astuce, pour la maintenance des détecteurs

J’utilise une entrée analogique de l’Arduino. Ainsi, je peux faire, par logiciel, soit une mesure analogique (0..1023), soit une mesure digitale (0 ou 1) de la sortie du détecteur.

En effet, comme les diodes émettrices sont équipées d’une lentille convergente qui donne un faisceau très étroit, et comme on ne voit rien à l’oeil nu, il peut être difficile de réaliser un bon alignement de la led IR et du capteur. En faisant une lecture analogique, on obtient une valeur qui dépend de l’alignement. Cette valeur doit être la plus faible possible quand les 2 diodes se voient. Cela doit correspondre au niveau 0 logique.

Quand la lumière ne passe pas, la valeur est maximum, ou alors une lumière parasite vient perturber le capteur !

Dans ma réalisation, j’ai divisé la valeur analogique (0..1023) par 100 et je l’affiche sur un afficheur à 7 segments ou un LCD dans un mode calibrage. Je bouge alors la diode émettrice pour trouver une valeur inférieure ou égale à 2. Ainsi, je suis certain que la lecture digitale ensuite sera correcte.

Cette astuce va s’avérer très utile car les diodes sont parfois chahutées pendant la construction du décor et il faut permettre une maintenance facile des capteurs.

71 Messages

Réagissez à « Une barrière infrarouge »

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 »

LaBox, Une Centrale DCC polyvalente et abordable (1)

LaBox, Une Centrale DCC polyvalente et abordable (2)

LaBox, Une Centrale DCC polyvalente et abordable (3)

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)

La carte Satellite V1 (1)

La carte Satellite V1 (2)

La carte Satellite V1 (3)

La carte Satellite V1 (4)

La carte Satellite V1 (5)

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

Automatisation du pont FLEISCHMANN 6152 (HO) avec un ESP32 (1)

Identifier et localiser vos trains avec le RFID/NFC et un bus CAN.

Etude d’un passage à niveau multivoies

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

Ménage à trois (Ordinateur, Arduino, réseau)

Réalisation d’un va-et-vient automatique et réaliste

Souris et centrale sans fil

Communications entre JMRI et Arduino

Annonces en gare avec la RFID

Une croix de pharmacie animée avec Arduino UNO

Réalisation d’un wagon de mesure (distance et vitesse)

Passage à niveau géré par Arduino (1)

Passage à niveau géré par Arduino (2)

Passage à niveau géré par Arduino (3)

Passage à niveau géré par Arduino (4)

Passage à niveau géré par Arduino (5)

Une manette simple et autonome pour LaBox

Éclairer le réseau (1)

Éclairer le réseau (2)

Block Automatique Lumineux à 8 cantons analogiques

Un décodeur DCC pour les plaques tournantes Fleischmann et Roco

Éclairer le réseau (3)

Éclairer le réseau (4)

Éclairer le réseau (5)

JMRI pour Ma première centrale DCC

Rocrail pour Ma première centrale DCC

CDM-Rail pour Ma première centrale DCC (1)

CDM-Rail pour Ma première centrale DCC (2)

Banc de test pour les décodeurs DCC

Ma première manette pour les aiguillages DCC

Mon premier décodeur pour les aiguillages DCC

Boitier 3D pour la station DCC minimale

Va-et-vient pour deux trains

Un programme pour régler facilement les servos moteurs avec un ESP32

Affichage publicitaire avec Arduino (1)

Affichage publicitaire avec Arduino (2)

TCO Web interactif avec des ESP32 et des ESP8266 (1)

TCO Web interactif avec des ESP32 et des ESP8266 (2)

TCO Web interactif avec des ESP32 et des ESP8266 (3)

TCO Web interactif avec des ESP32 et des ESP8266 (4)

TCO Web interactif avec des ESP32 et des ESP8266 (5)

Les derniers articles

LaBox, Une Centrale DCC polyvalente et abordable (3)


Thierry

LaBox, Une Centrale DCC polyvalente et abordable (1)


Thierry

LaBox, Une Centrale DCC polyvalente et abordable (2)


Dominique, msport, Thierry

Un programme pour régler facilement les servos moteurs avec un ESP32


bobyAndCo

TCO Web interactif avec des ESP32 et des ESP8266 (5)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (4)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (3)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (2)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (1)


utpeca

Affichage publicitaire avec Arduino (2)


catplus, Christian

Les articles les plus lus

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

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

Mon premier décodeur pour les aiguillages DCC

La rétro-signalisation sur Arduino

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

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

Chenillard de DEL

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

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

LaBox, Une Centrale DCC polyvalente et abordable (1)