J' ai rajouté un cinquième nœud à mon bus CAN.
Je voulais expérimenter une carte pilotant des servos-moteurs.
La librairie OpenLCB_Single_Thread comprend plusieurs exemples de programmes pour de telles cartes.
Il y a le programme AVR-8servo qui utilise un module PWM PCA9685 pour piloter 8 servos.
N'ayant pas un tel module sous la main, j'ai plutôt utilisé le programme exemple AVR2ServoNIO.
Celui-ci implémente :
- 2 servos à 3 positions configurables.
- N entrées / sorties configurables.
N = 8 dans le programme.
J' ai téléchargé ce programme dans un Arduino UNO auquel j'ai adjoint un module CAN MCP2515.
Le cablage a été fait conformément au tutoriel de Jean-Luc:
https://www.locoduino.org/spip.php?article268sauf que la pin INT est reliée à la pin 3 du UNO (pas à la pin 2)
J'ai d'abord testé le module CAN avec le programme loopback de Jean-Luc: résultat erreur 0x20. Encore un module neuf Hors Service...
Heureusement, j' en avais plusieurs d'avance et le suivant, lui, était bon.
Ces modules CAN chinois ne sont pas chers mais pas de bonne qualité.
J' ai connecté un servo en pin A4, un bouton poussoir en pin4 (avec sa résistance de 10k ohm en pullup)
et une led en pin5 (avec sa résistance de 560 ohm) à l' Arduino UNO.
Et j'ai relié le module MCP2515 au bus CAN (H avec H et L avec L).
J' ai donc sur le bus:
- 1 ESP32 passerelle CAN-USB pour JMRI
- 1 ESP32 (8 entrées 8 sorties) CAN1
- 1 ESP32 (8 entrées 8 sorties) CAN2
- 1 UNO (2 entrées 2 sorties) CAN3
- 1 UNO (2 servos 8 entrées / sorties) CAN4
CAN-USB et CAN1 comportent la résistance terminaison de 120 ohm nécessaire au bon fonctionnement du bus CAN.
Tous ces nœuds apparaissent bien dans la fenêtre Network tree de JMRI.
La configuration du nouveau CAN4 se fait aisément.
Il y a 3 events pour chacune des 3 positions réglables (en degrés ) des servos-moteurs.
Il suffit d'associer l'event position 2 à 90° (par exemple) à l'event appui d'un bouton poussoir d'un autre nœud pour faire bouger le servo-moteur.
Il est bien sûr possible d'associer les mouvements du servos-moteur à un aiguillage.
Et de contrôler cet aiguillage par un clic de souris depuis l'écran de panel-pro de JMRI.
Il y a un choix multiple pour l'option entrée ou sortie de CAN4.
Ce choix s'effectue par menu déroulant. 3 options pour une sortie: solid, pulse ou flashing.
C'est pratique en effet de choisir directement depuis JMRI si une broche est une entrée ou une sortie.
J'ai donc défini la pin4 comme entrée et la pin5 en sortie.
C'est vraiment un plaisir de configurer un bus CAN et ses events associés aux entrées/sorties par simple clics et copier-coller.
J'ose pas penser à la programmation CAN bas niveau que représente 46 entrées/sorties et leur interactions sur 4 noeuds...
Il faut un certain courage (et une solide organisation) pour apréhender la programmation en dur d'un bus CAN non normé.
Par contre j'ai atteint les limites du "cablage fils volants" avec cables DuPont et breadBoard.
Sur mon bureau, c'est la jungle façon spaghetti... mais cela fonctionne