Rétrosignalisation sans fil


1. Description du principe

Le DCC a permis de simplifier considérablement le cablage d'un réseau puisqu'il suffit d'envoyer le signal sur les rails pour commander simultanément plusieurs trains sur le réseau. De même les accessoires comme les moteurs d'aiguilles peuvent être commandés par des décodeurs DCC connectés aux rails et qui ne nécessitent pas d'installer des fils supplémentaires.
Mais si l'on veut automatiser le fonctionnement du réseau, un système de rétrosignalisation est indispensable et malheureusement les systèmes actuels du commerce nécessitent de nombreux fils pour relier les détecteurs d'occupation à la station centrale et à l'ordinateur qui commande les trains.
Cependant avec les modules radio disponibles maintenant dans le commerce et l'utilisation d'Arduinos, il est possible de concevoir un système de rétrosignalisation sans fil en DCC qui est décrit dans cette page web.

Le système mis en oeuvre est composé de modules de rétrosignalisation (1 par canton) et d'une station centrale reliée au PC.
Les modules de rétrosignalisation communiquent par radio avec la station centrale et sont alimentés par la voie.

Chaque module de rétrosignalisation est composé des éléments suivants:
- un détecteur de courant qui détecte la présence d'un train sur le canton
- un module Arduino qui est responsable de la détection des trains et de la communication avec le module radio.
- un module radio qui communique par radio avec la station centrale.
L'Arduino est alimenté par le signal DCC après redressement et filtrage.
Chaque module de rétrosignalisation est identifié par une adresse transmise sous la forme d'un octet.
Lorsque plusieurs modules sont utilisés sur le réseau, ce qui est la situation normale, il peut y avoir des collisions entre les octets envoyés par les différents modules d'occupation. C'est pourquoi il est nécessaire de mettre en oeuvre un système qui évite les erreurs de transmission.
C'est pourquoi la transmission d'un octet peut être répété plusieurs fois jusqu'à ce que l'octet soit reconnu par la station centrale qui envoie alors l'accusé de réception ce qui bloque la transmission de l'octet.

Deux systèmes radio ont été réalisés: un système à 433 MHz qui ne fonctionne qu'avec mon logiciel de pilotage de réseau CARTO-DCC et un système à 2,4 GHz compatible avec des systèmes de rétrosignalisation du commerce (RS de LENZ) et avec le logiciel de commande de réseau RRTC

2. Le système radio à 433 MHz

2.1 Description du système

Ce système est constitué par des émetteurs FS1000A et un récepteur CY78.

Les avantages du système sont le faible coût (on peut trouver des émetteurs pour moins de 2 €) et la facilité de mise en oeuvre. Mais ces modules opèrent dans la bande de 433 MHz qui est très utilisée en domotique (systèmes de télécommande) et il y a toujours des risques de brouillage. De plus la portée entre émetteur et récepteur est limitée à une dizaine de mètres et ces produits ne sont pas toujours faciles à trouver dans le commerce.
Comme les modules transmettent tous sur la même fréquence, le nommbre d'émetteurs qui peuvent émettre simultanément est très limité pour éviter les risques de collision.
Comme ces modules ne peuvent qu'émettre des données et pas en recevoir, il faut un autre dispositif pour envoyer l'accusé de réception lorsqu'un octet a été reçu. Ceci est réalisé en utilisant des décodeurs d'accessoires DCC.

2.2 Description d'un module de rétrosignalisation

Chaque module de rétrosignalisation est associé à un décodeur d'accessoire qui a sa propre adresse comprise entre 100 et 200.
Le schéma d'un module de rétrosignalisation est donné ci-dessous.



Un module de rétrosignalisation est constitué des éléments suivants:
- une alimentation qui fournit une tension continue d'environ 16V à partir du signal DCC par redressement et filtrage
- un régulateur de tension 7805 qui fournit une tension de 5 V à l'Arduino
- un détecteur de courant qui détecte la présence d'un train sur le canton
- un module Arduino qui réalise le décodage du signal DCC et la tramnsmission de l'octet au module radio lorqu'un train est détecté
- un module radio FS1000A

Comme Arduino, on peut utiliser un Pro-Mini qui est intéressant pour sa taille compacte, son faible coût et sa faible consommation d'énergie.

L'émetteur radio miniature à 433 MHz ref RF1000A a pour dimensions 20x18 mm.
Vous pouvez voir ci-dessous une photo de cet émetteur:



La broche VCC est à relier au +5V de l'Arduino, la broche DATA est à relier à la sortie TX et la broche GND est à relier à la broche GND de l'Arduino.

Lorsque le programme de commande du réseau prévoit qu'un train va entrer dans le canton N, il envoie au décodeur DCC l'adresse N du canton avec l'état 1. Celà active le module de rétrosignalisation qui se met en position de veille.
Lorsque le train pénêtre dans le canton, le module radio à 433 MHz envoie un octet dont la valeur est l'adresse N du décodeur de canton.
Lorsque la station centrale reçoit le signal, elle déclenche le passage à la séquence suivante et elle envoie en DCC une commande au récepteur du détecteur d'occupation avec son adresse N et l'état zéro. Le module radio cesse alors d'envoyer l'octet.

Le module Arduino réalise le décodage du signal DCC et la transmission de l'octet au module radio.

Dans l'exemple qui est fourni, l'adresse du détecteur d'occupation est 151. Lorsque cette adresse est reçue et lorsqu'un train est détecté, l'Arduino envoie sur la broche D11 un octet qui a pour valeur 151. La vitesse de transmission a été fixée à 300 bit/s.

Lorsque plusieurs modules sont utilisés sur le réseau, ce qui est la situation normale, il peut y avoir des collisions entre les octets envoyés par les différents modules d'occupation. C'est pourquoi la transmission d'un octet peut être répété plusieurs fois toutes les 500ms jusqu'à ce que l'octet soit reçu par la station centrale qui envoie alors l'accusé de réception ce qui bloque la transmission de l'octet.

2.3 Description du récepteur

Le récepteur est constitué par une antenne, un récepteur CY78 et un module ARDUINO UNO comme indiqué sur le schéma ci-dessous.



La photo du récepteur CY78 est donnée ci-dessous avec les connexions à réaliser.



Vous pouvez trouver une description de ce récepteur en cliquant ici.

L'octet envoyé par un module d'occupation est reçu par l'Arduino Uno et transmis au PC via une liaison série à 300 bits/s. C'est le logiciel CART0-DCC qui traite cette information.

2.4 Téléchargement des programmes Arduino

Vous pouvez télécharger un dossier intitulé "retro_radio_2.4ghz.zip" en cliquant ici.

Ce dossier comprend les programmes Arduino émetteur et récepteur.
Si vous utilisez un Arduino Pro-Mini dans l'émetteur, vous trouverez un mode d'emploi pour le programmer en cliquant ici.

3. Le système radio à 2.4GHz

3.1 Description du système

Ce système utilise des modules NRF24L01 qui fonctionnent en émission et réception à 2.4 GHz Ces modules radio offrent une bonne portée et une communication fiable, ce qui les rend adaptés à cette application. C'est la solution à utiliser si le nombre de cantons est important.

Le système fonctionne dans la bande de fréquence de 2,4 GHz, ce qui est une bande de fréquences libres et réglementées dans de nombreux pays. Cela signifie qu'il est peu susceptible d'interférer avec d'autres dispositifs de communication sans fil courants comme le Wi-Fi ou le Bluetooth.
Le NRF24L01 est prévu pour fonctionner dans la plage de 2,4 GHz à 2,525 GHz, par pas de 1 MHz. Chaque pas de 1 MHz est ce qu’on appelle ici un canal. Du coup, on dispose de 126 canaux, permettant de communiquer sur la fréquence de notre choix, entre 2,4 à 2,525 MHz.

Ces modules offrent généralement une portée de communication d'environ 100 mètres en champ libre, bien que cela puisse varier en fonction des conditions environnementales et de la configuration.

Au niveau des tensions d’alimentation, chaque nRF24L01 s’alimente avec une tension comprise entre 1,9 et 3,6 V. C’est pourquoi, couramment, on l’alimente simplement avec du 3,3 V. Il faut noter qu'il vaut mieux ne pas utiliser la sortie 3.3V d'un Arduino uno ou nano qui ne fournit pas un courant suffisant pour alimenter le nRF24L01. Il faut mieux utiliser un régulateur 78L03.

Une description détaillée de ce module est disponible en Français sur le site Passion Electronique.

Comme les modules radio fonctionnent en émission et réception, on ne les désigne pas par émetteur et récepteur mais par serveur et client. On appelle serveur le module situé dans la station centrale et module client le module associé à un détecteur d'occupation.

Deux modes de fonctionnement ont été mis en oeuvre: mode point à point et un mode point multipoint.

Mode point à point

Dans ce mode , un émetteur communique avec un seul récepteur sur un canal donné (il y a 126 canaux possibles). L'émetteur envoie un seul octet qui est l'état du détecteur d'occupation (etat=0 -> libre, etat=1 -> occupé). Ce système peut venir en complément d'un système filaire pour relier des cantons qui sont éloignés de la station centrale.

Mode point à multipoint

Le principe de fonctionnement mis en oeuvre est le suivant.
Chaque module serveur situé dans la station centrale communique avec 4 modules clients sur la même fréquence. Le serveur interroge cycliquement les modules client qui répondent en envoyant leur adresse (1er octet) et l'état du détecteur d'occupation associé (libre ou occupé, deuxième octet).
Par exemple un système de rétrosignalisation avec 16 détecteurs d'occupation nécessite 4 modules serveurs qui utilisent 4 fréqences différentes et 16 modules client associés aux détecteurs d'occupation.

3.2 Description d'un module de rétrosignalisation

Un module de rétrosignalisation est constitué des éléments suivants:
- une alimentation qui à partir du signal DCC fournit une tension de 5V pour l'Arduino et une tension de 3.3V pour le module radio.
- un détecteur de courant qui détecte la présence d'un train sur le canton
- un module Arduino qui est connecté au détecteur de courant et au module radio.
- un module radio NRF24L01 appelé client

Pour le mode point à point, tout type d'Arduino peut convenir (UNO, NANO) mais je recommande le PRO-MINI pour sa taille compacte, son faible coût et sa faible consommation d'énergie.
L’Arduino Pro Mini ne dispose pas d’un pont USB-TTL intégré qui permet à la carte de communiquer avec un ordinateur via une connexion série. C’est pourquoi on utilise un programmateur externe USB-TTL (UART), qui est connecté aux ports RX et TX de l’Arduino et aux broches d’alimentation

Vous trouverez un mode d'emploi pour programmer un Arduino Pro-Mini en cliquant ici.

Le schéma du module est représenté ci-dessous



Pour le mode point à multipoint où la liaison est bidirectionnelle, le programme arduino se bloque parfois sans raison apparente. C'est semble t-il un problème connu avec les modules radio NRF24L01. Il faut alors utiliser un système de reset automatique de l'Arduino appelé Watchdog qui détecte le blocage du programme et effecue un reset de l'Arduino pour relancer le programme.. Vous trouverez une description de ce système sur le site Passion Electronique.
Ce système de reset automatique fonctionne avec les Arduinos Uno et Nano mais pas avec les Pro-Minis.

La détection de courant est réalisée en mesurant la tension obtenue aux bornes d'un pont de diodes et cette tension est transmise à un optocoupleur 4N35 sur les entrées 1 et 2. La tension obtenue sur la broche 5 du 4N35 est appliquée à l'entrée A0 de l'Arduino. Cette tension est de 5 Volts en l'absence de train et est inférieure à 1 volt lorsqu'un train est présent sur le canton. Une diode LED de controle connectée à la broche D5 de l'Arduino s'allume lorsqu'un train est présent. En mode point à multipoint,le module radio transmet toutes les 2 secondes l'adresse du module. Lorsque le module radio reconnait son adresse, il transmet à la station centrale l'état de l'occupation du canton (libre ou occupé). En mode point à point, le module radio transmet chaque seconde à la station centrale l'état de l'occupation du canton

Les connexions à réaliser entre l'Arduino et le module radio nRF24L01 sont données sur le schéma ci dessous



Voici une photo d'un module réalisé. Les composants sont soudés sur une petite plaque de circuit imprimé.



3.3 Description d'un module serveur

Chaque module serveur est composé d'un module radio nrf24l01 appelé serveur et d'un module Arduino. La connexion dépend du système de rétrosignalisation utilisé. Chaque module serveur a une fréquence différente des autres.

Le schéma d'un module serveur pour la rétrosignalisation RS de LENZ est donné ci-dessous:



Le module radio est connecté à un Arduino Uno ou Nano qui est relié à un module LR101 de LENZ par l'intermédiaire de relais. Il faut quatre relais connectés aux broches D2,D3,D4 et D5 comme indiqué sur le schéma pour un système point à multipoint. Un seul relais est utilisé pour le système point à point.

Avec le logiciel DARTO-DCC que j'utilise, il n'y a pas besoin de relais. L'Aduino est directement connecté au PC en USB.

Vous pouvez voir ci-dessous une photo d'un module serveur réalisé pour le système point à point.



3.4 Téléchargement des programmes Arduino

Vous pouvez télécharger un dossier intitulé "retro_radio_2.4ghz.zip" en cliquant ici.

Ce dossier comprend:
- les programmes Arduino client et serveur à utiliser pour le système point à multipoint
- les programmes Arduino client et serveur à utiliser pour le système point à point
- les bibliothèques nRF24 et Mirf
- une documentation sur les composants utilisés

Avant de télécharger les programmes dans les Arduinos, voici les actions à effectuer:
depuis Arduino IDE -> Menu Sketch -> Include Library -> Add .ZIP libraries
Il suffit alors d'indiquer l'emplacement des fichiers RF24-master.zip et Mirf.zip

Retour page d'accueil