kit IR

 

Télécommande et récepteur infrarouge associée à un Arduino commandée ce jour.

Description :


Ce kit Arduino infrarouge se compose d'une télécommande infrarouge ultra-mince et d'un module récepteur infrarouge. Avec 20 touches de fonction, elle est efficace jusqu'à 8 mètres ce qui sera  idéal pour le traitement d'une variété d'équipements sur nos maquettes.

Spécifications :

Distance de transmission: jusqu'à 8m (en fonction de l'environnement, de la sensibilité du récepteur, etc.)
Batterie: CR2025 pile bouton
Capacité de la batterie: 160mAh
Angle effectif: 60 °
Durée de vie effective: 20.000 appuis

Objectif du projet

Nous voulons que le passage d’un train en entrée de canton déclenche un relais.

Un train est composé (et cela aura un impact direct sur la programmation du capteur) :

d'une locomotive dont le franchissement du capteur déclenche la détection de l'arrivée d'un train dans la canton , avec une période de validation nécessaire pour être sûr de cette présence,

d'un nombre aléatoire de wagons liés entre eux par des attelages qui font pendant un cours instant (à durée variable en fonction de la vitesse du train et du profil de chaque wagon) une non détection de sa présence,

d'un dernier wagon dont la fin de passage devant le capteur annonce une fin de convoi au terme d'une temporisation au moins plus longue que la durée observée entre deux wagons attelés.

Les constituants de ce système sont :

un Arduino,

un programme selon le cahier des charges ci-dessus,

un capteur infrarouge (avec une diode émettrice et une diode réceptrice) qui va donner une information de nature tout ou rien: le train est passant ou il ne l’est pas,

un relais qui actionné permet de signaler le passage du train.

Le capteur fournit donc la condition initiale: le train est probablement présent. Le programme fournit donc la condition finale «le train est présent» et la série d’instructions à exécuter en boucle correspond à «on fait coller le relais si le train est déclaré présent».

Seuls quelques tests en vraie grandeur permettront de valider les différents paramètres à fixer pour atteindre un taux d'acceptation de la condition finale.

Le programme côté réception

L’instruction basique permettant de faire coller le relais si le train est présent est le if ... else (si … sinon en français).

La syntaxe générale est la suivante:

if (condition: le train est là )

{

// instruction(s) exécutée(s) si cette condition est vraie

}

else

{

// instruction(s) exécutée(s) si la condition est fausse

}

Notez bien les paires d’accolades ouvrantes et fermantes qui délimitent les séries d’instructions. Notez également les parenthèses autour de la condition.

Pour revenir à notre système, supposons que le capteur soit connecté à la broche 2 de l’Arduino et qu’il fournisse HIGH, c’est à dire 5V, si le train est passant et LOW, c’est à dire 0V, si il n’est pas présent.

La condition pour faire coller le relais est donc que le capteur fournisse HIGH.

Pour commencer en respectant les bonnes pratiques, définissons la constante pinCapteur et donnons lui la valeur 2.

const byte pinCapteur = 2;

Évidemment pour que tout cela puisse fonctionner il faut que la broche 2 soit programmée en entrée et que le programme lise la valeur fournie par le capteur.

Pour programmer la broche 2 en entrée, la fonction pinMode(...) est également employée mais son second argument doit être INPUT, «entrée» au lieu de OUTPUT.

Ceci vient se loger dans setup() :

void setup()

{

pinMode(pinCapteur, INPUT);

}

Pour lire la valeur fournie par le capteur, nous allons utiliser la fonction digitalRead(...).

L’unique argument de digitalRead(...) est le numéro de broche. Jusqu’ici nous n’avons vu que des fonctions qui ne retournent aucune valeur, c’est à dire dont le type est void.digitalRead(...) retournent une valeur, un int, qui est l’état de la broche, HIGH ou LOW.

Dans notre cas, la condition du if est une simple comparaison, on veut comparer la valeur renvoyée par digitalRead(pinCapteur) avec HIGH. La condition est vraie si les deux sont identiques. Cette comparaison est effectuée avec l’opérateur == . Ainsi :

digitalRead(pinCapteur) == HIGH

sera vrai si digitalRead(pinCapteur) retourne HIGH et faux s'il retourne LOW.

On a parlé de vrai ou faux. Sur l’Arduino, deux constantes sont définies et disponibles : true (vrai) et false (faux). Un type boolean existe également. Toutefois, il s’agit en fait de nombres false vaut 0 et true vaut 1. Une comparaison retourne donc un nombre, 0 ou 1.

Si l'on voulait tester notre programme on pourrait utiliser la led sur l'Arduino dont l'adresse est 13.

const byte pinCapteur = 2; // le capteur est connecté sur la broche 2

const byte pinDEL = 13; // on utilise la Led de la carte sur la broche 13

void setup()

{

pinMode(pinCapteur, INPUT); // on veut lire le capteur

pinMode(pinDEL, OUTPUT); // on veut piloter la led

}

void loop()

{

if (digitalRead(pinCapteur) == HIGH) { // si un train est détecté

digitalWrite(pinDEL, HIGH); // allume la led sur l'Arduino

}

else

{ // si aucun train n'est détecté

digitalWrite(pinDEL, LOW); // éteint la led sur l'Arduino

}

}

Amélioration de la détection du train

Les if imbriqués

Le if étant une instruction, il peut tout à fait être utilisé à l’intérieur d’un autre if. Supposons que notre capteur ait des sautes d’humeur, de temps en temps il est perturbé par des éléments extérieurs et envoie de courtes impulsions de moins de 10ms comme si un train était présent alors que ce n’est pas le cas. Ce genre de problème arrive plus souvent qu’on ne croit en présence d'un éclairage ambiant par exemple.

Pour corriger ce problème, il suffit de lire une seconde fois le capteur après un délai de 10ms (durée à fixer au cours de tests en vraie grandeur) et s'il renvoie à nouveau HIGH alors il y a bien un train, sinon ce n’est pas le cas.

loop() deviendrait donc:

void loop()

{

if (digitalRead(pinCapteur) == HIGH)

{

// si un train est détecté

// on attend 10 ms avant de vérifier que

// ce n'est pas une détection erronée

delay(10);

if (digitalRead(pinCapteur) == HIGH)

{

// le train est toujours là, allume la DEL

digitalWrite(pinDEL, HIGH);

}

else

{

// sinon, éteint la DEL

digitalWrite(pinDEL, LOW);

}

}

else {

// sinon, éteint la DEL

digitalWrite(pinDEL, LOW);

}

}

Le programme côté émission

La led infrarouge attend pour fonctionner un signal modulé à 38 Khz. C'est l'instruction tone qui va être utilisée.

const byte portLED = 9; // la led est branchée sur le port 9

void setup()

{

pinMode(portLED, OUTPUT);

}

void loop()

{

tone(portLED, 38000);

}

On pourra en cas de difficultés rencontrées au cours des tests coder l'émission à la façon des touches des télécommandes de nos téléviseurs.

Les hypothèses de départ

Cet après-midi avec Gaëtan nous avons pu échanger en "vraie grandeur" sur la mise en oeuvre d'une première barrière infrarouge sur le circuit HO du club. 

Le projet qui prend forme est de placer des diodes infrarouges, une "émettrice" et une "réceptrice" de chaque coté d'une voie, de sorte que l’émettrice éclaire la réceptrice. Le faisceau de l’émettrice est émis dans l’axe de la diode, son bout bombé sert de lentille "convergente". Il faudra vraisemblablement lui mettre un "capuchon" de gaine rétractable sur la partie cylindrique pour concentrer le faisceau "utile".

émetteur 2

La surface sensible de la réceptrice est la face bombée.

 

récepteur 2

Gaëtan m'a confié un rail et deux wagons pour des essais chez moi sur une réplique "à l'identique" du montage du club. J'ai en effet un deuxième jeu de composants électroniques à ma disposition.

Bien entendu, il faudra cacher cette barrière infrarouge dans le décor. Pour la diode réceptrice, Gaëtan propose de confectionner 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 pourra être intégrée dans un buisson du décor ou dans une "cabane" . Voici une illustration telle que trouvée sur le web :

ircache 7d492

 

La gestion du capteur par l’Arduino telle qu'imaginée :

Il faudra raccorder le signal sur une entrée digitale (il faut une entrée par capteur). Dans le cas du projet du club il y a 8 cantons donc au moins 8 capteurs, plus si l'on veut prendre en compte les voies d'évitement ou de parcage.

Un programme simple devra permettre de tester le bon fonctionnement du capteur, à la mise en place puis ensuite en mode « maintenance » si une intervention manuelle sur la zone du capteur déplace le faisceau.

Depuis quelque temps nous travaillons "au tableau" sur une détection de la tête et la queue du train et sur le "détrompage" de la détection lors du moment où les attelages  des wagons se présentent devant les diodes. Il faudra pouvoir valider la détection de début et de fin de convoi, éliminer les détections parasites comme la mouche qui passe dans le faisceau, ou la lumière d'un néon au dessus du circuit, éliminer les "trous" entre voitures ou wagons, etc., en bref "il y a du boulot" mais c'est sympa !

On pourrait aller plus loin dans un "comptage" des wagons pour s'assurer de l'intégrité d'un convoi en entrée de canton et prévenir ainsi d'une rupture d'attelage, mais ce serait "la cerise sur le gateau" !

 

trtc5000

 

Le module utilise des capteurs de proximité infrarouges TCRT5000 (émetteur et récepteur) et peut être facilement implémenté dans l'un de vos projets Arduino et pour ce qui nous concerne sur le circuit Ho du club.

Nous le placerons afin que les LED infrarouges soient tournées soit vers les flancs du train passant soit vers le dessous du train passant. 

Voici une vidéo qui montre l'usage qui peut en être fait vidéo

Quelques images du montage en latéral et en dessous de voie :

hqdefault

 

P1050151

 

 

 

 

 

Un projet à base Arduino est en cours d'étude pour une des maquettes de l'association. Son but est pédagogique. En un premier temps il mettra en oeuvre une barrière infrarouge placée sur le circuit. Ultérieurement si  cette phase de tests est positive une gestion d'un cantonnement du circuit sera étudiée et réalisée.

Le but est d'éviter par l'apport de la technologie infrarouge que seules des locomotives avec un aimant puissent piloter le cantonnement du circuit équipé d'ILS. 

Voici les matériels :

L'Arduino et les équipements annexes :

 

arduino

Les barrières infrarouge :

infrarouge