Conception d’un décodeur pour Magnorail avec un Arduino et un lecteur MP3
Le système Magnorail utilise un moteur caché qui entraîne une chaîne équipée d’aimants sous la surface du décor. Ces aimants font avancer des véhicules ou cyclistes miniatures placés au-dessus, sans moteur visible, créant une illusion de mouvement réaliste.
L’entrainement est réalisé à l’aide d’un moteur en courant continu. Le projet est de piloter ce moteur en DCC à l’aide d’un décodeur basé sur un Arduino. Il est prévu d’ajouter un lecteur MP3 pour créer une animateur sonore.
- Principe Magnorail
- Décodeur DCC avec un Arduino : Contrôle du moteur
- Simulateur Wokwi en ligne
- Commande et paramétrage
- Fichiers Source
Découvrir le principe Magnorail
On trouve sur YouTube de nombreuses mises en scènes très réalistes avec le principe Magnorail.
Décodeur DCC avec un Arduino
Le projet est de permettre de piloter le moteur en courant continu en digital (DCC) avec un décodeur. La contrainte est que l’on pourra commander le moteur que dans un seul sens de circulation. Il est prévu un mode pour permettre la circulation en sens inverse lors des test par exemple. Le choix a été fait de concevoir ce décodeur avec une carte Arduino et de mettre en œuvre un lecteur MP3 pour ajouter des animations sonores.
La commande peut être réalisée :
- en DCC : commande du moteur et des sons (bruitages) ;
- avec des boutons poussoirs pour la commande du moteur.
Les démarrages et les arrêts sont progressifs grâce au pilotage d’une carte de développement basé sur le circuit intégré L298N : cette permet le pilotage de 2 moteurs à courant continu ou d’un moteur pas-à-pas.
Les entrées sont optionnelles mais pouvant être utiles pour les tests ou réglages :
- bouton poussoir pour l’arrêt du moteur
- bouton poussoir pour l‘augmentation de la vitesse
- bouton poussoir pour la diminution de la vitesse
- bouton poussoir pour le changement de direction si le mode inversion de sens de marche est débloqué
- bouton à levier ou switch pour déverrouiller le sens de circulation imposé
Les sorties sont :
- 3 sorties pour piloter le circuit L298N : 1 sortie pour le PWM pour gérer la vitesse de rotation et 2 sorties pour le sens de rotation du moteur
- 1 LED en option indiquer le sens horaire de rotation du moteur
- 1 LED en option indiquer le sens anti-horaire de rotation du moteur
- 1 LED en option indiquer le mode bloquage inversion du sens de rotation (direction)
- 2 sorties pour le commande du lecteur MP3, le DFPlayer Mini MP3
- 2 sorties optionnelles pour commander au choix un afficheur TM1637 à 4 digits de 7 segments ou un écran LCD 16×2 via le port I2C. L’afficheur permet de visualiser la vitesse de consigne. L’écran LCD pemet d’afficher en plus le sens de rotation, les fonctions F0 à F16 gérée par le DCC. L’usage de l’affiche peut être utilise pour des réglages mais n’est pas utile lors de l’utilisation normale.
Les bibliothèques utilisées sont :
- EEPROM pour la gestion des paramètres enregistrés dans la mémoire de la carte Arduino
- AP_DCC_library pour la gestion du signal DCC reçu
- Bounce2 pour la gestion des rebonds des boutons poussoirs
- SoftwareSerial et DFRobotDFPlayerMini pour la gestion du lecteur MP3
- Wire et LiquidCrystal_I2C pour la gestion de l’écran LCD.
Commande et paramétrage
La commande et le paramétrage de la configuration du décodeur peut se faire via le Moniteur Série de la carte Arduino ou depuis la souris d’une centrale DCC.
Paramètres | Moniteur Série xx valeur numérique | Centrale DCC CV | Valeur par défaut | Plage |
Adresse décodeur | $Dxx | CV 1 => 3 [1-127] |
Temps du pas entre chaque pas de vitesse | CV 2 => 100 [1-255] | |
Pas accélération | $F | CV 3 => 8 [1-32] |
Pas décélération | $f | CV 4 => 8 [1-32] |
Vitesse par defaut (F0) | $Exx | CV 5 => 89 [1-100] |
Fréquence mini du moteur | $pxx | CV 6 => 40 [1-255] |
Fréquence maxi du moteur | $Pxx | CV 7 => 255 [1-255] |
Niveau du volume sonore | $Mxx | CV 8 => 20 [1-30] |
Egaliseur lecteur sonore (effet sonore) | CV 9 => 0 [0-6] | |
Configuration générale du décodeur | CV 29 => 6 [1-63] | |
Arrêt du moteur : vitesse = 0 | $S | Utilisation du rotateur de la souris |
Vitesse par défaut | $A | F0 |
Augmente la vitesse | $V | Utilisation du rotateur de la souris |
Diminue la vitesse | $v | Utilisation du rotateur de la souris |
Inversion du sens de marche si mode débloqué | $I | Utilisation du rotateur de la souris |
Jouer un son | $Jxx | F4 à F16 |
Afficher l’aide en ligne | $H | |
Afficher la configuration | $C | |
Reset du décodeur | $R99 |
Simulateur en ligne avec Wokwi
Fichiers source