Micro centrale DCC modulaire - Module manette BLE

Le module de manette Bluetooth Low Energy (BLE) est une interface positionnée entre le gestionnaire du réseau (ordinateur + JMRI) et la centrale DCC qui interprète les commandes et génère le signal de puissance vers les rails.

Ce module transfert les informations séries échangées entre le contrôleur et la centrale. Il mémorise les commandes de pilotage circulant sur le port série. A l'aide d'une manette BLE, il est possible d'envoyer de nouvelles commandes et ainsi piloter les motrices.

Le principe de fonctionnement de ce module est entièrement basé sur l’apprentissage :

  • détection automatique et enregistrement de l'adresse MAC de la manette,
  • détection automatique et mémorisation de toutes les motrices commandées par JMRI.

Cette manette Bluetooth (et son module) permet donc d'accéder à toutes les locomotives déclarées dans JMRI sans aucun paramétrage fastidieux. L'utilisation du joystick permet le pilotage, du bout des doigts, de l'ensemble des motrices et leurs fonctions associées.

Caractéristiques

  • mémorisation de la manette grâce à l'enregistrement de son adresse MAC (numéro fabricant unique enregistré dans chaque PAD et permettant aux protocoles réseau d'adresser chaque matériel individuellement) ;
  • apprentissage et mémorisation des caractéristiques des motrices pilotées depuis JMRI (adresse loco, sens, vitesse, fonctions actives) ;
  • plusieurs modules de PAD BLE peuvent être interconnectés en série, permettant ainsi de répartir le pilotage des convois sur plusieurs modélistes ;
  • chaque manette peut accéder simultanément à quatre locomotives (grâce aux boutons de fonctions) à choisir dans la liste de toutes les locos paramétrées dans JMRI. Cette sélection peut être modifiée à la volée à tout moment ;
  • chaque module permet un enregistrement en EEPROM de quatre adresses de motrices qui sont disponibles dès la mise sous tension du module. La liaison à l'ordinateur n'est alors plus nécessaire au démarrage suivant ;
  • l'appui simultané sur les quatre boutons de fonction, permet d'activer ou désactiver la génération du signal DCC ;
  • Consommation du PAD en attente de connexion : 150mA par manette ;
  • Consommation du PAD connecté : 100mA par manette.

Maturité : 95%

État d'avancement du projet

Évolutions

Version 1.3 (10/2023)

Ce montage est actuellement dans une version finalisée et stable.

Le PCB  v1.3, permettant le branchement en série de plusieurs modules, a nécessité une évolution du programme embarqué dans l'ESP32 afin de diffuser les ordres donnés aux motrices pour une parfaite synchronisation de toutes les manettes.

Version 1.2 (09/2023)

La face avant correspond maintenant aux dimensions de l'écran.

Quelques erreurs se sont glissées dans cette version qu'il est nécessaire de corriger immédiatement :

  • l'émission et la réception sont inversées sur le deuxième connecteur ce qui interdit le branchement de plusieurs modules en série ;
  • la sérigraphie du dessous de la face avant est inversée pour les boutons suivant et valider.

Version 1.1 (08/2023)

Le montage est maintenant tout à fait fonctionnel et les tests d'endurance ont débutés.

La fixation de l'écran n'est pas encore parfaite (il reste encore un décalage de 2mm) et sera à revoir dans une prochaine version.

Il faudra également concevoir son boîtier pour une finition complète.

Version 1.0 (08/2023)

Finalisation du logiciel de gestion du PAD.

Cette première version du circuit imprimé comporte plusieurs anomalies qu'il faut corriger :

  • la piste de SDA est en contact avec TX (résultat d'un déplacement de composant de dernière minute sans relancer les tests de cohérences...) ;
  • préciser sur la sérigraphie, le sens d'implantation du convertisseur de niveaux logiques ;
  • La position des trous de fixation et la taille de la découpe de l'écran sont à revoir.

Version 0.6 (08/2023)

Le chaînage des modules manette BLE fonctionne et le schéma a été modifié afin de pouvoir connecter plusieurs PAD.

Aucune interférence ni de concurrence entre les PAD n'a été constaté puisque chaque module enregistre uniquement une seule manette. A la mise sous tension d'une manette, seul son module s'active.

De même, plusieurs manettes peuvent interagir sur la même motrice.

Le fonctionnement depuis un régulateur JMRI fonctionne également et synchronise les données dans toutes les manettes.

Version 0.5 (06/2023)

Le montage a été réalisé sur une planche à pain (breadboard) afin de vérifier le fonctionnement général du projet. Le logiciel du microcontrôleur ESP32 a été mis au point durant cette étape.

Version 1.3

Version 1.1

Version 1.0

Version 0.6

Version 0.5

Schéma électronique

Le microcontrôleur ESP32 NodeMCU est placé sur la ligne série entre l'ordinateur et la centrale DCC. Toutes les données qui arrivent d'un côté sont retransmises de l'autre. Au passage, les informations sont analysées et s'il s'agit de commandes concernant une motrice, la liste des locomotives est mise à jour (adresse, sens, vitesse et fonctions actives).

Parallèlement, le microcontrôleur gère également la connexion à la manette Bluetooth low energy (BLE) ainsi que la visualisation des informations sur un écran OLED.

Les actions réalisées par la manette sont traduites à l'écran et envoyées sous forme de commandes à la centrale DCC comme si elles provenaient de JMRI.

Matériel nécessaire

Description Quantité Référence Url de recherche
Condensateur 100nF 2 C1, C2 condensateur + céramique + traversant + 100nF
Condensateur polarisé électrolytique 100µF 1 C3 condensateur + polarisé + électrolytique + radial + traversant+ 100µF + 25V
Connecteur écran OLED 1 J1 Pin + header + droit + pas + 2,54
Connecteur commande DCC externe OUT (les broches du connecteur femelle doivent être concaves pour accepter les 3A) 1 J2 Connecteur + magnétique + pcb + coudé + Pogo + mâle + femelle + broche + à + tricoter + à + ressort + THT + pas + 2.2mm + 4 + pôles + 3A
Connecteur commande DCC externe IN (les broches du connecteur femelle doivent être concaves pour accepter les 3A) 1 J3 Connecteur + magnétique + pcb + coudé + Pogo + mâle + femelle + broche + à + tricoter + à + ressort + THT + pas + 2.2mm + 4 + pôles + 3A
Connecteur boutons poussoirs 1 J4 Pin + header + droit + pas + 2,54
Résistance 10K (1/4 W) 1 R1 résistance + 1/4w + 10K
Résistance 2K (1/4 W) 2 R2, R3 résistance + 1/4w + 2K
ESP32 NodeMCU 1 U1 AZDelivery + ESP32 + NodeMCU + Module + WLAN + WiFi + Dev + Kit + C
Convertisseur de niveaux logiques bidirectionnels 4 canaux (3.3V - 5V) 1 U2 4 + Canaux + IIC + I2C + Module + Convertisseur + Niveau + Logique + Bidirectionnel + 3.3V-5V + Arduino
Pin socket droit (pas 2,54) Pin + socket + droit + pas + 2,54
Pin Header droit (pas 2,54) Pin + header + droit + pas + 2,54
Câble USB type A vers Micro USB Type B 1 Câble + USB + 2.0 + Type + A + vers + Micro + USB + Type + B + Pin + Mâle + 30cm + Compatible + ESP32
Ecran OLED SSD 1306 (128 x 64) I2C 1 Ecran + OLED + I2C + 128 x 64 + Pixel + 0.96 + Pouce + SSD1306 + blanc + AZDelivery
Bouton poussoir 3 Interrupteurs + bouton-poussoir + 2 + broches + tactiles + 6x6x5

Principe de fonctionnement

Un microcontrôleur NodeMCU ESP32 placé entre l'ordinateur et la centrale DCC, intercepte les échanges sur la connexion série dans les deux sens. Gérant nativement le Bluetooth, il est en charge de la connexion BLE avec la manette décrite ci-dessous. Il en gère l'appairage et la réception des commandes. En fonction des manipulations réalisées sur la manette, il injecte de nouvelles consignes directement sur la liaison série à destination de la centrale. Enfin, toutes les informations sont restituées sur un petit écran OLED piloté par un bus I2C.

Afin de mémoriser toutes les locomotives décrites dans DecoderPro, un script python lancé depuis JMRI va permettre d'envoyer l'ensemble des caractéristiques des motrices au module qui stockera les informations et sera en capacité de les piloter via la manette. Ce script sera installé sous forme d'un bouton accessible directement dans l'interface principale de DecoderPro de manière à être exécuté en un clic. Les données des locomotives stockées dans l'ESP32 sont également mises à jour au fil des ordres envoyés depuis le panneau de commande de la motrice dans JMRI (régulateur). Les deux solutions de pilotage du réseau sont donc utilisables simultanément :

  • via le régulateur JMRI ;
  • via la manette Bluetooth.

Choix du microcontrôleur

L'ESP32 est particulièrement adapté aux fonctions proposées par ce module car il dispose déjà nativement de tout l'arsenal technologique nécessaire :

  • plusieurs ports série UART ;
  • la connexion Bluetooth LE ;
  • la gestion du bus I2C ;
  • un peu de mémoire EEPROM.

Le seul bémol au choix de l'ESP32 est son fonctionnement en 3.3V, nécessitant l'adaptation des signaux échangés avec l'Arduino fonctionnant lui, en 5V.

Circuits imprimés

Le montage est composé de deux circuits imprimés :

  • le PCB principal supportant tous les composants de la manette BLE ;
  • la face avant présentant la partie visible de l'écran et des boutons poussoirs.

Cuivre face

dessus

Cuivre face

dessous

Schéma d'implantation

des composants

Chacune des deux archives ci-contre, contient les fichiers nécessaires à la réalisation d'un PCB du module de la manette BLE. Vous y trouverez :

  • tous les fichiers de descriptions du montage au format gerber (extension gbr) ;
  • le fichier de perçage (extension drl).

Chaque archive peut être directement utilisée si vous commandez la réalisation des circuits imprimés à un prestataire (voir le tutoriel Faire réaliser son PCB).

Circuit imprimé

principal

PCB Micro Centrale DCC Module Manette BLE V 1 2
Archive – 112,8 KB

Face avant du module

de la manette BLE

FAV Micro Centrale DCC Module Manette BLE V 1 2
Archive – 10,0 KB

Mise en place des composants

Étant donné le petit nombre de composants, la réalisation ne doit pas poser de problème. Commencez par implanter les plus petits composants et terminez par les plus imposants.

Pour le circuit imprimé principal :

  • les résistances ;
  • les condensateurs non polarisés ;
  • le convertisseur de niveaux logiques ;
  • les prises latérales ;
  • les pin header ;
  • l'ESP32 monté sur ses pin socket ;
  • le condensateur polarisé.

Pour la face avant :

  • fixez l'écran OLED à son emplacement ;
  • soudez les boutons poussoirs sans couper les broches (elles serviront à connecter les fils Dupont).

L'interconnexion entre les deux platines est réalisée par des petits fils Dupont à connecteurs femelles.

Tous les boutons poussoirs de la face avant ayant leur masse interconnectée, une seule liaison vers la platine principale est nécessaire (GND) depuis l'un des trois bouton poussoir.

Connexion de la manette au module principal

Rédaction en cours...

Le logiciel chargé dans le microcontrôleur

Quel que soit le nombre de manettes connectées à la micro centrale DCC, le logiciel utilisé sera toujours le même. Aucune adaptation logicielle n'est nécessaire. Tout le paramétrage est réalisé par apprentissage (reconnaissance de la manette et liste des locos à piloter).

L'archive nommée Pad_BLE_DCC_v1-4 correspond au programme chargé dans le microcontrôleur du module de la manette BLE. Il est donc directement utilisable avec ce montage et peut être téléversé en l'état dans l'ESP32 NodeMCU.

Pad BLE DCC V 1 4
Archive – 9,3 KB

Téléchargez et extrayez le fichier de l'archive dans un répertoire dédié, du même nom que le fichier principal (ino), puis :

  1. Ouvrez le fichier ino dans l'IDE Arduino.
  2. Connectez l'ESP32 NodeMCU à l’ordinateur par la prise USB.
  3. Dans l'IDE Arduino (menu Outils), vérifiez la bonne sélection du type de carte correspondant à MH ET LIVE ESP32DevKIT.
  4. Vérifiez la bonne sélection du port série correspondant à votre ordinateur.
  5. lancez le téléversement du programme dans le microcontrôleur.
  6. à la fin de la compilation, appuyez sur le bouton "Boot" de la carte.

Description de la manette BLE

Le PAD BLE ergonomique tient dans la main et permet de nombreuses configurations de commandes grâce aux différents boutons et au joystick.

Cette manette Bluetooth Low Energy (BLE) est disponible sur tous les sites d'achats en ligne pour un tarif débutant à moins de 6€ (à ce prix le délai de livraison est forcément maximum). En tapant les mots clés  Manette VR R1 Bluetooth dans un moteur de recherche vous retrouverez sa référence. Initialement prévu pour contrôler de la musique, faire des selfies ou naviguer dans un univers 3D avec des lunettes de réalité virtuelle, ce pad a été dévié de ses attributions initiales pour servir les modélistes ferroviaires qui pourront commander leur réseau sans avoir à rester assis derrière l'ordinateur.

Voici les caractéristiques de la manette fournies par le fabricant :

  • elle est compatible Bluetooth 4.0 et sa portée est d'environ 10 mètres ;
  • sa batterie au lithium intégrée de 180mAh peut être rechargée par son port mini USB. L'utilisation d'un chargeur 5V 1A est conseillée. Lors de la charge, un voyant rouge est allumé. Il s'éteint lorsque la charge est complète ;
  • sa faible consommation d'énergie lui permet de disposer d'une très longue durée de veille ;
  • elle ne pèse que 62 g ;
  • ses dimensions sont 71 x 71 x 41 mm ;
  • un voyant bleu est allumé pendant l'appairage et le changement de mode de compatibilité Bluetooth ;
  • différents boutons sont disponibles : Entrée, retour, commutateur de mode (touche latérale M) et quatre touches de fonctions (A à D) ;
  • elle dispose d'un joystick à 360 degrés ;
  • un interrupteur M/A permet sa mise sous/hors tension.

Cette manette, dispose de plusieurs modes de fonctionnement (A à D). Chaque mode émet des codes différents lors de la manipulation des touches et du joystick, en vue de l'interfaçage avec des applications particulières. Le module de manette BLE utilise le codage du mode C. Après chaque mise sous tension, il convient de sélectionner ce mode en appuyant simultanément sur les touches M + C sans quoi, les réponses envoyées par la manette ne seront que partiellement cohérentes. Afin d'éviter d'oublier de changer de mode, un rappel est fait sur l'écran OLED au démarrage : "UTILISEZ LE MODE C". Cette consigne disparaît automatiquement après l'exécution du script d'import ou d'une manipulation de la manette.

Le menu de gestion de la manette BLE

Ce premier menu gère l'enregistrement du PAD et sa connexion de façon entièrement automatique. Son adresse MAC est mémorisée dans l'EEPROM de l'ESP32 afin de détecter la manette lors du prochain redémarrage. Si vous disposez de deux manettes BLE, la procédure de détection d'un nouveau PAD permet de mémoriser très rapidement le second PAD pendant que le premier se recharge et ainsi, continuer le pilotage des motrices du réseau sans discontinuer.

A cette étape, la manette n'est pas accessible par le module, c'est pourquoi deux boutons poussoirs sur la face avant (suivant et valider) permettent de naviguer dans les différents menus de gestion du PAD.

Trois menus de premier niveau sont proposés :

  • la connexion du PAD déjà mémorisé. Il s'agit du menu sélectionné par défaut lorsqu'un PAD est déjà connu ;
  • l'oubli d'un PAD permet le déréférencement du PAD mémorisé ;
  • la recherche d'un nouveau PAD en vue d'enregistrer son adresse. C'est ce menu qui permet d'enregistrer l'adresse du PAD à la première utilisation ou lors d'un changement de manette.

Connexion du PAD

Suivant

Oubli du PAD

Suivant

Nouveau PAD

Valider

Valider ▼

Valider ▼

Menu de démarrage lorsque le PAD est déjà mémorisé

Suivant

Dès détection ▼

Suivant ►

Valider ▼

Activer la manette (On)

Dès détection ▼

Passage en mode C

(M + C sur le PAD)

Transmission des adresses des locos ▼

Suivant

Valider ▼

Utilisation du PAD en mode pilotage : menu de commande des motrices

Suivant

Une fois le mode pilotage activé, le seul moyen pour revenir au menu de gestion, consiste à éteindre la manette.

Les boutons suivant et valider ne sont pas utilisés en mode pilotage.

Lors des prochaines mises sous tension après la mémorisation de l'adresse de la manette, le PAD se connectera automatiquement au module dès son activation.

Une mise en route standard de l'utilisation de la manette BLE consiste donc simplement à :

  1. allumer la manette BLE ;
  2. passer en mode C (appui simultané sur les touches M et C) ;

L'étape de transfert de la liste des motrices (clic sur le bouton d'exécution du script) peut être réalisée à n'importe quel moment après la mise sous tension du module. La manette n'a pas besoin d'être connectée pour la mémorisation des adresses des locomotives.

Le menu de commande des motrices

Ce menu est composé de deux niveaux :

  • le premier permet de sélectionner les locomotives à mémoriser (quatre emplacements disponibles) ;
  • le deuxième permet de donner les consignes à ces locomotives et de passer rapidement d'une motrice à une autre.

Les commandes du premier niveau :

  • naviguer à l'adresse de loco suivante : joystick droit
  • mémoriser la loco à l'emplacement A, B, C ou D : sélection + fonction A, B, C ou D (entraine un passage auto au niveau 2 sur l'emplacement sélectionné)
  • passer au niveau 2 sans mémorisation : sélection + joystick bas

Les commandes du deuxième niveau :

  • sélectionner une loco mémorisée : fonction A, B, C ou D
  • modifier la vitesse de la loco : joystick haut ou bas
  • changer le sens de marche : fonction A, B, C ou D + sélection
  • sélectionner une fonction : joystick gauche ou droit
  • activer ou désactiver une fonction : entrée
  • remonter au niveau 1 du menu : sélection + joystick haut
  • marche / arrêt signal DCC : appui sur les quatre fonctions simultanément

Exemple d'utilisation du premier niveau du menu de commande

Ce premier niveau de menu permet de faire défiler les adresses des motrices et mémoriser celles que l'on désire commander. Quatre emplacements sont disponibles (A à D) pour un accès direct aux paramètres de pilotage (sens, vitesse et 29 fonctions).

Joystick droit

Joystick droit

Sélection + joystick bas ▼

Changer de niveau de menu sans mémorisation

Sélection + joystick haut

Sélection + Fonction A à D 

stockage de la loco sélectionnée dans un emplacement du deuxième niveau du menu commande

Exemple d'utilisation du deuxième niveau du menu de commande : interagir avec les quatre motrices mémorisées aux emplacements A à D.

La sélection d'un emplacement s'effectue simplement en appuyant sur le bouton de fonction correspondant.

1) Affichage par défaut de la première loco mémorisée (marche avant, vitesse 0 et aucune fonction active).

2) L'appui sur le bouton entrée active ou désactive la fonction positionnée sur la flèche (f0 = lumières).

3) Joystick haut ou bas pour augmenter ou diminuer la vitesse de la loco en marche avant (24/126).

4) Bouton A + sélection change le sens de marche de la loco A et passe la vitesse à 0.

5) Joystick haut ou bas pour augmenter ou diminuer la vitesse de la loco en marche arrière (13/126).

6) Joystick gauche ou droit pour sélectionner une fonction et bouton entrée pour activer ou désactiver la fonction.

Mémorisation d'une autre motrice

  • Depuis le menu de commande, appuyez sur sélection + joystick haut pour revenir au menu de sélection des locos.
  • Faire défiler les adresses avec le joystick droit.
  • Appuyez sur le bouton de sélection + emplacement de mémorisation (A à D) afin de mémoriser une autre motrice.

Bouton sélection + bouton B

Commander la loco d'adresse 58 en vitesse, sens et fonctions.

Les locomotives mémorisées par cette procédure sont perdues lors de la mise hors tension du module. Afin de disposer des adresses lors d'un prochain redémarrage, il faut ajouter un enregistrement en EEPROM des emplacements à garder. Deux commandes supplémentaires permettent :

  • d'enregistrer en EEPROM l'adresse de la loco à son emplacement : emplacement de mémorisation (A à D) + joystick droit ;
  • Libérer l'emplacement enregistré : emplacement de mémorisation (A à D) + joystick gauche.

Ces deux manipulations sont volontairement plus complexes et nécessitent d'utiliser les deux mains afin d'éviter qu'une fausse manipulation puisse supprimer un enregistrement.

Installation du script JMRI (DecoderPro)

Afin de transférer rapidement toutes les caractéristiques des locos dans le module de manette BLE, un script va être exécuté qui parcourra toutes les motrices décrites dans JMRI et transmettra les données sur le port série.

Pour un accès rapide à ce script, un bouton d'exécution sera installé sur l'interface principale de DecoderPro. En cliquant sur ce bouton, le script est exécuté et toutes les données sont transférées sur le port série et mémorisées par tous les modules de manette BLE connectés.

Ce principe évite d'avoir à déclarer plusieurs fois une même locomotive. DecoderPro sera utilisé comme la "référence" de nos motrices. La déclaration d'une nouvelle motrice ou une mise à jour de motrice existante ne s'effectue qu'à un seul endroit : DecoderPro.

Rédaction en cours...

Pour aller plus loin...


Commentaires

Il n'y a pas encore de commentaire.

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *.