Suite et fin du pont tournant Arduino.
Faute de pont à motoriser, j'ai fait un "démonstrateur" pour mettre mon code au point car forcément entre la théorie qui marche à tous les coups et la pratique, il y a quelques différences.

A commencer par l'encodeur KY-40 que j'avais prévu de lire avec des interruptions mais qui s'est révélé capricieux avec des rebonds intempestifs et je suis passé à une scrutation dans le loop, moins réactive mais plus stable.
Le mieux est souvent l’ennemi du bien.
Ce que je présente ici peut servir à motoriser n’importe quel pont : il suffit de pouvoir solidariser la partie tournante avec la couronne de 110 dents et de fixer le moteur et son engrenage à côté.
La couronne de 110 dents peut aussi être agrandie ou diminuée si besoin mais une bonne démultiplication augmente la précision et aussi le couple fourni par le moteur. Sachant que ces moteurs Nema 17 sont très puissants et même avec une loco Lematec de 10 kg il tournera sans problème.
Le principe de fonctionnement est simple :
- on définit un point de référence : le zéro
- tous les déplacements sont comptés en nombre de pas depuis cette position zéro. Donc chaque voie à une position comptée en nombre de pas. Le moteur se repositionne ensuite sur cette position avec une grande précision.
- les positions des voies sont enregistrées dans l’Eprom de l’Arduino
- la dernière bonne position atteinte est aussi enregistrée ainsi à l’allumage, le pont lit cette position et sait exactement où il se trouve ce qui évite d’avoir à faire un calibrage à chaque fois.
- le nombre de voies est codé « en dur » dans le code car je n’ai pas voulu m’embêter avec des fonctions d’ajout/insertion/suppression de voies et généralement, on ne modifie pas le nombre de voies tous les matins.
Si on voulait commander le pont avec un logiciel de train et on aurait juste à assigner une adresse à chaque position de voie avec un décodage par la bibliothèque DCC_Decoder. Mais comme ce n’est pas du tout mon truc, j’ai laissé ça de côté. Mais c’est facile à greffer sur le code de base.
Le dessus
IMG_20260705_172127.jpg
Le dessous
IMG_20260705_172139.jpg
La face avant du boitier de commande
IMG_20260629_155313.jpg
IMG_20260629_161457.jpg
L'intérieur du boitier de commande
IMG_20260705_090443.jpg
Pour le boitier de commande, j’ai utilisé un écran LCD rétroéclairé de 4 lignes de 20 caractères mais on aurait aussi pu utiliser un écran OLED. Il est piloté en I2C ce qui permet de n’avoir que deux fils de liaison vers l’Arduino.
Les voies sont choisies avec un encodeur KY-40 et il y a 4 boutons pour les réglages manuels avec deux vitesses de déplacement : rotation dans le sens horaire ou anti-horaire à vitesse lente ou rapide.
Et un bouton d’arrêt d’urgence qui se verrouille en position ouverte lorsqu’on a appuyé dessus.
Un calibrage est fait automatiquement après un arrêt d’urgence puisque la dernière position n’a pas pu être enregistrée dans l’Eprom.
L’interrupteur marche arrêt coupe le 5V et donc aussi le 12V grâce au relais de la platine du driver.
L’alimentation 5V et 12V se fait à cet endroit.
Le moteur Nema 17
IMG_20260705_090355.jpg
L’Arduino Mega qui permet de disposer de suffisamment de broches et de s’adapter à une évolution future.
IMG_20260705_090405.jpg
La platine du driver avec l’arrivée du 12V sur une prise cinch
IMG_20260705_090448.jpg
Le 5V sur des bandes de cuivre autocollantes où on peut venir se brancher par simple soudure.
IMG_20260705_090519.jpg
Les relais qui mettent le courant sur les voies
IMG_20260705_090325.jpg
Pour la détection du point zéro, j’avais prévu un capteur IR mais j’ai mis un capteur à effet Hall plus facile à installer et qui s’avère suffisamment précis.
Attention à le mettre à l’opposé du moteur car je me suis rendu compte qu’il dégageait un champ magnétique assez fort, suffisamment pour faire tourner l’aimant sur lui-même quand il n’est pas collé.
De même il faut que ce soit le côté Sud qui soit en face du capteur.
Le capteur envoie un état bas sur sa broche signal quand il détecte l’aimant.
KY-003 PinOut.jpg
Le capteur posé à la hauteur de la roue dentée
IMG_20260705_090316.jpg
Le pignon du moteur (16 dents et 110 dents)
IMG_20260705_090542.jpg
Pour garantir une bonne précision il faut que la recherche du zéro se fasse toujours dans le même sens de rotation
Le pont tourne à vitesse réduite jusqu’à trouver l’aimant puis revient doucement en arrière pour affiner la position.
On pourrait aussi utiliser deux vitesses mais j’ai fait au plus simple car le calibrage n’est à faire qu’à la première utilisation ou si on déplace le pont à la main ou encore si on a fait un arrêt d’urgence
Au niveau de la mécanique, je me suis mis dans la même configuration que le pont d’Olivier qui a déjà une couronne de 110 dents solidaire du pont et un engrenage de 16 dents sur l’axe du moteur.
Là, c’est imprimé en PLA mais si on voulait le faire « pour de vrai » il faudrait utiliser un autre matériau plus solide.
Donc ça fait une réduction de 110/16 = 6,875
Le moteur est piloté en micro-pas avec une résolution de 1/32e de pas (ça se règle sur le driver TMC2209) :
• 1 tour de moteur = 200 pas x 32 micropas = 6400 pas
• 1 tour de pont (6,875 tours moteur) = 6400 x 6,875 = 44 000 pas pour faire un tour complet (360°).
Cela signifie que chaque pas du moteur représente un déplacement angulaire du pont de :
360° / 44000 = 0,008° donc on aura une bonne precision d’alignement au niveau des rails.
Attention à ce sujet, car les infos qu’on trouve sur le net sont parfois fausses et au départ j’avais mis une table de configuration fausse (plus haut dans le sujet) et je croyais être en 1/16e de pas alors que j’avais 44000 pas pour un tour complet …
Donc avec la broche MS1 à +Vcc et MS2 à Gnd on est bien en 1/32e de pas.
Config_TMC2209.jpg
Pour le driver, c’est le TMC2206 qui est monté sur une petite platine en veroboard : il y a juste à mettre des connecteurs pour pouvoir brancher le moteur, les arrivées de courant et l’Arduino. Le TMC2209 est monté sur des connecteurs à bandes et pas directement soudé pour pouvoir le changer éventuellement. Il ne doit pas chauffer du tout ainsi que le moteur. Si ça chauffe: coupez tout, il y a un problème ...
Le moteur tourne dans un sens ou dans l’autre selon l’orientation du câble sur le driver. Donc si on constate que le pont tourne à l’envers par rapports aux boutons de réglage manuel, il suffit de l’inverser sur la prise de la carte du driver.
Platine Driver.jpg
Il y a un relais pour mettre le 12V au moteur quand le 5V est présent ce qui permet de tout commander avec un seul interrupteur. Les led bleue et jaune servent à indiquer la présence de courant aux entrées.
Les broches DIR STEP et ENABLE sont connectés à l’Arduino
MS1 et MS2 permettent de choisir la résolution voulue parmi 4.
Ici MS1 est relié au +5V et MS2 à la masse ce qui donne une résolution en 1/16e de pas
Ne pas oublier le condensateur de 100µF 35V en parallèle sur l’alimentation 12V et qui protège le driver des pics de tension qui apparaissent lors des commutations pendant la rotation du moteur.
Ni la diode de roue libre sur la bobine du relais : elle est montée en inverse par rapport à l’alimentation.
Pour la tension du moteur, on peut aussi mettre 9V seulement : ce sera suffisant et ça évite les risques de chauffe du moteur et du driver.
En ce qui concerne le réglage de la VRef du driver, j’avais expliqué tout ça en détail dans la 2eme vidéo de l’ascenseur mais en restant en 9V ou en 12V on n’aura pas besoin d’y toucher. C’est seulement si on voulait augmenter le courant du moteur pour lui donner plus de puissance mais ici c’est inutile. Par défaut les TMC2209 sont réglés à environ 0,9A sachant qu’on peut monter jusqu’à 2A mais avec risques pour le driver et le moteur.
Diapositive7.JPG
Diapositive8.JPG
Le courant est mis uniquement sur la voie d’arrivée quand le pont est bien positionné en face.
Pour Olivier, la partie tournante du pont est alimentée par des lamelles de contact sur la voie d’arrivée mais ce serait pareil avec un pont alimenté par le centre : il faut couper les voies inutilisées que ce soit en analogique ou en DCC pour éviter de gaspiller le courant de la centrale.
Et une vidéo du fonctionnement:
Pont Tournant1.mp4