Commande d'un réseau en DCC avec un module ARDUINO

Centrale DCC pilotée par smartphone ou tablette


Cette centrale permet de commander un train en DCC avec un smartphone ou une tablette sans passer par un ordinateur.

Trois versions ont été réalisées: une version avec commande en Bluetooth limitée aux smartphones avec Android et deux versions avec commande en WiFi compatibles avec les smartphones Android et les iphones .

1.Commande en Bluetooth

La commande en Bluetooth est très simple à mettre en oeuvre. On peut facilement réaliser une petite centrale DCC qui marche très bien pour moins de 50 Euros.
Le seul inconvénient du Bluetooth est la portée entre le smartpphone et la centrale qui ne dépasse pas une vingtaine de mètres, mais c'est généralement suffisant pour un petit réseau.

La centrale DCC est commandée par une application ANDROID appelée BlueDCC chargée sur la tablette.
Afin de simplifier la conception de cette application, il n'y a qu'un seul octet transmis par la tablette à l'ARDUINO, ce qui limite les performances du système qui sont les suivantes:
- adresse comprise entre 3 et 99
- vitesse comprise entre 0 et 20
- sens de marche AV ou AR
- fonctions F0 à F8
- commande de 7 accessoires

1.1 Centrale DCC

Le schéma du montage réalisé est représenté sur la figure ci-dessous.



La centrale DCC est constituée de quatre sous-ensembles:
- un module BLUETOOTH HC-05 qui reçoit les ordres de commande en provenance d'un smartphone ou d'une tablette et les transmet à l'ARDUINO
- un module ARDUINO UNO qui génère le signal DCC
- un module LMD 18200 qui amplifie le signal DCC et délivre une tension de 16 Volts
- une alimentation qui délivre une tension de 16 Volts 2 ampères pour le booster DCC et une tension de 12 volts pour alimenter l'ARDUINO
Cette alimentation peut être fournie à partir du secteur 220 V ou être fournie par deux batteries Li-Ion de 8 Volts.

Les connexions entre les modules sont indiquées sur le shéma.

Il faut noter que cette centrale n'a pas de protection contre les court-circuits. Il est prudent d'en ajouter une en sortie du booster, comme par exemple celle décrite dans le chapitre consacré aux boosters.

La photo ci-dessous montre le boîtier qui abrite la centrale et les batteries Li-Ion. Les dimensions sont les suivantes. Longueur: 17 cm, largeur: 12 cm, hauteur: 5 cm



La photo ci-dessous montre le boîtier ouvert avec les composants autour de l'Arduino et les deux batteries Li-Ion.



Enfin la photo ci-dessous montre les composants qui permettent de générer le signal DCC



1.2 Application ANDROID

Cette application appelée BlueDCC est un petit régulateur DCC qui se connecte à l'ARDUINO en Bluetooth par l'intermédiaire du module HC-05.
Vous pouvez voir ci-dessous une copie d'écran de la tablette.



Avant de lancer l'application, il faut aller dans les paramètres de la tablette activer le bluetooth et se connecter au module HC-05 qui doit être sous tension. Le code à entrer est: 1234.

Ensuite, on peut lancer l'application Bluedcc. Pour l'utiliser, il suffit de cliquer sur le bouton intitulé "Connexion ARDUINO" et de choisir dans la liste des éléments qui s'affichent le module HC-05.

J'ai réalisé cette application à l'aide du logiciel en ligne intitulé MIT App Inventor 2 que l'on peut trouver à l'adresse suivante:
http://ai2.appinventor.mit.edu/

Ce logiciel est très facile à utiliser et permet de créer une application ANDROID très rapidement sans connaître le language Java.

Mon projet utilise les modules suivants:
Screen1
ListPicker1
Label4
TableArrangement1
Button2 à Button 7
Button12 à Button 22
TableArrangement2
Button8
Button9
TableArrangement3
Label1
Slider1
Label3
TableArrangement4
Label2
TextBox1
Button10
Button11
BluetoothClient1
Clock1

La connexion bluetooth utilise les instructions suivantes.


Au lancement de l'application, et avant de sélectionner le périphérique (ListPicker.beforepicking), le programme charge la liste des appareils associés au smartphone ou à la tablette (BluetoothClient.adressesandNames)
Lorsque l'on appuie sur le bouton "connexion arduino", une liste remplie des périphériques apparaît. On vous demande de choisir le périphérique. celui-ci est récupéré par la fonction qui récupère le nom de l'appareil (listpicker1.selection) et connecte le smartphone (BluetoothClient1.Connect) sur celui-ci.

L'envoi de données en bluetooth utilise les instructions suivantes pour les fonctions (F0 à F7)


Chaque bouton tel que "F0 ON" (Button 2) va envoyer via bluetooth (BluetoothClient1.Send1ByteNumber) un octet à l'appareil connecté lorsqu'il sera cliqué (button2.Click). Ici c'est Arduino qui va recevoir l'octet.

Pour la commande de vitesse et pour choisir l'adresse, on utilise le slider et une textbox avec les instructions ci-dessous.


Les commandes envoyées à l'ARDUINO sont les suivantes:



Lorsque l'écriture du programme est terminée , il ne reste juste qu'à compiler et envoyer sur le smartphone ou la tablette..

1.3 Téléchargement des programmes

Vous pouvez télécharger le programme pour l'ARDUINO ainsi que l'application bluedcc.apk pour le smartphone ou la tablette en cliquant ici.

2.Commande en Wi-Fi

Deux versions ont été réalisées.

La première version qui est assez ancienne utilise un module SainSmart Ethernet Shield.
La commande en WiFi nécessite de disposer d'un routeur et d'un serveur web qui reçoit les commandes du smartphone et les transmet à l'Arduino qui réalise le codage DCC. Le serveur web est stocké sur une carte micro-SD. Le lecteur est intégré au module SainSmart.

La deuxième version qui a été mise en oeuvre en mai 2022 utilise un module Arduino Nano 33 IOT qui intègre un module WiFi qui se connecte via la box internet de la maison à un serveur distant stocké dans le cloud appelé "Arduino Cloud IoT". Cette version est très facile à mettre en oeuvre mais elle souffre de quelques limitations par rapport à la version précédente. Le nombre de variables que l'on peut commander est limité à 5 dans la version gratuite et il faut absolument une connexion Internet pour fonctionner alors que dans la version précédente, le routeur WiFi n'a pas besoin d'être connecté.

2.1 Première version avec routeur WiFi

Le schéma du système réalisé est représenté sur la figure ci-dessous.



La centrale DCC est constituée de trois sous-ensembles:
- un serveur web connecté à un routeur Wi-FI qui reçoit les ordres de commande en provenance d'un smartphone ou d'une tablette.
- une unité centrale qui génère le signal DCC (avec un ARDUINO UNO ou MEGA et un booster)
- une alimentation qui délivre une tension de 15 Volts 2 ampères pour le booster DCC et une tension de 12 volts pour alimenter les modules ARDUINO

La commande de l'ARDUINO par le smartphone ou la tablette peut s'effectuer de deux manières possibles:
- avec le navigateur par exemple Google Chrome, ce qui est compatible avec tous les OS (ANDROID, IOS, Windows Phone).
- avec une application appelée WiFi DCC chargée sur le smartphone ou la tablette pour les appareils sous ANDROID.

Vous pouvez voir ci-dessous une photo des composants utilisés pour créer la centrale DCC et le serveur web.



2.1.1 Serveur web WiFi

Le serveur web connecté à un routeur Wi-FI reçoit les ordres de commande en provenance d'un smartphone ou d'une tablette et les transmet à l'unité centrale.

2.1.1.1 Matériel utilisé pour le serveur web

Le serveur web comprend:
- un module ARDUINO UNO
- un module SainSmart Ethernet Shield avec lecteur de carte micro-SD acheté chez SainSmart
- une carte microSD sur laquelle on stocke la page web
- un routeur D-LINK DIR-615 qui vaut 39 Euros chez Matériel.net
- un cable Ethernet

Voici une photo du routeur D-LINK


2.1.1.2 Connexions

Le shield ethernet est enfiché sur un module ARDUINO UNO. La sortie Ethernet du shield est connectée à l'entrée LAN 1 du routeur D-LINK. Le module ARDUINO transmet les commandes DCC sur la sortie TX.sous la forme d'une suite de 13 octets suivie d'un caractère retour chariot.
Les octets transmis (de valeur comprise entre 0 et 9) sont les suivants: adressed+adresseu+ma+vitessed+vitesseu+fg1d+fg1u+fg2d+fg2u+fg3d+fg3u+0+0
adressed et adresseu définissent l'adresse de la loco: adresse=adresseu+10xadressed
ma donne le sens de marche (ma=1 ==> direct, ma=0 ==>inverse)
vitessed et vitesseu définissent la vitesse de la loco: vitesse=vitesseu+10xvitessed
fg1d et fg1u définissent les fonctions du groupe 1: fg1=fg1u+10xfg1d avec fg1 = 16xF0 + F1 +2xF2 + 4xF3 + 8xF4
fg2d et fg2u définissent les fonctions du groupe 2: fg2=fg2u+10xfg2d avec fg2 = F5 +2xF6 + 4xF7 + 8xF8
fg3d et fg3u définissent les fonctions du groupe 3: fg3=fg3u+10xfg3d avec fg3 = F9 +2xF10 + 4xF11 + 8xF12
Le signal de commande est normalement connecté à l'entrée RX de l'ARDUINO de la centrale DCC.
Pour faire les tests, une petite unité centrale a été réalisée pour générer le signal DCC avec un ARDUINO UNO.

2.1.2 Description du programme installé sur l'ARDUINO

Le site PHM ARDUINO en français décrit les principes de base pour la réalisation d'un serveur web. A lire absolument pour comprendre les protocoles HTTTP, IP, etc... utilisés par un serveur web.

Dans le cas d'un serveur WEB, les données sont échangées suivant le protocole HTTP.
J'ai utilisé la méthode GET. Avec le GET, les informations sont envoyées au serveur directement dans l'URL de la ressource demandée après le nom de la ressource (nom site par exemple) et un ?. Les différentes données transmises doivent être séparées par des &.
Par exemple, si un smartphone veut transmettre au serveur l'adresse 3, l'URL aura la forme suivante:
http://192.168.0.102/index.htm?adresse=03
Dans cet exemple, l'adresse IP du serveur est IP = 192.168.0.102.
La commande est transmise après le point d'interrogation sous la forme "nom=adresse" et la valeur de l'adresse, ici 03, est transmise après le signe =.

Pour créer le programme du serveur web, j'ai utilisé l'excellent "tutorial" en Anglais du site STARTING ELECTRONICS intitulé "Arduino Ethernet Shield Web Server Tutorial" .
J'ai simplement adapté les exemples de ce site à la commande d'un train en DCC.

2.1.3 Réglage du routeur D-LINK

Avec un PC connecté en Wi-Fi au routeur, il faut se connecter à la page web de gestion du routeur à l'adresse: http://192.168.0.1 Cliquer sur réglage puis sur Paramètres du réseau, puis sur Ajouter/éditer une réservation DHCP
Vous devez obtenir la page ci-dessous




Cliquer sur activer puis remplir les champs demandés
Nom de l'eordinateur: laisser vide
Adresse IP: 192.168.0.102
Adresse MAC: cliquer sur copier l'adresse MAC de votre PC
Puis cliquer sur save.

2.1.4 Commande de la centrale par le navigateur du smartphone ou de la tablette

Il faut aller dans paramètres WiFi et se connecter au réseau intitulé D-LINK
Puis il faut ouvrir le navigateur web et taper l'adresse du serveur: http://192.168.0.102

La page web qui s'affiche sur l'écran du smartphone ou de la tablette est la suivante.



Les commandes possibles sont les suivantes:
- adresse loco entre 1 et 95
- cran de vitesse entre 1 et 9
- sens de marche
- vitesse entre 0 et 28. Une pression sur plus augmente la vitesse d'un cran.
- fonctions F0 à F12

De plus, il est possible d'enregistrer une séquence et de la reproduire automatiquement.
Pour enregistrer une séquence, appuyer sur "ENR_ON" puis entrer l'adresse de la loco (entre 1 et 95) et enregistrer la séquence. Lorsque l'enregistrement est terminé, appuyer sur "ENR_OFF".
Pour lire la séquence enregistrée, appuyer sur "PLAY_ON". La séquence va s'exécuter et se répéter en boucle jusqu'à l'appui sur "PLAY_OFF".

Voici une photo de la page web qui s'affiche sur l'écran

- avec un smartphone Wiko Rainbow




- avec une une tablette Nexus 7 de Google




2.1.5 Commande de la centrale par l'application ANDROID WiFi DCC

J'ai réalisé cette application à l'aide du logiciel en ligne intitulé MIT App Inventor 2 que l'on peut trouver à l'adresse suivante:
http://ai2.appinventor.mit.edu/

Voici la photo de l'application qui s'affiche sur l'écran de la tablette.




L'application permet les commandes suivantes:
- adresse loco entre 1 et 99
- sens de marche
- vitesse entre 0 et 28. .
- fonctions F0 à F8

2.1.6 Téléchargement des programmes

Vous pouvez télécharger le dossier intitulé serveur_web_arduino en cliquant ici.

Ce dossier comprend:
- le programme pour l'ARDUINO à télécharger sur l'ARDUINO
- la page web intitulée index.htm à charger sur la carte micro-SD avant de l'insérer dans le lecteur de carte du shield Ethernet
- l'application ANDROID intitulée wifidcc.ask à télécharger sur le smartphone ou la tablette
- le code source de l'application ANDROID intitulé wifidcc.aia à ouvrir avec le logiciel MIT App Inventor 2 pour l'adapter à vos besoins.

2.1.7 Unité centrale

L'unité centrale génère le signal DCC. Elle est constituée d'un module ARDUINO UNO et d'un module LMD 18200 utilisé comme booster DCC.

L'affectation des ports de l'ARDUINO est la suivante.
entrée RX: réception des commandes du serveur web
sortie numérique 13: vers entrée DIR du module LMD 18200
sortie +5V: vers entrée PWM du module LMD 18200
sortie GND: vers entrée BRAKE du module LMD 18200

La photo du module LMD 18200 est donnée ci-dessous.


Vous pouvez télécharger le programme ARDUINO qui génère le DCC en cliquant ici.

2.2 Deuxième version qui utilise le cloud

Le schéma du système réalisé est représenté sur la figure ci-dessous.



La centrale DCC est constituée de quatre sous-ensembles:
- un module Arduino Nano 33 IOT qui intègre un module WiFi qui se connecte via la box internet de la maison à un serveur distant stocké dans le cloud appelé "Arduino Cloud IoT"
- un module ARDUINO UNO qui reçoit les commandes en provenance de l'Arduino Nano 33 IoT et qui génère le signal DCC disponible sur la broche 13
- un module booster LMD 18200 qui amplifie le signal DCC fourni par l'ARDUINO UNO
- une alimentation qui délivre une tension de 15 Volts 2 ampères pour le booster DCC et une tension de 12 volts pour alimenter les modules ARDUINO

Sur le smartphone, il faut télécharger l'application "IoT Remote" disponible pour les smartphones Android et les iphones Apple.

Je vous conseille de lire ce "tutorial" qui explique comment concevoir un projet simple pour connecter une carte Arduino WiFi à la plateforme IoT Cloud d’Arduino.
Débuter avec l’IoT Cloud d’Arduino:
https://arduino.developpez.com/iot-cloud-arduino/debuter/

On peut aussi trouver dans le numéro 898 de LocoRevue (mai 2022) un article qui explique comment commander une loco analogique avec votre smartphone en utilisant lle cloud Arduino.

Pour se connecter au cloud Arduino, il faut souscrire un abonnement
La version gratuite permet de créer 2 objets avec un maximum de 5 variables par objet
La version payante à 2 dollars par mois permet de créer 10 objets avec un maximum de 10 variables par objet

J'ai utilisé la version gratuite mais le nombre de 5 variables est un peu juste pour créer un régulateur DCC.
Voici les variables que j'ai choisi associées à un widget qui permet de les commander:
l'adresse de la loco entre 2 et 99. La variable intitulée adresse est un entier et le widget nommé value permet d'entrer la variable avec le clavier du smartphone
le sens de marche est un entier intitulé ma et qui peut prendre la valeur 1 (marche avant) ou 0 (marche arrière). Le widget associé est un "stepper" avec vmin=0 et vmax=1
La vitesse de la loco comprise entre 0 et 28. La variable est un entier intitulé vitesse et le widget associé est un "slider" avec vmin=0 et vmax=28
Le numéro de la fonction qui est un entier et le widget nommé value permet d'entrer la variable avec le clavier du smartphone
La valeur de la fonction (0 ou 1) Le widget associé est un "stepper" avec vmin=0 et vmax=1

Voici les étapes à réaliser pour créer le projet.

Etape 1: Connexion de la carte Arduino Nano 33 IoT à l'Arduino IoT Cloud



Cette carte est compatible avec l'Arduino IoT Cloud, où vous pouvez créer des applications IoT en quelques étapes simples. Le cloud comprend des fonctionnalités puissantes, telles que la création de tableaux de bord pour surveiller et contrôler les réseaux de capteurs, tout en garantissant la sécurité de vos données.

Contrairement à une majorité de cartes Arduino, les entrées/sorties fonctionnent sous 3,3 Vcc. L'utilisation d'une tension de 5 Vcc en entrée ou en sortie est impossible et endommagerait la carte.
Cette carte est livrée avec deux rangées de connecteurs latéraux à souder en fonction de l'utilisation.

La mise en route est simple et rapide et ne nécessite que quelques étapes simples :

Connecter la carte Arduino Nano 33 IoT sur un port USB du PC.
Le PC doit afficher: "Configuration d'un appareil" puis "L'appareil est prêt".

Créez un compte Arduino Create.
https://store.arduino.cc/digital/create

Téléchargez et installez le plugin Arduino Create qui permet de programmer l'Arduino en ligne:
https://support.arduino.cc/hc/en-us/articles/360014869820-Install-the-Arduino-Create-Agent

Accédez à Arduino IoT Cloud et commencez votre voyage à travers l'IoT.
Pour réaliser ces étapes, cliquer sur le lien ci-dessous et suivez les instructions.
https://docs.arduino.cc/cloud/iot-cloud

Étape 2 : Création de l'objet "Régulateur"



Allez sur la page:
https://create.arduino.cc/iot/things

Cliquer sur CREATE THING
Vous ouvrez une page appelée UNTITLED. Changer ce nom pour REGULATEUR
Dans la partie droite de la page, cliquer sur DEVICE (Select Device) et l'Arduino nano 33 IoT devrait apparaitre. Cliquer sur ASSOCIATE
Toujours dans la partie droite de la page, cliquer sur Network et entrer le nom du réseau WiFi et le mot de passe
Puis dans la parte gauche de la page, cliquer sur ADD VARIABLE
Vous allez créer 5 variables intitulées: adresse, ma, vitesse, fonction, valfonction. Pour chaque variable, choisir integer number pour la rubrique Select Variable type. Pour variable permission, cocher "Read and Write" et pour "Variable Update Policy", cocher On change. Pour chaque variable, cliquer sur "ADD VARIABLE"

Étape 3 : Création de l'interface de commande de l'application "IoT Remote"



En haut de la page, cliquer sur "Dashboards"
Ceci ouvre une nouvelle page. Cliquer sur Regulateur puis sur le symbole en haut à gauche avec un crayon
Cliquer sur "ADD" puis sur "Value" Remplacer le nom de "Value" par "Adresse" puis cliquer sur "Linked Variable" et associer la variable "adresse" puis cliquer sur "DONE"
Cliquer sur "ADD" puis sur "Stepper" Remplacer le nom de "Stepper" par "Sens de marche" puis cliquer sur "Linked Variable" et associer la variable "ma" puis insérer dans "Value Range" 0 pour min, 1 pour max et 1 pour step et cliquer sur "DONE"
Cliquer sur "ADD" puis sur "Slider" Remplacer le nom de "Slider" par "Vitesse" puis cliquer sur "Linked Variable" et associer la variable "vitesse" puis insérer dans "Value Range" 0 pour min, 28 pour max et cliquer sur "DONE"
Cliquer sur "ADD" puis sur "Value" Remplacer le nom de "Value" par "Numero de fonction" puis cliquer sur "Linked Variable" et associer la variable "fonction" puis cliquer sur "DONE"
Cliquer sur "ADD" puis sur "Stepper" Remplacer le nom de "Stepper" par "Val fonction" puis cliquer sur "Linked Variable" et associer la variable "valfonction" puis insérer dans "Value Range" 0 pour min, 1 pour max et 1 pour step et cliquer sur "DONE"
Vous devez obtenir l'interface suivante sur votre smartphone:



Étape 4 : Coder, écrire le sketch



Retourner sur la page:
https://create.arduino.cc/iot/things

Cliquer sur Regulateur.
Sur la page ouverte, cliquer sur "Sketch".
Le programme très simple permet d'envoyer un octet sur la broche TX1 (interface série) de l'Arduino Nano 33 IoT qui est transmis à l'Arduino Uno (broche Rx)
sens de marche ma = 0 ou 1
adresse entre 3 et 99
vitesse entre 100 et 128
fonction entre 150 et 178
valfonction 200 ou 201
Le connecteur USB de la carte est directement connecté aux broches de l'hôte USB du SAMD21. Ce routage vous permet d'utiliser l'Arduino NANO 33 IoT en tant que périphérique USB client (agissant comme une souris ou un clavier connecté à l'ordinateur) ou en tant que périphérique hôte USB afin que des périphériques tels qu'une souris, un clavier ou un téléphone Android puissent être connecté à l'Arduino NANO 33 IoT. Ce port peut également être utilisé comme port série virtuel à l'aide de l'objet Serial dans le langage de programmation Arduino. Les broches RX0 et TX1 constituent un deuxième port série disponible en tant que Serial1. C'est ce port que j'utilise dans ce projet.

Dans void setup() { ajouter:
Serial1.begin(9600);

Voici comment l'adresse est transmise:
void onAdresseChange() {
// Add your code here to act upon Adresse change
Serial1.write(adresse);
}

Voici comment le sens de marche est transmis:
void onMaChange() {
// Add your code here to act upon Ma change
Serial1.write(ma);
}

Voici comment la vitesse est transmise:
void onVitesseChange() {
// Add your code here to act upon Vitesse change
Serial1.write(vitesse+100);
}

Voici comment le numéro de fonction est transmis:
void onFonctionChange() {
// Add your code here to act upon Fonction change
Serial1.write(fonction+150);
}

Enfin, voici comment la valeur de la fonction (0 ou 1) est transmise:
Serial1.write(valfonction+200);
}

Vous pouvez télécharger ce sketch en cliquant ici.

Ensuite il faut transmettre ce skecth à l'Arduino Nano 33 IoT. Pour celà il faut cliquer sur le rond avec la flèche situé sous le titre "REGULATEUR".
Lorsque le sketch est téléchargé, vous pouvez déconnecter l'Arduino Nano 33 IoT du PC.

Étape 5 : Transmettre le programme de codage DCC dans l'Arduino Uno



Il faut connecter l'Arduino Uno au PC et transmettre le programme intitulé "codage_dcc_2.ino" que vous pouvez télécharger en cliquant ici.

Puis vous pouvez déconnecter l'Arduino Uno du PC.

Étape 6 : Câblage



Le cablage à effectuer est représenté sur la figure ci-dessus.
Dans notre application, l'alimentation de 15 V est à appliquer à la broche V+ du module LMD 18200 et la tension 12V issue du régulateur est à appliquer sur les broches VIN de l'Arduino Nano et de l'Arduino Uno.
La broche TX1 de l'Arduino Nano 33 IoT est à relier à la broche RX de l'Arduino Uno.
Sur le module LMD 18200, la broche PWM est à relier à la broche 5V de l'Arduino Uno, la broche DIR est à relier à la broche 13 de l'Arduino Uno et la broche BRAKE est à relier à la broche GND de l'Arduino Uno.
Le signal DCC est disponible sur les sorties OUT1 et OUT2 du module LMD 18200.

Page suivante


Page précédente


Retour page d'accueil