La plaque tournante PECO est livrée sans motorisation. L’idée est de motoriser et d’automatiser les déplacements de la plaque. Pour permettre à chacun d’adapter le montage à sa situation, j’ai choisi de mémoriser dans l’EEPROM de l’Arduino la position de chacune des voies, puis de gérer les déplacements de la plaque en fonction des emplacements mémorisés.
Au sommaire :
- 1 Gestion de plaque tournante PECO avec un Arduino Nano
- 1.1 Connecter l’Arduino Nano
- 1.2 Composants
- 1.2.1 Alimentation à découpage
- 1.2.2 Driver A4988
- 1.2.3 DIP Switch x4
- 1.2.4 Carte prototype et borniers à vis
- 1.2.5 Alimentation 5 volts
- 1.2.6 Arduino Nano avec bornier à vis
- 1.2.7
- 1.2.8 Moteur pas à pas NEMA17
- 1.2.9 Fourchette optique
- 1.2.10 Coupleur 5mm/4mm
- 1.2.11 Ecran OLED 0,91 pouce
- 1.2.12 Buzzer
- 1.2.13 Boutons poussoirs
- 1.2.14 Inverseur astable
- 1.2.15 Interrupteur A/M
- 1.2.16 Condensateur
- 1.3 Montage
- 1.4 Conception 3D
- 1.5 Le Programme
- 2 Update du 8 septembre 2022
- 3 Mode d’emploi
- 4 Conclusion
- 5 Sources
Gestion de plaque tournante PECO avec un Arduino Nano
Connecter l’Arduino Nano
Pour réaliser ce montage à base d’Arduino, il serait bon d’avoir quelques bases en Arduino (connexion, programmation avec l’IDE…). Éventuellement reportez vous à l’article de Christophe, paru il y a quelques années sur le blog. On a aussi besoin de savoir souder (voir ici dans les ebook), et ne pas être trop maladroit de ses mains.
Au démarrage l’Arduino Nano fait tourner un programme de test qui fait clignoter la LED interne. Connectez l’Arduino Nano au PC ou au Raspberry Pi. Sur PC aller dans gestionnaire de périphériques
L’Arduino Nano est sur le port COM9. Réglez le type de carte et le port dans le menu Outils. Téléverser un programme vide, le clignotement de la LED s’arrête.
Composants
Après une réflexion et une comparaison entre différents modèles d’Arduino et le Raspberry Pi PICO, j’ai opté pour un Arduino Nano qui dispose du nombre d’Entrées/Sorties suffisant. Voici les composants mis en œuvre dans ce montage. Ils proviennent de chez Amazon et Aliexpress (les liens sont pour certains des liens affiliés). Les prix peuvent varier en fonction du cours du dollar.
Alimentation à découpage
C’est cette alimentation qui sera chargée de fournir l’énergie à l’ensemble du montage. Le moteur consomme au maxi 1A/phase, on ajoute l’Arduino, les LEDs… soit quelques dizaines de mA. J’ai donc opté pour une alimentation 12v capable de fournir 2A. Elle est vendue une dizaine d’euros. L’alimentation possède un potentiomètre de réglage, il faudra vérifier que la tension de sortie est bien réglée à 12V.
Driver A4988
Le driver A4988 va se charger de piloter le déplacement du moteur pas à pas. 3 entrées permettent de programmer le nombre de pas par tour. Il s’alimente en 5v pour la partie logique et ici en 12 volts pour la commande du moteur. Il coûte environ 2€ frais de port compris.
DIP Switch x4
Le DIP switch ce sont simplement 4 petits interrupteurs à glissière. J’en utilise 3 pour paramétrer le nombre de pas du A4988 ci-dessus, il en reste un qui sert à passer de mode programme à mode normal. On peut utiliser ce genre d’interrupteur car on n’y accède que rarement. Ce genre d’interrupteur est vendu ~8€ pour 10 pièces.
Carte prototype et borniers à vis
Pour monter le A4988 et le DIP switch, j’ai opté pour une carte prototype de 7×3 cm. Ça ne valait pas le coup pour un montage unitaire de développer une carte de circuit imprimé (PCB) dédiée. J’ai trouvé un lot de cartes prototypes de diverses dimensions qui me serviront pour d’autres montages, mais vous pouvez trouver ce genre de cartes en plus petites quantités. Le lot de cartes prototypes avec les borniers à vis est vendu 20€.
Alimentation 5 volts
Pour alimenter l’Arduino Nano et la logique du A4988 j’ai opté pour ce modèle d’alimentation à découpage à base de LM2596. Il dispose d’un potentiomètre 10 tours pour un réglage fin de la tension de sortie. Vous règlerez la tension de sortie à 5,1v avant de connecter quoi que ce soit à cette alimentation. Je les ai trouvés à 12€ les 6 modules. Il y a du rab mais ça sert toujours ce genre de petite alim à découpage.
Arduino Nano avec bornier à vis
Pour l’Arduino Nano, vu le nombre de connexions à prévoir, je ne voulais pas me lancer sur du câblage soudé sur une carte prototype. Il existe des borniers à vis qui simplifient le câblage, tout en le sécurisant. De plus les noms des E/S sot rappelés devant chaque borne à vis, ce qui réduit le risque d’erreurs. On trouve l’ensemble autour de 7 euros.
Moteur pas à pas NEMA17
Le moteur NEMA17 est un classique, il comporte 2 bobines et consomme 1A par phase. C’est le modèle « galette » peu épais et avec un couple réduit mais largement suffisant pour faire tourner la plaque tournante PECO même avec moins de 1A sur chaque bobine. On le trouve pour 13€ environ.
Fourchette optique
La fourchette optique est chargée de détecter le passage de la languette entrainée par le moteur pas à pas. Cela permet de fixer (arbitrairement) une position ZERO qui servira de référence par la suite. Cette fourchette sert à chaque démarrage et je l’utilise aussi en fonctionnement normal car le faisceau ne doit pas être coupé sinon ça provoque l’arrêt et la mise en sécurité (voir plus loin). Ce modèle est fourni avec le câble et coûte 7€ les 5 capteurs. C’est un modèle qui est utilisé sur des imprimantes 3D.
Coupleur 5mm/4mm
Comme je voulais quelque chose de propre, j’ai opté pour un coupleur en laiton (oui, je sais j’aurais pu l’imprimer en 3D…) mais ça fait quand même plus professionnel, non ? Côté moteur NEMA17 on a un trou de 5mm et un blocage par vis pointeau. Côté plaque tournante on a un trou de 4mm qu’il faudra peut être ajuster un peu car l’axe de la PECO fait 4,1mm… On sortira la lime 😉 Le lot de coupleurs coûte 8€ (indisponible au moment où j’écris ces lignes).
Ecran OLED 0,91 pouce
Ceux qui me suivent savent que j’aime les LEDs. On peut apprendre plein de choses avec un CPU, un MCU, une LED et un bouton poussoir. Pareil avec ce petit écran facile à mettre en œuvre et qui se prend en main rapidement. Il ne coûte que 8€ les 2 pièces.
Buzzer
« Faites du bruit… » c’est le rôle du buzzer, parfois même un peu trop bruyant ! Pour les tests j’ai du mettre un ruban adhésif sur le trou du buzzer pour atténuer le bruit, suite aux plaintes de mon entourage 😆 Ce module est vendu 8€ pour les 5 pièces.
Boutons poussoirs
J’avais commandé ces boutons poussoirs pour un autre projet, comme il m’en restait je les ai utilisés ici. Ils sont munis de fils que j’ai dessoudés pour utiliser les boutons poussoirs sur le tableau de commande. Ils sont vendus par 14 au prix de 9,5€.
Inverseur astable
Cet interrupteur est « astable », il revient au milieu après qu’on ait appuyé vers la droite ou la gauche (ou le haut et le bas si vous le montez verticalement 🙂 ). Je l’utilise pour déplacer le plateau dans un sens ou dans l’autre lors de la programmation. Les 5 interrupteurs sont vendus 5€.
Interrupteur A/M
Celui-ci c’est l’interrupteur Arrêt/Marche. J’ai utilisé ce modèle que j’avais en stock, il a une position centrale stable et deux positions latérales stables également. Il permet en laissant la tige au centre de n’alimenter aucune sortie. Il vaut 9€ pour les 12 pièces.
Condensateur
Le condensateur est chargé de supprimer les impulsions électriques transitoires générées par la commutation du driver A4988 sur les bobines du moteur pas à pas. Il est fortement conseillé par le fabricant du driver. Ici j’ai doublé le condensateur. On n’est jamais trop prudent. Le condensateur vaut 1€ pièce, vendu par lot de 5.
Montage
La carte principale
Schéma
La carte est basée sur un Arduino Nano. Comme de nombreux microcontrôleurs, les broches de celui-ci peuvent avoir plusieurs fonctions sélectionnables par programme. La sortie D13 est connectée à la LED interne, il faut éviter de l’utiliser si possible. Les entrées analogiques peuvent être utilisées en mode numérique (0/1) sauf ADC6 et ADC7 qui ne peuvent être que des entrées an logiques.
A gauche on trouve la fourchette optique, dont la coupure du faisceau infra rouge provoque une interruption sur l’Arduino. Le programme principal s’arrête et l’Arduino exécute l’interruption qui doit être un programme court. Ici on met juste un flag (drapeau) à 1 pour signaler qu’il y a eu une interruption.
Le cœur de la carte est bien entendu l’Arduino Nano qui pilote l’écran OLED via le bus I2C. Il commande aussi le driver de moteur pas à pas A4988 en lui envoyant une information de direction (sens horaire/anti-horaire) et des impulsions pour le faire avancer d’un pas par impulsion. C’est lui qui pilote les LED situées au dessus des boutons poussoirs (BP) et la LED LOCK qui indique soit la mise en mémoire d’une valeur (flash) soit une erreur et le verrouillage du programme (LOCK allumé en continu = moteur arrêté). Il pilote également le buzzer que j’utilise pour certaines opérations, comme l’initialisation ou l’enregistrement des données en mémoire. Il sert à confirmer que l’opération s’est bien passée.
DIP Switch
Le A4988 est connecté à un DIP Switch (ci-dessus). Les interrupteurs 1,2 et 3 sont reliés aux entrées MS1 à MS3 du driver. Les pattes sont tirées à la masse par une résistance de pull-down, ce qui fait que si on laisse MS1 à MS3 en l’air, on est dans le cas OFF/OFF/OFF et qu’il y a 200 pas par tour. Si le switch est sur ON, il envoie du +5v (un 1) sur l’entrée correspondante. Dans le cas présent j’ai réglé le switch sur 1/8 de pas ce qui fait 1600 pas par tour et une précision de 360/1600 = 0.225° par pas.
Moteur Pas à Pas
Le moteur pas à pas est un modèle « galette » peu épais mais suffisant pour cette application. Sa fiche technique ci-dessus vous donne une idée de ses caractéristiques.
C’est un NEMA17, l’axe de sortie mesure 5mm avec un méplat pour bloquer la poulie ou le coupleur. c’est sur cette partie plate que j’ai serré la vis pointeau et que la languette utilisée pour couper la fourchette optique est bloquée. La languette imprimée en 3D ne rentre pas sur l’axe il faut limer un peu le PLA pour l’adapter le plus exactement possible (pas de jeu qui décalerai le zéro !).
Driver A4988
Les 4 broches du A4988 situées en haut à droite sont reliées au moteur pas à pas, les couleurs correspondent aux couleurs des fils du moteur. L’alimentation du moteur se fait en 12 volts (le driver A4988 nécessite de 8 à 35 volts pour fonctionner). Vous pouvez consulter la notice du A4988 en cliquant sur ce lien. Le potentiomètre permet de régler le courant qui circule dans les fils du moteur PAP. La formule permettant de calculer le corant en fonction de la tension mesurée sur le curseur du potentiomètre est à ajuster en fonction des résistances shunt montées sur la carte. Sur ma carte ce sont de 0,1Ω. La formule est
VREF = 8 x Imax x RCS voir ici pour plus de détails. VREF est la tension sur le curseur du potentiomètre, Imax le courant maxi que vous autorisez dans le moteur PAP et RCS la résistance de shunt montée sur la carte. Si vous mettez trop de courant, comme le moteur est maintenu en position à l’arrêt, il va chauffer. C’est normal qu’il chauffe mais si le courant est trop fort… il devient vraiment brulant. Si vous réglez le courant trop bas, le moteur risque de perdre des pas pendant sa rotation. A vous de faire au mieux.
Le switch 4 est lu seulement au lancement du programme. s’il est sur ON, le logiciel passe en MODE PROGRAMME qui permet d’enregistrer dans la mémoire de l’Arduino les positions des voies. Sur cette réalisation il y a 4 voies mais il est très facile d’étendre le programme avec un grand nombre de voies.
L’alimentation 5 volts reçoit en entrée le 12 volts de l’alimentation à découpage et le transforme en 5 volts pour alimenter l’Arduino et la logique du driver A4988.
Photos
J’ai réalisé une plaque imprimée en 3D pour supporter l’ensemble de la carte de commande. A gauche l’alimentation à découpage, au centre la carte du driver A4988 et à droite l’Arduino Nano monté sur sa carte de borniers à vis.
La carte d’alimentation 5 volts est logée SOUS la carte du driver A4988. En raison de la proximité des deux cartes, j’ai ajouté un intercalaire d’isolation imprimé en 3D.
Le moteur et sa remise à zéro
Le moteur pas à pas est un NEMA17 à 4 fils (2 bobines). Au démarrage du programme (en mode NORMAL ou en mode PROGRAM), le moteur tourne rapidement dans le sens inverse des aiguilles d’une montre (oui, je sais il n’y a plus beaucoup de montres avec des aiguilles 🙁 ), disons vers la gauche… Lorsque la languette coupe le faisceau infrarouge (IR) une interruption est déclenchée et le moteur s’arrête. Pour confirmer de façon certaine la position zéro, le moteur repart vers la droite (sens horaire) sur une faible distance, juste pour libérer le faisceau IR. Il ramène alors la languette très lentement jusqu’à ce qu’elle coupe le faisceau IR. C’est cette position qui est appelée 0 (zéro) et sert ensuite de référence. Vous observerez le même système de prise de zéro sur de nombreuses machines de makers et industrielles (découpe laser, impression 3D…).
Sur cette vue dessus, on voit les trois « pieds » destinés à assurer la fixation de ce module sur la plaque tournante PECO. La pièce en laiton montée sur l’axe du moteur est le coupleur.
Le panneau de commande
Schéma
Le schéma de cette partie est relativement simple. A gauche l’interrupteur A/M qui coupe le secteur. Lors du câblage pensez à bien isoler et protéger ces connexions car le 230v peut être mortel par simple contact. Soignez les soudures et protégez les (gaine thermorétractable, ruban adhésif d’électricien…).
On trouve ensuite 2 LEDs qui indiquent la présence du 12v et du 5v. Cela permet de contrôler le fonctionnement des alimentations et de détecter une panne. La LED Lock indique le verrouillage du moteur en cas d’erreur. C’est une boucle infinie et il faut obligatoirement éteindre l’ensemble pur reprendre la main. Les 5 LEDs rouges sont situées au dessus des BP et s’allument le temps de la rotation du moteur pour rejoindre une voie. Le buzzer permet de vérifier auditivement le bon déroulement des opérations.
L’inverseur G/D est astable, c’est à dire qu’il revient en position médiane quand on le relâche. Il sert à déplacer le moteur dans un sens ou dans l’autre pour amener le rail du plateau tournant en face des rails de l’installation.
Lecture des boutons poussoirs
L’Arduino Nano a pas mal d’Entrées/Sorties mais c’est un peu juste quand même quand il faut lire plusieurs boutons poussoirs, comme les 5 BP de ce montage. On a la possibilité de lire les BP dans une matrice, comme sur les claviers mais ce n’est pas intéressant ici avec juste 5 boutons il faudrait 3 lignes et 2 colonnes pour un maximum de 6 touches. Soit dans notre cas 5 fils… Pour 5 boutons ! Avantage nul 😀
Deuxième solution, celle que j’ai retenue ici, utiliser une entrée analogique et générer une tension avec les BP. Cela permet de lire les 5 BP avec une seule entrée. Inconvénient (bin oui, il y en a toujours!)on ne peut lire QU’UN bouton à la fois alors que la matrice permet de lire des combinaisons de touches. Par exemple regardez ce qui se passe si on appuie sur BP5 et BP1 en même temps… Vous court-circuitez les 4 résistances du milieu et vous envoyez du 2,5v sur A7. L’Arduino pense (enfin, il ne pense rien, c’est votre programme qui pense hein !) que vous avez appuyé sur le bouton 3…
Bon, on regarde comment ça marche ?
L’entrée A7 accepte une tension continue entre 0 et 5 volts et la mesure grâce à un ADC qui convertit la tension en valeur numérique. O volt correspond à … Zéro et 5 volts donnera une valeur de 1024. Si vous n’appuyez sur aucun BP, A7 est reliée à la masse par la 100K et renvoie le chiffre 0. Ensuite j’ai fait un pont diviseur avec des résistances de 1K (j’ai pris cette valeur parce que j’en avais plein). J’ai mis a coté de chaque fil la tension qui est récupérée, et la valeur numérique qui sortira du convertisseur ADC. Par exemple 2,5 volts donne 512… La moitié de la tension donne la moitié du nombre maxi (1024). On est pas mal, là…
Et surprise (enfin non) comme tous mes pas sont égaux et multiples de 170, si je divise par 170, j’obtiens… Le numéro du bouton poussoir ! Fastoche, non ?
Donc lorsque j’appuie sur un bouton, la tension sur A7 devient différente de Zéro volt, le convertisseur ADC sort un nombre que le programme récupère. Le programme divise le nombre par 170 (avec un arrondi parce que les valeurs fluctuent un peu) et bingo, on récupère le numéro du BP appuyé.
Photo
Pour la face avant j’ai imprimé cette plaque. Les noms sont en relief mais je les ai doublés en bleu pour que vous localisiez tout ça.
Conception 3D
Les éléments du montage : support moteur, languette optique, face avant, isolant… Sont disponible sur Thingiverse. C’est modélisé avec Fusion 360, je mets les fichiers STL en ligne mais les fichiers archive de Fusion 360 sont disponibles si vous le souhaitez.
Ci-dessus quelques étapes de la modélisation et de la réalisation des objets 3D.
Le Programme
Le programme comporte 2 parties : un mode PROGRAM (quand le switch program est ON) et un mode NORMAL.
En mode PROGRAM on cale la position du plateau avec l’inverseur D/G. Pour affiner le réglage, on appuie en même temps sur le BP 1/2T et le moteur passe en vitesse très lente pour permettre d’ajuster la position. On valide quand c’est bon, par le bouton poussoir VOIE1, VOIE2, VOIE3 ou VOIE4. La valeur est mémorisée dans l’EEPROM de l’Arduino et sera toujours présente au prochain démarrage de la machine.
En mode NORMAL, le moteur fait sa prise de ZERO (indiqué R.A.Z. sur l’écran) et va se positionner sur la voie 1. Le BP 1/2T permet de faire un demi tour pour retourner la locomotive, les boutons V1 à V4 envoient le plateau sur la voie correspondante. Le plateau ne coupe pas le faisceau IR de la fourchette pour éviter d’enrouler (casser ?) le fil qui alimente les rails du plateau. Si le faisceau est coupé le programme s’arrête et l’écran affiche ERREUR.
J’ai essayé de commenter au maximum le programme pour le rendre compréhensible. Après ce n’est pas un programme de développeur. C’est un programme de maker. Il fait ce pour quoi il est écrit, mais n’est certainement ni optimisé, ni parfait. J’accepterai toutes les critiques, à condition que celui qui critique… améliore le programme en fonction de ses remarque, et le remette à disposition de la communauté 😀
Le programme est disponible sur Github et vous pouvez le télécharger librement. Je n’ai pas encore le plateau et il y aura à coup sûr des modifications qui seront mises en ligne au fur et à mesure.
Exemple de fonction : Allumer une LED
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Allume LED BP //============== // Allume la LED correspondant à un BP appuyé void allume_LED_BP(int bp) { if (bp == 1) { digitalWrite(LED_1_2_T, HIGH); } if (bp == 2) { digitalWrite(LED_VOIE1, HIGH); } if (bp == 3) { digitalWrite(LED_VOIE2, HIGH); } if (bp == 4) { digitalWrite(LED_VOIE3, HIGH); } if (bp == 5) { digitalWrite(LED_VOIE4, HIGH); } } |
Cette fonction allume la LED correspondant à un bouton poussoir appuyé. Elle ne retourne aucune valeur et reçoit en entrée le numéro du BP appuyé. Le programme allume la LED correspondante en fonction du BP.
Exemple de fonction : Avancer d’un pas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Fonction pour faire avancer le moteur pas à pas d'un pas // ======================================================== int unPas(int v, String direction) { if (direction == "CW") { digitalWrite(dirPin, HIGH); position += 1; } if (direction == "CCW") { digitalWrite(dirPin, LOW); position -= 1; } digitalWrite(stepPin, HIGH); delayMicroseconds(v); digitalWrite(stepPin, LOW); delayMicroseconds(v); } |
Cette fonction fait avancer le moteur pas à pas d’un pas. Elle reçoit en paramètre v qui est une durée en microsecondes. Ce temps appliqué à la durée du pulse STEP en fin de fonction donne la vitesse de rotation. Plus la durée est longue, moins le moteur tourne vite. En fonction du paramètre direction qui est une chaîne de caractères (CW ou CCW : sens horaire ou anti-horaire) la fonction positionne la sortie dirPin pour commander la direction de déplacement.
Enfin la fonction incrémente ou décrémente le compteur de position (une variable globale) qui permet au programme de toujours savoir où se trouve le plateau.
L’ensemble du programme est construit avec cette idée d’utiliser des fonctions simples. J’ai essayé de commenter au mieux pour faciliter la compréhension.
Update du 8 septembre 2022
Alors que je termine l’écriture de cet article, le passionné de train miniature m’a amené le pont tournant pour qu’on regarde ensemble l’adaptation et le montage. Ayant pu voir la plaque, il apparait qu’elle est dotée d’un contact tournant.
Sur photos j’avais vu un fil et écrit le programme en supposant qu’il fallait limiter la rotation. Mes limitations de rotation n’ont pas lieu d’être dans ce cas mais pour certains qui réaliseront leur plaque tournante en 3D, ce sera nécessaire.
La plaque tournante a été peinte couleur béton pour s’insérer dans le décor. Le module destiné à la recevoir est en cours de réalisation. Il existe 3 grilles d’égout qui ont servi à fixer un support sous la plaque. Les têtes de vis seront cachées par des grilles.
C’est à ce niveau qu’il faudra de la précision de positionnement pour que le rail de la plaque s’aligne avec le rail extérieur. Le diamètre est de 305 mm et la précision de positionnement de 0,225° soit 0,6 mm pour chaque pas. On verra aux essais si c’est suffisant.
Sous la plaque, un support et un axe mécano pour permettre de monter le coupleur.
Vidéo
Mode d’emploi
Pour ceux qui sont intéressés vous pouvez télécharger le mode d’emploi du programme en cliquant sur ce lien.
Conclusion
Une réalisation qui m’a mobilisé une partie des vacances. J’avais un cahier des charges et une idée de ce qu’il fallait faire mais pas le pont tournant ni la façon réelle dont ça va fonctionner. Cette version va sans doute être remaniée mais elle constitue la base de la réalisation finale. Le projet fait toucher un peu à tout, Arduino, électronique, programmation, conception et impression 3D… un régal pour un maker !
Je mettrai à jour le github avec les modifications qui seront apportée au fur et à mesure et une vidéo du projet final en place.
Sources
Merci aux makers qui ont défriché ces domaines et ont publié leurs réalisations.
Programme sur Github : https://github.com/framboise314/Plaque-tournante-PECO
Fichiers 3D sur Printables : https://www.printables.com/model/272595-programme-peco
Installer la bibliothèque pour l’écran : https://idehack.com/comment-utiliser-un-ecran-oled-i2c-avec-arduino/
Interruptions en Arduino : https://rascolsin.fr/psti2d/arduino/07-interruptions/
Écrire dans l’EEPROM : https://passionelectronique.fr/eeprom-arduino-lire-ecrire/
Transformer une image BMP pour Arduino : http://javl.github.io/image2cpp/
Motorisation PECO : https://www.modelisme-ferroviaire-rouen.fr/pratique-et-tutoriels/arduino-modelisme-ferroviaire/pont-tournant-peco-arduino/
Bonjour ,
Sinon , pour lire l’état de plusieurs boutons à la fois de façon synchrone , on peut utiliser un registre a décalage à entrées parallèle et sortie série . On peut si besoin en mettre plusieurs en cascade pour lire beaucoup plus d’entrées et protéger le RPi / micro-contrôleur . Ex: le CD4021 / 74HC165
https://www.fabriqueurs.com/le-registre-a-decalage-piso/
Il en existe aussi pour décupler le nombre de sorties . Entrée série , sorties parallèle . Ex 74HC595
bonjour
effectivement !
merci 🙂
Re …
Comme c’est câblé , la 100K se retrouve en parallèle avec des groupes de 1K , ce qui fausse la valeur trouvé à vide (sans appuis sur les boutons) . J’ai calculé comme valeurs :
Btn5 = 5 * 4762 / (4762 + 1000) = 4,13V
Btn4 = 5 * 3846 / (3846 + 2000) = 3.29V
Btn3 = 5 * 2912 / (2912 + 3000) = 2,46V
Btn2 = 5 * 1961 / (1961 + 4000) = 1,64V
Btn1 = 5 * 990 / (990 + 5000) = 0,82V
Il aurait été plus simple de mettre les résistances 1K sur l’entrée A7 et relier tous les poussoir au +5V . la 100K disparait . On aurait alors les tensions indiqués à vide car pas de résistances en parallèle .
Si pas d’appuis , A7 est polarisée à la masse au travers des 1K .
Bonjour
Au départ je n’avais pas mis la 100K. La patte A7 était en l’air. Quand on appuyait sur un BP la tension arrivait bien sur l’entrée analogique. J’ai eu quelques déclenchements intempestifs. J’ai relié A7 à la masse par la 100K, j’aurais pu je pense la relier au +5 aussi… L’idée est de fixer la tension à vide pour ne pas ramasser des parasites. Après je n’ai pas l’habitude de sodomiser les diptères et une résistance de 100K par rapport à 1K … l’influence est négligeable. Je suis un (très) vieil électronicien (j’ai commencé avec les tubes et les transistors au germanium) et j’ai l’habitude de faire ce genre de choses un peu à la louche, pourvu que ça marche…
cdt
francois
Une valeur supérieur à 100K (1M ou plus) donne une R équivalente moins éloigné et fausse moins la tension lu à vide .
je sais mais j’avais ça sous la main 😛
j’ai connu les mesures avec des appareils à aiguille (au siècle dernier)
qui avaient une « faible » résistance, je sais bien ce que ça fait de mettre une résistance en parallèle
mais si ça marche, et que c’est le bon numéro de bouton poussoir qui ressort, ce n’est pas grave…
En donnant une fenêtre (mini-maxi) pour chaque bouton , pas besoin d’avoir une valeur exacte .
Zut , ça va pas , j’ai parlé trop vite .
Pour faire l’idée avec les poussoirs au +5V , il faudrait une résistance de référence à la masse et recalculer les résistances à associer à celle-ci pour avoir un pas de progression équivalent .
R1 = (U * R2 / U2 ) – R2
U = 5V
R2 = résistance de référence à la masse
U2 = tension que l’on souhaite mesurer sur A7
Vouiii je comprends votre souci de précision
mais soyons clair
J ai été prof d’electronique
Je connais tout ça
j’ai formé des centaines de techniciens en électronique… les amplis a transistor, les ampli op, la logique ttl et cmos tout ca tout ca
Les cos phi les nombres complexes et les matrices j’en ai mangé pendant des années
Maintenant je suis retraité et maker
Ce qui m’importe ce n’est pas de couper les cheveux en 4 pour que ca marche. Et si ca marche avec mes calculs a la louche ca me convient 😄
Si la precision est de 10% et que ca fonctionne je suis content et mon beau frere ne se posera pas de questions.
Il appuie sur le bouton 1, la plaque va sur la voie 1… c’est parfait pour lui
Vos commentaires guideront ceux qui veulent affiner et apprendre et je vous en remercie.
Pour ma part, je me contenterai de ce montage 😉
Cdt
Francois
Vouiii je comprends votre souci de précision
mais soyons clair
J ai été prof d’electronique
Je connais tout ça
j’ai formé des centaines de techniciens en électronique… les amplis a transistor, les ampli op, la logique ttl et cmos tout ca tout ca
Les cos phi les nombres complexes et les matrices j’en ai mangé pendant des années
Maintenant je suis retraité et maker
Ce qui m’importe ce n’est pas de couper les cheveux en 4 pour que ca marche. Et si ca marche avec mes calculs a la louche ca me convient 😄 l’arrondi fait le job
Si la precision est de 10% et que ca fonctionne je suis content et mon beau frere ne se posera pas de questions.
Il appuie sur le bouton 1, la plaque va sur la voie 1… c’est parfait pour lui
Vos commentaires guideront ceux qui veulent affiner et apprendre et je vous en remercie.
Pour ma part, je me contenterai de ce montage 😉
Cdt
Francois
Bonjour , félicitation pour cette réalisation. Je suis électronicien et modéliste, et je trouve que l’approche est bonne. J’aurai personnellement utilisé plutôt un codeur incrémental avec BP intégré pour effectuer le réglage, et permettre des ajustements fins (niveau d’éclairage des voyants, vitesse de rotation du pont tournant (le critère le plus important pour un modéliste, après la précision d’alignement des voies), et afinage des positions. On tourne à droite ou à gauche, et un appui permet la sauvegarde. J’ai utilisé avec bonheur ce composant sur ma centrale maison DCC pour faire ce type d’action en plus de la définition de la consigne de la vitesse de roulement, c’est pourquoi je me permets de vous communiquer cette idée d’amélioration de l’ergonomie. Il est disponible sur les bons sites chinois prêt à l’emploi pour 3 x rien. Mais déjà ainsi, votre beau frère doit être ravi du résultat. L’idée du moteur pas à pas et de démultiplier les crans est très intéressante en ce sens qu’elle permet d’éviter la présence de capteurs hall ou ILS à chaque position.
Bonjour
Merci pour le retour
Oui j ai voulu rester simple on réglera la vitesse via une variable
Pour le moment il travaille sur le module on fera l’intégration quand il sera prêt
Bonjour François
Quelle belle réalisation ! merci pour ce travail bien documenté et parfaitement bien expliqué.
Je cherchais justement à faire ce type de motorisation avec mon fils pour un pont tournant, cet article tombe à point nommé.
Je n’ai pas trouvé de mise à jour ou modifications ou évolutions de votre projet depuis septembre (ou alors j’ai pas bien cherché) est-ce la dernière version ?
J’aurai également voulu savoir si vous aviez prévu de gérer la polarité de la voie du pont ? si il y a un contact tournant, lorsque l’on effectue 180° de rotation, la polarité se retrouve inversée par rapport au rail d’entré, il faut donc prévoir un inverseur manuel ou piloté par Arduino ?
Merci encore pour votre présentation
Yann (Grenoble)
Bonjour Yann
non le projet n a pas évolué car mon beau frère a des occupations qui l ont éloigné du train
et le module est installé sur son réseau
il y des vibrations au démarrage mais je n ai pas encore pu aller voir ce qui se passe
on n’a pas regardé pour la polarité car il est équipé en numérique…
désolé
cdt
francois
Bonsoir François
Merci pour votre retour, si vous faites des modifications et/ou améliorations, suite notamment au PB de vibrations, pouvez vous me tenir au courant ?
Concernant les PB de polarité, en numérique ou analogique cela ne change rien, si la polarité est inversée il va y avoir un beau CC au passage de la loco du pont vers le rail d’entrée 😉
Bien cordialement
Yann
Bonjour,
Questions à 5fr
J’ai mis une résistance de 2,2k à la borne 4 du dip switch. Est ce OK pour vous?
Ne faut il pas alimenter le A4988 en permanence avec le 5V (logic) à sa borne Vdd
Merci d’avance,
Jean-Luc
bonjour
pour la résistance je ne sais plus, mais 1K ou 2K ça doit fonctionner.
et vous avez raison il manque un fil entre la sortie 5v de l’alim et le fil 5v qui va du A4988 au DIP switch
cdt
francois
Bonjour,
Merci pour cette réponse RAPIDE.
J’ai fini le HW et j’attaque le SW cette semaine.
Je vous tiens au courant si vous le voulez.
Bien à vous,
Jean-Luc
merci et OUI, avec plaisir !
sur FB Hervé décrit une rotonde très complète : https://www.facebook.com/herve.mazelin
cdt
francois
Merci pour le lien.
TRES intéressant, j’attend la suite avec impatience
Tout son site est passionant!!!
Bonjour,
Système fonctionne.
Message d’erreur apparait de temps en temps. A voir.
Moteur TRES chaud, même en ajustant le I sur l’A4888.
Je souhaite intégrer une fonction « motor enable » et « motor idle » dans le « loop » (avec l’entrée A2 du Nano). Mais ou l’intégrer?
Une idée?
Merci
Bonjour Jean Luc
J ai le meme échauffement
Le choix de maintenir le moteur vient du fait que si on coupe l’alimentation, le moteur n est plus maintenu et peut tourner librement donc se decaler. Par la suite l’ alignement n est plus bon ..
Cdt
Francois
Exact… matière à réfléchir.
Laisser « chauffer » le moteur constamment n’est pas non plus la solution la plus sure au point de vue incendie.
J’ai un printer 3D et les moteurs ne chauffent pas autant même après des heures de fonctionnement. Mais je n’ai pas de schéma
Avant tout je vais essayer de trouver d’ou vient le message ERREUR.
Merci pour la réponse.
A+
Jean-Luc