03- GTRC – Fabriquer la télécommande
Après avoir présenté le fonctionnement général de GTRC, je vais vous présenter la fabrication de la télécommande.
La télécommande GTRC reprend le matériel développé pour la deuxième version de TT2J. L’objectif lors du développement de GTRC était justement de pouvoir faire évoluer profondément le logiciel sans avoir à reconstruire la télécommande.
Elle est construite autour d’un Arduino Uno, d’un module radio NRF24L01, d’un écran OLED 1,3″, d’un potentiomètre de commande et d’un sélecteur rotatif à 12 positions.
Dans cet article, je vais détailler le câblage de chacun de ces éléments. Je présenterais aussi le boitier fabriqué qui est celui de la version TT2J déjà détaillé dans un autre article. Je n’aborderais pas ici la partie logiciel, configuration et utilisation de la télécommande qui feront l’objet d’autres articles.
Liste du matériel
Voici une liste des pièces nécessaires pour la réalisation de la télécommande avec des images pour illustrer et des liens vers les pièces que j’ai achetées. Si vous prenez exactement les mêmes pièces alors le boitier imprimé en 3D sera adapté sans modification.
| 1 Arduino Uno | ![]() |
| 1 module NRF24L01 | ![]() |
| 1 écran OLED | ![]() |
| 1 sélecteur rotatif 12 positions | ![]() |
| 1 potentiomètre 10k | ![]() |
| 4 boutons poussoirs colorés à contact momentané | ![]() |
| 1 interrupteur ON/OFF | ![]() |
| 1 support double pour batterie 18650 | ![]() |
| 2 batteries 18650 (récupérées dans des vieux appareils ou trouvées d’occasion sur internet) | ![]() |
| 1 lot de résistances diverses (voir les valeurs nécessaires dans la suite de l’article) | ![]() |
| 1 lot de condensateurs divers | ![]() |
| divers fils de couleurs | ![]() |
Il faut aussi avoir les outils de base pour faire un peu d’électronique simple : pince coupante, pince à dénuder ou cutter, fer à souder, gaine thermo ou scotch d’électricien, pistolet à colle chaude.
Pour le boitier je possède une imprimante 3D donc je l’ai dessiné et imprimé en PLA.
Les principales commandes
La télécommande comporte :
- un potentiomètre pour la vitesse et le sens de marche ;
- un sélecteur rotatif 12 positions pour choisir directement une locomotive ;
- un bouton d’arrêt d’urgence ARU ;
- un bouton LIGHT pour l’éclairage et certaines fonctions complémentaires ;
- deux boutons supplémentaires réservés aux futures évolutions ;
- un écran OLED affichant l’état du système ;
- un interrupteur général ON/OFF.
Le tableau suivant résume les principales connexions avec l’Arduino Uno :
| Élément | Connexion Arduino |
|---|---|
| Sélecteur 12 positions | A0 |
| Potentiomètre de conduite | A1 |
| Mesure batterie télécommande | A2 |
| Bouton ARU | D2 |
| Bouton LIGHT | D3 |
| OLED SDA | A4 |
| OLED SCL | A5 |
| NRF24L01 CE | D9 |
| NRF24L01 CSN | D10 |
| NRF24L01 MOSI | D11 |
| NRF24L01 MISO | D12 |
| NRF24L01 SCK | D13 |
Le potentiomètre de conduite
Le potentiomètre constitue la commande principale de la locomotive.
Son curseur est connecté à l’entrée analogique : A1
Les trois bornes sont raccordées de la manière suivante :
+5 V Arduino ───── borne extérieure
│
potentiomètre
│
A1 Arduino ───────── curseur
│
potentiomètre
│
GND Arduino ────── borne extérieure
L’Arduino mesure ainsi la position du potentiomètre.
La position centrale correspond à l’arrêt de la locomotive. En tournant le potentiomètre d’un côté, la locomotive avance ; en le tournant de l’autre côté, elle recule.
Une petite zone morte autour du point central est prévue dans le logiciel afin d’éviter qu’une légère imprécision mécanique du potentiomètre ne fasse démarrer la locomotive alors que la commande est placée au neutre.
Dans la configuration actuelle, cette zone morte est définie par :
const int DEAD_ZONE = 40;
Il n’est normalement pas nécessaire de modifier cette valeur lors de la construction.
Si le sens de rotation du potentiomètre ne correspond pas au sens souhaité, il suffit d’intervertir les connexions +5 V et GND de ses deux bornes extérieures.
Le bouton d’arrêt d’urgence ARU
Le bouton d’arrêt d’urgence est un bouton à contact momentané, il est connecté à la broche : D2
Le câblage est simplement :
D2 ───── bouton ARU ───── GND
Le programme utilise la résistance de rappel interne de l’Arduino. Il n’est donc pas nécessaire d’ajouter de résistance externe.
Lorsque le bouton n’est pas appuyé, l’entrée est maintenue à l’état HIGH. Lorsqu’il est appuyé, la broche D2 est reliée à la masse et passe à LOW.
Dans GTRC, cette commande est prioritaire : l’activation de l’ARU provoque l’envoi d’une commande d’arrêt général à toutes les locomotives du réseau.
Il est donc préférable d’utiliser un bouton facilement identifiable et rapidement accessible. J’ai dans mon cas pris un bouton avec un capuchon rouge
Le bouton LIGHT
Le bouton LIGHT est un bouton à contact momentané et est connecté à la broche : D3
Son câblage est identique à celui de l’ARU :
D3 ───── bouton LIGHT ───── GND
Là encore, aucune résistance externe n’est nécessaire.
Ce bouton possède plusieurs fonctions selon le mode utilisé.
En conduite normale :
- un appui court commande l’éclairage de la locomotive sélectionnée ;
- un appui long permet d’activer la fonction MEM.
La durée définissant un appui long est actuellement réglée à :
const uint16_t MEM_LONG_PRESS_TIME = 1500;
soit 1,5 seconde.
Le même bouton est également utilisé dans le mode diagnostic.
Cette organisation permet de conserver une télécommande simple, avec peu de boutons, tout en donnant accès à plusieurs fonctions. J’ai utilisé un bouton jaune.
Les deux boutons supplémentaires
Deux emplacements supplémentaires ont été prévus sur la télécommande pour de futures fonctions.
Dans la version GTRC actuelle, ils ne sont volontairement pas encore affectés dans le logiciel :
// const uint8_t PIN_F1 = ?;
// const uint8_t PIN_F2 = ?;
Il n’est donc pas nécessaire de les câbler pour utiliser toutes les fonctions actuellement disponibles dans GTRC.
Ils pourront servir ultérieurement, par exemple pour des commandes d’accessoires, de sonorisation ou d’autres fonctions propres aux locomotives.
Prévoir leur emplacement lors de la fabrication du boîtier peut néanmoins être intéressant afin d’éviter d’avoir à le modifier plus tard.
Ils seront relié à l’arduino sur le même principe que les 2 précédents boutons momentanés.
Le sélecteur de locomotives à 12 positions
Le sélecteur rotatif constitue l’une des particularités de la télécommande.
Je souhaitais pouvoir passer immédiatement d’une locomotive à une autre sans naviguer dans des menus comme cela était je cas de la première version de la télécommande TT2J.
Un sélecteur à 12 positions permet donc de commander jusqu’à 12 locomotives.
Il aurait cependant fallu utiliser 12 entrées numériques de l’Arduino pour connaître directement sa position. Cela aurait utilisé beaucoup trop de broches.
La solution retenue consiste à utiliser une seule entrée analogique : A0.
Chaque position du commutateur est associée à une résistance différente. Le réseau de résistances produit donc une tension différente pour chacune des 12 positions en utilisant le principe du pont diviseur de tension.
Le logiciel mesure cette tension sur A0 et détermine automatiquement la locomotive sélectionnée.
Câblage du sélecteur
Le point commun du commutateur est connecté au +5 V.
Chacune des 12 sorties traverse ensuite une résistance différente.
Toutes les résistances se rejoignent sur un point commun connecté :
- à l’entrée
A0de l’Arduino ; - à une résistance commune
Rcde 10 kΩ reliée à la masse.
Le principe est donc :
+5 V
│
commun sélecteur
│
┌──────────────┼──────────────┐
│ │ │
Position 1 Position 2 ...
│ │
470 kΩ 82 kΩ
│ │
└──────────────┴─────── A0
│
10 kΩ
│
GND
Les valeurs des résistances utilisées sont calculées grâce à la formule ci dessous et résumées dans le tableau :
- Vin = 5v
- Rc = 10k
- Ri = résistance choisie à la position donnée, par exemple 470k
| Position | Résistance | Tension de référence | LOCO_ID par défaut |
|---|---|---|---|
| 1 | 470 kΩ | 0,10 V | 10 |
| 2 | 82 kΩ | 0,54 V | 11 |
| 3 | 39 kΩ | 1,02 V | 12 |
| 4 | 22 kΩ | 1,47 V | 13 |
| 5 | 15 kΩ | 1,92 V | 14 |
| 6 | 12 kΩ | 2,27 V | 15 |
| 7 | 8,2 kΩ | 2,75 V | 16 |
| 8 | 5,6 kΩ | 3,21 V | 17 |
| 9 | 3,9 kΩ | 3,60 V | 18 |
| 10 | 2,2 kΩ | 4,03 V | 19 |
| 11 | 1,2 kΩ | 4,46 V | 20 |
| 12 | 220 Ω | 4,89 V | 21 |
Il est important de respecter l’ordre des résistances lors du câblage.
Le logiciel ne recherche pas une tension parfaitement exacte : il recherche la tension de référence la plus proche. Les petites différences dues aux tolérances des résistances ou à la tension réelle de l’Arduino ne posent donc normalement pas de problème.
Si vous changez les valeurs des résistances il faudra refaire le calcul des tensions adaptées et modifier le programme en conséquence.
L’écran OLED
La télécommande utilise un écran OLED SH1106 128 × 64 pixels communiquant avec l’Arduino par le bus I2C.
L’utilisation de l’I2C est intéressante car seulement deux lignes de communication sont nécessaires.
Sur l’Arduino Uno :
OLED SDA ───── A4 Arduino
OLED SCL ───── A5 Arduino
OLED GND ───── GND Arduino
OLED VCC ───── alimentation

L’écran n’est pas indispensable pour conduire la locomotive : les principales commandes restent physiques.
Il apporte cependant de nombreuses informations utiles, notamment :
- le nom de la locomotive sélectionnée ;
- la vitesse demandée ;
- le sens de marche ;
- l’état de l’éclairage ;
- l’état de l’arrêt d’urgence ;
- l’état du mode MEM ;
- les informations du mode diagnostic ;
- l’état de la batterie de la télécommande.
Cette organisation permet de continuer à piloter le train sans avoir à naviguer dans des menus sur l’écran.
Le module radio NRF24L01
La communication avec les locomotives est assurée par un module NRF24L01.
Les deux broches spécifiques utilisées par GTRC sont définies dans Config.h :
const uint8_t PIN_NRF_CE = 9;
const uint8_t PIN_NRF_CSN = 10;
Le câblage complet sur Arduino Uno est donc :
| NRF24L01 | Arduino Uno |
|---|---|
| VCC | 3,3 V |
| GND | GND |
| CE | D9 |
| CSN | D10 |
| MOSI | D11 |
| MISO | D12 |
| SCK | D13 |
| IRQ | non utilisé |


Le NRF24L01 doit impérativement être alimenté en 3,3 V et non en 5 V.
Le logiciel GTRC utilise actuellement le canal radio :
const uint8_t RADIO_CHANNEL = 100;
Ce réglage n’a aucune conséquence sur le câblage, mais il doit être identique dans la télécommande et dans tous les récepteurs.
L’adresse physique commune du réseau est également définie dans le logiciel. L’utilisateur n’a normalement pas besoin de la modifier.
Un condensateur de découplage de 10µF est connecté entre les bornes VCC et GND du NRF24L01 afin d’améliorer la stabilité de son alimentation. Il faut connecter la ligne de sortie courte du condensateur (cathode) sur la borne GND.
Alimentation de la télécommande
La télécommande est alimentée par deux accumulateurs 18650.
Un interrupteur général permet de couper complètement son alimentation lorsqu’elle n’est pas utilisée. Les 2 batteries 18650 délivrent une tension de 7,2v il faut donc les connecter au Vin et non au 5v au risque d’endommager l’Arduino.
Mesure de la batterie de la télécommande
La tension de la batterie est mesurée par l’entrée : A2
Les valeurs du pont diviseur utilisées par le programme sont :
const float BATTERY_R1 = 4700.0;
const float BATTERY_R2 = 6800.0;
soit :
- R1 = 4,7 kΩ ;
- R2 = 6,8 kΩ.
Le câblage doit respecter l’ordre suivant :
Batterie + ───── R1 4,7 kΩ ─────┬───── A2
│
R2 6,8 kΩ
│
GND

La masse de la batterie et celle de l’Arduino doivent naturellement être communes.
Le logiciel peut alors recalculer la tension réelle de la batterie à partir de la tension mesurée sur A2.
Les batteries étant dans la partie inférieure de la télécommande avec le bouton ON/OFF, j’ai utilisé des petits connecteurs pour relier cette partie à la partie comprenant tout le reste de l’électronique. Les connecteurs femelles sont coté batterie afin de réduire les risques de court-circuit quand on ouvre la télécommande.
Il faut bien sûr relier toutes les masses GND ensemble, et tous les 5V ensemble.
Avant la première mise sous tension
Avant la première mise sous tension, il est utile de contrôler une dernière fois toutes les connexions.
| Fonction | Arduino Uno |
|---|---|
| Sélection locomotive | A0 |
| Potentiomètre vitesse/direction | A1 |
| Mesure batterie | A2 |
| OLED SDA | A4 |
| OLED SCL | A5 |
| ARU | D2 |
| LIGHT | D3 |
| NRF24L01 CE | D9 |
| NRF24L01 CSN | D10 |
| NRF24L01 MOSI | D11 |
| NRF24L01 MISO | D12 |
| NRF24L01 SCK | D13 |
| NRF24L01 alimentation | 3,3 V |
| Boutons F1/F2 | réservés, non définis actuellement |
| Masse commune | GND |
Avant d’insérer les batteries ou de mettre la télécommande sous tension, je conseille de vérifier au multimètre :
- l’absence de court-circuit entre les alimentations et la masse ;
- la présence du 3,3 V destiné au NRF24L01 ;
- le câblage des boutons ARU et LIGHT vers la masse ;
- les valeurs des résistances du sélecteur ;
- le câblage du potentiomètre ;
- la polarité de l’écran OLED ;
- le pont diviseur de mesure de batterie.
Une fois ces vérifications effectuées, la partie électronique de la télécommande est terminée.
Réalisation du boitier
Comme indiqué au début de l’article la télécommande étant la même que physiquement que ma télécommande TT2J je remets ici le lien vers les fichiers pour pouvoir imprimer un boitier adapté au matériel que j’ai utilisé et qui est listé plus haut. Libre à vous d’adapter le boitier.

https://www.thingiverse.com/thing:7146003
Il restera alors à installer le logiciel GTRC dans l’Arduino et à personnaliser les noms et identifiants des locomotives. Ces opérations feront l’objet d’autres articles consacrés à la configuration et au téléversement du logiciel.























