LOCODUINO
Parlons Arduino => Vos projets => Discussion démarrée par: msport le novembre 16, 2020, 09:52:26 am
-
Un fichier ino final pour CDMRail
Sans garantie.
-
@François. https://www.locoduino.org/spip.php?article161#forum5497
suivant le schéma de vos LED, le câblage à adopter.
!!! NE PAS OUBLIER LES RÉSISTANCES AVEC DES LEDS !!!
-
Bonjour,
Une question parce que mon montage ne fonctionne pas. J'ai réalisé la carte soudé tous les composants chargé le programme dans l'arduino nano. Pour tester l'ensemble j'ai installé un feu bicolore coté + avec résistance sur les bornes D3 D4 le commun le - donc sur la borne qui va bien. j'ai ensuite programmer ma multinaus avec une adresse DCC 90 sur le mode aiguille, j'ai relié le montage a ma centrale DCC 10764, l'arduino a ses leds rouges qui s'allument mais par contre mon feu bicolore(testé auparavant) lui ne s'allume pas. Ma question est ce normal ?
cordialement
-
On a noté dans la littérature que Roco décale les adresses de 4 par rapport au standard.
C'est peut-être votre problème : testez autour de 90.
Pour tester votre montage, faites clignoter les LED D3 et D4 avec le programme exemple Blink, bien connu.
-
bonjour voici le message d'erreur que j'obtiens avec le telechargement decodeur trafic
Arduino : 1.8.14 (Windows 10), Carte : "Arduino Nano, ATmega328P"
Le croquis utilise 2974 octets (9%) de l'espace de stockage de programmes. Le maximum est de 30720 octets.
Les variables globales utilisent 366 octets (17%) de mémoire dynamique, ce qui laisse 1682 octets pour les variables locales. Le maximum est de 2048 octets.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x69
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x74
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x72
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x61
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x69
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x63
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x20
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x6c
Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
et celui-ci avec blink :
Arduino : 1.8.14 (Windows 10), Carte : "Arduino Nano, ATmega328P"
Le croquis utilise 924 octets (3%) de l'espace de stockage de programmes. Le maximum est de 30720 octets.
Les variables globales utilisent 9 octets (0%) de mémoire dynamique, ce qui laisse 2039 octets pour les variables locales. Le maximum est de 2048 octets.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x51
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x51
Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
je ne comprends pas bien ?
cordialement
-
Vous voyez-bien que l’IDE ne trouve pas l’Arduino (le port COM) donc ne peut pas televerser !
-
Là, vous m 'aidez, je sais lire, mais je voudrais savoir pourquoi, car les leds de l'arduino verte et rouge clignotent lors du téléchargement, même si je ne pratique pas tous les jours c'est la première fois que je rencontre ce problème
-
Bonsoir,
vous avez certainement vérifié comme dans
Vérification après installation de l' Installation de l’IDE Arduino
https://www.locoduino.org/spip.php?article15
Si oui, essayez le "Old bootloader"
-
J'ai suivit toute cette procédure mon ordi me dit également que les meilleurs pilotes sont déjà installé pour le CH340 : voici mes messages d'erreurs :
Arduino : 1.8.14 (Windows 10), Carte : "Arduino Nano, ATmega328P"
Le croquis utilise 2974 octets (9%) de l'espace de stockage de programmes. Le maximum est de 30720 octets.
Les variables globales utilisent 366 octets (17%) de mémoire dynamique, ce qui laisse 1682 octets pour les variables locales. Le maximum est de 2048 octets.
Une erreur est survenue lors du transfert du croquis
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xb6
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xb6
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
Avec le oldbootloader la liste d'erreurs est plus longue encore ?
j'ai essayé avec un arduino neuf et non relié au montage et je n'ai aucune erreur
Désormais j'ai une des leds qui s'allume sur la broche D3 qui fini par s'éteindre au bout d'une minute environ, relié à ma centrale idem par contre le régulateur 78M08 chauffe énormément !!! je ne lui ai pas encore adjoint de radiateur
-
Conclusion, si vous télé-déversez avec le Nano reliè à un montage, c'est le montage qui réalimente le Nano.
Comme il faut éviter d'alimenter le 5V et l'USB en même temps, le CH340 peut souffrir.
Si l’Arduino que vous testez OK avec blink est un Nano, téléchargez le en solo avec le programme définitif, sinon testez en un neuf.
Comme vous n'êtes pas très prolixe sur la configuration utilisée, on est obligé de jouer à la devinette.
-
Bonjour,
Oui mon Nano est soudé sur le montage et je l'ai telé déchargé INO en place sur la carte électronique, fallait il télé déchargé le programme avant de souder l'Arduino ? Par contre je n'ai jamais branché l'USB et ma centrale en même temps ! je vous joins une photo du montage peut être ai-je commis une erreur ?
Codialement
-
Si vous téléchargez le programme decoder_traffic_light.ino sur un Nano en solo sans problème, alors qu'il est en erreur sur celui de votre montage, c'est que le Nano de votre montage est défectueux (une fausse manip est si vite arrivée.)
C'est tout l’intérêt d'utiliser des supports dits header 2.54 que de pouvoir permuter les circuits montés dessus.
Sinon, rien à redire sur votre photo pour ce que l'on voit.
-
Donc voilà j'ai dessoudé l'Arduino avec beaucoup de dificulté, j'en ai remis un autre avec le programme pré téléversé, mais avant de le souder pourriez-vous SVP m'indiquer certaines valeurs que je pourrais contrôler avec mon multimètre sur la carte afin de voir si le problème ne vient pas de là.
certes, je suis pénible, mais tout cela est un peu nouveau pour moi, et j'aimerai comprendre merci d'avance.
cordialement
FD
-
Je ferais les vérifications suivantes, non exhaustives :
avec le DCC la tension de 8 V est correcte et présente sur le Vin. Le régulateur reste froid.
A l'ohmmètre la broche 5V de l'Arduino ne présente que les résistances de 10K ou mieux vers le GND
aucune des broches l'Arduino (absent) n'est au GND, au 5V ou au 8V au voltmètre / ohmmètre .
En réalimentant le point 5V de l’Arduino (sans celui-ci) vérifiez que vous avez 2,5 continus sur la broche 2 de l'Arduino avec le DCC
Et globalement, pas de ponts de soudure au compte-fils.
Mais votre premier constat, la LED qui s'éteint correspond à une surconsommation peut-être due au CH340 grillé.
-
Bonjour,
Voici quelques tensions prises, branché en DCC sur mon montage sans l'Arduino
-pattes extérieurs du pont de diode 5.8V
-entrée résistance 1K 0.02V sortie 0V
-pattes externes condo 100nf 5.56V et 5.92V pattes internes 2V et 0,56V
-diodes 1N4148 0.34VC et 11.3VA
-entrée résistance 10K 1.33V pour les deux sortie Idem
-entrée opto 0.35V et 0.02V sorties les 4 entre 1.5V et 1.27V
-patte 1 du régulateur 5.96V centrale 5.88V troisième 0.80V
-Broches Arduino VIN 1.29V GND 5.87V RST 1.92V 5V 1,31V de A6 à D13 entre 0.01 et 0.03V de l'autre coté D12 4.33V D11 3.50V D10 2.56V D9 2.20V
D8 2.20V D7 2.10V D3 0V D2 1.43V
Tension entrée DCC 11.3VA
Ces valeurs sont elles conforme ?
merci pour votre patience
-
Je ne sais pas si c'est votre référence pour les mesures (non précisée et qui devrait être systématiquement le GND) ou le résultat qui est problématique mais ces valeurs sont anormales.
-pattes extérieurs du pont de diode 5.8V,
Votre pont de diodes est trop lent pour le DCC, il devrait fournir environ 10V CC, vous avez +/- 5.8V, mais c'est peut être du à un défaut du montage. Le montage peut éventuellement fonctionner avec cette valeur.
-entrée résistance 1K 0.02V sortie 0V, normal l'entrée est isolée du GND mais la mesure était à faire entre 2 et 3 du 6N137 et vous auriez du avoir 0.35V CC
-pattes externes condo 100nf 5.56V et 5.92V pattes internes 2V et 0,56V si c'est vis-à-vis du GND les pattes "internes" devraient être à 0V
-diode 1N4148 0.34VC et 11.3VA si c'est aux bornes de cette diode,, vous ne devriez avoir que 0.7V CA (6N137 claqué ?)
-entrée résistance 10K 1.33V pour les deux sortie Idem si c'est vis-à-vis du GND possible si il n'y a pas de 5V sur le VCC du Nano
-entrée opto 0.35V et 0.02V sorties les 4 entre 1.5V et 1.27V l'entrée est isolée du GND
-patte 1 du régulateur 5.96V centrale 5.88V troisième 0.80V, pont inadapté, et la 3e devrait être au GND donc à 0V
-Broches Arduino VIN 1.29V GND 5.87V RST 1.92V 5V 1,31V de A6 à D13 entre 0.01 et 0.03V de l'autre coté D12 4.33V D11 3.50V D10 2.56V D9 2.20V D8 2.20V D7 2.10V D3 0V D2 1.43V ces mesures ne sont pas cohérentes si elles ont été faites en référence au GND. Des mesures faites sur des points non connectés peuvent donner des valeurs aléatoires, mais on les voit se balader.
Tension entrée DCC 11.3VA : OK.
En tout cas, sans autres précisions, vos mesures ne sont pas rassurantes.
-
bonsoir
je suis vraiment un manche, je vous imagine en train de sourire
je n'étais en fait pas relié au GND,
voici donc d'autre mesure qui semble plus fiable
patte + pont de diode 11.71V les 2 centrales 5.8V - 0V
1K 5.76V et 6.09V
diodes 5.76V et 6.09V (elle doit être claquée)
6N137 (2) 5.88V (3) 6.09
régulateur 11.72V 0V et 5.07V
100nf 0V ext et 11.2V et 5.2V
pattes Arduino VIN 3V GND 0V RST 4.24V de D13 à A2 0.1V et de D12 à D3 entre 1.35V et 4.35V
Encore une fois merci pour le temps que vous me consacrez
Cordialement
DF
-
Bonjour,
ça parait plus logique ...
A priori, vous avez utilisé un régulateur 7805 et non 7808 ? Ça peut fonctionner quand même.
Si le seul point à 4.35V est est D2, c'est OK.
Donc pour autant qu'on puisse juger, vous pouvez monter le Nano
A priori, la diode 1N4148 est OK, vérifiez que la tension à ses bornes ne dépasse pas 0.7V, le 6N137 peut tenir un petit moment à plus.
-
Bonjour oui en y regardant de plus prêt avec mes mauvais yeux le régulateur est un 7805 cela implique-t-il le voltage de 3V sur VIN et non 8V ?
valeur mesuré sur D12 1.51 V , D11 2.86V, D10 3.88V, D09 4.28V, D8 4.37V, D7 4.34V, D6 4.35V, D5 4.45V, D4 4.30V, ET ENFIN D3 4.85V je n'arrive pas m'expliquer pourquoi il y a du courant sur ces bornes puisque sans l'Arduino elles ne sont relié à rien ?
A priori, la diode 1N4148 est OK, vérifiez que la tension à ses bornes ne dépasse pas 0.7V, le 6N137 peut tenir un petit moment à plus.
Le courant mesuré au borne du 1N4148 est largement supérieur à 0.7V puisque l'on atteint 5.88V et 6.02V ? et sur le 6N137 on n'a les même mesure ?
mais je sens que je touche au but
cordialement
-
Avec un multimètre vous mesurez des tensions sur les points qui sont en l'air via les résidus de flux de soudure mais ces valeurs doivent varier aléatoirement. Quid D2 ?
La sortie du régulateur est directement connectée au Vin : vous devriez retrouver le même 5V =
Diode : quand on dit tension aux bornes, cela veut dire que vous mettez une pointe de touche sur une borne et l'autre sur l'autre : vous avez alors la différence entre les deux valeurs que vous mesurez par rapport au GND :
6.09V - 5.76V = 0.33V c'est OK.
Par contre si vous n'avez pas la même valeur (DCC branché) entre la diode et le 6N137 (/ GND) , c'est que vos soudures sont sèches ou que les pistes sont coupées.
Il faut que vous compreniez la différence entre courant et tension, revoyez les cours d'électricité/électronique du site éditorial. Un courant provoque une chute de tension quand il passe dans une résistance (loi d'ohm)
-
Vérifiez à l'ohmmètre que les différents points de l'Arduino ne sont pas en court-circuit entre eux.
-
bonjour,
mon ohmmetre est réglé sur 200K, pour qu'un quelconque courant circule entre les bornes d12 à d4 il ne peut provenir que de d2 j'ai testé il n'y a pas de continuité entre d2 et toutes les autres bornes je passe mon réglage à 200M et là je trouve une valeur de 03.7
la valeur mesuré de D2 est : 1.55V
j'en perd mon latin
cordialement
DF
-
Rien que les résistances de surface donnent quelque chose sur la gamme 200Mohm, ça ne perturbe pas le fonctionnement.
Sur D2, en fonctionnement avec le DCC, on a la moité de la tension "5V" de l'Arduino.
Faites les vérifications que je vous ai suggérées et tentez le montage.
-
Re bonjour,
Donc j'ai bien 5.01V sur VIM valeur sur borne 6 du 6N137 1.28V que je retrouve donc sur D2 j'ai changé le 6N137 les valeur en entrée sont désormais sur 2 de 3.37V sur 3 de 3.55V (au lieu de 5.88V et 6.09v précédemment) en sortie vers D2 0.60V donc D2 0.60V. on est loin de la moitié de la valeur 5V de l'Arduino. valeur que je retrouve sur la broche 5V de l'Arduino. Le repère du 6N137 doit bien être dirigé vers le coté ou se trouve les condensateurs? et j'ai toujours des valeurs sur les bornes de D12 à D3 qui s'élèvent de de 00V à 1.59V en passant par 2.55V j'avoue ne plus rien comprendre.
cordialement
dernière minute le fait d'avoir déssoudé l'Arduino grillé avait certainement laissé des débris microscopiques produisant des contactes invisibles à l'œil nu j'ai fini par résoudre ce problème entre D12 et D3 pour le reste je ne comprends toujours pas ....
-
Bonsoir,
comme je ne suis pas très sur de la qualité de votre circuit, surtout après démontage et que j'ai beaucoup de mal à interpréter les mesures que vous faites, je ne vois comme solution que de repartir sur des circuits neufs et professionnels.
Je vous suggère de télécharger le fichier zippé dit Fichier Gerber de l'article et de le faire réaliser chez JLCPCB
https://jlcpcb.com/
QUOTE NOW-> Add Gerber files -> SAVE TO CART (avec les options proposées qui vous proposent 5 circuits)
cout 1,64€ + 3,11€ pour le port avec Global Direct Economical Line (à sélectionner en dessous de DHL, liste à dérouler)
Vous les aurez en 15 jours - 3 semaines.
Et mettez des supports pour le Nano :
https://www.ebay.fr/itm/264835274780
-
Bonsoir je veux bien essayer avec le fichier gerber, mais à priori au nombre de borne il est prévu pour une signalisation 3 feux, puisque le nombre de borne (15) est impair, voilà pourquoi j'avais opté pour l'autre carte offrant la possibilité d'alimenter 8 feux bicolores.
cordialement
-
Bonsoir,
effectivement la sortie A4 n'est pas accessible sur les borniers.
Il vous reste néanmoins, 7 feux bicolores utilisables, dans l'ordre :
Signal1 broches 3,4
Signal2 broches 5,6
Signal3 broches 7,8
Signal4 broches 9,10
Signal5 broches 11,12
Signal6 broches 13, A0
Signal7 broches A1, A2.
+ A3 en solo.
A vous de voir.
-
Bonsoir,
Pour info j'ai commandé les circuits mais pour informer la communauté les tarifs ont changé il faut compter 2€ pour les circuits et 12€ pour le transport entre 1 semaine et 15 jours le moins chère mais pas par DHL ....!
Donc le vous tiendrais informé d'ici là ....
cordialement
DF
-
Bonsoir,
vous n'avez pas déroulé la liste des transporteurs jusqu'en bas pour atteindre Global Direct Economical Line.
-
Bonsoir, et bien me revoilà, un peu désespéré je dois l'avouer, j'ai suivi vos conseils fait imprimé les circuits à l'adresse que vous m'avez indiqué, je les ai reçu plus tôt que prévu, super. J'ai remonté tout le circuit avec des composants neufs, j'ai téléversé le programme Arduino sur mon Nano, mais lorsque je branche le signal il n'y a que la borne G1 qui doit correspondre a D2 qui allume la led l'autre led est connecté à R1, j'ai beau essayer toutes les adresses DCC de 39 à 151 rien ne se passe, de plus les autres bornes sont inactives !!!!! ? :-\ :-\ :-\ :-\ :-\ :-\ >:( >:( d'ou ma question ce montage fonctionne-t-il vraiment ?
-
Bonsoir, et bien reprenons,
vous avez téléchargé dans votre Nano le programme decoder_traffic_light.ino sans modification donc configuré en TRICOLOR et avec 90 comme première adresse. Le MODE est LOW donc le common = HIGH, ce qui n'est peut-être pas le cas si le commun de vos signaux est le GND (0V et que les feux sont actifs en envoyant du 5V sur chacune des LED via une résistance de limitation)
Vous avez mis un pont sur votre circuit sur jump common LED du coté +5V (même remarque)
vous avez branché les deux fils du DCC sur input DCC du circuit
Vous avez branché une LED verte (avec une résistance de limitation) sur G1 (qui correspond à D3)
Vous activez l'adresse 90 sur votre ECOS et la LED verte G1 s'allume.
Vous avez branché une LED rouge (avec une résistance de limitation) sur R1 (qui correspond à D4)
Vous activez les adresses d'accessoires 39 à 151 sur votre ECOS et la LED rouge R1 ne s'allume pas. Ni connectée de O1 à O5
-
Bonjour,
Oui j'ai téléversé decoder_traffic_light.ino sans modification,( mais je veux le faire fonctionner en bicolores) le commun de mes LED est effectivement le GND.
le pont est également sur GND.
oui j'ai branché les 2 fils DCC sur input
oui j'ai branché une led verte avec résistance sur G1 et la led s'allume
oui j'ai activé l'adresse 90 et la led verte est toujours allumée
oui j'ai branché une led rouge sur R1 avec une résistance elle est éteinte
oui j'ai activé et essayé toutes les adresses de 39 à 151 de G1 à G4 et rien ne se passe.
J'ai donc dû louper un épisode, car il me semble qu'à une borne sur deux la led verte devrait s'allumer ou je me trompe?
cordialement et à tête reposée
-
d'ou ma question ce montage fonctionne-t-il vraiment ?
Oui si on se donne la peine de lire l'article et de configurer le programme et le module conformément à ses besoins.
Non dans le cas contraire.
Donc, il faut que vous modifiez le programme :
/***************************************************************************************
* CONFIGURATION SETTING
*
****************************************************************************************/
// #define CONSOLE // output console, delete this after checking the configuration
#define MODE HIGH // LOW or HIGH
#define FIRST_ID_DCC 90 // first DCC address, DCC_CODE
#define NB_TRAFFIC_LIGHT BICOLOR // TRICOLOR or BICOLOR
N'oubliez pas le petit condensateur de 27pf (22pf-270pf) aux bornes de 2 et 3 du 6N137. (comme déjà expliqué sur le site éditorial)
-
Bonjour, il y a un mieux,
la led rouge s'allume désormais sur les bornes A5 04 G4 R3 O2 mais pas sur G2 et R1, et toujours aucune inter-action à partir de ma central multmaus à partir de l'adresse 90, effectivement sur ce montage, puisque l'emplacement n'existe pas sur le circuit imprimé, je n'ai pas ajouté le 27 pf le problème provient-il de là ?
cordialement
-
je n'ai pas ajouté le 27 pf le problème provient-il de là ?
Pour le savoir, ajoutez le ...
effectivement sur ce montage, puisque l'emplacement n'existe pas sur le circuit imprimé,
Quel emplacement ?
Postez nous votre programme modifié.
-
Attention, la facture de msport pour ce support technique particulier va être bien salée ;D >:(
-
je n'ai pas ajouté le 27 pf le problème provient-il de là ?
Pour le savoir, ajoutez le ...
effectivement sur ce montage, puisque l'emplacement n'existe pas sur le circuit imprimé,
/*
* Decoder for traffic light with three or two leds on ARDUINO NANO
*
* by default the red leds are switched on
* pin 2 receives DCC interrupts
*
* TRAFFIC LIGHT WITH THREE leds (GREEN, RED, YELLOW)
* 5 decoders of traffic lights with three leds on Arduino UNO
* the leds are controlled by pins 3 to A3 by triplet
* traffic light 1 : 3,4,5
* traffic light 2 : 6,7,8
* traffic light 3 : 9,10,11
* traffic light 4 : 12,13,A0
* traffic light 5 : A1,A2,A3
* two addresses by traffic light
* even addresses for green and red lights
* odd addresses for yellow light
*
* TRAFFIC LIGHT WITH TWO leds (GREEN, RED)
* 8 decoders of traffic lights with two leds on Arduino UNO
* the leds are controlled by pins 3 to A4 by pair
* traffic light 1 : 3,4
* traffic light 2 : 5,6
* traffic light 3 : 7,8
* traffic light 4 : 9,10
* traffic light 5 : 11,12
* traffic light 6 : 13,A0
* traffic light 7 : A1,A2
* traffic light 8 : A3,A4
* one address by traffic light
*
* CONFIGURATION
* MODE : determined by the common of the led, LOW if common = HIGH, HIGH if common = LOW
* FIRST_ID_DCC : DCC address of the first traffic light
* NB_TRAFFIC_LIGHT : determined by the kind of traffic light, BICOLOR for two leds, TRICOLOR for three leds
*
*/
/***************************************************************************************
* CONFIGURATION SETTING
*
****************************************************************************************/
//#define CONSOLE // output console, delete this after checking the configuration
#define MODE HIGH // LOW or HIGH
#define FIRST_ID_DCC 90 // first DCC address, DCC_CODE
#define NB_TRAFFIC_LIGHT BICOLOR // TRICOLOR or BICOLOR
/**********************************************************************************
* DON'T CHANGE THE FOLLOWING
*********************************************************************************/
/******************************************************************************
* INTERNAL PARAMETERS
*
********************************************************************************/
// DCC
#include <DCC_Decoder.h> // Minabay library
#define kDCC_INTERRUPT 0 // pin 2 receives DCC interrupts
int previous_address = 0; // avoids multiple DCC addresses
int previous_position = 2; // avoids multiple DCC orders
volatile boolean update_light; // set if an update should be processed after DCC control
// traffic light
#define BICOLOR 8 // 8 traffic lights with two leds
#define TRICOLOR 5 // 5 traffic lights with three leds
#define FIRST_PIN 3 // pin of the first traffic light
#define GREEN 0 // address DCC/0
#define RED 1 // address DCC/1
#define YELLOW 2 // address DCC+1/0
// traffic light definition
struct light {
int address; // its DCC address
int current_position; // green / red / yellow
int green; // pin of the green led
int red; // pin of the red led
int yellow; // pin of the yellow led
boolean activation_request; // request of activation
};
light traffic_light[NB_TRAFFIC_LIGHT]; // the set of traffic light
/********************************************************************
* method called if a request is made by the DCC
*
*******************************************************************/
void activation_traffic_light() {
for (int i = 0; i < NB_TRAFFIC_LIGHT; i++) // for all traffic lights
{
if (traffic_light.activation_request == true) // if the traffic_light is waiting for activation
{
switch(traffic_light.current_position) // we look the current position
{
case GREEN :{ // if green led
digitalWrite(traffic_light.green,MODE); // switch on green
digitalWrite(traffic_light.red,!MODE); // switch off red
if ( NB_TRAFFIC_LIGHT == TRICOLOR){digitalWrite(traffic_light.yellow,!MODE);} // switch off yellow
#ifdef CONSOLE
Serial.print("activation -> traffic light");Serial.print(i);Serial.println(" : green led");
#endif
break;}
case RED : { // if red led
digitalWrite(traffic_light.green,!MODE); // switch off green
digitalWrite(traffic_light.red,MODE); // switch on red
if ( NB_TRAFFIC_LIGHT == TRICOLOR){digitalWrite(traffic_light.yellow,!MODE);} // switch off yellow
#ifdef CONSOLE
Serial.print("activation -> traffic light");Serial.print(i);Serial.println(" : red led");
#endif
break;}
case YELLOW : { // if yellow led
digitalWrite(traffic_light.green,!MODE); // switch off green
digitalWrite(traffic_light.red,!MODE); // switch off red
digitalWrite(traffic_light.yellow,MODE); // switch on yellow
#ifdef CONSOLE
Serial.print("activation -> traffic light");Serial.print(i);Serial.println(" : yellow led");
#endif
break;}
}
}
traffic_light.activation_request = false; // the traffic light is updated
}
update_light = false; // all updates are made
}
/*************************************************************************************
* DCC method
*
***********************************************************************************/
void BasicAccDecoderPacket_Handler(int address, boolean activate, byte data)
{
address -= 1; address *= 4; address += 1; address += (data & 0x06) >> 1; // DCC address decoding
int led = (data & 0x01) ? GREEN : RED; // DCC/0 or DCC/1
int traffic_light_index = address; // index of a traffic light
int color = led; // the color of the led
boolean activation = false;
if ((address != previous_address) || ((led != previous_position) && (address == previous_address))){ // if we change the address or the led
switch (NB_TRAFFIC_LIGHT) {
case BICOLOR : { // if the address is in our range for traffic light with two leds
if ((address >= FIRST_ID_DCC) && (address < FIRST_ID_DCC + NB_TRAFFIC_LIGHT)){
traffic_light_index = address - FIRST_ID_DCC; // index of the traffic light
activation = true;}
break;}
case TRICOLOR : { // if the address is in our range for traffic light with three leds
if ((address >= FIRST_ID_DCC) && (address < FIRST_ID_DCC + (2*NB_TRAFFIC_LIGHT))){
if (address%2 != 0) { traffic_light_index = address - 1; color = YELLOW;} // if odd address => yellow led
traffic_light_index = (traffic_light_index - FIRST_ID_DCC)/2; // index of the traffic light
activation = true;}
break;}
}
traffic_light[traffic_light_index].activation_request = activation; // activation is requested
traffic_light[traffic_light_index].current_position = color; // state is requested (color of the led)
update_light = activation; // traffic light update is requested
}
previous_address = address; previous_position = led; // the current activation is saved
}
/**********************************************************************************************
* setup
*
******************************************************************************************/
void setup() {
int pin_jump = 0; // a jump for traffic light pins
int traffic_light_jump = 0; // a jump for traffic light number
for (int i=0; i<NB_TRAFFIC_LIGHT; i++){ // for all the traffic lights
traffic_light.activation_request = false; // no activation request
traffic_light.green = pin_jump + FIRST_PIN; // pin number of the green led
pinMode(traffic_light.green, OUTPUT); // green led in output(ID DCC/0)
digitalWrite(traffic_light.green, !MODE); // green led switch off
traffic_light.red = 1+ pin_jump + FIRST_PIN; // pin number of the red led
pinMode(traffic_light.red, OUTPUT); // red led in output (ID DCC/1)
digitalWrite(traffic_light.red, MODE); // red led switch on
if (NB_TRAFFIC_LIGHT == TRICOLOR) { // if three leds
traffic_light.address = traffic_light_jump + FIRST_ID_DCC + i; // its DCC ID
traffic_light.yellow = 2+ pin_jump + FIRST_PIN; // pin number of the yellow led
pinMode(traffic_light.yellow, OUTPUT); // yellow led in output (ID DCC+1/0)
digitalWrite(traffic_light.yellow, !MODE); // yellow led switch off
traffic_light_jump++; // the following traffic light
pin_jump+=3; // the following pin for three leds
}
else { // if two leds
traffic_light.address = FIRST_ID_DCC + i; // its DCC ID
pin_jump+=2; // the following pin for two leds
}
}
DCC.SetBasicAccessoryDecoderPacketHandler(BasicAccDecoderPacket_Handler, true); // instanciate the DCC
DCC.SetupDecoder( 0x00, 0x00, kDCC_INTERRUPT ); // its IT
update_light = false; // no update
#ifdef CONSOLE
Serial.begin(115200);
for (int i=0; i<NB_TRAFFIC_LIGHT; i++){
Serial.print("traffic light");Serial.println(i);
Serial.print("\t green led on pin : ");Serial.print(traffic_light.green);Serial.print(" , DCC address : ");Serial.print(traffic_light.address);Serial.println("/0");
Serial.print("\t red led on pin : ");Serial.print(traffic_light.red);Serial.print(" , DCC address : ");Serial.print(traffic_light.address);Serial.println("/1");
if (NB_TRAFFIC_LIGHT == TRICOLOR) {
Serial.print("\t yellow led on pin : ");Serial.print(traffic_light.yellow);Serial.print(" , DCC address : ");Serial.print(traffic_light.address+1);Serial.println("/0");
}
}
#endif
}
/*************************************************************************
* loop
*
******************************************************************/
void loop() {
DCC.loop(); // Is there a DCC command ?
if (update_light) {activation_traffic_light();} // if yes, activation of traffic lights
}
Quel emplacement ?
Postez nous votre programme modifié.
-
Attention, la facture de msport pour ce support technique particulier va être bien salée ;D >:(
Oui je l'ai dejà remercié plus haut pour la patience dont il fait montre avec moi, mais je dois avouer que cela n'est pas si simple, d'ailleurs je me demande pourquoi vous n'avez pas plutôt fait deux programmes l'un pour les tricolors et l'autre pour les bi avec toutes les mises à jours qui vont bien.
j'en profite pour écrire que j'ai soudé le petit condo de 27pf et que le résultat est surprenant car maintenant je n'ai plus que la led verte qui s'allume mais à condition que les leds rouges soient conecté également .......!
-
Bonsoir,
je crains que votre maitrise des outils informatiques et de l'électronique ne soit pas suffisante pour arriver à bout, seul, de ce montage.
Faites vous aider par quelqu'un qui voit ce que vous faites. A distance, c'est impossible.
En attendant lisez les articles de formation du site éditorial.
L'ajout de ce petit condensateur n'a aucune raison de provoquer ce que vous nous indiquez.
C'est que votre montage n'est pas fiable et que probablement vous avez fait un pont de soudure ailleurs ...
Par ailleurs, vous n'auriez pas du mettre la copie du programme dans la citation, les crochets sont supprimés. ( ligne 172 )
Il faut le mettre en code balise : #
Ou mieux le mettre en fichier joint.
-
Bonjour, je comprends que la réflexion de Dominique vous ai agacé et que vous renonciez à m'aider .... Certes mes connaissances en électronique sont loin d'être au top, mais je manie le fer à souder depuis l'âge de 12 ans et j'en ai 60, j'estime avoir un peu d'expérience, mes soudures sont propres et lorsqu'il m'arrive d'en avoir une sèche je la corrige.
Pour mes connaissances en informatique et l'usage de l'Arduino, là non plus je ne prétends pas être au top, j'ai découvert ce produit il y a peu de temps mais j'ai réalisé un fonctionnement de pont tournant, le fonctionnement d'un rotary dumper, et le fonctionnement d'un passage à niveau double voies à l'aide de sensor GP2YoD805Z0f parfaitement fonctionnel et réaliste. J'ai voulu passer à l'étape supérieur en réalisant un montage électronique complet et en réalisant pour la première fois de ma vie le circuit imprimé artisanalement. Là je dois dire que la réussite n'y était pas, j'ai donc opté pour votre solution, le faire imprimer chez JLCPCB.
Vous avez essayé de m'aider et je vous en remercie encore.
Mais à votre place, et pour éviter de perdre le temps que vous avez perdu avec moi, et qui à priori ne servira pas aux autres internautes, vous devriez refaire tout ce post avec les circuits qui vont biens et les programmes tricolores et bicolores bien séparé avec quelques options comme pour le fonctionnement avec CDM rail par exemple, et téléchargeable, le détail exacte des composants. Car actuellement tout cela est un peu brouillon et peu conviviale.
Je vais donc essayer de me débrouiller seul avec ce truc qui ne fonctionne pas. En espérant obtenir un résultat quitte à réécrire tout le code. Car le temps passé et les sous investis en vale la peine.
cordialement >:( ::) :-[ :-\
-
Je ne pense pas que "la réflexion de Dominique" ait pu agacer msport mais je comprends qu'elle ait pu vous agacer, et je tente de comprendre ce qui se passe pour éviter de voir cela à nouveau.
Je suis désolé que cette réalisation se termine, pour le moment, par un échec. "Echouer c'est toujours apprendre" si on trouve ses erreurs et qu'on ne les refait pas par la suite.
Mais je ne suis pas certain que le fait de refaire le circuit chez JLCPCB ne suffira pas car il y a, dans tous projets, une série d'étapes à franchir après avoir validé l'étape précédente :
Le schéma d'abord doit être finalisé : je n'ai vu nulle part dans votre fil le schéma définitif utilisé et les explications du pourquoi du comment vous êtes parti de quoi...
On voit bien que vous êtes parti de l'article de JP Claudé (https://www.locoduino.org/spip.php?article161 (https://www.locoduino.org/spip.php?article161)) qui a été consulté environ 7500 fois et beaucoup de modélistes ont réalisé ce montage, moi-même y compris, avec succès, y compris avec comandes par Traincontroler.
Donc ça marche et il faudrait rechercher les différences à la fois dans le matériel et ensuite dans le logiciel.
Beaucoup de modélistes passent énormément de temps à lire les articles et les contributions du forum, et ensuite, ensuite seulement, réalisent, échouent, recommencent jusqu'à la réussite, puis, le plus souvent quand c'est fini et testé, partagent leur expérience au profit des autres modélistes.
Vous avez pu profiter de cette énorme masse de contributions pour préparer votre projet, mais je n'ai pas vu vos efforts pour adapter ces connaissances à votre projet. Au lieu de cela, au fur et à mesure, chaque problème s'est étalé sur le forum (et avec force détails !), au risque de provoquer la risée d'autres modélistes ...
Bien entendu je comprends que vos connaissences en électronique et programmation aient pu vous manquer, mais là encore, il faut avoir la patience de les acquérir, même si cela prend du temps et réaliser des montages intermédiaires n'est pas un crime : Quand vous aurez réalisé tout ce que j'ai réalisé pour mon compte personnel et surtout pour rendre service à la communauté Locoduino ainsi qu'à mon club ferroviaire, on en reparlera tous les deux tranquillement, entre quatre yeux si vous voulez :D :D :D
Le nec plus ultra serait que vous décriviez cette réalisation dans un post ad hoc, celui que vous auriez souhaité trouver pour réaliser votre projet ;D
refaire tout ce post avec les circuits qui vont biens et les programmes tricolores et bicolores bien séparé avec quelques options comme pour le fonctionnement avec CDM rail par exemple, et téléchargeable, le détail exacte des composants
(je vous laisse mettre le "s" à la bonne place >:()
-
Bonjour Dominique, je comprends que mes réflexions de néophyte agace et encombre inutilement le forum d’un sachant comme vous. Mais justement, jusqu’à présent ce que j’ai réalisé pour mon train électrique (déjà cité) ou pour ma maison dans le domaine de la domotique, centralisation de l’ouverture et fermeture de mes volets roulant et l’automatisation de mon portail le tout à base d’Arduino, avec l’unique aide de tuto sur youtube. Je pensai qu’avec locoduino j’allais intégrer une communauté d’entre aide, et j’y ai vraiment cru avec la patience de msport, et votre réflexion, a vraiment tout gâché, j’ai l’impression que votre site est réservé à quelques sachant qui cherche à se faire mousser entre eux. A la limite invité un C.. de temps en temps le mardi soir à un diné.
Le schéma d'abord doit être finalisé : je n'ai vu nulle part dans votre fil le schéma définitif utilisé et les explications du pourquoi du comment vous êtes parti de quoi...
Le schema utilisé est celui que j’ai téléchargé sur votre site ou l’emplacement pour souder le 27PF n’existe pas et qui est conçu pour faire fonctionner 5 feux tricolores mais à priori pas 7 feux bicolores.
Sur les 7500 consultations, je serais curieux de savoir combien ont fait aboutir ce projet ?
Beaucoup de modélistes passent énormément de temps à lire les articles et les contributions du forum, et ensuite, ensuite seulement, réalisent, échouent, recommencent jusqu'à la réussite, puis, le plus souvent quand c'est fini et testé, partagent leur expérience au profit des autres modélistes.
Oui je sais ce que c’est, oui je félicite tous ceux qui ont vus leurs projets aboutir, et qui en font profiter la communauté, une fois encore bravo.
Vous avez pu profiter de cette énorme masse de contributions pour préparer votre projet, mais je n'ai pas vu vos efforts pour adapter ces connaissances à votre projet. Au lieu de cela, au fur et à mesure, chaque problème s'est étalé sur le forum (et avec force détails !), au risque de provoquer la risée d'autres modélistes ...
Malheureusement en tant que modérateur, il me semble que vous avez un peu de mal à synthétisé cette énorme masse de contributions, voilà pourquoi plus votre site prends de l’ampleur, plus tout cela devient brouillon et illisible. Vous ne voulez pas suivre les deux ou trois conseils que je vous donne. Dommage car vous y gagneriez en lisibilité plutôt qu’en curiosité.
Cordialement
-
Bonsoir,
J'ai réalisé décodeur dcc pour des signaux tricolore et le programme posté à la première page marche bien pour une exploitation avec cdm rail,
Si vous voulez tester les signaux lors de la configuration il est nécessaire de cocher : "Autoriser le pilotage des signaux" dans options => RUN
attention dans la programmation du signal il faut indiquer le type de décodeur : LDT LS DEC
Merci pour le partage de ce décodeur,
Bonne soirée (et bonne année)
-
Merci pour le retour d'expérience !