• accueil
  • réseaux à l'échelle 0
    • réseau jouet ancien
      • présentation
      • catalogue LR
      • photos du matériel roulant
    • réseau jouet moderne
      • présentation
      • quelques videos
      • matériel roulant
      • 131T ETS et fumigènes
      • portique intermodal
    • réseau modulaire
      • présentation
      • photos
      • vidéos
      • exploitation du réseau
      • matériel roulant
      • le parc d'attractions
      • le pont tournant
  • réseaux de monorails
    • introduction
    • histoire des monorails
    • maquettes de monorails gyroscopiques
    • principes de la levitation magnétique
    • monorail jouet à sustentation magnétique
    • maquette de lévitation électromagnétique
  • train de jardin
    • présentation
    • Matériel roulant
    • 030T CDN
    • autorail de Dion
    • autorail Billard
    • Mallet LGB
    • BB400 des CP
    • Vapeur vive Emma
    • Vapeur vive Millie
    • Vapeur vive MIKADO
    • Loco vapeur 031T ACO
    • Exploitation du réseau
    • Rétrosignalisation
    • Wagon dételeur
    • Liens
  • techniques
    • électronique
      • présentation
      • alimentation pwm
      • Détecteur de passage infra rouge
      • Commande d'une plaque tournante
      • Comment réaliser un oscillo pas cher
      • Utilisation d'un servomoteur
      • Commande d'aiguille par décharge capacitive
      • Commande d'un fumigène pulsé par un décodeur ESU Loksound
    • informatique
      • généralités
      • port parallèle
      • port série
      • port USB
      • Qbasic et Freebasic
      • Visual Basic
      • Exploitation d'un réseau en Visual Basic
      • Commande d'un réseau par manette de jeu
      • Commande vocale d'un réseau
    • ARDUINO
      • introduction
      • Sonorisation d'une locomotive
      • Radiocommande et sonorisation d'une loco sans DCC
      • Module de sonorisation d'un réseau
      • Applications du BLUETOOTH au modélisme ferrovaire
    • Fumigènes
    • dcc
      • Introduction
      • Structure des paquets DCC
      • ARDUINO et DCC
      • Utilisation d'un ampli audio comme booster
      • Création d'un signal DCC avec un PC
      • Contrôle d'un signal DCC
      • Rétrosignalisation
      • Détecteurs d'occupation
      • Utilisation du LokProgrammer
      • SPROG II
      • DCC transmis par radio
      • Présentation du programme CARTO-DCC
      • Commande d'un réseau DCC en WiFi
      • programmation des locos MTH
      • Régulateur DCC à commande vocale en Français
      • Commande des aiguilles en DCC
      • Les décodeurs sonores
  • Contact




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

    Les techniques de base


    Menu

    1. génération des bits à 1 et 0

    2. génération d'une trame de base DCC

    3. Exemple de programme pour l'ARDUINO UNO ou LEONARDO

    4 Booster

    5 commande d'accessoires

    6 rétrosignalisation

    7. Communication entre ARDUINO et PC en Visual Basic

    8. Exemple de création d'un signal DCC avec commande par ordinateur

    9. Réalisation d'un décodeur DCC

    1. génération des bits à 1 et 0





    Dans un bit à "1", les deux alternances ont une durée de 58 us chacune. Ainsi, la durée d'un bit à "1" est de 116 us.

    Dans un bit à "0", les deux alternances doivent avoir une durée supérieure à 100 us.

    Les sous programmes écrits en langage ARDUINO pour générer les bit à "1" et "0" sont les suivants:

    void bitun(){ //genere un bit à 1
    digitalWrite(sdcc, LOW); // sets the pin off
    delayMicroseconds(58); // pauses for 58 microseconds
    digitalWrite(sdcc, HIGH); // sets the pin on
    delayMicroseconds(58); // pauses for 58 microseconds
    }

    void bitzero(){ //genere un bit à 0
    digitalWrite(sdcc, LOW); // sets the pin off
    delayMicroseconds(116); // pauses for 116 microseconds
    digitalWrite(sdcc, HIGH); // sets the pin on
    delayMicroseconds(116); // pauses for 116 microsec
    }

    2 génération d'une trame de base DCC



    Il faut générer au mons deux paquets qui sont transmis successivement:
    - un paquet de base pour la commande de la vitesse et du sens de marche
    - un paquet de base pour la commande des fonctions F0 à F4 (fonctions du groupe 1)

    2.1 paquet DCC de base pour la commande de la vitesse et du sens de marche



    Le paquet DCC de base pour la commande de la vitesse et du sens de marche se compose des éléments suivants:
    - une séquence de synchronisation constituée d'un minimum de 14 bits à 1 suivie d'un bit à 0
    - un octet d'adresse de loco (bits a0 à a7) suivi d'un bit à 0
    - un octet de commande (bits c0 à c7) suivi d'un bit à 0
    - un octet de controle (bits e0 à e7) suivi d'un bit à 1 qui signale la fin de la transmission du paquet.

    L'adresse de la loco est comprise entre 0 et 127.
    En binaire, l'adresse est définie par les bits a[0] à a[6]
    Le bit a[7] est égal à zéro.

    L'octet de commande transmet la vitesse entre 0 et 28 par les bits c[0] à c[4].
    Le bit c[5] définit le sens de marche ( 1 pour la marche avant, 0 pour la marche arrière)
    Le bit c[6] est égal à 1 et c[7] = 0.

    Les bits e[0] à e[7] de l'octet de controle sont obtenus par l'addition logique bit pour bit de l'octet d'adresse et de l'octet de commande. La fonction logique utilisée est "OU-EXCLUSIF".

    2.2 paquet DCC de base pour la commande des fonctions F0 à F4 (groupe 1)

    Le paquet DCC de base pour la commande des fonctions F0 à F4 se compose des éléments suivants:
    - une séquence de synchronisation constituée d'un minimum de 14 bits à 1 suivie d'un bit à 0
    - un octet d'adresse de loco (bits a0 à a7) suivi d'un bit à 0
    - un octet de commande (bits b0 à b7) suivi d'un bit à 0
    - un octet de controle (bits ef0 à ef7) suivi d'un bit à 1 qui signale la fin de la transmission du paquet.

    L'adresse de la loco est comprise entre 0 et 127.
    En binaire, l'adresse est définie par les bits a[0] à a[6]
    Le bit a[7] est égal à zéro.

    L'octet de commande transmet les fonctions avec l'allocation suivante pour les bits b[0] à b[4]:
    b[0] = 1 si F1 = 1
    b[1] = 1 si F2 = 1
    b[2] = 1 si F3 = 1
    b[3] = 1 si F4 = 1
    b[4] = 1 si F0 = 1
    Les aures bits sont: b[5] = 0 b[6] = 0 b[7] = 1

    Les bits e[0] à e[7] de l'octet de controle sont obtenus par l'addition logique bit pour bit de l'octet d'adresse et de l'octet de commande. La fonction logique utilisée est "OU-EXCLUSIF".

    L'intervalle de temps minimal entre l'émission de 2 paquets est de 5 ms (en pratique, on peut envoyer une suite de 0)

    2.3 paquet DCC de base pour la commande des fonctions F5 à F8 (groupe 2)

    L'octet de commande transmet les fonctions avec l'allocation suivante pour les bits d[0] à d[4]:
    d[0] = 1 si F5 = 1
    d[1] = 1 si F6 = 1
    d[2] = 1 si F7 = 1
    d[3] = 1 si F8 = 1

    Les aures bits sont: d(4)=1; d[5] = 1 d[6] = 0 d[7] = 1

    Les bits e[0] à e[7] de l'octet de controle sont obtenus par l'addition logique bit pour bit de l'octet d'adresse et de l'octet de commande. La fonction logique utilisée est "OU-EXCLUSIF".

    3. Exemple de programme pour l'ARDUINO UNO ou LEONARDO



    Ce programme simplifié permet de piloter une loco d'adresse comprise entre 3 et 99 avec 28 crans de vitesse. Il y a 5 fonctions disponibles: F0, F1, F2, F3 et F4.
    L'affectation des ports de l'ARDUINO est la suivante.
    entrée analogique A0: potentiomètre de réglage de la vitesse et du sens de marche
    entrée analogique A1: potentiomètre pour le choix de l'adresse (dizaines)
    entrée analogique A2: potentiomètre pour le choix de l'adresse (unités)
    entrée numérique 2: interrupteur de commande de la fonction F0
    entrée numérique 3: interrupteur de commande de la fonction F1
    entrée numérique 4: interrupteur de commande de la fonction F2
    entrée numérique 5: interrupteur de commande de la fonction F3
    entrée numérique 6: interrupteur de commande de la fonction F4
    sortie numérique 13: signal DCC

    Le shéma de cablage est donné sur la figure ci-dessous:


    Le signal DCC est généré sur la sortie 13 avec une tension de 2 volts efficaces environ, ce qui est évidemment trop faible pour piloter une loco.
    Il faut donc un booster pour amplifier le signal et délivrer une tension de 16 Volts environ.

    Vous pouvez télécharger ce petit programme appelé "arduino_régulateur_v1" en cliquant ici.

    4 Booster



    On peut utiliser comme booster DCC un module de pilotage de moteur L298 pour Arduino que l'on peut trouver chez TipTopBoards pour moins de 10 Euros.
    Ce module possède deux sorties qui peuvent délivrer chacune un courant de 2 ampères, ce qui est suffisant pour un petit réseau.

    On peut utiliser aussi comme booster un module avec le cirtcuit LMD18200 que l'on peut trouver sur eBay ou bien ici..
    Ce module peut fournir un courant de 3 ampères avec des pointes de 6 ampères.

    4.1 Description du booster réalisé avec un module de pilotage de moteur L298

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


    Voici le cablage à réaliser pour obtenir une ou deux sorties DCC

    Le bornier à vis bleu (3 pins) :
    VMS --> Tension VMS de l'alim de puissance de 15 à 20 Volts (sur la source de puissance).
    GND, --> Relié à la masse de l'alimentation de puissance et à la masse de l'ARDUINO
    +V --> Sortie du régulateur de la carte L298N en +5V. Permet d'alimenter des composants externes éventuels (Intensité de 0 à 36 mA), sinon non connecté.

    Les 2 borniers à vis verts (2 x 2 pins)
    Le signal DCC est disponible sur les 2 sorties MotorA et MotorB

    Signaux de commande sur les 6 pins (logique TTL : 5V = high, 0V = low).
    Pour avoir une sortie DCC sur Motor A:
    L' entrée EnA est à relier au +5V de l'ARDUINO
    Les entrées In1 et In2 sont à relier aux sorties numérique de l'ARDUINO qui délivrent le signal DCC
    Pour avoir 2 sorties DCC sur Motor A et motor B, il faut relier ensemble IN1 et IN3, IN2 et IN4, ENA et ENB

    L'amplitude du signal DCC dépend de la tension d'alimentation continue appliqué sur l'entrée VMS du module. Avec une alim de 16 Volts, on obtient un signal DCC de 16 Volts efficaces environ. qui est suffisant pour faire fonctionner un décodeur DCC.

    En associant ce module à un ARDUINO UNO, on obtient une centrale DCC pour moins de 20 Euros. Qui dit mieux?

    4.2 Description du booster réalisé avec un module LMD18200

    On peut aussi utiliser comme booster un module avec le cirtcuit LMD18200 dont la photo est donnée ci-dessous.


    L'entrée GND est à relier à la masse de l'ARDUINO
    L'entrée PWM est à relier au +5V
    L'entrée DIR est à relier à la sortie DCC de l'ARDUINO ( pin 13)
    L'entrée BRAKE est à relier à la masse.

    Le signal DCC amplifié est disponible sur les sorties OUT1 et OUT2
    L'amplitude du signal DCC dépend de la tension d'alimentation continue appliqué sur l'entrée V+ du module. Avec une alim de 16 Volts, on obtient un signal DCC de 16 Volts efficaces environ. qui est suffisant pour faire fonctionner un petit réseau.

    On peut voir sur la figure ci-dessous l'allure du signal DCC en sortie du booster.


    4.3 Autres solutions

    Il est aussi possible d'utiliser un ampli audio comme booster, comme expliqué ici.
    On peut utiliser par exemple un ampli audio à base d'un circuit TM 3886 qui peut délivrer une puissance de 60 Watts. Cet ampli est disponible ici.

    5 commande d'accessoires



    5.1 Introduction

    Il y a au moins deux approches pour commander les accessoires (aiguilles, feux de signalisation, passage à niveau, etc...)
    - la première approche consiste à commander directement les accessoires par les sorties de l'ARDUINO par l'intermédiaire d'une carte à relais. Il est aussi possible de commander directement les servos par l'ARDUINO.
    - la deuxième approche consiste à commander les accessoires par des décodeurs d'accesoires. Dans ce cas, il faut que l'ARDUINO génère les paquets de commande d'accessoires La première approche a l'avantage du coût. Son inconvénient est qu'il faut tirer beaucoup de cables si les accessoires sont éloignés de la centrale alors que l'on peut positionner un décodeur d'accessoires au plus près de l'accessoire.
    Il est tout à fait possible de combiner les deux approches.

    5.2 Commande d'un relais par l'ARDUINO

    Le montage est donné sur la figure ci-dessous.



    La bobine du relais est reliée d'un côté à l'alim de puissance et de l'autre côté au collecteur d'un transistor BC337 dont l'émetteur est relié à la masse.La base du transistor est reliée à une sortie numérique de l'ARDUINO via une résistance de 10 K.

    5.3 Commande de servos par l'ARDUINO

    Le fonctionnement d’un servo est relativement simple. Il suffit d’envoyer une impulsion dont la durée est comprise entre 1,0ms et 2,0ms au servo. Cette impulsion déterminera la position du palonnier du servo. Ainsi la valeur de 1,5ms donne au servomoteur la position centrale.

    Ces impulsions doivent être envoyées de manière périodique, généralement toutes les 50ms.

    Il n’y a rien de compliqué pour brancher un servo. Les servos ont généralement 3 fils:
    - un rouge: qui doit être branché à la sortie 6V de l'alimentation
    - un noir : qui doit être branché à la masse
    - un orange (ou autre couleur) : qui est le fil de tension de commande 0-5V

    C’est donc via le fil orange que les commandes seront passées à votre servo. Ce fil devra obligatoirement être relié à l'Arduino sur une broche PWM.

    Coté software, là aussi, Arduino nous propose une librairie qui va bien : Servo.

    Voici un exemple de programme pour ARDUINO UNO qui permet la commande d'un servo qui passe de la position 30 à la position 150 en 12 secondes. La sortie servo est 11 et l'entrée 4 est utilisée pour la commande par un interrupteur.

    #include

    Servo myservo;
    int valservo;
    int valservomin=30;
    int valservomax=150;
    long tservo=millis();
    int ac0=0;
    int pinac0=4;

    void setup()
    {
    pinMode(pinac0, INPUT);
    myservo.attach(11);
    }

    void loop()
    {
    ac0 = digitalRead(pinac0);

    if (ac0 ==0 && millis()>tservo + 100 ) {
    valservo=valservo-1;
    tservo=millis();
    myservo.write(valservo);
    }

    if (valservo
    if (ac0 ==1 && millis()>tservo + 100 ) {
    valservo=valservo+1;
    tservo=millis();
    myservo.write(valservo);
    }

    if (valservo>valservomax) valservo=valservomax ;

    }

    5.4 Génération d'un paquet de commande d'accessoires

    Les décodeurs d'accessoires sont utilisés pour commander des fonctions simples comme les aiguillages, feux, etc...
    Ils comportent en général 8 sorties qui sont groupées en 4 groupes de 2 (1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B) Ainsi, un décodeur permet de commander 4 aiguilles.
    Le décodeur d’adresse 1 commande les aiguilles dont les numéros vont de 1 à 4, le décodeur d’adresse 2 commande les aiguilles dont les numéros vont de 5 à 8, le décodeur d’adresse 3 commande les aiguilles dont les numéros vont de 9 à 12, etc
    Dans la norme NMRA, cette adresse peut prendre une valeur allant de 1 à 511, et chaque décodeur permettant la commande de 4 aiguilles, il est possible de commander jusqu’à 2044 aiguilles.
    Dans le programme que j'ai écrit pour l'ARDUINO, le nombre d'adresses est limité à 63, ce qui permet de commander 252 accessoires.

    Le format d'un paquet est le suivant:

    {préambule} 0 10AAAAAA 0 1111CDDF 0 EEEEEEEE 1

    Les bits A transmettent l'adresse ( 63 adresses possibles)
    Le bit C permet d'activer ou de désactiver la sortie.
    Les bits D permettent de sélectionner le groupe de sortie (00 correspond au groupe 1, 01 correspond au groupe 2, etc...
    Le bit F permet de sélectionner la sortie A ou B dans chaque groupe: F=0 correspond à la sortie A et F=1 correspond à la sortie B.
    Un paquet destiné à un décodeur d'adresse 3 s'écrit:
    "préambule" 0 10000011 0 1111CDDF 0 EEEEEEEE 1

    Dans le programme pour l'ARDUINO, un aiguillage est défini par son numéro (numag) et par sa position (posag): posag=0 ==> aiguille en position directe, posag=1 ==> aiguille en position déviée.
    L'adresse du décodeur s'obtient par la relation:
    adresse = Int((numag - 1) / 4) + 1
    les bits D0 et D1 sont donnés par la relation:
    d = numag - 1 - 4 * int((numag - 1)/4)
    Si d=0 alors D0=0 et D1=0
    Si d=1 alors D0=1 et D1=0
    Si d=2 alors D0=0 et D1=1
    Si d=3 alors D0=1 et D1=1
    F = posag

    6 rétrosignalisation



    6.1 Introduction

    La rétrosignalisation est indispensable pour commander un réseau en automatique avec ou sans ordinateur. Il faut diviser le réseau en cantons, chaque canton étant associé à un ou plusieurs détecteurs de présence d'un train sur le canton. Un canton est défini comme une portion de voie entre deux aiguilles ou entre une aiguille et un butoir.
    Lorsqu'un train est détecté sur un canton, l'information doit être transmise à la centrale. C'est ce qu'on appelle la rétrosignalisation. Il existe plusieurs systèmes de rétrosignalisation disponibles dans le commerce. On peut aussi en réaliser soi-même à moindre coût comme on le verra dans la suite.L'ARDUINO présente le grand avantage d'avoir des entrées qui permettent de connecter directement les détecteurs d'occupation sans autres modules d'interface.

    6.2 Exemples de détecteurs pour l'ARDUINO

    6.2.1 détecteur à ILS

    Ce type de détecteur est le plus simple à mettre en oeuvre mais il oblige à poser des aimants sous les locomotives. J'utilise ce type de détecteur sur le train de jardin car les rails ne sont pas alimentés.
    Le montage de base consiste à poser le détecteur au milieu du rail et à poser les aimants sous les locos en garantissant une distance comprise entre 0,5 et 1 cm entre l'aimant et le détecteur. Les deux fils du détecteur peuvent être reliés directement à une entrée et à la masse d'un module ARDUINO. Le branchement est identique à celui d'un interrupteur.

    6.2.2 détecteur à optocoupleur

    Le schéma de ce détecteur qui est très simple à réaliser soi-même est montré sur la figure ci-dessous.


    Ce détecteur utilise un pont-redresseur à 4 diodes dont on relie les bornes + et - entre elles. La tension aux bornes des diodes est appliquée à l'entrée d'un optocoupleur 4N35 avec une résistance de 22 Ohms en série. La sortie de l'optocoupleur est connectée à une entrée numérique de l'ARDUINO.
    La photo ci-dessous montre deux détecteurs cablés sur un petit circuit imprimé qui peut en recevoir 4.


    7. Communication entre ARDUINO et PC en Visual Basic



    La liaison entre le PC et l'ARDUINO se fait par l'interface USB qui établit une liaison série avec un port com virtuel.

    La librairie Serial est une librairie essentielle du langage Arduino qui permet de visualiser sur le PC des messages reçus depuis la carte Arduino ou de commander la carte Arduino.

    En couplant l'utilisation de cette librairie avec Visual Basic côté PC, on dispose d'un outil extrêmement puissant pour réaliser toute sortes d'affichages graphiques sur le PC ou d'interactions entre la carte et le PC (commande de la carte Arduino avec la souris, le clavier ou une IHM avec des boutons de commande).

    7.1 Transmission et réception des données par l'ARDUINO

    Il faut éctire dans void setup() l'instruction: Serial.begin(9600);

    L'envoi des données de l'ARDUINO vers le PC s'effectue avec l'instruction Serial.print ou Serial.println

    Les nombres entiers sont envoyés en utilisant les caractères ASCII pour chaque chiffre.
    Exemple transmission du chiffre 9: Serial.print(9,DEC);
    Transmision du nombre 59: Serial.print(59,DEC);

    Les caractères et les chaînes sont transmis tels que entre guillemets
    Exemple. Transmission du caractère A: Serial.print("A");

    La réception des données utilise l'instruction Serial.read()

    L'ARDUINO traite les nombres entiers reçus en ASCII . Pour les valeurs décimales, si la valeur envoyée est N (entre 0 et 9), la valeur de l'octet reçu par l'ARDUINO a pour valeur N + 48.

    Voici le programme pour recevoir un nombre à 1 ou 2 chiffres (0 à 99)
    n=0;
    while (Serial.available() > 0)
    {
    octet[n] = Serial.read();
    n=n+1;
    }
    if (n==1){
    nombre=octet[0]-48) ;
    Serial.print("nombre=");
    Serial.println(nombre);
    }
    if (n==2){
    nombre=10*(octet[0]-48)+ octet[1]-48;
    Serial.print("nombre=");
    Serial.println(nombre);
    }

    7.2 Transmission et réception des données en Visual Basic

    En Visual Basic (VB6 et VBA fourni avec Excel), il y a plusieurs méthodes qui permettent d'envoyer les données sur un port COM (port série):
    - le contrôle MSCOMM32
    - le contrôle NETComm
    - l'API Windows Serial Port Software

    Voici un lien vers un site qui explique comment gérer le port série en Visual Basic
    http://www.pencomdesign.com/support/relay_software/vba_software_example.htm

    MSComm32
    Ce contrôle est le plus facile à utiliser. Il marche avec VB6 et VBA avec Windows XP mais il ne fonctionne pas toujours avec Windows 7 et Windows 8 (il peut être nécessaire de modifier la base de registre)
    On trouvera un mode d'emploi complet en Français sur le site Developpez.com

    NETComm
    Ce contrôle marche avec VB6 et VBA avec WinXP et Win7 (il marche peut-être avec Windows 8, mais je n'ai pas essayé)
    C'est le contrôle que je recommande.
    Ce contrôle est à télécharger sur le site suivant (il y a une version pour Win XP et une version pour Win 7)
    https://home.comcast.net/~hardandsoftware/NETCommOCX.htm
    Ce site donne aussi les caractéristiques du contrôle.

    API Windows Serial Port Software
    Cette méthode marche avec VB6 et VBA avec WinXP mais elle ne marche pas avec Windows 7 et elle est est plus compliquée à utiliser que les autres méthodes.
    Vous trouverez une description de cette méthode sur le site ci-dessous
    http://www.pencomdesign.com/support/relay_software/vba_software_example_api.htm

    Communication en VB6 et VBA avec NETComm

    Voici comment insérer le controle NETComm dans un projet VB6
    Cliquer sur projet puis composants puis sur parcourir et indiquer le dossier où se trouve le composant NETComm.ocx et l'ouvrir
    Une fois le contrôle rajouté, son icône apparaît dans la barre des contrôles. Il suffit d’en placer une instance sur la feuille pour pouvoir l’utiliser. Par défaut, ce contrôle s’appellera NETComm1, et on utisera ce nom pour la suite de l’application

    Pour insérer le controle NETComm dans une macro VBA d'un classeur Excel, vous trouverez le mode d'emploi en cliquant sur le lien ci-dessous
    http://www.pencomdesign.com/support/relay_software/vba_software_example_net.htm

    Envoi des données vers l'ARDUINO en Visual Basic

    Les nombres entiers sont envoyés en utilisant les caractères ASCII pour chaque chiffre avec l'instruction Format(N)
    Exemple transmission du chiffre 9: NETComm1.output = Format(9)
    Transmision du nombre 59: NETComm1.output = Format(5) + Format(9) ou NETComm1.output = Format(59)

    Les caractères et les chaînes sont transmis tels que entre guillemets
    Exemple. Transmission du caractère A: NETComm1.output = "A"

    La réception des données en provenance de l'ARDUINO utilise l'instruction NETComm1.InputData
    Voici le programme pour recevoir un nombre entier N à 1 ou 2 chiffres (0 à 99) en provenance de l'ARDUINO (envoyé avec l'instruction Serial.print(N,DEC))

    DoEvents
    tampon = NETComm1.InputData
    n = Len(tampon)
    Label3.Caption = n
    DoEvents

    If n = 1 Then
    octet1 = Asc(Mid(tampon, 1, 1))
    nombre = octet1 - 48
    Label4.Caption = nr
    DoEvents
    End If

    If n = 2 Then
    octet1 = Asc(Mid(tampon, 1, 1))
    octet2 = Asc(Mid(tampon, 2, 1))
    nombre = 10 * (octet1 - 48) + octet2 - 48
    Label4.Caption = nombre
    DoEvents
    End If

    7.3 Exemple à télécharger

    Cet exemple montre la transmission d'un nombre entre 0 et 99.entre l'ARDUINO et le PC avec Visual Basic.
    Ce programme permet d'allumer la LED sur le module ARDUINO correspondant à la sortie 13.
    L'envoi par le PC du chiffre 9 ou du nombre 15 allume la LED et l'envoi du chiffre 9 ou du nombre 25 éteint la LED.
    Vous pouvez télécharger cet exemple en cliquant ici.

    8. Exemple de création d'un signal DCC avec commande par ordinateur



    8.1 Montage d'essai

    J'ai réalisé un petit montage constitué des éléments suivants:
    - un tronçon de rails avec un seul canton
    - un module ARDUINO LEONARDO
    - un booster LMD 18200
    - un détecteur d'occupation relié au canton
    - une alimentation 16V pour le booster

    L'ARDUINO utilise les broches suivantes:
    broche 13: sortie DCC
    broche 4: entrée du signal issu du détecteur d'occupation.

    Voici une photo du montage réalisé.


    Et voici une petite vidéo qui montre un va et vient réalisé par un locotracteur KOF de LENZ sonorisé. Le locotracteur est équipé d'un dételeur automatique.



    8.2 Programme ARDUINO

    Vous pouvez télécharger cet exemple de programme pour ARDUINO UNO ou LEONARDO intitulé ARDUINO_DCC_PC_v1en cliquant ici.

    Ce programme gére les adresses entre 3 et 99, la vitesse avec 28 crans et les fonctions F0 à F8. Il est utilisable avec JMRI DecoderPro et aussi avec CARTO-DCC que vous pouvez télécharger dans la rubrique consacrée aux logiciels installés sur le PC.
    Il faut noter que ce programme simplifié ne gère pas la commande d'accessoires.

    9. Réalisation d'un décodeur DCC



    Il est très facile de réaliser un décodeur DCC avec un ARDUINO UNO en utilisant la librairie développée par le projet américain "Model Railroading with Arduino" . Dans ce projet, on trouve un exemple de décodeur d'accessoires.

    A titre d'exemple, j'ai écrit avec cette librairie les progammes de deux décodeurs:
    - un décodeur de fonction qui délivre un signal 0-5V sur les sorties numériques correspondant à la fonction sélectionnée ainsi qu'une sortie servo
    - un décodeur d'accessoires qui délivre un signal 0-5V sur les sorties numériques suivant l'adresse de l'accessoire sélectionné

    J'ai également écrit un programme de décodage DCC pour locomotive qui transmet sur la sortie série les commandes de la loco (adresse, sens de marche, vitesse, fonctions F0 à F8). Ce programme intitué "decodeur_dcc_traindejardin" est utilisé dans le récepteur de radiocommande.

    Le signal DCC est appliqué entre l'entrée 2 de l'ARDUINO UNO et la masse en insérant un circuit d'adaptation qui permet de réduire l'amplitude du signal DCC issu d'une centrale avec une amplitude de 14 à 16 volts.
    Le schéma du circuit est représenté ci-dessous.


    Les sorties numériques de l'ARDUINO sont les sorties 3 à 10 (8 sorties).
    Le servo utilise la sortie 11 pour le signal de commande.

    Le décodeur de fonction a l'adresse 3 que l'on peut évidemment changer dans le programme ARDUINO.
    La fonction F0 active le servo
    La fonction F1 active la sortie 3 (F1 ON correspont à la sortie HIGH et F1 OFF correspond à la sortie LOW)
    La fonction F2 active la sortie 4
    La fonction F3 active la sortie 5
    La fonction F4 active la sortie 6
    La fonction F5 active la sortie 7
    La fonction F6 active la sortie 8
    La fonction F7 active la sortie 9
    La fonction F8 active la sortie 10

    Le décodeur d'accessoires est programmé pour les numéros 1 à 4 (adresse1).

    Vous pouvez télécharger ces deux exemples ainsi que le décodeur DCC de locomotive et la librairie en cliquant ici.

    Le dossier "NmraDcc" qui contient la librairie doit être plaçé dans le dossier "librairies" de l'ARDUINO.



    Page suivante


    Page précédente


    Retour page d'accueil