Moyens mis en œuvre.
La technique fait l’objet d’un sujet particulièrement nourrit et enrichissant sur le forum que l’on trouve ici : https://forum.locoduino.org/index.php?topic=1656.0
![JPEG - 113.5 kio](local/cache-vignettes/L610xH458/6vihdze-b8172.jpg?1713264691)
- Figure 3 - Module de détection par nopxor (locoduino)
A la base, je me suis inspiré d’un sujet initié par nopxor (Figure 3) : https://forum.locoduino.org/index.p...
Mais c’est la solution proposée par Pyk35 que j’ai retenue car elle est simple, performante et très économique. Elle fournit un signal analogique directement exploitable par un microcontrôleur : https://forum.locoduino.org/index.p...
![PNG - 109.3 kio](local/cache-vignettes/L610xH189/schema_2_-d93cb.png?1713262307)
- Figure 4 - Schéma de principe proposé par Pyk35
Comme on peut le voir sur ce schéma (Figure 4), une bobine, deux diodes, une diode zener et un condensateur suffisent pour « produire » une tension exploitable avec un microcontrôleur.
Dans le cas des satellites autonomes, j’avais initialement envisagé que le traitement Analogique/Numérique soit assuré par l’ESP32 du satellite. Mais l’ESP32 est peu performant pour ce qui concerne l’ADC et consommateur de ressources pour un programme déjà largement sollicité par ailleurs. (*) Sur la conversion analogique/numérique de l’ESP32, voir le lien en bas de page.
Les puces AVR au contraire, bien que moins performantes globalement, sont réputées pour la qualité de leur traitement Analogique/Numérique. J’ai donc décidé de tester une solution sur ATTiny qui a rapidement donné des résultats très satisfaisants. L’intérêt de l’ATTiny étant également son cout de l’ordre de 1,50€. Chaque carte dispose donc de sa propre unité de traitement des mesures.
Le bénéfice comme dit ci-dessus est de fournir un signal numérique directement exploitable par un satellite, une centrale ou tout autre gestionnaire de réseau. En fait, la carte délivre deux informations sous forme de signal numérique, la présence de trains mais aussi de surintensité (Figure 5).
![JPEG - 209.1 kio](local/cache-vignettes/L610xH441/_dsc1152_3-b7f72.jpg?1713861838)
- Figure 5 : Deux signaux sont disponibles pour la détection de présence et les courts-circuits
Il est possible de réaliser des calculs, des opérations et des réglages sur chaque carte. Ainsi, nous disposons (Figure 6) de 8 réglages de sensibilité au travers d’un switch (4 pour la détection de présence, 4 pour les courts-circuits) permettant de s’adapter à des contraintes spécifiques pour chaque zone sous surveillance. Ces seuils étants par ailleurs, et si nécessaire, modifiables par programmation.
![JPEG - 162.3 kio](local/cache-vignettes/L610xH675/_dsc1152_2-4c6e6.jpg?1713861838)
- Figure 6 - Sélection des seuils pour la détection et les surintensités
L’ATTiny nous permet enfin d’actionner, toujours en local, un relais ( Figure 7) qui va couper l’alimentation DCC des rails plus rapidement que ne le fait une détection au niveau de la centrale. Notez que les deux détections peuvent et doivent cohabiter.
![JPEG - 82 kio](local/cache-vignettes/L610xH173/_dsc1152_4-cb1a7.jpg?1713861838)
- Figure 7 - Relais de 8A pour la coupure d’alimentation
La principale raison en est assez simple ; le niveau d’intensité fixé comme seuil de détection pour un court-circuit est beaucoup plus faible au niveau d’un canton seul que pour l’ensemble d’un réseau.
Ainsi, on peut considérer que 800mA à 1A d’intensité sur le canton suffisent pour considérer que l’on a affaire à un court-circuit alors que sur l’ensemble d’un réseau, il faudra attendre au moins de mesurer 2,5A à 3A.
On comprend que cette solution de détection et de coupure locale en cas de sur intensité autorise l’utilisation sans difficulté de cartes moteur puissantes de l’ordre de 10 à 15A ou plus puisque le réseau est alors protégé par zones.
Revenons sur la détection de présence. Dans le cas où une locomotive est présente sur un canton, l’intérêt de la détection est principalement d’éviter l’entrée d’un autre convoi sur le canton qui viendrait en collision.
L’intérêt de détecter des wagons est peut-être moins évident de prime abord mais il est cependant le même. Il s’agit là aussi d’éviter qu’un train ne s’engage sur un canton alors qu’y seraient encore présents un ou plusieurs wagons, et alors même que la locomotive elle n’y est plus. Ce cas de figure se rencontre principalement quand : 1°) – Les wagons d’un convoi n’ont pas tous quitté le canton. 2°) – Un ou plusieurs wagons se sont décrochés du convoi.
Pour que des wagons soient en mesure de provoquer une consommation de courant suffisante, il existe trois principales techniques :
1°) – Installer de l’éclairage à l’intérieur des wagons et/ou en fin de convoi. Figure 8 et Figure 9
![JPEG - 2 Mio](local/cache-vignettes/L610xH269/wagon-restaurant-et-son-eclairage_2-9b0b5.jpg?1713264353)
- Figure 8 - Source : https://modelclub-draveil.eu/
![JPEG - 84.9 kio](local/cache-vignettes/L610xH343/ob_f2b2bd_p1390064-448be.jpg?1713264353)
- Figure 9 - Source : BISCATRAIN
2°) – Graphiter les roues des wagons. Figure 10
![JPEG - 21.4 kio](local/cache-vignettes/L600xH450/dsc02031-42782.jpg?1713264353)
- Figure 10 - Source : Les trains du Tertre
3°) - Placer des résistances sur un ou plusieurs essieux des wagons d’un convoi, de préférence le dernier pour détecter aussi les décrochages de wagons.
La figure 11 présente présente différentes techniques utilisables en fonction de la nature des axes et du type de résistance, CMS ou traversante.
Cette une image refaite et traduite à partir d’un article particulièrement complet et intéressant dont je recommande la lecture : https://www.jlcenterprises.net/page...
Pour d’autres informations sur ces différentes techniques, vous pouvez vous reporter à ces quatre articles :
https://lestrainsdutertre.redheberg...
https://lestrainsdutertre.redheberg...
http://rouge-et-creme.over-blog.com...
http://www.biscatrain.fr/2018/05/in...
L’ATTiny44 et sa programmation.
Parmi différents ATTiny, mon choix de l’ATTiny44 est justifié par le nombre de broches dont il dispose (14 en tout avec le VCC et le GND) permettant d’adjoindre un switch à 4 leviers ce qui autorise la sélection de 4 seuils différents pour la détection de présence et 4 autres pour la détection de courts-circuits.
Les valeurs pour ces seuils ont été placées dans deux tableaux en début de programme :
const uint16_t tabSeuilOcc[] = { 30, 40, 50, 60 }; // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 250, 350, 450, 550 }; // Seuil pour le court-circuit
Ce sont des valeurs que j’ai déterminé de façon empirique sur mon réseau en HO avec différentes locomotives.
L’ADC travaillant sur 10 bits, ces valeurs correspondent par exemple à 30/1023, 40/1023 etc…
Sur le switch que nous avons vu plus haut en Figure 6, la première valeur du tableau « seuils d’occupation » correspond aux switches 1 et 2 bas, la seconde valeur à 1 haut, 2 bas, troisième valeur 1 bas, 2 haut et enfin quatrième valeur, 1 haut, 2 haut.
Il en est de même pour les seuils de court-circuit avec les switches 3 et 4 cette fois.
Pour déterminer le bon seuil d’occupation, il s’agit dans un premier temps de placer le (les) wagon(s) équipés de résistances sur les rails, ou plus simplement une résistance de 10KΩ et de vérifier avec un voltmètre placé sur la sortie "occupation" que la détection est bien opérée.
Pour la détection de court-circuit, on utilisera le train le plus consommateur de courant avec le plus gros moteur, fumigène (actif) le cas échéant et l’on testera la limite de court-circuit. Ce train devant circuler sans provoquer la coupure du relais. Il faudra tester avec le passage de la positon arrêt puis accélération de la locomotive qui est celle qui entraine la plus grosse consommation. Lorsqu’il n’y a plus de disjonction intempestive, vous pouvez en déduire une valeur reportable sur l’ensemble des cartes du réseau.
Au besoin, vous pouvez modifier ces valeurs dans le programme. Par exemple, pour l’échelle N :
const uint16_t tabSeuilOcc[] = { 10, 15, 20, 25 }; // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 150, 200, 250, 300 }; // Seuil pour le court-circuit
Pour les échelles 1 ou O, vous devrez probablement être plus proche des valeurs suivantes :
const uint16_t tabSeuilOcc[] = { 50, 65, 80, 95 }; // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 500, 600, 700, 800 }; // Seuil pour le court-circuit
En principe, ces valeurs sont les mêmes d’une carte à l’autre mais certaines configurations comme des pentes ou des rampes hélicoïdales par exemple augmentent les consommations et nécessiteront peut-être des adaptations spécifiques.
Ensuite, en manipulant les switches, il est aisé de sélectionner différents seuils (dans la limite de quatre).
![JPEG - 72.1 kio](local/cache-vignettes/L610xH341/_dsc1152_5-a1175.jpg?1713862483)
- Figure 12 - Bouton pour le reset de l’ATTiny
A chaque fois que vous modifiez la position des switches, vous devrez "reseter" l’ATTiny pour prendre en compte ce nouveau réglage qui s’opère dans le setup() du programme.
Il n’y a aucune autre intervention que vous n’ayez à faire dans le programme si ce n’est éventuellement modifier le délai de réarmement après un court-circuit ici réglé sur 5000 millisecondes.
// Variables
uint32_t tempoCC = 5000UL; // Tempo réarmement suite à court-circuit
Vous noterez si vous le survolez que l’on n’y rencontre pas les fonctions bien connues en Arduino comme analogRead() ou digitalWrite(). C’est que pour des questions de performance, j’ai utilisé ce que l’on appelle l’écriture et la lecture directe des ports de l’ATTiny. Je cherche ainsi à combler le petit manque de puissance des AVR en accélérant (grandement) la vitesse d’exécution du programme.
Sur le site Arduino il est écrit ceci : « digitalRead() et digitalWrite() sont chacun une douzaine de lignes de code, qui sont compilées en un certain nombre d’instructions machine. Chaque instruction machine nécessite un cycle d’horloge à 16 MHz, ce qui peut s’additionner dans les applications sensibles au temps. L’accès direct au port peut effectuer le même travail en beaucoup moins de cycles d’horloge. »
Il est souvent évoqué des vitesses d’exécution de 16 à 20 fois supérieures avec cette technique.
Pour plus d’informations à ce sujet :
https://docs.arduino.cc/retired/hac...
ou concernant plus spécifiquement les ATTiny :
https://www.instructables.com/ATTin...
https://www.instructables.com/ATTin...