Nouvelles:

25/06/2023 : Mise à jour du forum. En cas de bug, merci de contacter le Grand Sachem

Menu principal

Décodeur DCC pour signaux mécaniques

Démarré par Papydubruit, 17 Février 2023 à 19:14:53

« précédent - suivant »

0 Membres et 1 Invité sur ce sujet

Papydubruit

Bonjour à tous,

suite à une demande d'un ami qui possède une grand et magnifique réseau HO, je viens de finir la réalisation d'un décodeur DCC très bon marché et qui permet de gérer un signal à leds ou mécanique (ou les 2) avec les sorties suivantes:
- Jusqu'à 3 servos
- Jusqu'à 8 leds (cathode commune ou anode commune selon le modèle de PCB)
Le processeur utilisé est un WeMos qu'on trouve à moins de 2€ et le réglage des servos se fait avec une appli maison sur un Smartphone Android.
Voici une vue du PCB:



Ce PCB est prévu pour mettre sous les signaux avec juste une alimentation 12V continue et le DCC des rails.
L'adresse est figée dans le programme qui est facilement modifiable avec l'IDE Arduino.

Si ce produit intéresse quelqu'un je peux vous fournir toutes les infos, ou sur le forum, ou par messagerie perso.

Cordialement
A. STUYTS

caboose30

C'est en se trompant que l'on apprend.

jeanmi67

 
Bonjour Antoine,

Ta réalisation de décodeur DCC à base de Wemos D1 m'intéresse beaucoup afin, entre autres, de comprendre comment appréhender la problématique du portage sur Wemos d'une application conçue à la base pour Arduino.
Si tu ouvrais, par exemple, un fil dédié à ton décodeur, je serai un des premiers à le suivre assidument  :) .

Jean-Michel

Papydubruit

Bonsoir JM,

pourquoi ouvrir un nouveau fil ? Le temps de réaliser un schéma un peu plus présentable que mon brouillon et je te mets ce dernier et les sketchs bien commentés dans un prochain message.

Merci pour ton intérêt et bon dimanche soir.
Cordialement
Antoine

Papydubruit

Et voila le travail,

comme tu le vois, mes schémas ne sont pas terribles, mais cela devrait être compréhensible à un électronicien même débutant.



En PJ tu trouveras le sketch avec les 2 fichiers .cpp et .h qu'il faudra mettre dans le même dossier que le .ino.
La librairie slowmotion est une version compatible ESP.

Pour l'installation des cartes WeMos j'ai déjà fais tout un tuto que tu trouveras ici: https://forum.espacetrain.com/index.php?topic=3937.15

Le sketch comporte pas mal de commentaires (plus ou moins clairs  :)  ), mais je reste disponible pour de plus amples informations.

Reste le réglage des servos avec mon appli Android, mais pour cela il faudra faire nos échanges par messagerie perso car trop volumineux pour le forum.

Bonne découverte
Antoine


jeanmi67

 
Bonsoir Antoine,

Merci pour le schéma (que je trouve très bien  :) ), pour le programme et les liens.
Comme certains composants me manquent (je suis en train de préparer une commande), je ne peux pas passer tout de suite à la réalisation pratique.
En attendant, et comme j'aime bien essayer de comprendre, j'a déjà trois ou 4 questions, et il y en aura probablement d'autres...  ;)
Sur le schéma ne sont dessinés que 2 fils par servo. Par déduction, je suppose que le "manquant" est le fil qui est à connecter sur le "Ground" ?
Toujours sur le schéma, il me semble comprendre que les deux résistances connectées au Wemos à gauche (D2), elles-mêmes connectées à une des résistances de 10K, forment un pont diviseur (j'ai lu que le Wemos n'acceptait que 3,3V maxi sur ses entées/sorties). C'est exact ?
Concernant le programme, que je n'ai simplement parcouru rapidement, j'ai deux questions :
Concernant l'adresse de base (805), pourquoi une valeur si élevée ? Le choix de la valeur est-il libre ?
Enfin, je ne comprend pas l'utilité de la ligne 41 puisque la variable broadcastAddress ne semble pas utilisée ailleurs dans le programme :
uint8_t broadcastAddress[] = { 0xAC, 0x0B, 0xFB, 0xD0, 0x47, 0xAE }; ???

En tous cas, bravo pour ton travail !  :D

Jean-Michel

Papydubruit

Je vois que je suis en discussion avec un PRO, bravo pour tes remarques.

Citation de: jeanmi67 le 19 Février 2023 à 22:18:00Merci pour le schéma (que je trouve très bien  :) ), pour le programme et les liens.
Comme certains composants me manquent (je suis en train de préparer une commande), je ne peux pas passer tout de suite à la réalisation pratique.

Je peux te fournir ce qui te manque selon le cas.

CitationEn attendant, et comme j'aime bien essayer de comprendre, j'a déjà trois ou 4 questions, et il y en aura probablement d'autres...  ;)
Sur le schéma ne sont dessinés que 2 fils par servo. Par déduction, je suppose que le "manquant" est le fil qui est à connecter sur le "Ground" ?

Très bonne déduction, mais c'était facile.

CitationToujours sur le schéma, il me semble comprendre que les deux résistances connectées au Wemos à gauche (D2), elles-mêmes connectées à une des résistances de 10K, forment un pont diviseur (j'ai lu que le Wemos n'acceptait que 3,3V maxi sur ses entées/sorties). C'est exact ?

Toujours bonne déduction, mais c'était plus dur, on grimpe.

CitationConcernant le programme, que je n'ai simplement parcouru rapidement, j'ai deux questions :
Concernant l'adresse de base (805), pourquoi une valeur si élevée ? Le choix de la valeur est-il libre ?

Totalement libre, mais c'était le besoin de mon "client".

CitationEnfin, je ne comprend pas l'utilité de la ligne 41 puisque la variable broadcastAddress ne semble pas utilisée ailleurs dans le programme :
uint8_t broadcastAddress[] = { 0xAC, 0x0B, 0xFB, 0xD0, 0x47, 0xAE }; ???

Là je suis très fier de toi, c'était bien vu, et effectivement cette déclaration n'est pas utilisée dans ce sketch puisque ce décodeur ne communique pas avec un autre WeMos, mais cela peut s'avérer utile dans certaines application et j'utilise toujours la même base pour mes bien aimés WeMos.

CitationEn tous cas, bravo pour ton travail !  :D
Jean-Michel

Merci à toi pour ce savoureux échange qui me remonte un peu le moral, car visiblement l'électronique programmée n'est pas la demande favorite de ce forum et c'est son droit le plus stricte.

Juste un petit oubli: Il faut mettre une résistance de 10K vers le +3v de chaque sortie qui commande les servos, c'est le montage classique des servos par ailleurs.

Bon début de semaine à tous.
Antoine

jeanmi67

 
Re bonsoir Antoine,

Je suis content, aujourd'hui j'ai reçu trois images du maître...  ;D  ;D  ;D

Pour le pont diviseur, je me suis quand même un peu cassé la tête car j'ai mis un moment pour comprendre que dans le calcul je devait AUSSI tenir compte de la résistance de 10K. Avant ça, je tournais en rond avec un résultat de calcul donnant une valeur de tension normalement incompatible avec le Wemos...

Les résistances de 10K vers le +3v de chaque sortie, c'est pour le "Pull-Up" ?

Contrairement à ce que tu penses, je ne suis pas pro du tout, je n'ai aucune base en électronique à part celle que j'acquière sur le tas petit à petit. Par contre, ayant pas mal programmé dans une vie antérieure (mais pas en C), l'aspect "électronique programmable" me convient assez bien intellectuellement parlant, ça change des mots croisés et des sudokus  :P .

Merci pour ta proposition de fournitures, mais comme j'ai déjà une liste de choses à commander pour d'autres usages, je suis comme je l'ai dit en train de préparer une commande groupée.

Bonne fin de soirée.
Jean-Michel

Papydubruit

Citation de: jeanmi67 le 19 Février 2023 à 23:14:50Les résistances de 10K vers le +3v de chaque sortie, c'est pour le "Pull-Up" ?

Oui, le sniffer DCC est un montage très connu sur le Net, j'ai juste rajouté le pont diviseur, j'aurais aussi pu mettre les 2 10K vers le +3V mais l'opto préfère le 5V.

Une autre petite question que tu pourrais te poser: Pourquoi j'ai utilisé un "antique" HCT595, tout simplement parce que les signaux mécanique que je devais gérer avec leurs leds en cathode commune, ce qui m'obligeais à les commander en source et que j'en avais 2 barrettes de disponible.
Si tu dois développer quelque chose à toi, utilise des MCP23008 qui sortent 25mA par pin et la librairie https://github.com/RobTillaart/MCP23008  est compatible esp8266.

jacquot

Bonjour papydubruit,

J'admire... ::) C'est incroyable comme ce "monde" ne m'imprègne pas. Un peu comme le solfège : j'adore écouter Mozart et d'autres, mais quand je regarde une partition  :( c'est de l'hébreu ! Maintenant c'est trop tard pour moi mais dans ma prochaine vie je ferai électronique. ;) 
Bravo à  toi.

Jacquot

Papydubruit


jeanmi67

 
Bonjour Antoine,

Citation de: Papydubruit le 19 Février 2023 à 23:59:52les signaux mécanique que je devais gérer avec leurs leds en cathode commune, ce qui m'obligeais à les commander en source
Du coup, je me rends compte que sur le schéma manque la figuration d'au moins une LED car on peut facilement se tromper surtout qu'en digital, les signaux sont généralement à anode commune et non à cathode commune.
Je ne m'étais pas posé la question concernant l'"antique" HCT595 car comme déjà dit, je n'ai pas de bases en électronique. Par contre, je m'étais demandé pourquoi utiliser ce composant plutôt que les "I-O expanders" I2C que l'on rencontre assez couramment dans le monde Arduino ?
Du coup, je me permets de te poser la question : pourquoi un MCP23008 plutôt qu'un PCF8574 qui semble nettement moins cher (ou plus facile à trouver) ?

Bonne journée.
Jean-Michel


Papydubruit

Bonjour Jean-Michel,

comme je te l'ai dis dans mon précédent message, j'avais besoin de gérer des leds à cathodes communes et donc du courant en "source".
Or le PCF8574 ne donne que 1mA dans ce mode: https://passionelectronique.fr/tutorial-pcf8574/.
Mais si tu t'en sers en anodes communes, il fera parfaitement l'affaire.

Cordialement
Antoine

jeanmi67


Re bonjour Antoine,

Merci pour a précision que tu apportes concernant l'usage du PCF8574.  :D

Mon ignorance vient du fait que je ne suis pas électronicien et ne possède pas la base de son vocabulaire spécifique. Le mot "source" dans ta phrase :
Citation de: Papydubruit le 19 Février 2023 à 23:59:52...ce qui m'obligeais à les commander en source...
n'évoquait rien pour moi et n'a provoqué qu'un grattement de tête  :o

Jean-Michel

Papydubruit

Mais depuis tu as compris que c'est le terme utilisé pour une sortie qui "tire" le courant vers le +