1. Introduction

Depuis tout petit, je suis un grand passionné de trains et ayant des trains miniatures, je désire depuis longtemps automatiser un circuit de train miniature. Jusqu'à il y a peu de temps, il s'était avéré très compliqué de réaliser cela étant donné que pour le faire, il fallait se munir d'un programme bien spécifique, de plusieurs décodeurs spéciaux et d'une télécommande onéreuse. Cependant, par le biais de l'option complémentaire informatique, une solution c'est profilée assez rapidement. Il s'agissait non pas d'utiliser tout le matériel énoncé, mais d'utiliser l'Arduino. Cette interface de programmation m'a permis de réaliser ce projet.
Ainsi, le but de ce projet est d’automatiser un simple circuit de train miniature sur lequel circulerait 2 trains en même temps, chacun dans un sens.

2. Matériel et méthodes

2.1. Matériel


Pour réaliser le projet, j’ai utilisé :

- 1 Arduino UNO
- 1 Relay Control PCB 240 VAC
- 4 rails de détection Märklin 24994
- Rails droits 24188/24172 (nombre à définir en fonction de la grandeur du circuit)
- 12 Rails courbes 24130
- 4 Rails courbes 24224
- 2 aiguillages 24611
- 2 aiguillages 24612
- 8 coupures de courant sur rail 74030
- 1 télécommande Märklin
- 2 locmotives H0 AC

2.1.1. Arduino UNO


Il s'agit d'une plateforme de programmation constituée d'un circuit imprimé, de plusieurs pins et d'un microcontroller. Le Mircocontroller permet d'exécuter un certain code écrit au préalable par le programmeur. Il permet aussi de lire ou d'envoyer du courant dans les différentes PIN; tout dépend de la fonction qui leur a été dictée. En effet, les PINs ont deux fonctions: Input et Output. Soit les PINs reçoivent du courant, soit elles en envoient. En somme, l'Arduino est une plateforme très utile pour réaliser plusieurs projets pouvant aller d'un feux tricolore à la réalisation d'un robot. IMG_6532.JPG
Figure 1, Arduino UNO

2.1.2. Relay Control PCB 240 VAC


Le Relay Control PCB 240 VAC est en fait un simple interrupteur ON/OFF commandé par l'Arduino. Mais comment fonctionne-t-il ?
Le Relay Control PCB 240 VAC est composé d'un aimant qui bouge en fonction du courant envoyer par l'Arduino. Si l'Arduino alimente le relay, le courant entrant dans le relay crée un champ magnétique poussant l'aimant vers l'extérieur. Lorsqu'il est poussé vers l'extérieur, l'aimant agit de la même manière que nous, lorsque l'on appuie sur un bouton, le courant passe. Lorsque plus aucun courant n'est envoyé par l'Arduino au relay, l'aimant reprend alors sa position initiale et donc le bouton est lâché; le courant ne passe plus.
FullSizeRender_2.jpg
Figure 2, Relay Control PCB 240 VAC

2.1.3. Rail de détection Märklin 24994


Il s'agit simplement d'un rail muni d'un bouton à pression. Lorsque le frotteur de la locomotive AC passe sur ce bouton, il appuie sur le bouton, cela permettant de fermer un circuit électrique et donc de détecter des Interrupt (voir chapitre 2.2 Méthode).
IMG_6534_-_copie.jpg
Figure 3, Rail de détection Märklin 24994

2.1.4. Télécommande Märklin


Dans ce projet, n'importe quelle télécommande pour circuit Märklin AC peut être utilisée. En l'occurence, j'utilise une simple télécommande analogique de référence Märklin 6647. Cette télécommande permet de livrer le courant nécessaire à la circulation de trains sur le circuit.
FullSizeRender.jpg
Figure 4, Télécommande Märklin 6647

2.2. Méthode


2.2.1. Schéma électrique


Voici le schéma électrique du projet:

Print Figure 5, Schéma électrique

En partant depuis la télécommande blanche, un câble rouge est raccordé directement au rail pour l'alimentation de la locomotive. Mais un câble ne suffit pas, pour que la locomotive puisse fonctionner, il faut aussi que le câble brun soit raccordé au rail. Cependant le câble brun n'est pas directement relié au rail. Il passe par le Relay puis est relié au rail. Le Relay sert d'interrupteur. Il est relié à l'Arduino. Lorsque l'Arduino envoie du courant à travers le Relay, à ce moment-là le câble brun est relié au rail. (voir chapitre 2.1.2.).
Les quatre boutons sur la bread board représentent les quatre rails de détection. (voir chapitre 2.1.3.). Ils sont câblés de telle façon à utiliser la fonction Pull Up Down. (voir chapitre 2.2.3.).

2.2.2. Interrupt


Pour réaliser ce projet d’automatisation, deux concepts ont été utilisés.
Le premier concept, celui qui a permis de réaliser le projet, est l’Interrupt.
Mais qu’est ce donc ?
Il s’agit d’une fonction de l’Arduino permettant de détecter et d’enregistrer un changement rapide d’état (LOW, HIGH), puis, lorsqu’un certain stade au niveau de l’interrupt est franchi, alors l’Arduino changera d’état et réalisera la fonction programmée dans le nouvel état. Dans ce projet H, la fonction Interrupt est extrèmenent utile pour la gestion du trafic des deux trains à travers le circuit. En effet, il permet de détecter la présence d’un ou des deux trains sur les sections de voies de croisement puis il permet de faire changer d’état l’Arduino pour qu’il puisse faire partir les deux compostions.
Voici le code pour l'Interrupt:

Tout d'abord, le void Setup, il faut écrire la commande ci-dessous:

attachInterrupt(BOUTON_INTERRUPT, RAIL1, RISING);


Cette commande permet à l'Interrupt de pouvoir augmenter le state, la variable

Ensuite, dans le Void RAIL1, il faut écrire la commande suivante:

void RAIL1() {
if (state < 2) {
state++;
}
}


Cette commande, du nom de RAIL1(), est appelée par le "attachInterrupt(BOUTON_INTERRUPT, RAIL1, RISING);" uniquement lorsque l'Arduino détecte un Interrupt. Elle sert à faire augmenter la variable state.
Ici dans la commande, le state ne peut être augmenté (par state++) que lorsqu'il est inférieur à 2 (if (state < 2)). Cela peut se comprendre par le fait que seul deux trains se croisent; donc le state ne monte jamais plus haut que 2.

Finalement dans le void loop, nous devons écrire:

void loop() {
if (state >= 2) { //Quand state vaut plus ou égal à 2
GO(); //Appelle fonction Go()
state = 0; //Remet à 0 le state
}
}


Lorsque le state vaut 2ou plus (if (state >= 2)), alors on entre dans le void loop. Il appellera l'état GO () qui lancera les deux trains mais aussi remettra à zéro le state (state = 0;) pour le futur croisement des deux trains.

2.2.3. Pull Up Down


Le Pull Up Down est le deuxième concept utilisé, non pas pour réaliser le projet, mais pour le rendre plus sûr.
Normalement, lorsqu'un bouton est appuyé, un courant peut passer et être envoyé dans une PIN de l'Arduino. Celui-ci le détecte et peut agir de telle ou telle façon et inversement, si l'Arduino ne détecte aucun courant, il ne fera rien. La fonction Pull Up Down permet de faire l'inverse. Tant que l'on ne presse pas sur le bouton, un courant continuel est détecté par l'une des PINs de l'Arduino. Celui-ci de n'agira pas. Cependant, lorsque le bouton est appuyé, il dévie le courant et ainsi plus aucun courant n'est détecté par une PIN. A ce moment-là, l'Arduino peut agir en fonction de comment il a été préalablement programmé.
Pour ce faire, il faut écrire ce code dans le void setup:

pinMode(bouton, INPUT_PULLUP);


Ce code permet de dire à l'arduino que le "bouton" est en INPUT, soit qu'il doit lire le courant qui lui est envoyé. De plus, la deuxième partie du code "_PULLUP" permet à l'Arduino de savoir qu'il utilise la fonction Pull Up Down.

3. Résultat

Pour vous montrer le résultat de se projet, j'ai décidé de faire une vidéo.
Celle-ci est disponible à ce lien: https://youtu.be/-rkJw3At6i8
Le code complet du projet est quant à lui disponible à ce lien: http://urlz.fr/36gu

4. Discussion

Dans l'ensemble, la réalisation du projet c'est très bien passée. Initialement, j'avais prévu de commander le circuit grâce à quatre Relays mais un problème est vite apparu. L'Arduino n'avait pas assez de puissance pour activer tous les Relays en même temps. Il a fallu donc trouver une solution, l'Interrupt. L'Interrupt a réussi à réduire à un le nombre de relay, cela résolvant un premier problème.
Cependant un deuxième problème est très rapidement apparu. Il se situe au niveau des Interrupts. En effet, l'Interrupt étant extrêmement sensible, il peut déclencher des Interrupts sans que le rail de détection ne soit sollicité par le frotteur de la locomotive. En fait, un simple courant électrostatique ou une onde pourrait pourrait faire croire à l'Arduino qu'un des rails de détection est sollicité. De plus, le circuit que j'utilise pour le projet est composé de plusieurs vieux rails en métal, cela pouvant aussi engendrer des Interrupts non-désirés. Ainsi, il fallait continuellement contrôler le circuit pour au cas où intervenir avant qu'il y ait une collision. Cependant, grâce au Pull Up Down, ce problème a été presque complètement réglé. Il peut encore y avoir un ou deux Interrupts non-désirés. Pour réduire au maximum le risque Interrupts non-désirés, il est conseillé d'utiliser des rails non pas en métal mais en plastique, ce que je n'ai pas fait pour des raisons budgétaires.

5. Conclusion

Je pense pouvoir dire que le but de ce projet a été atteint. En effet, l'automatisation du circuit a été réalisée.
Pour le futur, ce projet pourrait être amélioré de différentes façons. Tout d'abord, il faudrait remplacer les rails en métal par des rails en plastique, cela réduisant le risque Interrupts non-désirés. Ensuite, il faudrait remplacer l'Arduino par un Rasberry Pi, cela permettant par la suite via une interface web, de pourvoir contrôler à distance le circuit.