06 – GTRC – Fabriquer un récepteur pour une locomotive
Contrairement à la télécommande, dont la réalisation peut être reproduite pratiquement à l’identique, il n’existe pas un montage unique de récepteur GTRC. Les locomotives peuvent être très différentes : espace disponible, tension d’alimentation, puissance du moteur, type d’éclairage ou encore facilité d’intégration de l’électronique.
GTRC a donc été conçu pour accepter plusieurs configurations matérielles tout en conservant le même principe de fonctionnement et un programme commun.
Deux réalisations utilisées pendant le développement du système serviront ici d’exemples :
- Rusty, locomotive 10, équipée d’un Arduino Nano, d’un NRF24L01 externe et d’un driver L298N ;
- Tommy, locomotive 12, équipée d’un RF-Nano intégrant directement le NRF24L01 et d’un driver DRV8871 beaucoup plus compact.
Le principe d’un récepteur GTRC
Un récepteur GTRC assure essentiellement quatre fonctions :
- recevoir les commandes radio ;
- les traiter avec un microcontrôleur ;
- commander le moteur ;
- gérer les éventuelles fonctions supplémentaires de la locomotive.
Son architecture générale peut être représentée simplement :
Communication radio
NRF24L01
│
▼
┌─────────────┐
│ Arduino │
└──────┬──────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
Driver moteur Éclairage Mesure batterie
│
▼
Moteur
L’Arduino reçoit les messages envoyés par la télécommande et vérifie l’identifiant de la locomotive contenu dans chaque commande. Toutes les locomotives peuvent ainsi écouter le même réseau radio GTRC. Seule celle dont l’identifiant correspond à la destination du message exécute la commande.
Les principaux composants
Le matériel nécessaire dépend de la locomotive, mais un récepteur comporte généralement :
- un Arduino Nano ou compatible ;
- un NRF24L01, séparé ou intégré à l’Arduino ;
- un driver moteur ;
- un système d’alimentation adapté ;
- éventuellement une commande d’éclairage ;
- éventuellement un pont diviseur pour mesurer la batterie.
Le choix de ces éléments dépend principalement de la place disponible et des caractéristiques électriques de la locomotive. Des exemples sont détaillés ci dessous basés sur mes locomotives Rusty et Tommy
Deux solutions pour l’Arduino et la radio
La première différence concerne l’intégration du NRF24L01.
GTRC peut utiliser un Arduino Nano classique associé à un module radio externe, mais également un RF-Nano intégrant directement le NRF24L01.
Arduino Nano + NRF24L01 externe
La première solution est utilisée dans Rusty.
Elle associe :
- un Arduino Nano ;
- un module NRF24L01 externe.
Elle présente l’avantage de pouvoir positionner le NRF24L01 indépendamment de l’Arduino. Dans certaines locomotives, l’emplacement le plus pratique pour le microcontrôleur n’est pas forcément le meilleur pour l’antenne radio.
L’Arduino et le module radio peuvent également être remplacés indépendamment en cas de problème.
En contrepartie, plusieurs connexions sont nécessaires entre les deux cartes.
Le NRF24L01 communique avec l’Arduino grâce au bus SPI et à deux signaux supplémentaires : CE et CSN.
Câblage du NRF24L01 de Rusty
Dans Rusty, le NRF24L01 externe est raccordé à l’Arduino Nano de la manière suivante :
| NRF24L01 | Arduino Nano |
|---|---|
| CE | D9 |
| CSN | D10 |
| MOSI | D11 |
| MISO | D12 |
| SCK | D13 |
| VCC | 3,3 V |
| GND | GND |
Les broches D11, D12 et D13 correspondent au bus SPI matériel de l’ATmega328P. Les broches CE et CSN sont définies dans la configuration GTRC de Rusty sur D9 et D10.
Une attention particulière doit être portée à l’alimentation :
le NRF24L01 fonctionne en 3,3 V et ne doit pas être alimenté en 5 V.
Un condensateur placé au plus près de l’alimentation du NRF24L01 peut également être utile pour limiter les perturbations provoquées par les variations de courant du moteur.
Le RF-Nano
La seconde solution est utilisée dans Tommy.
Le RF-Nano reprend le principe et le format général d’un Arduino Nano, mais intègre directement le circuit NRF24L01 ainsi que son antenne.
Le principal avantage apparaît immédiatement lors du câblage : toutes les liaisons entre le Nano et le module radio externe disparaissent. Le montage devient donc beaucoup plus compact et comporte beaucoup moins de fils. C’est particulièrement intéressant lorsque l’espace disponible à l’intérieur de la locomotive est limité.
Le NRF24L01 intégré utilise cependant des broches déterminées par la conception du RF-Nano. Sur les cartes utilisées pour GTRC, l’affectation de ces broches est indiquée au dos de la carte.
Pour Tommy, la configuration est :
| Fonction radio | RF-Nano |
|---|---|
| CE | D7 |
| CSN | D8 |
Ces valeurs sont différentes des D9 et D10 utilisées avec le NRF24L01 externe de Rusty.
Cette différence ne nécessite aucune modification du fonctionnement interne de GTRC. Les broches sont simplement définies dans le fichier de configuration de la locomotive.
Il est néanmoins conseillé de vérifier les indications présentes sur le RF-Nano utilisé, en particulier si la carte provient d’un autre fabricant.
Commander le moteur
Un Arduino ne peut pas alimenter directement le moteur d’une locomotive. Ses sorties fournissent uniquement les signaux logiques nécessaires au pilotage de l’électronique de puissance.
Un driver moteur, également appelé pont en H, est donc installé entre l’Arduino et le moteur.
Son rôle est de :
- fournir le courant nécessaire au moteur ;
- régler sa vitesse ;
- inverser son sens de rotation ;
- assurer son arrêt.
GTRC a été conçu pour pouvoir utiliser plusieurs types de drivers. Rusty et Tommy utilisent justement deux solutions très différentes : le L298N et le DRV8871.
Le L298N de Rusty
Ce circuit est ancien et relativement volumineux, mais les modules disponibles dans le commerce sont économiques, faciles à trouver et simples à utiliser.
Le L298N contient deux ponts en H indépendants.

Pour commander un moteur avec GTRC, trois signaux sont utilisés :
- IN1 ;
- IN2 ;
- ENA.
Dans Rusty, ils sont raccordés ainsi :
| L298N | Arduino Nano |
|---|---|
| IN1 | D4 |
| IN2 | D3 |
| ENA | D5 |
| IN3 | D6 |
| IN4 | D7 |
| ENB | le cavalier reste en place pour l’allumage de la lampe avec latension maximum |
| GND | GND |
| +35v | + batterie |
| +5v | sortie 5v du régulateur |
| JMP1 | retiré pour alimenter le 5v par un régulateur externe |
Ci dessous le câblage complet du module L198N de la locomotive Rusty qui comprend également une ampoule de phare et une alimentation 5v par un module externe.
Le circuit logique du L198N fonctionne en 5V et nécessite donc une alimentation en 5v, si l’alimentation de puissance sur la borne 35v ne dépasse pas 12v alors le module peut générer lui même le 5v via un régulateur interne. Par contre si on applique une tension supérieure à 12v sur cette entrée il y a un risque de griller l’électronique de commande. La sélection entre l’alimentation du circuit logique en interne ou par l’extérieure est réglé par le cavalier JMP1.
Dans le cas de Rusty l’alimentation avec 4 batteries 18650 monte jusqu’à 16,8v c’est pourquoi il y a un module régulateur de tension externe dans le plan ci dessous.

IN1 et IN2 déterminent le sens de rotation du moteur.
ENA reçoit le signal PWM permettant de régler sa vitesse.
La broche D5 est utilisée pour cette fonction car elle dispose de la sortie PWM nécessaire.
Le moteur est connecté sur la sortie correspondante du L298N.
L’alimentation de puissance du L298N provient directement de l’alimentation prévue pour le moteur et non de la sortie 5 V de l’Arduino.
Toutes les masses doivent évidemment être communes.
Les avantages et limites du L298N
Le L298N reste intéressant pour une première réalisation.
Son format relativement grand rend les connexions faciles à identifier et les modules du commerce possèdent généralement des borniers à vis pratiques pour le moteur et l’alimentation.
Il permet aussi de brancher une ampoule sur le deuxième pont en H pour l’éclairage de la locomotive
Il présente cependant un défaut important : son rendement. Sa technologie entraîne une chute de tension et des pertes électriques sensiblement supérieures à celles des drivers modernes.
Dans une locomotive disposant de suffisamment de place et d’une batterie adaptée, ce défaut n’est pas nécessairement gênant.
Rusty fonctionne ainsi avec ce type de driver depuis les premières phases de développement du système.
Pour une nouvelle réalisation plus compacte, un driver moderne peut cependant être préférable.
Le DRV8871 de Tommy
Le câblage côté Arduino est particulièrement simple.
Trois connexions principales sont nécessaires :
- IN1 ;
- IN2 ;
- GND.
IN1 et IN2 sont les deux entrées logiques permettant de commander le pont en H. GTRC applique des signaux adaptés sur ces deux entrées afin de contrôler le sens de rotation et la vitesse du moteur. Sur l’Arduino Nano et le RF-Nano, toutes les broches numériques ne disposent pas de la fonction PWM.
Tommy utilise donc deux broches compatibles PWM :
| DRV8871 | RF-Nano |
|---|---|
| IN1 | D5 |
| IN2 | D3 |
| GND | GND |
Cette configuration est celle définie dans le programme GTRC V1.0 de Tommy.
Contrairement au L298N, le DRV8871 ne nécessite pas de connexion ENA séparée.
Le montage est donc particulièrement simple :
RF-Nano D5 ─────► IN1
RF-Nano D3 ─────► IN2
RF-Nano GND ────► GND
Attention à la borne VM du DRV8871
Le DRV8871 demande une attention particulière lors du câblage.
Sa borne VM correspond à l’alimentation de puissance du driver et du moteur.
Elle ne doit surtout pas être connectée avec une borne 5 V de l’Arduino. Une mauvaise interprétation du brochage peut avoir des conséquences immédiates.
Cette erreur s’est justement produite lors des premiers essais de Tommy : une mauvaise connexion de VM a entraîné la destruction d’un Arduino.
La documentation du module utilisé doit donc être consultée avant toute mise sous tension.
https://learn.adafruit.com/adafruit-drv8871-brushed-dc-motor-driver-breakout?view=all
Alimenter le récepteur
Les moteurs des locomotives et l’électronique de commande ne fonctionnent pas nécessairement sous la même tension.
Rusty et Tommy utilisent tous les deux une batterie constituée de quatre accumulateurs 18650.
Une batterie lithium 4S atteint environ 16,8 V lorsqu’elle est complètement chargée. Cette tension ne doit pas être appliquée directement sur l’alimentation 5 V de l’Arduino.
Le principe consiste donc à séparer :
- l’alimentation de puissance du moteur ;
- l’alimentation basse tension de l’Arduino et de l’électronique.
Le principe général est le suivant :
Batterie
│
┌─────────────┴─────────────┐
│ │
▼ ▼
Driver moteur Convertisseur
│ de tension
▼ │
Moteur ▼
Arduino
Le convertisseur abaisse la tension de la batterie à une valeur adaptée à l’Arduino.
Le MP1584 utilisé dans Tommy
Ce module est particulièrement compact et convient donc bien à l’intégration dans une locomotive. Son entrée est raccordée à l’alimentation de la locomotive et sa sortie est réglée pour alimenter le RF-Nano.
Avant de connecter l’Arduino, la tension de sortie doit impérativement être réglée sur 5V et contrôlée au multimètre. Cette vérification ne prend que quelques secondes et évite d’envoyer accidentellement une tension excessive dans le RF-Nano.
Une masse commune
Même lorsque le moteur et l’Arduino sont alimentés par des chemins différents, leurs circuits doivent posséder une référence électrique commune.
Les masses sont donc reliées :
GND batterie
│
├──── GND driver
│
└──── GND Arduino
Cette masse commune est indispensable pour que les signaux de commande envoyés par l’Arduino soient correctement interprétés par le driver.
La mesure de batterie
GTRC permet à chaque récepteur de surveiller la tension de sa batterie.
Cette fonction est optionnelle : elle peut être activée ou désactivée individuellement pour chaque locomotive.
Rusty utilise actuellement cette fonction. Tommy, en revanche, ne possède pas de mesure de batterie active dans sa configuration GTRC V1.0.
Cette différence illustre bien le principe de GTRC : toutes les locomotives n’ont pas besoin de disposer exactement des mêmes fonctions.
Mesure de batterie de Rusty
Rusty utilise quatre accumulateurs 18650.
La tension maximale d’une batterie 4S pouvant atteindre environ 16,8 V, elle ne peut évidemment pas être appliquée directement sur une entrée analogique de l’Arduino Nano.
Un pont diviseur de tension est utilisé.
Dans Rusty, il est constitué de :
- R1 = 27 kΩ ;
- R2 = 10 kΩ.
Le montage est réalisé ainsi :
+ Batterie
│
27 kΩ
│
├────────► A2 Arduino
│
10 kΩ
│
GND
L’entrée A2 mesure donc une fraction de la tension réelle de la batterie. Le programme connaît les valeurs des deux résistances et peut reconstruire la tension réelle.
Le câblage correspondant est :
| Fonction | Arduino Nano |
|---|---|
| Mesure batterie | A2 |
La mesure est activée dans la configuration GTRC de Rusty.
Protection contre une batterie trop déchargée
La mesure de tension ne sert pas uniquement à afficher une information. Rusty possède également un seuil minimum configuré à : 13,2 V
Lorsque la batterie descend sous la limite prévue par le programme, la protection batterie peut imposer l’arrêt du moteur.
Cette sécurité reste prioritaire sur les commandes normales de conduite. Elle reste également prioritaire lorsqu’une locomotive fonctionne en mode MEM.
La surveillance réalisée par GTRC constitue cependant une sécurité supplémentaire du système de commande. Elle ne remplace pas les protections électriques propres à une batterie lithium.
Le mode diagnostic
La mesure de batterie de Rusty peut également être consultée depuis la télécommande.
GTRC possède pour cela le mode diagnostic présenté dans l’article consacré au logiciel de la télécommande.
La télécommande est mise sous tension en maintenant le bouton ARU appuyé. Le sélecteur permet ensuite de choisir la locomotive. Un appui sur LIGHT envoie une requête de diagnostic.
Si la locomotive possède une mesure de batterie active, son récepteur retourne la tension mesurée à la télécommande.
Dans le cas de Rusty, il devient ainsi possible de vérifier la batterie avant une séance de jeu sans ouvrir la locomotive ni utiliser de multimètre.
Tommy ayant actuellement sa mesure de batterie désactivée, cette information n’est pas disponible pour cette locomotive.
L’éclairage
GTRC permet également de gérer différents types d’éclairage.
Cette fonction dépend cependant beaucoup de l’équipement d’origine de la locomotive : ampoule, LED, alimentation séparée ou absence d’éclairage commandé.
Les configurations GTRC V1.0 actuelles de Rusty et Tommy sont différentes
L’éclairage fait donc partie des paramètres pouvant être définis individuellement dans le fichier de configuration du récepteur.
Rusty – Récapitulatif du câblage GTRC
Rusty correspond à la locomotive 10.
Son architecture est :
Arduino Nano + NRF24L01 externe + L298N + mesure batterie + régulateur de tension
Les principales connexions sont :
| Fonction | Broche Arduino Nano |
|---|---|
| NRF24L01 CE | D9 |
| NRF24L01 CSN | D10 |
| NRF24L01 MOSI | D11 |
| NRF24L01 MISO | D12 |
| NRF24L01 SCK | D13 |
| L298N IN1 | D4 |
| L298N IN2 | D3 |
| L298N ENA | D5 |
| Mesure batterie | A2 |
Le pont de mesure batterie utilise :
- 27 kΩ côté batterie ;
- 10 kΩ côté masse.
Le seuil minimum configuré est de 13,2 V.
L’éclairage n’est pas activé dans la configuration actuelle car l’ampoule de ma locomotive est grillée.
Tommy – Récapitulatif du câblage GTRC
Tommy correspond à la locomotive 12.
Son architecture est beaucoup plus compacte :
RF-Nano + NRF24L01 intégré + DRV8871 + MP1584
Les principales connexions sont :
| Fonction | Broche RF-Nano |
|---|---|
| NRF24L01 CE intégré | D7 |
| NRF24L01 CSN intégré | D8 |
| DRV8871 IN1 | D5 |
| DRV8871 IN2 | D3 |
Il n’existe pas de connexion ENA séparée avec le DRV8871.
La mesure de batterie est actuellement désactivée et aucun câblage vers une entrée analogique n’est donc nécessaire pour cette fonction.
L’éclairage est également désactivé dans la configuration actuelle.
Les deux solutions côte à côte
Les différences apparaissent clairement lorsque les deux réalisations sont comparées :
| Rusty – Loco 10 | Tommy – Loco 12 | |
|---|---|---|
| Microcontrôleur | Arduino Nano | RF-Nano |
| Radio | NRF24L01 externe | NRF24L01 intégré |
| CE | D9 | D7 |
| CSN | D10 | D8 |
| Driver moteur | L298N | DRV8871 |
| IN1 | D4 | D5 |
| IN2 | D3 | D3 |
| ENA | D5 | — |
| Mesure batterie | Oui | Non |
| Entrée batterie | A2 | — |
| Pont diviseur | 27 kΩ / 10 kΩ | — |
| Seuil batterie | 13,2 V | — |
| Éclairage actuel | Non | Non |
Les deux configurations utilisent pourtant le même principe de fonctionnement GTRC.
Le matériel peut donc être choisi en fonction de la locomotive sans remettre en cause l’architecture générale du réseau.
Le mode MEM côté récepteur
Le mode MEM présenté avec la télécommande repose également sur le récepteur.
Lorsqu’une locomotive est placée en MEM, le récepteur conserve la commande nécessaire pour lui permettre de continuer à rouler pendant qu’une autre locomotive est sélectionnée sur la télécommande.
Cette autonomie ne doit cependant pas permettre à une locomotive de rouler indéfiniment en cas d’oubli. Rusty et Tommy possèdent actuellement toutes les deux une durée maximale de MEM de 5 minutes.
Une fois cette durée atteinte, le récepteur arrête la locomotive.
L’arrêt d’urgence reste également prioritaire à tout moment, de même que la protection de batterie lorsqu’elle est active.
Ces fonctions seront détaillées dans l’article consacré au programme des récepteurs.
La sécurité en cas de perte de radio
Les récepteurs ne doivent pas laisser une locomotive poursuivre une commande normale indéfiniment si la communication avec la télécommande disparaît.
Rusty et Tommy utilisent actuellement un délai de sécurité radio de 500 ms.
En conduite normale, l’absence de commande valide pendant ce délai entraîne l’application de la sécurité prévue par le récepteur.
Le mode MEM constitue un cas particulier puisqu’il est précisément destiné à permettre à la locomotive de poursuivre temporairement son fonctionnement sans recevoir en permanence les commandes normales de conduite.
La gestion de ces différents états appartient au logiciel du récepteur et sera présentée plus en détail dans l’article suivant.
Exemple d’intégration dans les locomotives
Rusty dispose de suffisamment de place pour utiliser plusieurs modules séparés. Se référer à l’article détaillant l’installation du récepteur dans la locomotive, sans tenir compte de la partie programmation de cet ancien article, le code de GTRC étant totalement différent des premiers essais.
Tommy utilise une approche beaucoup plus compacte. Le RF-Nano supprime entièrement le câblage entre l’Arduino et le NRF24L01. Le DRV8871 est également beaucoup plus petit que le L298N.
Cette solution est particulièrement intéressante lorsque l’espace disponible est limité. Et je vais désormais privilégier cette architecture compacte et simple.
Tester avant l’installation définitive
Il est préférable de tester le récepteur avant de fixer définitivement l’électronique dans la locomotive.
Un premier montage sur table permet de vérifier séparément :
- l’alimentation de l’Arduino ;
- la communication radio ;
- le fonctionnement du driver ;
- le sens du moteur ;
- la variation de vitesse ;
- la mesure batterie lorsqu’elle est utilisée ;
- l’arrêt d’urgence ;
- le mode MEM.
La tension de sortie d’un convertisseur comme le MP1584 doit notamment être contrôlée au multimètre avant de connecter l’Arduino.
Le premier essai du moteur peut également être réalisé avec la locomotive soulevée afin d’éviter un départ inattendu en cas d’erreur de câblage ou d’inversion du sens de commande.
Quelques précautions avec les accumulateurs lithium
Les exemples présentés utilisent des accumulateurs 18650.
Une batterie constituée de plusieurs cellules doit disposer d’un système de protection et d’un mode de charge adaptés à sa configuration.
Afin de ne pas compliquer les cablages des locomotives j’ai décidé d’installer mes accumulateurs dans des supports amovibles et de charger les batteries avec un chargeur externe à la locomotive. Je n’ai donc pas mis de BMS dans mes montages, mais je dois retirer chaque accu de la locomotive pour le charger.
Il faut peser le pour et le contre de cette approche.
Quel montage choisir ?
Il n’est pas nécessaire de reproduire exactement Rusty ou Tommy. Ces deux locomotives servent avant tout d’exemples de deux architectures possibles.
La solution Arduino Nano + NRF24L01 externe est particulièrement intéressante pour comprendre le fonctionnement du système et lorsque la place disponible n’est pas un problème. Elle utilise des composants très répandus et permet de remplacer indépendamment l’Arduino ou le module radio.
La solution RF-Nano permet au contraire de réduire fortement l’encombrement et le câblage.
De la même manière, le L298N reste utilisable lorsque sa taille et ses pertes ne sont pas gênantes et qu’il faut aussi piloter une ampoule pour l’éclairage, tandis qu’un driver moderne comme le DRV8871 permet de réaliser un montage beaucoup plus compact.
Le choix dépend donc principalement :
- du moteur ;
- de la tension de batterie ;
- de la place disponible ;
- des fonctions à commander ;
- du matériel déjà disponible.
Une électronique différente, un logiciel commun
Rusty et Tommy montrent bien l’un des principes importants de GTRC.
Leur électronique est très différente, pourtant, il n’est pas nécessaire de développer un programme différent pour chacune. Le programme principal du récepteur reste commun. Les particularités de chaque locomotive sont regroupées dans son fichier de configuration.
Celui-ci permet notamment de définir :
- l’identifiant de la locomotive ;
- les broches du NRF24L01 ;
- le type de driver moteur ;
- les broches utilisées pour le moteur ;
- le sens du moteur ;
- les paramètres PWM ;
- le type d’éclairage ;
- l’activation ou non de la mesure batterie ;
- les valeurs du pont diviseur ;
- le seuil minimum de batterie ;
- les temporisations de sécurité ;
- les paramètres du mode MEM.
Cette organisation permet d’ajouter une nouvelle locomotive sans modifier le fonctionnement interne de GTRC.
Dans le prochain article
Le matériel nécessaire à un récepteur GTRC est maintenant défini.
L’étape suivante consistera à installer et configurer son logiciel. Comme pour la télécommande, le but ne sera pas d’étudier ligne par ligne l’ensemble du code C++, mais de comprendre son organisation et surtout d’identifier les paramètres réellement utiles.
Les fichiers de configuration des locomotives prendront cette fois une importance particulière.
Les exemples de Rusty et Tommy permettront de voir concrètement comment le même programme peut être configuré pour :
- un Nano avec NRF24L01 externe et L298N ;
- un RF-Nano avec NRF24L01 intégré et DRV8871.
Une fois le programme téléversé dans le récepteur, il ne restera plus qu’à attribuer à la locomotive son identifiant GTRC et à effectuer les premiers essais avec la télécommande.








