C'est sûr que vu simplement comme ça, ce n'est pas très spectaculaire... Mais il faut voir le travail derrière, et surtout les possibilités d'évolution sans effort, ou presque...
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
De rien. La version 4.0 est sur les rails, en alpha sur sourceforge. La video de présentation est là:
Trusty Membre
Age : 61 Localisation : Melun Nombre de messages : 942 Date d'inscription : 08/10/2012
Sujet: Re: Décodeur accessoire DCC/analogique universel Sam 3 Jan 2015 - 11:51
Encore un cadeau de Noël : la version 4.0 vient de sortir ! Elle ajoute quantité de nouveautés:
- UAD 4 est maintenant une vraie librairie, installable classiquement par l'IDE Arduino. - Plus aucune librairie extérieure n'est nécessaire : installation et mise en route simplifiés ! - UAD 4 est compatible avec l'IDE Arduino 1.0 comme la V3, mais aussi avec le nouveau 1.5. - Apparition des Commanders pour piloter boutons (poussoirs, switchs, potentiomètres), Dcc et liaison série pour donner des ordres aux accessoires. - Ajout de la gestion des Arduino nano R3. - La numérotation des pins par DP# a disparu, même si elle est utilisée en interne. Programmation simplifiée ! - Simplification et uniformisation des exemples fournis. - Pour les servos, ajout d'une fonction SetPowerCommand() qui permet de n'alimenter le servo que pendant les mouvements. Finis les bruits de cigale ! - Nouvel exemple Signals5x3 pour gérer cinq feux de trois leds chacun, très facilement extensible à 16 (seize !) feux sur un Mega, voire à 19 en utilisant les pins analogiques ! - Nouvel exemple SignalFrench, pour gérer des feux français complets de deux à douze leds, et même les feux ronds, et utiliser toutes les combinaisons de leds connues de la SNCF. Facilement transposable à d'autres types de feu, donc à d'autres pays...
Cette version est déjà disponible sur Sourceforge.
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
Sujet: Re: Décodeur accessoire DCC/analogique universel Sam 3 Jan 2015 - 21:35
Merci.
Pour le moment je suis sur la deco de mon dépôt, donc je laisse la partie hard comme elle est car ça marche. Si j'ai un peu de temps avant l'exposition de Goussainville je mettrais en place cette version 4.
Trusty Membre
Age : 61 Localisation : Melun Nombre de messages : 942 Date d'inscription : 08/10/2012
Sujet: Re: Décodeur accessoire DCC/analogique universel Dim 4 Jan 2015 - 10:34
Si tu le fais, il faudrait peut-être en profiter pour ajouter un transistor ou un relais sur l'alimentation des servos pour éviter les bruits suspects...
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
Sujet: Re: Décodeur accessoire DCC/analogique universel Jeu 28 Jan 2016 - 21:55
Bonsoir Trusty,
voila j'essais de faire un nouveau decodeur d'accessoire avec un arduino uno cette fois ci. J'ai installé la librairie UAD V4 proposée sur le site locoduino.
Quand je charge l'exemple full, j'arrive à le compiler.
Mais je veux pour l'instant juste faire bouger 1 servo par ma multimaus. J'ai donc supprimé les lignes parlant des light, des buttons, des group Et je n'arrive plus à compiler le sketch. J'ai essayer de comprendre mais je sèche.
Voici mon code modifié:
Code:
/************************************************************* project: <DCC Accessory Decoder> author: <Thierry PARIS> description: <2 servos and 3 leds driven by dcc arduino> *************************************************************/
// Setup of Dcc commander dccCommander.Setup(0x00, 0x00, kDCC_INTERRUPT); dccCommander.SetStatusLedPin(13);
// Drivers setups
// List of the ports on the Arduino. Pors 9,10 and 11 are handled in analog mode for fading. arduino = new DriverArduino(AccessoryServoNumber); arduino->Setup(); arduino->SetupPortServo(SERVO1_PORT, 5);
// Accessories setups
// Declare accessories with Dcc codes. accessories.Setup( AccessoryServoNumber, // Servo1 will be activated with only one Dcc code 316/0 used as a toggle. // 20ms is the duration of one degree movement. new AccessoryServo(316, 0, 20), );
// Attach the servos to their driver/ports. // Servo1 can move from 20 to 145 degrees. SERVO(accessories, SERVO1)->Setup(arduino, SERVO1_PORT, 20, 145);
UAD_EndSetup(); }
void loop() { // Run the Loop on all items, if Dcc Loop agrees ! if (dccCommander.Loop()) { accessories.Loop();
} }
Et le message d'erreur qui apparait:
exit status 1 no matching function for call to 'DriverArduino::DriverArduino(int)'
Tant qu'a être dans les questions je ne saisi pas l'utilité #define SERVO1_PORT 0
Merci de ton aide
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
Sujet: Re: Décodeur accessoire DCC/analogique universel Jeu 28 Jan 2016 - 22:02
J'ai essayé de remplacer
Code:
DriverArduino *arduino;
arduino = new DriverArduino(AccessoryServoNumber);
Par
Code:
DriverSevoArduino *arduino;
arduino = new DriverServoArduino(AccessoryServoNumber);
Et j'obtiens un autre message d'erreur exit status 1 'DriverServoArduino' does not name a type
Trusty Membre
Age : 61 Localisation : Melun Nombre de messages : 942 Date d'inscription : 08/10/2012
Sujet: Re: Décodeur accessoire DCC/analogique universel Jeu 28 Jan 2016 - 22:34
Il faut mettre deux arguments au constructeur de DriverArduino:
arduino = new DriverArduino(0, AccessoryServoNumber);
le premier est le nombre de moteurs classiques pilotés, et le second le nombre de servos.
Et il y a aussi une virgule en trop avant la fermeture de la parenthèse dans accessories.Setup(...) .
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
Sujet: Re: Décodeur accessoire DCC/analogique universel Jeu 28 Jan 2016 - 22:47
Oki je testerais demain
Et pour le SERVO_PORT c'est quoi ? Puis-je l'enlever du define ? Et aussi ensuite, et me contenter d'attacher directement SERVO sur sa pin arduino ?
Trusty Membre
Age : 61 Localisation : Melun Nombre de messages : 942 Date d'inscription : 08/10/2012
Sujet: Re: Décodeur accessoire DCC/analogique universel Jeu 28 Jan 2016 - 22:51
C'est juste le numéro du port UAD sur le driver Arduino. Toujours 0 dans ton cas puisqu'il n'y a qu'un seul servo, un seul port...
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
Sujet: Re: Décodeur accessoire DCC/analogique universel Sam 30 Jan 2016 - 14:17
Salut,
Voila j'ai adapté le programme de Trusty pour piloter 4 servos uniquement par la centrale (pas de bouton poussoir). Les servos sont connectés en pin 4 à 7 et les angles sont pour le moment fictif.
Il n'y a aucun mouvement parasite à la mise sous tension de la centrale ou de l'arduino comme on pouvait avoir sur la version 3.X de l'UAD. La mise en oeuvre est facile comme tout et la fait de faire flasher la led 13 est un plus indéniable pour savoir si le signal DCC est bien là.
Je mets ici le code avec quelques commentaires en francais si ca peut en aider quelque un
Code:
/************************************************************* project: <DCC Accessory Decoder> author: <Thierry PARIS> description: <2 servos and 3 leds driven by dcc arduino> *************************************************************/
#include "UniversalAccessoryDecoder.h"
/* kDCC_INTERRUPT values : Board int.0 int.1 int.2 int.3 int.4 int.5 Uno, Ethernet 2 3 Mega2560 2 3 21 20 19 18 Leonardo 3 2 0 1 7 */ #define kDCC_INTERRUPT 0 // REGLAGE DE LA PIN D'ENTREE DU SIGNAL DCC ICI POUR UN UNO PIN 2
/////////////////////////////////////////////////////////////// // The target is to move 4 servos, by DCC adress, DEFINITION DES SERVOS
// Setup of Dcc commander dccCommander.Setup(0x00, 0x00, kDCC_INTERRUPT); dccCommander.SetStatusLedPin(13);
// Drivers setups
// List of the ports on the Arduino. Pors 9,10 and 11 are handled in analog mode for fading. arduino = new DriverArduino(0,AccessoryServoNumber); // IMPORTANT DE LAISSER LE 0 SI UNIQUEMENT DES SERVOS arduino->Setup(); arduino->SetupPortServo(SERVO1_PORT, 4); // LE SERVO_PORT1 CORRESPONDANT AU SERVO 1 EST CONNECTE PIN 4 arduino->SetupPortServo(SERVO2_PORT, 5); arduino->SetupPortServo(SERVO3_PORT, 6); arduino->SetupPortServo(SERVO4_PORT, 7);
// Accessories setups
// Declare accessories with Dcc codes. accessories.Setup( AccessoryServoNumber, new AccessoryServo(27, 0, 27, 1, 20), // PREMIER SERVO ADRESSE DCC 27 SUR LA CENTRALE, OU 31 CHEZ ROCO CAR DECALLEGE DE + 4 new AccessoryServo(28, 0, 28, 1, 20), // 0 CORRESPOND AU PREMIER BOUTON DE LA CENTRALE POUR BOUGER UN AIGUILLAGE A L'ANGLE MINI DEFINI new AccessoryServo(29, 0, 29, 1, 20), // 1 CORRESPOND AU DEUXIEME BOUTON DE LA CENTRALE POUR ANGLE MAXI new AccessoryServo(30, 0, 30, 1, 20) // 20 CORRESPOND A TEMPS EN MS ENTRE CHAQUE DECALLAGE DE 1DEGRES DU SERVO );
// Attach the servos to their driver/ports.
SERVO(accessories, SERVO1)->Setup(arduino, SERVO1_PORT, 20, 145); // SERVO 1 ATTACHE AU PORT 1 DONC PIN 4 ARDUINO BOUGE DE 20 A 145 DEGRE SERVO(accessories, SERVO2)->Setup(arduino, SERVO2_PORT, 20, 90); SERVO(accessories, SERVO3)->Setup(arduino, SERVO3_PORT, 0, 145); SERVO(accessories, SERVO4)->Setup(arduino, SERVO4_PORT, 20, 180);
UAD_EndSetup(); }
void loop() { // Run the Loop on all items, if Dcc Loop agrees ! if (dccCommander.Loop()) { accessories.Loop();
} }
Je vais essayer de faire un tuto de A a Z pour les nuls en programmation comme moi.
L'etape suivante est de piloter un aiguillage kato au travers d'un L298N.
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
PORT_OUT12 correspond à quoi ? Les 2 sorties sur le L298 pour le moteur 1 ? et le 150 c'est la tension de sortie ? Sachant que je vais alimenter le L298 avec un 12v provenant d'une alim ATX, que devrais-je mettre pour le crossover kato ?
Merci de ton aide
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
// Setup of Dcc commander dccCommander.Setup(0x00, 0x00, kDCC_INTERRUPT); dccCommander.SetStatusLedPin(13);
// Drivers setups
// List of the ports on the Arduino. Pors 9,10 and 11 are handled in analog mode for fading. arduino = new DriverArduino(0,AccessoryServoNumber); // IMPORTANT DE LAISSER LE 0 SI UNIQUEMENT DES SERVOS arduino->Setup(); arduino->SetupPortServo(SERVO1_PORT, 4); // LE SERVO_PORT1 CORRESPONDANT AU SERVO 1 EST CONNECTE PIN 4 arduino->SetupPortServo(SERVO2_PORT, 5); arduino->SetupPortServo(SERVO3_PORT, 6); arduino->SetupPortServo(SERVO4_PORT, 7);
// crossover kato sur l298n . l298n = new DriverL298n(); l298n->Setup(); l298n->SetupPortMotor(L298N_PORT_OUT1, 9, 10); //CISOR_KATO
// Accessories setups
// Declare accessories with Dcc codes. accessories.Setup( AccessoryNumber + AccessoryServoNumber, new AccessoryServo(27, 0, 27, 1, 20), // PREMIER SERVO ADRESSE DCC 27 SUR LA CENTRALE, OU 31 CHEZ ROCO CAR DECALLEGE DE + 4 new AccessoryServo(28, 0, 28, 1, 20), // 0 CORRESPOND AU PREMIER BOUTON DE LA CENTRALE POUR BOUGER UN AIGUILLAGE A L'ANGLE MINI DEFINI new AccessoryServo(29, 0, 29, 1, 20), // 1 CORRESPOND AU DEUXIEME BOUTON DE LA CENTRALE POUR ANGLE MAXI new AccessoryServo(30, 0, 30, 1, 20), // 20 CORRESPOND A TEMPS EN MS ENTRE CHAQUE DECALLAGE DE 1DEGRES DU SERVO new AccessoryMotorTwoWays(26, 0, 26, 1, 5000) // CISOR_KATO );
// Attach the servos to their driver/ports.
SERVO(accessories, SERVO1)->Setup(arduino, SERVO1_PORT, 20, 145); // SERVO 1 ATTACHE AU PORT 1 DONC PIN 4 ARDUINO BOUGE DE 20 A 145 DEGRE SERVO(accessories, SERVO2)->Setup(arduino, SERVO2_PORT, 20, 90); SERVO(accessories, SERVO3)->Setup(arduino, SERVO3_PORT, 0, 145); SERVO(accessories, SERVO4)->Setup(arduino, SERVO4_PORT, 20, 180); MOTOR2WAYS(accessories, CISOR_KATO)->Setup(l298n, L298N_PORT_OUT12, 255);
UAD_EndSetup(); }
void loop() { // Run the Loop on all items, if Dcc Loop agrees ! if (dccCommander.Loop()) { accessories.Loop();
} }
Donc je ne suis pas loin de la vérité avec mon L298N connecté aux broches 9 et 10 de mon Uno, quand je rentre l'adresse DCC et que j'appuie sur le bouton "aiguillage droit" j'obtiens +11,7v en sortie du mon L298N pendant 5 secondes. Par contre si j'appuie sur le bouton "aiguillage dévié" de ma centrale j'ai toujours +11,7v en sortie, alors que pour l'aiguillage kato j'ai compris qu'il me faudrait -11,7v (mesuré avec un simple voltmètre)
Il me manque donc un petit truc quelque part.
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009
new AccessoryMotorTwoWays(26, 0, 26, 1, 5000) // CISOR_KATO BOUTON 1 CORRESPOND A DROIT SUR MULTIMAUS
Par
Code:
new AccessoryMotorTwoWays(26, 0, 5000) // CISOR_KATO BOUTON 1 CORRESPOND A DROIT SUR MULTIMAUS
Alors à chaque appuie sur le bouton "aiguillage dévié" de la centrale, j'ai une fois +11,7v la fois suivante -11,7v. Mais du coup le bouton "aiguillage droit" ne sert à rien.
Trusty Membre
Age : 61 Localisation : Melun Nombre de messages : 942 Date d'inscription : 08/10/2012
Je suis en train de préparer une nouvelle version de UAD permettant de gérer correctement les feux de signalisation complexes français sans grand codage, et j'ajouterais cette modif dans le lot...
Pour le reste, tu as impeccablement modifié ton source pour ajouter un nouvel accessoire !
sam95 Membre
Age : 43 Localisation : Ermont, 95 Nombre de messages : 1396 Date d'inscription : 29/11/2009