LOCODUINO

Contrôleur à télécommande infrarouge pour centrale DCC++

.
Par : Daniel

DIFFICULTÉ :

Cet article décrit un contrôleur pour Arduino UNO destiné à commander la centrale DCC++ telle que proposée par Gregg E. Berman version 1.2.1+.
Il est basé sur une télécommande à infrarouge telle que celles utilisées pour les TV, chaînes HiFi ou autres décodeurs.
Il convient bien pour de petits réseaux avec commande manuelle des appareils de voie et accessoires.
Si vous cherchez un contrôleur simple avec les fonctions de base et qui utilise une télécommande à infrarouge courante, cet article est fait pour vous !

Présentation

L’utilisation de la télécommande offre deux avantages principaux :

  • La liaison est sans fil ;
  • La construction mécanique de la centrale est réduite à sa plus simple expression : il n’y a pas de clavier, d’inverseurs mécaniques ou autres boutons rotatifs à prévoir.

De plus, une télécommande infrarouge est facile à trouver… surtout si elle a perdu son appareil !

Elle présente par contre l’inconvénient de devoir être plus ou moins orientée vers le récepteur pour fonctionner correctement ; cependant, à l’instar d’une télécommande de téléviseur, la transmission fonctionne également par réflexion sur les murs et plafonds de sorte que peu de directions sont inefficaces.

Les ordres émis par le contrôleur sous forme de messages standardisés DCC++ (ex. <t1 3 50 1>) sont transmis via l’interface série (TX) à la centrale DCC++ qui se charge de les interpréter, de les mettre en forme et de les amplifier (module LMD18200) en direction de la voie. Le dessin ci-dessous résume l’organisation générale utilisée.

Ce que fait ce contrôleur :

  • Inscription de CV sur la voie principale (donc pas sur voie de programmation) ;
  • Commande de la vitesse (128 crans) et du sens de marche des locos ;
  • Conduite simultanée de plusieurs locos ; chaque loco est appelée par un seul bouton de la télécommande qui lui est dédié ;
  • Configuré pour 4 locos mais c’est extensible car cela dépend du nombre de boutons disponibles sur la télécommande ; les numéros de décodeurs associés à chaque loco sont enregistrés dans l’EEPROM.
  • Coupure/activation du signal DCC sur la voie par la télécommande ;
  • Activation/désactivation de fonctions via un bouton dédié pour chacune ; les fonctions implémentées sont : FL (feux d’éclairage loco) et F1 à F4 ; on peut étendre car cela dépend du nombre de boutons disponibles sur la télécommande ;
  • Affichage sur LCD des paramètres de la loco active (numéro, vitesse, sens de marche et fonctions actives) ;
  • Commande de vitesse et sens de marche des locos.
    Il y a deux moyens de régler la vitesse :
    • commande traditionnelle  : appuyez sur la "flèche haut" pour augmenter la vitesse et "flèche bas" pour la diminuer ; la variation a lieu cran par cran.
    • commande rapide  : appuyez sur un chiffre de 0 à 9 -> appui sur 1=cran 15, 2=cran 25, 3=cran 35 ,.., 9=cran 95 ; 0=arrêt ;
      • Cette commande rapide permet d’obtenir immédiatement une vitesse prédéfinie en épargnant les appuis sur les touches "flèche haut" et "flèche bas".
      • Les deux commandes peuvent être utilisées simultanément et se complètent naturellement ; par exemple, une loco entre en gare (appui sur la touche 4 => cran 45 pour passer sur l’aiguillage en position déviée), puis approche de l’extrémité du quai (appui sur la touche 1 => cran 15) et l’arrêt a lieu par appuis successifs sur la "flèche bas" (diminution cran par cran) ou appui sur la touche 0.
      • L’appui sur la touche 0 garantit une vitesse nulle.

Attention ! En pratique, le contrôleur n’impose pas une vitesse (en km/h) mais un cran de vitesse déterminé (0 à 127) ; un réglage du décodeur de chaque loco est nécessaire (mais pas obligatoire, c’est à vous de voir) pour assurer la correspondance avec la vitesse à l’échelle.

  • Répétition sonore des commandes principales des locos (numéro de loco sélectionnée, modification du sens de marche) et des réglages des CV.

Ce que ce contrôleur ne fait pas :

  • Commander des aiguillages ou des accessoires (quoique ce ne soit pas impossible à priori) ;
  • Lire les CV d’un décodeur.

La carte Centrale DCC++

La solution complète a donc recours à deux cartes distinctes :

  • La carte Centrale DCC++
  • La carte contrôleur

Pour la centrale DCC++, référez-vous à l’excellent article Réalisation de centrales DCC avec le logiciel libre DCC++ (3) qui décrit la réalisation technique pour la plupart des matériels. La communication entre la carte centrale DCC++ et la carte contrôleur doit se réaliser via la liaison série comme décrit ci-dessus.

La centrale DCC++ utilisée dans la suite de cet article fait appel à :

  • 1 carte Arduino UNO ;
  • 1 booster à base de LMD 18200 ;
  • 1 module convertisseur courant/tension MAX471.

Au sujet du module à base de LMD18200, voici une petite astuce ; les commandes passées sur la baie ne permettent pas toujours de maîtriser parfaitement le matériel livré ; on est jamais à l’abri de quelques surprises : sur le module qui m’a été livré, une partie des connections étaient repérées en … chinois ! Comme mes connaissances en cette langue sont (très, très) lacunaires, j’ai dû procéder par déduction. Voici les correspondances obtenues :

Tableau de correspondance
Indication sur le moduleCorrespondance
PWM PWM
Chinois Brake
Chinois DIR
GND GND
+5V +5V

La carte contrôleur

Présentation

Pour le contrôleur, il faut :

  • 1 carte Arduino UNO ;
  • 1 afficheur LCD 2 lignes 16 caractères I2C (par exemple le display I2C/TWI LCD1602 de DFROBOT, article DFR0063/TOY0046) ;
  • 1 capteur infrarouge TSOP 4838 ;
  • 1 buzzer ;
  • 1 télécommande IR ; c’est une télécommande récupérée d’un ancien lecteur/enregistreur de DVD de marque PANASONIC ; une autre peut également convenir, à condition qu’elle comporte suffisamment de boutons…
Télécommande TV/DVD Panasonic

Le croquis décrit inclut également les codes pour une télécommande SONY (Modèle RM-ED050) de téléviseur BRAVIA.

Télécommande SONY pour laquelle les codes sont également fournis

Le tout, à l’état de prototype fonctionnel, est actuellement monté sur une planche en MDF (voir la photo) ; le buzzer n’est ici pas encore raccordé.

Prototype de la centrale DCC++ avec télécommande infrarouge

A l’avant-plan, on observe de gauche à droite le convertisseur courant/tension MAX471, le booster à base de LMD18200 (fils noir et jaune = départ vers la voie) et la carte "Centrale DCC++" ; la carte contrôleur se situe derrière l’afficheur LCD. Le pupitre à l’extrême droite ne fait pas partie du projet.

En haut à gauche, un moteur et son décodeur qui servent de banc d’essai pour la centrale mais aussi pour les décodeurs et les locos.

Chaque carte est alimentée par sa propre source de tension. La puissance est fournie au booster par une alimentation de PC portable (U = 19,5 VDC) dont la fiche DC a été adaptée en conséquence. Dans une version plus définitive, on pourra alimenter le tout via une source de tension unique de 19 V DC de laquelle on dérivera par un circuit abaisseur de tension une sortie 9 V DC vers les deux cartes Arduino.
L’alimentation de PC dispose de sa propre protection contre les courts-circuits qui est particulièrement efficace mais elle pose un problème de sélectivité ; en effet, elle déclenche toujours en premier lieu avant que les détections par logiciel n’aient pu constater le problème. Ce qui signifie que lorsqu’une loco talonne un aiguillage dont le cœur est alimenté électriquement (occasionnant un court-circuit franc) tout s’arrête et il faut faire un reset général.

Voici les liaisons à réaliser pour le contrôleur :

Schéma du contrôleur

Le récepteur IR

Le capteur IR TSOP 4838 est raccordé comme suit à l’Arduino UNO :

  • Broche 1 (à gauche lorsque le capteur est vu de face) = Vout (broche 3 de l’Arduino)
  • Broche 2 (au centre) = GND raccordée à un GND de l’Arduino
  • Broche 3 (à droite lorsque le capteur est vu de face) = Vcc (+5v de l’Arduino)

L’afficheur

L’affichage se réalise à l’aide d’un LCD 2 lignes 16 caractères I2C ; celui utilisé ici est le LCD1602 de DFROBOT, article TOY0046.
Il est raccordé comme suit :

  • Vcc raccordée au +5V de la carte
  • GND raccordée à un GND de la carte
  • SDA à la broche A4
  • SCL à la broche A5

Attention ! Dans certaines documentations, ces 2 broches sont inversées à tort.

Pour votre facilité, voici la librairie utilisée pour l’afficheur :

Librairie utilisée pour l’écran LCD I2C

Les répétitions sonores

Pour le confort d’utilisation, la réception de certaines commandes est confirmés par un signal sonore :

  • commande du sens de marche : un bip aigu ;
  • sélection d’une loco : bip grave ; le nombre de bips correspond au numéro d’ordre de la loco sélectionnée (1 bip pour loco 1, ..., 4 bips pour loco 4) ;
  • confirmation de l’enregistrement de CV (1 bip aigu) ou de leur valeur (2 bips aigus) et de l’envoi de la commande à la centrale (3 bips graves).
  • confirmation de l’enregistrement du lien entre un bouton loco et une adresse décodeur.

La répétition sonore est confiée à un buzzer (ou HP) relié entre la broche 8 (côté +) et (côté -) le GND de la carte.
La librairie IRLib et l’instruction TONE font toutes les deux appel au TIMER 2 ; pour éviter des conflits de timer, on utilisera la librairie NewTone.

Librairie NewTone

Installez-la dans le dossier \libraries\ de votre IDE.

La liaison avec la centrale DCC++

Vous devez lier les cartes "centrale DCC++" et "contrôleur" par la liaison série TX/RX : la broche 1 TX0 de la carte "contrôleur" doit être reliée à la broche 0 RX0 de la carte "centrale DCC++". N’oubliez pas de lier les broches GND des deux cartes entre elles.
Attention ! Comme vous disposerez de deux cartes Arduino UNO reliées par la liaison série, vous devez retirer cette liaison temporairement lors du téléversement des croquis sous peine d’obtenir une erreur en fin de compilation. N’oubliez pas de la replacer ensuite…

Voici le croquis Arduino à téléverser dans la carte « contrôleur ».

Croquis du contrôleur avec télécommande IR

Adaptation du croquis à votre télécommande.

Une adaptation du croquis à votre télécommande est nécessaire car il y a fort à parier que les codes IR envoyés seront différents de ceux de la PANASONIC.

La partie du code éventuellement à adapter est reproduite ci-dessous.

//definition des codes de la telecommande Panasonic

//codes pour télécommande Panasonic librairie IRLib
#define arrow_up 3796283338
#define repeat1 2166136261 // certaines télécommandes envoient un (des) code(s) spécifique(s) lors de l'appui long ou du maintien sur une touche
#define repeat2 1556999678// certaines télécommandes envoient un (des) code(s) spécifique(s) lors de l'appui long ou du maintien sur une touche
#define arrow_down 989538004
#define arrow_left 1296259434
#define arrow_right 3138313506
#define digit_0 950179491
#define digit_1 1366498449
#define digit_2 1242645753
#define digit_3 577270721
#define digit_4 278230305
#define digit_5 3236444089
#define digit_6 2050858721
#define digit_7 1376882089
#define digit_8 1077841673
#define digit_9 809146499
#define button_pause 2860196199
#define button_play 3737721253
#define button_light 1562762607 // fonction F0
#define button_OK 189926636
#define button_PROG 618970697
#define button_DELETE 52104363
#define button_loco1 3096697063
#define button_loco2 4003586079
#define button_loco3 1913490470
#define button_loco4 3857854961
#define button_F1 568341793 //rouge
#define button_F2 938060567 //vert
#define button_F3 645776457 //bleu
#define button_F4 309669706
#define button_F5 400358607
#define button_F6 191349048

// codes pour télécommande TV SONY RM-ED050
/*
#define arrow_up 3962033213
#define repeat1 425423268 // certaines télécommandes envoient un (des) code(s) spécifique(s) lors de l'appui long ou du maintien sur une touche
#define repeat2 1556999678// certaines télécommandes envoient un (des) code(s) spécifique(s) lors de l'appui long ou du maintien sur une touche ; pas utilisee ici
#define arrow_down 141285788
#define arrow_left 440544835
#define arrow_right 2721830948
#define digit_0 990610224
#define digit_1 544993039
#define digit_2 3896860046
#define digit_3 3417827657
#define digit_4 740241778
#define digit_5 2422134005
#define digit_6 2363614204
#define digit_7 828053765
#define digit_8 3330015670
#define digit_9 3021527401
#define button_pause 920158043
#define button_play 1664997572
#define button_light 3234147071 //bouton jaune fonction F0
#define button_OK 1922410756  //bouton central
#define button_PROG 726507874 //bouton record point rouge
#define button_DELETE 3934206650  //bouton EXIT
#define button_loco1 583823042 //bouton retour debut |<<
#define button_loco2 735876127 //bouton retour <<
#define button_loco3 3173596934 //bouton avance >>
#define button_loco4 1492441743 //bouton avance fin >>|
#define button_F1 3795534161 // bouton rouge
#define button_F2 3461693924 //bouton vert
#define button_F3 2046533204 //bouton bleu
#define button_F4 191349048
* /

Si vous possédez une télécommande PANASONIC, il est possible que cela fonctionne immédiatement.
Si vous disposez d’une télécommande SONY pour téléviseur, essayez d’abord en activant les codes insérés dans le croquis. Pour ce faire, mettez sous forme de commentaires (=commentez par /* et */) les codes pour télécommande PANASONIC et retirer les balises de commentaires (/* et */ = décommentez) pour la télécommande SONY ; en espérant que les codes SONY soient relativement universels…
Vous pourriez également essayer avec une télécommande universelle en sélectionnant ces mêmes codes.

Si aucune de ces solutions ne donne satisfaction, vous pouvez modifiez les codes en regard de chaque instruction #define du bouton correspondant.
En activant le moniteur série de l’IDE, le croquis tel que présenté ne permet pas de visualiser le code IR reçu. Pour le rendre visible, vous devez compiler le croquis en mode ’affichage code’ ; pour cela, décommentez la ligne

//#define affichage_code

Ce qui vous permet de contrôler la réception IR et de noter le code correspondant à la touche activée sur la télécommande.
Ainsi, si le code correspondant à « flèche haut » sur votre télécommande est 4589652, remplacer la ligne ‘#define arrow_up 3796283338’ par ‘#define arrow_up 4589652’. Procédez de même pour toutes les touches.

Dans certaines télécommandes, vous obtiendrez 2 codes en appuyant sur une seule touche. Le deuxième code correspond alors à une instruction de répétition dont vous ne devez pas tenir compte.

Attention ! N’oubliez pas de recommenter la ligne lorsque vous aurez obtenu la correspondance pour tous les codes sinon le croquis ne fonctionnera pas bien.

Le tableau qui suit reproduit la correspondance entre les touches des télécommandes PANASONIC et SONY, les noms de variables associées dans le croquis et les valeurs numériques utilisées dans le croquis. Ces valeurs servent à déclencher des actions dans la carte contrôleur.

Tableau de correspondance
Bouton PANASONICBouton SONYValeur numériqueVariable
0 0 0 digit_0
1 1 1 digit_1
2 2 2 digit_2
3 3 3 digit_3
4 4 4 digit_4
5 5 5 digit_5
6 6 6 digit_6
7 7 7 digit_7
8 8 8 digit_8
9 9 9 digit_9
Flèche gauche Flèche gauche 10 arrow_left
Flèche droite Flèche droite 11 arrow_right
Flèche haut Flèche haut 12 arrow_up
Flèche bas Flèche bas 13 arrow_down
OK central (+) 20 button_OK
PROG RECORD (point rouge) 21 button_PROG
PAUSE PAUSE 24 button_pause
PLAY PLAY 25 button_play
loco_1 │<< 26 button_loco1
loco_2 << 27 button_loco2
loco_3 >> 28 button_loco3
loco_4 >>│ 29 button_loco4
DELETE EXIT 30 button_delete
Jaune Jaune 40 button_light
Rouge Rouge 41 button_F1
Vert Vert 42 button_F2
Bleu Bleu 43 button_F3
REC TV 44 button_F4
Jaune Jaune 40 button_light
INPUT SELECT DIGITAL 22 button_adresseLoco

La librairie à utiliser pour la réception infrarouge peut être téléchargée en https://github.com/cyborg5/IRLib ; elle doit ensuite être installée dans le dossier \libraries\ de votre IDE.

Vous la retrouverez également ci-dessous.

Librairie IRLib

Comme mentionné ci-dessus, les adresses DCC des décodeurs sont définies dans l’EEPROM. Avant de commencer, vous devez les enregister. Voyez le point 6.4 ci-dessous.

Il est souhaitable de conserver au moins une des adresses à 3 car c’est le réglage d’usine de tous les décodeurs.

Les commandes de fonction

Les commandes de fonctions implémentées dans ce croquis sont limitées au groupe F0-F4 ; le texte ci-dessous explique la logique à utiliser pour étendre les fonctions jusqu’à F12 ; pour les fonctions F13 à F28, il faudra consulter la documentation relative aux commandes DCC++.

La centrale DCC++ peut traiter les commandes des fonctions F0 (parfois appelée FL) à F28.
Celles-ci sont rassemblées en 5 groupes de fonctions :

F0 - F4
F5 – F8
F9 – F12
F13 – F20
F21 – F28

En standard, ce contrôleur gère les fonctions F0 à F4 ; il serait cependant aisé d’étendre les capacités jusqu’à F12 (très facile) ou F28 (pas difficile). Le tout est de disposer de suffisamment de boutons sur votre télécommande…

Une des particularités dont il faut tenir compte tient au fait que la centrale n’enregistre pas l’état (activé=ON ou désactivé=OFF) de chacune des fonctions. Il sera donc nécessaire d’enregistrer cet état pour chaque loco.

Logique de détermination de la commande à envoyer au décodeur.

Pour activer une fonction, la syntaxe prévoit d’envoyer une commande DCC++ composée comme suit :

<f CAB byte1 byte2>

  • f est le caractère qui initie la commande de fonction
  • CAB est le numéro du décodeur de la loco concernée
  • byte1 est un chiffre qui synthétise l’ensemble des fonctions du groupe qui sont actives en même temps
  • byte2 idem, mais n’est utilisé que pour F13 à F28 ; à omettre dans les autres cas.

C’est le chiffre ’byte1’ qui sera interprété par le décodeur de la loco pour piloter les sorties correspondantes aux fonctions actives.

Ce chiffre est constitué comme suit :
D’abord, un nombre propre à chaque groupe de fonction :

  • 128 pour le groupe F0-F4 ;
  • 176 pour le groupe F5-F8 ;
  • 160 pour le groupe F9-F12 ;

Auquel on ajoute :

Fonction à activer Chiffre à ajouter
F0 16
F1 1
F2 2
F3 4
F4 8
F5 1
F6 2
F7 4
F8 8
F9 1
F10 2
F11 4
F12 8

Ainsi, pour activer F3 et F0 simultanément, il faut envoyer : 128 (chiffre du groupe F0-F4) + 4 (chiffre de F3) + 16 (chiffre de F0) =148.
Mais comment faire pour, par exemple, désactiver F3 ? On envoie alors uniquement : 128 + 16 = 144 (car seule F0 reste active). Pour tout désactiver en une fois, on envoie uniquement 128.

Attention ! Pour chaque groupe de fonctions, il faut envoyer une commande séparée ; autrement dit, si vous souhaitez commander F0 et F6 simultanément pour la loco dont l’adresse est 20, il faudra envoyer deux commandes :

<f 20 144> pour le groupe F0-F4
<f 20 178> pour le groupe F5-F8

Le croquis

Pour gérer ces commandes, le croquis est articulé autour de deux tableaux :

  • LocoFonction [loco][fonction] : mémorise pour chaque loco l’état de chaque fonction par TRUE (fonction activée) ou FALSE (fonction désactivée).
  • CommandeFonction [loco] : mémorise pour chaque loco le chiffre qui synthétise l’état des fonctions du groupe F0-F4 ; pour l’exemple ci-dessus (F0 et F3 activées simultanément), le chiffre enregistré sera 148.

Le calcul et la mémorisation du chiffre dont question est assuré par la fonction Activation_Fonction (numéro de fonction) qui est invoquée à chaque appui sur une touche de fonction.

Le croquis comporte également en fin de LOOP une routine de rafraîchissement régulier (toutes les 2000 msec=timerefresh) des commandes de fonction. En voici le détail.

//rafraichissement regulier des commandes de fonction
  if ((time + timerefresh) < millis())//instruction de rafraichissement regulier des commandes de fonction
  {
    //confirmer la valeur CommandeFonction de chaque loco
    for (int i = 0; i <= maxLocos; i++)
    {
#ifndef affichage_code //evite d'afficher les commandes a destination de la centrale lorsque l'on affiche les codes
      Serial.print("<f ");
      Serial.print(LocoAdresse[i]);
      Serial.print(" ");
      Serial.print(CommandeFonction[i]);
      Serial.write(" >");
      Serial.println(" ");//provoque l'affichage des commandes en colonne
#endif
    }//fin de FOR (int i = 0; i <= maxLocos; i++)

    time = millis();
  }// fin de rafraichissement if(time+timerefresh)

L’enregistrement des adresses des locos en EEPROM

Dans ce croquis, les variables principales nécessaires à la commande des locos (adresse, vitesse et direction) sont enregistrées dans des tableaux.
Le tableau ci-dessous résume les liens faits dans le croquis entre les différentes variables (les valeurs des trois dernières colonnes sont données à titre d’exemple).

Indice Variable utilisée dans le croquis Valeur correspondante de bouton_valeur LocoAdresse [i] LocoSpeed [i] (0-127) LocoDirection [i] (0 ou 1)
0 button_loco1 26 3 0 0
1 button_loco2 27 20 45 1
2 button_loco3 28 62 30 0
3 button_loco4 29 80 0 1

Cependant, contrairement à la vitesse et à la direction, l’adresse de la loco est relativement invariable ; on pourrait donc imaginer définir les adresses "en dur" dans le croquis.
Cette possibilité impose cependant de téléverser une nouvelle version du croquis à chaque modification d’adresse.

Une solution plus élégante fait appel à l’enregistrement des adresses dans l’EEPROM. Pour plus de détails, allez consulter l’article Bibliothèque EEPROM qui en explique clairement la mise en œuvre.

La lecture des adresses est réalisée par une fonction lectureAdresse(), sans paramètre, qui lit toutes les adresse enregistrées dans l’EEPROM.

L’écriture quant à elle, utilise la fonction ecritureAdresse(numero_loco), qui a le numéro de loco comme paramètre ; cette solution permet d’épargner l’EEPROM en écriture en n’y accédant qu’à l’occasion d’une modification.

Comment utiliser ce contrôleur ?

Le mode d’emploi décrit les touches de la télécommande PANASONIC ; en consultant le tableau de correspondance ci-dessus, il est facile d’en déduire l’équivalence pour les télécommandes SONY ou autres.

La télécommande PANASONIC utilisée et les zones de boutons

Quatre menus sont disponibles et sélectionnables par les touches suivantes de la télécommande :

Menu STOP (touche PAUSE) : coupure du signal DCC vers la voie

Au démarrage, c’est le menu STOP qui est actif ; aucun signal n’est envoyé vers la voie.
Si ce menu est activé en cours d’exploitation normale (menu RUN), les valeurs de vitesse des engins de traction sont ramenées à 0 ; le sens de marche est conservé. Cette commande est donc également la touche d’arrêt général de toutes les locos.

Menu STOP

Menu RUN (touche PLAY) : commande des locos (exploitation normale)

Pour commencer l’exploitation normale, appuyez sur la touche PLAY. Sélectionnez la loco que vous souhaitez commander par appui sur la touche qui lui est dédiée (voir les 4 touches du fond sur la photo de la télécommande PANASONIC). La touche la plus à gauche = loco n°1. Par défaut, c’est la loco 1 qui est sélectionnée.
Pour régler la vitesse d’une loco, il y deux solutions :

  • Vous utilisez les flèches vers le haut (pour augmenter) ou vers le bas (pour diminuer) ; la progression a lieu cran par cran.
  • Vous utilisez le système plus rapide en appuyant sur une des touches numériques du clavier ; un appui sur 4 donne le cran 45, sur 8, le cran 85, sur 0, le cran 0 (arrêt), etc.

Pour inverser le sens de marche, utilisez les flèches gauche ou droite selon le cas (1 bip aigu).
Pour allumer/éteindre les feux, utilisez la touche jaune (fonction bascule ON/OFF) ; si la loco se retrouve sans tension (à cause d’un faux contact p. ex.), les feux retrouveront leur aspect après résolution du problème. Faites de même pour les autres fonctions. Par exemple, activez F3 (ou désactivez) en appuyant sur la touche bleue.
Pour un arrêt d’urgence, appuyez sur PAUSE ou STOP ; toutes les machines s’arrêtent mais conservent leur sens de marche ; appuyez sur PLAY pour remettre en service.

Menu RUN

L’écran renseigne sur la première ligne successivement le numéro de la loco sélectionnée (= adresse du décodeur correspondant, ici 62), le cran de marche (ici 25) et les fonctions sélectionnables (ici F = feux, 1=F1, 2 F2, etc.).
Sur la deuxième ligne, on identifie le menu actif (R=RUN), le sens de marche (ici > = avant) et l’état des fonctions (ici |=activées ou - = éteints) ; ici, F0 et F3 sont activées, les autres sont éteintes.

Menu PROGRAM (touche PROG/CHECK) : configuration des CV

Pour utiliser ce menu, il ne peut y avoir qu’une et une seule loco sur la voie.
Introduisez d’abord le numéro de la CV que vous voulez modifier sans les zéros non significatifs à gauche ; donc pour modifier la CV 1, tapez 1 puis confirmez par ENTER (1 bip aigu). Introduisez ensuite la valeur décimale que vous voulez lui affecter sans les zéros non significatifs à gauche ; pour la valeur 3, tapez 3 puis confirmez par ENTER (2 bips aigus). Un point d’exclamation apparaît alors confirmant l’envoi de la commande (3 bips graves). Pour retourner au menu RUN, appuyez sur PLAY.

Menu PROGRAM

Pour annuler en cours de configuration, appuyez sur DELETE.
Sur l’écran (en fin de réglage de la CV 3), la première ligne affiche >6 qui est le dernier chiffre entré par la télécommande ainsi que CV NUM 3 qui est le numéro de la CV sélectionnée à l’étape précédente. La deuxième ligne indique P (menu PROGRAM), le point d’exclamation de confirmation de l’envoi de la commande et la valeur sélectionnée pour la CV (ici 6).

Menu ADRESSE (touche INPUT SELECT) : modification du lien entre les boutons de commande et les adresses des décodeursconfiguration des CV

Lorsque vous utilisez le contrôleur pour la première fois, vous allez devoir créer un lien entre les boutons de commande des locos (loco1 à loco4) et l’adresse du décodeur correspondant.
Vous devez également utiliser ce menu dès que vous souhaitez modifier l’affectation d’un bouton pour commander une autre loco.

Pour commencer, appuyez sur la touche INPUT SELECT. Vous obtenez l’écran suivant :

Menu ADRESSE (1)

En appuyant sur les flèches gauche et droite, vous pouvez consulter les adresses des décodeurs enregistrées actuellement dans l’EEPROM pour chaque loco.
L’écran renseigne sur la deuxième ligne successivement A (qui identifie le menu ADRESSE), le numéro du bouton de la loco sélectionnée (sous LOC, ici 4), l’adresse de décodeur qui y est actuellement associée (sous NOW, ici 255), la nouvelle adresse éventuellement à affecter (0 signifie "pas de nouvelle association en cours").

Si vous souhaitez modifier cette association :
• appuyez sur OK ;
• introduisez la nouvelle adresse de décodeur que vous voulez associer (ici, on a choisi 62) ;
• acceptez par OK ; la modification est introduite dans l’EEPROM avec une confirmation sonore
• pour annuler, appuyez sur DELETE.

Menu ADRESSE (2)

Le bouton loco4 est maintenant associé au décodeur d’adresse 62 (indication CHANGED en première ligne).
Lorsque vous avez terminé, revenez au menu RUN.
A chaque démarrage, le contrôleur utilisera les adresses enregistrées dans l’EEPROM.

Conclusion

A l’usage, ce contrôleur est facile à réaliser car il comporte très peu de composants. Son utilisation est agréable grâce à la sélection directe de la loco à commander (1 seule touche) ainsi que par la possibilité de sélectionner directement une vitesse déterminée.

Pour le coût d’une carte Arduino UNO et d’une télécommande (de récupération) vous disposerez d’un contrôleur complètement équipé sans souder un seul composant !
Un rêve !

50 Messages

  • Bonjour Daniel,

    Votre article m’a intéressé. Je me suis procuré l’ensemble des éléments nécessaires.

    Après chargement du fichier contrôleur sur le UNO, à la compilation j’ai systématiquement une erreur concernant la bibliothèque LiquidCrystal_I2C. Il semble toujours manquer une fonction...

    J’ai téléchargé plusieurs versions sans succès. Question simple quelle version de cette bibliothèque utilisez-vous ? A quelle adresse la télécharger ?

    Avec mes remerciements et les amitiés "Locoduinesque",

    Gérard

    Répondre

  • Bonsoir Gérard,

    Je suis bien content de constater que l’article vous a intéressé !

    Pour votre facilité, je viens d’ajouter la librairie pour l’écran LCD I2C (elle est d’origine DFRobot).
    Vous la trouverez en début d’article après le schéma Fritzing du contrôleur.

    Dites-moi si cela fonctionne et n’hésitez pas à revenir en cas de problème.

    Amicalement,

    Daniel.

    Répondre

  • Bonjour Daniel, je me trouve confronté à un problème, je ne dispose que de télécommandes ne générant que des codes alphanumériques et cela génère un message d’erreur lors de la compilation.
    Jean-Claude.

    Répondre

  • Bonsoir Jean-Claude,

    J’ai besoin de quelques précisions concernant votre problème ; vous dites "cela génère un message d’erreur lors de la compilation".
    Normalement, vous devez d’abord téléverser le croquis dans la carte Arduino qui va servir de contrôleur ; ceci est totalement indépendant de la télécommande que vous utilisez.

    1. Arrivez-vous à téléverser le programme sur la carte ? Si non, quel message d’erreur obtenez-vous ?

    2. Si le croquis est téléversé, quels sont les codes que vous obtenez sur le moniteur série lors d’appui sur la télécommande ?

    3. Comme indiqué dans l’article, j’ai validé cette solution avec 2 télécommandes différentes (1 Panasonic et 1 Sony) et cela fonctionne parfaitement. Quelle télécommande utilisez-vous ?

    Amicalement,

    Daniel.

    Répondre

    • Bonjour Daniel,

      Effectivement si je n’en dis pas plus, ça ne permet pas de cerner les problèmes.

      Les message d’erreur surviennent lors de la vérification du croquis avec le message suivant pour tous les codes de la télécommande DVICO qui sont ALPHANUMERIQUES.

      Arduino : 1.8.1 (Windows 7), Carte : "Arduino/Genuino Uno"
      C :\Users\JEAN-C 1\AppData\Local\Temp\arduino_modified_sketch_88509\centrale_DCC_PLUS_IR_V060c_4L.ino : In function ’void loop()’ :
      centrale_DCC_PLUS_IR_V060c_4L:121 : error : unable to find numeric literal operator ’operator""C60000’
      #define arrow_down 69C60000 // Fleche bas

      Bonne journée
      Jean-Claude

      Répondre

      • Bonjour Jean-Claude,

        Pour t’aider efficacement, je vais essayer de reformuler ce que tu m’as communiqué :

        1. Tu as téléversé le croquis fourni pour le contrôleur en activant l’affichage des codes.
        2. Tu as sollicité la télécommande pour chacune des touches nécessaires et tu as ensuite remplacé les codes obtenus dans le croquis en regard de chaque ligne #define correspondant à la touche appuyée.
        3. C’est au moment de cette 2ème compilation (après remplacement des #define) que le message d’erreur apparaît.
        4. Si je lis bien, le code que tu as obtenu pour la flèche bas arrow_down est 69C60000.

        Tu confirmes ?

        Ce message d’erreur est logique car 69C60000 est effectivement alphanumérique et il faudrait au minimum le placer entre "69C6000". Tu peux peut-être commencer par essayer avec le code d’une touche (p.ex. flèche bas) et mettre son code entre guillemets.
        Bien entendu, il faudra commenter (par // devant la ligne) toutes les autres lignes #define pour éviter les erreurs de compilation.
        On va sans doute devoir essayer plusieurs solutions car je ne parviens pas à reproduire ta situation chez moi (toutes mes télécommandes envoient désesperément des codes numériques !).

        Tiens moi au courant.

        Cordialement,

        Daniel.

        Répondre

        • Bonsoir Daniel,
          D’un échange surgit la solution ! Je recherchais les codes IR des télécommandes avec un croquis tiers qui ne me donnait que des codes alphanumériques, mais avec ta méthode, le problème est réglé et le croquis est copié sur la carte UNO sans erreur. Essais sur le moniteur réussis et on peut voir les codes envoyés à DCCpp.
          Prochaine étape, trouver l’adresse du LCD qui s’allume mais n’affiche rien.
          Merci

          Jean-Claude

          Répondre

          • Bonsoir Jean-Claude,

            On progresse ! Si tu as des problèmes avec l’afficheur LCD, n’hésite pas à consulter l’excellent article de Dominique et Guillaume Bibliothèque Wire : I2C qui détaille, entre autres, une méthode pour trouver les paramètres d’un composant I2C dont l’adresse est inconnue. C’est vraiment très utile (même pour lever un doute). Si nécessaire, adapte la ligne L188 du croquis.
            Tiens nous au courant de tes constatations, cela peut certainement servir à d’autres.

            Cordialement,

            Daniel

            Répondre

  • Bonsoir Daniel,

    Aprés installation de votre bibliothèque, la compil s’effectue sans problème bien qu’elle me signale pendant celle-ci des problèmes apparament mineurs. Le téléversement est OK.

    J’ai monté la partie contrôleur seule avec une diode VS838 ( à priori les diodes IR 3 pattes ayant un "38" en fin d’identifiant semblent convenir).

    L’afficheur est bien éclairé mais aucune indication n’apparait ; je suppose que c’est du à la non connection avec l’arduino DCC++.

    J’utilise une télécommande générique qui semble convenir et je controle sur le moniteur les valeurs affectés au touches.

    Je me pose une question avant d’aller plus loin (les valeurs à enregistrer sont plutôt longues...).

    J’ai fait 2 tests :

    • fleche haute
      - 1er appui 2742014623 + 1330780254 (les 2 valeurs apparaissent en suivant).
      - 2éme appui 31889539 + 1330780254
    • fléche basse
      - 1er appui 15111918 +1330780254
      - 2éme appui 2725237002 + 1330780254

    J’aurai tendance à penser qu’il me faut utiliser la 1ére valeur de chaque premier appui.
    Qu’en pensez-Vous ?

    Amitiés

    Gérard

    Répondre

    • Bonjour Gérard,

      L’afficheur LCD doit fonctionner indépendamment de la carte de la centrale DCC++ ; dès le téléversement terminé (ou lors d’un appui sur le bouton Reset), vous devriez obtenir l’affichage du menu STOP.
      Si vous n’obtenez rien, il faudrait vérifier que l’adresse de votre écran est bien celle renseignée dans le croquis (voir la L188) ; en cas de doute, consultez l’article Bibliothèque Wire : I2C de Dominique et Guillaume qui décrit très précisément une méthode qui permet de lever une éventuelle indétermination d’adresse.
      Concernant les codes, ceux-ci correspondent à ce que j’obtenais lors de mes premiers tests ! Le deuxième code qui apparait systématiquement (1330780254)devrait être le code de répétition (à placer après REPEAT1). Faites plusieurs essais pour identifier la valeur la plus probable car je constate que vous obtenez systématiquement deux valeurs différentes en première position de chaque appui.
      L’effet de chaque code peut être contrôlé via le moniteur série qui affiche les commandes à transmettre à la carte centrale DCC++ (même si celle-ci n’existe pas encore !)sous forme de série typique de <1>.
      Ce sera évidemment plus confortable avec l’afficheur LCD (après activation du menu RUN par la touche PLAY) !

      Cordialement,

      Daniel.

      Répondre

      • Bonsoir Daniel,

        Merci pour votre réponse qui m’a permis de progresser.

        Pour l’afficheur LCD effectivement en utilisant le soft de Dominique l’adresse n’était pas 0x20 mais 0x27.

        J’ai corrigé la ligne 188 du croquis mais je n’ai malheureusement que la lettre "S" en 1ére ligne et "v" en seconde à la mise sous tension.
        J’ai essayé sur un second UNO mais les résultats sont identiques.
        En appuyant sur PLAY j’obtiens l’écran suivant :
        L 3 0 F
        R > -----
        Si j’appuie par exemple sur 2
        L 3 20 F
        R > -----
        Par ailleurs je constate que :
        - le changement de sens fonctionne correstement (< ou >) et
        effectivement.
        - les commandes de fonctions basculent bien de - à | et vice-versa

        Pour la petite histoire, j’ai branché l’ensemble sur mon "réseau" (bien grand mot) d’essai et pour l’instant le résultat est positif ; la machine réagit bien au commande du moins celle de marche.

        A priori il y a un problème d’affichage au niveau des chaines de caractères puisqu’il n’affiche que le premier caractère.

        J’ai recharger la bibliothéque LiquidCrystal_I2c : pas de changement.
        J’utilise ici l’IDE 1.6.13.

        Quelqu’un a-t-il eu les mêmes problèmes ? Une idée à ce sujet ou un retour d’expérience ?

        Amitiés

        Gérard

        Répondre

  • Gérard,

    Normalement, à la mise sous tension, il faut obtenir immédiatement le menu STOP comme illustré par l’image dans le corps de l’article avec, en deuxième ligne d’affichage, le numéro de version enregistré dans la ligne 110 du croquis.

    Je constate que, mis à part pour le menu STOP, l’affichage du menu RUN semble tout à fait correct. Avez-vous essayé l’affichage des 2 autres menus (ADRESSES et PROGRAM) ? Quoique j’imagine bien que vous n’avez pas commencé par ceux-là...

    En tout état de cause, j’essayerais les manipulations suivantes :
    1. Bien contrôler que la ligne 110 soit encore intacte dans votre croquis et qu’elle ne soit pas, par mégarde, commentée ou modifiée de sorte que l’affichage omette ou modifie le numéro de version.
    2. Même contrôle pour les lignes 901 à 916 qui organisent l’affichage du menu STOP.
    3. Si vous suspectez un mauvais fonctionnement du LCD, vous pouvez en tester le fonctionnement facilement. Pour cela, il faut utiliser un des programmes d’exemple livrés avec la librairie. Dans l’IDE de votre Arduino UNO, allez à Fichier>Exemples, sélectionnez la librairie LiquidCrystal_I2C et le croquis HelloWorld. Après l’avoir chargé, supprimez la ligne 15 (lcd.print("Hello, world !") ;) et remplacez-la par les lignes suivantes :

    lcd.setCursor (0,0) ;
    lcd.print("8888888888888888") ;
    lcd.setCursor (0,1) ;
    lcd.print("8888888888888888") ;

    et téléversez sur votre carte Arduino.

    Vous devriez obtenir l’affichage de deux lignes complétées par des chiffres 8 ; si tous les chiffres sont allumés correctement, le LCD n’est pas en cause. Si certains caractères ne s’affichent pas, le LCD peut être en cause.

    Quant à la taille de votre réseau, pas d’inquiétude à avoir. Tout le monde n’a pas le courage d’entreprendre des réseaux comme Dominique, Jean-Luc, Pierre et les autres ! Mais, pour ma part, un petit réseau n’enlève rien au plaisir de réaliser un montage qui fonctionne, qui réponde aux attentes et qui permette de progresser dans la maîtrise de nos chères cartes ; c’est bien mon objectif dans Locoduino.
    Pour la petite histoire également, mon réseau se limite à un ovale de voie avec 2 aiguillages. Je ne désespère pas d’étendre mon territoire mais j’ai encore quelques problèmes d’expropriation à régler !!!

    Vous êtes presqu’au but ! Tenez-nous au courant de vos progrès.

    Amicalement,

    Daniel

    Répondre

    • Bonjour Daniel,

      Merci et réponse rapide. En attendant un développement plus complet le problème vient de l’afficheur. J’ai ce qui faut tant coté afficheur qu’interface. Ce soir je vais en préparer un nouveau et le tester .

      Amitiés

      Gérard

      Répondre

      • J’ai eu le même problème au niveau afficheur,et cela ne venait pas de l’afficheur mais de la librairie utilisée.Aprés avoir supprimé la librairie du fichier library j’ai téléchargé "arduino_LiquidCrystal_I2C et je obtenus les textes à l’écran comme attendu.Je vous conseille cet librairie ,la librairie ne fonctionne que pour l’afficheur présenté.
        amicalement
        gilles

        Répondre

        • Bonsoir Daniel et Gilles,

          Je vous remercie pour vos messages respectifs.
          J’ai changé d’afficheur et malheureusement j’ai toujours le même probléme :
          affichage du seul S en 1ére ligne et v en seconde. A priori il ne s’agit pas de l’afficheur.

          J’ai supprime la bibliothèque conseillée par Daniel et remplacée par celle de Gilles. Nouveau problème ; à la compilation j’ai le message suivant : class LiquidCrystal_I2C has no member ’init’.
          Pour ce soir stop car la télécommande fonctionne et je peux aussi accéder aux fonctions Adresses et Programm.
          Amitiés
          Gérard

          Répondre

    • Contrôleur à télécommande infrarouge pour centrale DCC++ 11 septembre 2017 22:08, par Rampanelli Mario

      Bonjour,
      Depuis le début que je teste le montage, j’ai un problème avec l’écran lcd, j,ai testé les différentes solutions citées ci dessus mais en vain, lorsque je teste avec le programme "hello world" et en remplaçant par les deux lignes de "8" il n’y a que le premier "8" de chaque ligne qui s’affiche... En pensant que c’était l’écran, j’en ai racheté un autre mais ça donne la même chose, bref c’est bizarre.... je ne sais pas trop quoi faire... en espérant trouver une solution...
      amicalement,
      Mario

      Répondre

      • Bonjour Mario,

        Les symptômes que vous décrivez ressemblent étrangement à ceux décrits par gerard31 ci-dessus. Avez-vous essayé la solution préconisée (voir son message du 4 mars 23:13 -> changement de librairie + éventuellement adaptation de lcd.init()en lcd.begin()) ?

        Amicalement,

        Daniel

        Répondre

  • Bonjour Daniel,
    Je tombe par hasard sur NEC Infrared IR
    Comme cette télécommande vaut 1.14 €, port gratuit, je me demande si elle est compatible avec ton système ?
    .
    A part ça, c’est sympa, ton système.
    Un article extrêmement clair et complet. Bravo !!
    Denis

    Répondre

  • "J’voudrais ben"
    "Mais j’peux point"
    Annie Cordy :-))
    .
    Malheureusement, je n’ai pas de locos DCC et pas encore de réseau.
    C’est bien la peine d’avoir "découvert" DCC++ pour Locoduino !!
    Dès que j’ai fini mes programmes de TCO et de commande (à venir), je m’y met.
    .
    Denis

    Répondre

  • Bonjour
    je galère a étendre les fonction jusqu a F28 , un petit coup de main serais sympas
    merci par avance de votre aide

    Répondre

  • Bonsoir Daniel,

    Aucune de mes locos n’a 28 fonctions ! Je n’ai donc aucune expérience en la matière mais cela devrait être possible et on va trouver la solution ensemble.

    Il faudrait seulement que vous me précisiez jusqu’à quel point vous êtes arrivé et ce que vous avez déjà essayé.

    J’imagine que vous avez réalisé l’ensemble tel que décrit dans l’article avec les deux cartes Arduino et qu’il fonctionne correctement avec les fonctions 0 à 4 ?

    Répondre

    • bonjour
      j ai testé la version de base de f0 a f4 et ça fonctionne au top ( tous fonctionne impeccable )
      j en suis arrivée au calcule de la CommandeFonction et c est la que je coince
      merci de votre aide

      Répondre

      • Bonjour Daniel,

        Selon la documentation fournie avec DCC++, l’activation des fonctions F21 à F28 doit se faire en utilisant la commande suivante :

        < f CAB 223 byte2 >

        dans la quelle CAB est l’adresse du décodeur (par exemple 3) et byte2 = F21*1 + F22*2 + F23*4 + F24*8 + F25*16 + F26*32 + F27*64 + F28*128.

        Pour déterminer la valeur de byte2, remplacer chaque étiquette de fonction que vous souhaitez voir activée en même temps par la valeur 1, sinon par 0. Ainsi par exemple pour activer la fonction F21, byte2 =1*1 + 0*2 + 0*4 + 0*8 + 0*16 + 0*32 + 0*64 + 0*128= 1. De même, l’activation de F28 donnerait 128 ; pour annuler toutes les fonctions de F21 à F28, byte 2 = 0.

        La commande d’activation de F21 pour la loco d’adresse 3 est donc :

        < f 3 223 1>

        Pour y aller progressivement, je vous conseille d’introduire cette commande via le moniteur série sur la carte Arduino de la centrale DCC++ en ayant débranché la liaison TX/RX entre la carte contrôleur et centrale.
        La fonction devrait s’activer sur la loco.
        Malheureusement, je ne suis pas en état actuellement de tester moi-même cette solution.

        Dites-moi ce qu’il en est ; si cela fonctionne, il ne restera plus qu’à modifier le croquis pour implémenter la commande.

        Cordialement,

        Répondre

        • bonjour
          merci des infos
          j en suis arrivée a cette séquence :
          f 3 133
          f 3 176
          f 3 160
          f 3 222 0
          f 3 223 0
          t 1 3 0 1
          j ai du supprimé cette séquence :
          default :
          CommandeFonction[AdresseActive] = 128 ;
          break ;
          pour que ça ne remette pas a zéro les sequence presedent celle modifié
          il ne reste plus qu a testé et trouvé une solution d affichage
          merci

          Répondre

          • Bonjour Daniel,

            La ligne CommandeFonction[AdresseActive] = 128 ; est utilisée dans le cas des fonctions F0 à F4 qui sont gérées différemment que les fonction F21 à F28. Dans le premier cas, le paramètre byte1 est constitué de 128 (d’où la ligne citée ci-dessus) + un nombre dépendant de(s) la (les) fonction(s) à activer tandis que le paramètre byte2 est omis. Comme je l’ai renseigné précédemment, dans le cas des fonctions F21 à F28, la commande est différente dans le sens où byte1 est toujours égal à 223 et byte2 est variable selon la fonction à activer. La modification du croquis devra tenir compte de cette particularité.

            Par contre, je n’ai pas compris les commandes que vous citez (f 3 xxx y) et ce qu’elles sont censé faire ; par exemple, quelles fonctions voulez-vous activer en faisant f 3 222 0 ?

            Répondre

            • re
              la commande f 3 222 0 pilote les fonction de F13 a F20
              ##### Pour activer les fonctions F13-F20 = (1) ou désactiver = (0) : #####

              <= Commencer la commande DCC ++
              f = (minuscule f) Cette commande est pour une fonction de CAB.
              BYTE1 : 222
              BYTE2 : F13 * 1 + F14 * 2 + F15 * 4 + F16 * 8 + F17 * 16 + F18 * 32 + F19 * 64 + F20 * 128
              AJOUTER ceux que vous voulez ON ensemble
              Ajouter 1 pour F13 ON
              Ajouter 2 pour F14 ON
              Ajouter 4 pour F15 ON
              Ajouter 8 pour F16 ON
              Ajouter 16 pour F17 ON
              Ajouter 32 pour F18 ON
              Ajouter 64 pour F19 ON
              Ajouter 128 pour F20 ON
              0 Seul s’éteint F13-F20
              = Fin de la commande DCC ++

              ##### Pour activer les fonctions F21-F28 on = (1) ou off = (0) : #####

              <= Commencer la commande DCC ++
              f = (minuscule f) Cette commande est pour une fonction de CAB.
              BYTE1 : 223
              BYTE2 : F21 * 1 + F22 * 2 + F23 * 4 + F24 * 8 + F25 * 16 + F26 * 32 + F27 * 64 + F28 * 128
              AJOUTER ceux que vous voulez ON ensemble
              Ajouter 1 pour F21 ON
              Ajouter 2 pour F22 ON
              Ajouter 4 pour F23 ON
              Ajouter 8 pour F24 ON
              Ajouter 16 pour F25 ON
              Ajouter 32 pour F26 ON
              Ajouter 64 pour F27 ON
              Ajouter 128 pour F28 ON
              0 Seul s’éteint F21-F28
              = Fin de la commande DCC ++

              Répondre

          • Bonjour
            programme modifier et testé
            opérationnel pour le 29 fonctions
            et affichage sur 3 LCD en ligne
            merci pour votre aide

            Répondre

  • Bonjour.

    Peux t’on raccorder le controleur à une centrale DCC et L298 en sachant que les bornes TX,RX sont déjà prise par le shield moteur ,A moins de mettre un arduino mega et de se servir d’autre entrée et sortie serie

    Répondre

  • Contrôleur à télécommande infrarouge pour centrale DCC++ 22 février 2022 10:44, par Daniel PIQUET

    Merci pour votre article, très bien fait.
    J’ai utilisé l’article "ma première centrale DCC" pour réaliser la centrale.
    J’ai récupéré une télécommande avec davantage de boutons que la vôtre, ce qui m’a permis de commander 8 locos et 28 fonctions. J’ai utilisé un écran de 20 x 4 pour y mettre une matrice permettant d’afficher ces 28 fonctions.
    Par contre, j’ai du utiliser IRremote car Irlib ne me donnait pas de codes fiables.
    Si quelqu’un est intéressé par ces modifications, je les passe bien volontiers.
    Cordialement

    Répondre

  • Contrôleur à télécommande infrarouge pour centrale DCC 22 février 2022 17:59, par Daniel (DPo)

    Bonjour Daniel,
    Merci pour ton appréciation !
    C’est évidemment toujours intéressant d’avoir un controleur plus puissant. Si le tient permet de commander 8 locos et 28 fonctions, c’est un rêve surtout que celle présentée dans l’article ne permettait que 4 locos et 4 fonctions. Je propose que tu me transmettes ton croquis et on pourrait réaliser une mise à jour de l’article de base, d’autant que la solution proposée peut se raccorder directement à la centrale de base "Ma première centrale DCC" telle que proposée récemment par msport dans son article récent [https://www.locoduino.org/spip.php?...].

    Répondre

  • Contrôleur à télécommande infrarouge pour centrale DCC++ 9 avril 2022 18:34, par alain Auzereau

    je viens de terminer une dcc ++ avec 2 lmd 18200 qui est operationnelle super bien servant de server a CDMRAIL qui pilote 3 locos voie principale et la voie de programmation.grand merci àl’ équipe locoduino. maintenant je realise la commande infrarouge , a la fin compilation, j ai un message d’ erreur :IRLB.h : no such file or directory. je ne la trouve pas dans les librairies ni en fichier zip ?? que faire ? Encore merci à l ’ équipe LOCODUINO qui ma motivé à construire un reseau.ALAIN

    Répondre

  • Bonjour Alain,

    La librairie en question se trouve sous forme de fichier ZIP dans l’article ci-dessus sous le point "Adaptation du croquis à votre télécommande".

    Si tu as des difficultés, n’hésite pas à revenir vers moi.
    Daniel (DPo)

    Répondre

  • Contrôleur à télécommande infrarouge pour centrale DCC++ 21 avril 2022 11:40, par alain Auzereau

    Bonjour Daniel
    merci pour la reponse rapide et aussi pour l indulgence a ma non voyance qui n a pas vu la librairie.
    je viens de terminer la commande infra rouge qui fonctionne 100/100 Mais beugue de temps en temps ???
    J ai beaucoup galérè à trouver les bons codes à changer,ma telècommande est VD TECH qui viens d un dvd.
    Grand merçi à toi ,je vais augmenter le nombre de locos.
    l evolution sera avec appli.smartphone si possible ??
    Merçi a toute l equipe qui met à disposition des projets qui fonctionnent.

    Répondre

  • Contrôleur à télécommande infrarouge pour centrale DCC++ 28 février 2023 16:05, par PARMENTIER Dominique

    Bonjour Daniel
    Je me suis enfin lancer dans la réalisation du controleur Infrarouge.
    Tout fonctionne,a part un retour a l’affichage sur la loco 4 quand j’accélère ou décélère sur les loco 1,2,3.
    Voyer vous une éventuelle solution car le téléversement se passe sans erreur.
    Cordialement

    Répondre

  • Contrôleur à télécommande infrarouge pour centrale DCC++ 1er mars 2023 17:58, par PARMENTIER Dominique

    Bonjour Daniel
    Erreur trouver sur le retour sur la loco 4.
    Cela est du au code de répétition écrit.J’ai mis le code de répétition au lieu du code loco 4.
    Tout marche correctement.
    Bravo pour votre projet.

    Répondre

  • Magnifique ! Je pensais effectivement à une erreur de codage...Les télécommandes, ce n’est pas si simple. Félicitation pour la réalisation !

    Répondre

  • “Bonjour,

    Je découvre progressivement les méandres de cet excellent site. Je me penche vers cette télécommande avec intérêt.
    J’ai bien modifié et enregistré tous les codes de ma télécommande (DUAL)”, ça fonctionne relativement bien car les locos semblent être commandées correctement mais je suis toujours bloqué par mon afficheur qui se présente de la même façon que les lecteurs précédents.
    J’ai essayé toutes les bibliothèques disponibles (liquidcrystalI2C), j’ai tenté les modifs de texte Lcd.init/begin etc mais rien y fait ! je n’ai toujours que deux caractères au démarrage et pas plus d’infos après appuy sur la touche "play" (un seul caractère de chaque fonction).
    Une âme saurait-elle m’aider car le sujet date un peu et certaines mises à jours de bibliothèques ont pu altérer le fonctionnement du système.
    Par avance merci

    Répondre

  • Oups !

    Je ne cherche plus, il faut simplement supprimer toutes les autres librairies Liquid-crystal-I²C pour qu’enfin le programme daigne se servir de la bonne. Il faut en outre bien remplacer lcd.init par lcd.begin...

    Répondre

  • Contrôleur à télécommande infrarouge pour centrale DCC++ 16 octobre 2023 18:27, par Daniel (DPo)

    Bien content que vous ayez trouvé la solution vous même ; c’est cela l’expérience... Daniel (DPo)

    Répondre

  • Bonjour, utilisateur de la télécommande IR décrite dans l’article 200, j’aimerais savoir si quelqu’un a testé la commande d’aiguille, il est dit en début d’article que cela doit etre possible. Par avance merci pour votre réponse et dans l’affirmative merci de me dire si je peux établir un contact avec cette personne. Bien à vous. Oraherk

    Voir en ligne : Anne-Marie et Jean-Pierre Kerharo

    Répondre

  • Bonjour,

    J’ai effectivement écrit que cela devait être possible car la logique de transfert des commandes entre le contrôleur et la centrale fonctionne et n’est pas spécifique à la commande des aiguillages. Il est bien évident que le script du contrôleur devra être adapté pour arriver au résultat souhaité. La seule expérience que j’ai en matière de commande d’aiguillages est constituée par l’utilisation d’un module HC-06 en lieu et place du contrôleur pour activer la centrale. Ce module reçoit ses ordres via une application DCCpp Cab (Android) Peyuton et commande, outre les locos, un seul aiguillage ROCOLINE équipé d’un moteur avec décodeur réf ROCO 42624. Cela fonctionne. Malheureusement, mon réseau de test est actullement démonté de sorte qu’il ne m’est (temporairement) plus possible de faire des essais.

    Répondre

    • Bonsoir,

      vous pouvez regarder l’article 317 Ma première manette pour les aiguillages DCC et voir comment sont générés les séquences DCC pour les accessoires (dont les aiguillages)
      La base des articles sur les manettes est un article de Dave Bodnar (datant du 16 juin 2016) http://trainelectronics.com/DCC_Ard...

      Reste à intégrer le code au contrôleur pour passer des touches aux séquences ad hoc. Je vous laisse le soin de poursuivre, utilisant plutôt des manettes dédiées.

      Pour des tests, vous pouvez remplacer la séquence DCC++ d’une fonction de locomotive par celle pour un aiguillage.

      Cordialement

      Voir en ligne : Ma première manette pour les aiguillages DCC

      Répondre

      • Bonjour, mes remerciements un peu tardifs pour votre réponse à mon message du 23 janvier, mais j’étais dans une phase d’installation et de Test d’un CANBUS, et cela m’a bien occupé. Je reviens vers la télécommande et je vais explorer les liens et articles que vous m’avez conseillés. Je vous tiendrai au courant des résultats obtenus. Cordialement.

        Répondre

    • Merci pour votre réponse à mon message de fin janvier que je découvre ce jour. En effet,je viens de terminer une phase de câblage puis d’installation et test d’un CANBUS pour les retours d’informations. Je suis donc disponible pour essayer de controler quelques aiguilles à solénoides commandées par le DCC via des décodeurs viessmann et tout cela à partir de la télécommande SONY qui accomplit parfaitement la gestion de trois loco pour l’instant.Je vous tiendrai au courant de mes découvertes.
      J’ai reçu également une réponse de msport me donnant le lien suivant :vous pouvez regarder l’article 317 Ma première manette pour les aiguillages DCC et voir comment sont générés les séquences DCC pour les accessoires (dont les aiguillages)
      La base des articles sur les manettes est un article de Dave Bodnar (datant du 16 juin 2016) http://trainelectronics.com/DCC_Ard...a suivre donc....Encore merci.

      Voir en ligne : Contrôleur à télécommande infrarouge pour centrale DCC++

      Répondre

Réagissez à « Contrôleur à télécommande infrarouge pour centrale DCC++  »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Projets »

Les derniers articles

Les articles les plus lus