Auteur Sujet: commande d'aiguillage à solénoïdes avec DCC++  (Lu 32210 fois)

nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
commande d'aiguillage à solénoïdes avec DCC++
« le: janvier 28, 2018, 04:17:33 pm »
Bonjour,

Je viens de monter ma station DCC++ avec un arduino MEGA, 2 LMD18200 et 2 MAX471.
J'ai utilisé la bibliothèque DCpp et tout fonctionne parfaitement.  :)  J'ai testé avec JMRI et RocRail.

Mon réseau va comporter 20 cantons.
Je pensais devoir utiliser un bus LocoNet pour la détection d'occupation des cantons.
Mais j'ai découvert que DCC++ pouvait gérer des sensors sur les pins de l'arduino et communiquer leur état au PC.
Donc inutile d'installer un LocoNet. Cool !  8)

Mon réseau va comporter une douzaine d'aiguillages à solénoïde Peco.
Au départ je pensais réaliser des décodeurs pour aiguillage à solénoïdes comme ceux décrits là:
http://www.locoduino.org/spip.php?article142
Mais j'ai vu qu'il était également possible de gérer des aiguillages et des sorties avec DCC++.
Selon la commande d'aiguillage du PC, DCC++ peut changer l'état de la pin arduino dédiée si l'aiguillage est défini comme Output.

Mes questions:
Est il possible d'intégrer la méthode activation_aiguillage() (du sketch du décodeur pour aiguillage à solénoïdes)
au programme DCC++ pour piloter les relais directement depuis le MEGA ?
La commande delay(ACTIVATION); (250ms) ne va t-elle pas gêner le bon déroulement du programme des signaux DCC ?
Il me semble que les signaux DCC sont générés par interruptions donc c'est peut-être possible ?
« Modifié: janvier 28, 2018, 05:15:24 pm par nopxor »

CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #1 le: janvier 29, 2018, 11:20:42 am »
Bonjour Nopxor

La réponse est surement ici.

http://www.locoduino.org/spip.php?article142

J'aimerai faire une remarque (qui n'engage que moi) aujourd'hui utiliser le moteur PECO me semble un peu désuet.

Je m'explique, on doit utiliser 2 boutons poussoirs pour activer le mouvement de l'aiguille, de plus il ne  possède pas de coupure de fin de course.
(pour info il y a quelques années, j'avais réalisé un montage avec un interrupteur et condensateur)

Dans le programme de l'Arduino, on donne un temps pour l’impulsion, le moteur PECO demande un fort ampèrage pour son fonctionnement, à terme  il y a un risque de destruction si les solénoïdes reste alimenté.

Il y a beaucoup d'autre moteur d'aiguille sur le marché (perso j'utilise des TORTOISEs)
 
Les numéros "846" & "847" (Janvier & Février 2018) de Loco Revue font références à 2 articles:

Le premier    => les différents types utilisables
Le deuxième => pour le remplacement du moteur PECO par une nouvelle génération

J'utilise  aussi JRMI et aucun probléme

Cordialement
Marcel
Best Regards

nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #2 le: janvier 29, 2018, 04:11:59 pm »
Bonjour Marcel,

Les moteurs Tortoise sont certainement l'idéal, mais les moteurs Peco sont 3 fois moins chers... et mon budget est serré.
Je compte utiliser les PL-10WE qui sont moins gourmands en énergie que les PL-10 (1.1A au lieu de 2.4A)
Et puis une carte 8 relais qui permet d'en controler 4, c'est environ 4€ sur Ebay ou AliExpress.
Il suffit d'ajouter une alimentation de PC pour le 5V de ces cartes et le 12V des moteurs.

Je me suis plongé dans les sources Outputs.h et Outputs.cpp de la bibliothèque DCCpp.
L'adaptation ne devrait pas être trop compliquée.

nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #3 le: janvier 31, 2018, 01:44:34 pm »
Bonjour,

Ca y est j'ai modifié le programme DCC++ pour la commande d'aiguillages à solénoïdes directement depuis les pins de l'arduino.
J'ai testé, tout fonctionne bien.

Pour commander ceux-ci depuis PanelPro de JMRI il faut utiliser la dernière version 4.10 de JMRI.
Cela ne fonctionne pas avec la 4.8, il y a un bug dans JMRI qui empêche la commande.

C'est quand même cool de tout controler depuis un seul MEGA:
- Le DCC
- Les relais des solénoïdes d'aiguillages avec les pins Outputs.
- La rétrosignalisation avec les pins Sensors.

DCC++ c'est vraiment génial. 8)

Ci joint les sources modifiés.

nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #4 le: février 21, 2018, 06:17:18 pm »
Bonjour,

Quand je disais que j'avais testé et que tout fonctionnait bien, je parlais de la commande des relais.

Depuis j'ai reçu les moteurs d'aiguillage PECO (PL-10WE).

J'ai donc procédé à plusieurs tests.

D'abord j'ai testé si mon alimentation de PC (200W) allait convenir.
Le 12V fait en réalité 10.35V mais cela suffit à déclencher les bobines.
On peut tirer jusqu'à 8A sur la sortie 12V, c'est plus qu'il n'en faut.

Ensuite j'ai cablé les deux bobines sur la sortie des relais pour le test final ou je commande l'aiguillage à l'écran de JMRI.

Cela fonctionne une fois, deux fois... puis plantage de JMRI avec message: Erreur DCC++ port série.
Je relance le test, mêmes effets... Manifestement l'Arduino n'aime pas et le fait savoir à JMRI.

Je cable l'alimentation +5V du PC à la carte des relais pour isoler l'Arduino des relais grâce aux Opto-coupleurs.
Jusque là, j'alimentais depuis l'Arduino.
Re tests, Re mêmes résultats !  :(

Je réfléchis et je pressens un problème de parasites venant des bobines PECO.

Lorsqu'on alimente une bobine et que l'on interrompt son alimentation, une surtension apparait à ses bornes.
La surtension se transforme en arc électrique au niveau des contacts et des parasites sont émis.

Pour remédier à cela il faut ajouter une diode (dite de roue libre) aux bornes des bobines.
A la coupure de l'alimentation, le courant inverse généré par la bobine peut se décharger dans la diode.

J' ai donc soudé 2 grosses diodes (fond de tiroir) pour tenter un nouveau test.

Et là, tout est rentré dans l'ordre et les bobines foncionnent parfaitement sans générer de parasites.  :D

Reste à savoir quelle type de diodes convient ?

Pour une commande ON/OFF d'un solénoïde (pas une commande PWM), une diode de redressement quelqonque fait l'affaire.
Il suffit que sa tension inverse soit plus grande que la tension d'alimentation et que son courant direct max soit plus grand que le courant dans la bobine.
Le tout avec un bon facteur de sécurité.
Je vais commander des 6A10 (6A, 1000V), ça coûte 1€ les 10...  ;)

nopxor

  • Full Member
  • ***
  • Messages: 195
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #5 le: mars 21, 2018, 01:07:33 pm »
Bonjour,

J'ai commencé à monter les moteurs d'aiguillages sous le réseau.
J'ai installé sur chacun un inverseur (PECO PL-13) commandé par la tige du solénoïde pour alimenter le coeur d'aiguille electrofrog.
En fait cela génère quelques frottements supplémentaires et l'alimentation de 10.35V s'est révélée insuffisante.

PECO préconise du 16V et c'est effectivement la tension requise pour un fonctionnement correct des moteurs.
Peu importe alternatif ou continu du moment que l'ampérage est suffisant.
J'utilise une alimentation de laptop 16V DC 4A.

Pierrot le loup

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #6 le: avril 01, 2018, 10:04:07 am »
Bonjour,
Pour le type de diode "roue libre" une 1N4004 suffit (400V 1A) c est ce qui est préconisé dans le monde pro.
Le prix est très dérisoire.
Bon montage
Bonne journée
« Modifié: avril 02, 2018, 05:33:09 pm par Thierry »

Juan

  • Full Member
  • ***
  • Messages: 125
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #7 le: juillet 18, 2020, 06:09:40 pm »
 Bonjour,

J'ai découvert ce topic dans le forum et j'en suis ravi, car je suis moi aussi favorable à la possibilité de tout (ou presque) traiter depuis le central DCC++, et j'étudiais le sujet depuis un certain temps.

Je viens de télécharger vos fichiers et je vais les étudier tout de suite. Mais en attendant, j'ai une question pour vous, bien que plutôt "mécanique" : comment résoudre le problème du câblage, des connecteurs, entre la centrale et le modèle ?

Merci beaucoup,

Juan

Nicolas 33000

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #8 le: juin 07, 2021, 08:51:18 pm »
Bonjour, et merci pour le partage de votre travail.
Très intéressant, l'emploi de JMRI pour les solénoïdes devient une très bonne alternative au TCO avec ca !

je n'arrive malheureusement pas a téléverser, j'ai toujours des erreurs que je corrige au fur et a mesure, sans succès.

Auriez vous une piste pour utiliser ce code sur un méga qui ne gèrera pas le DCC sur les voies (un UNO a déjà cette fonction, et je souhaiterai conserver une interchangeabilité).
Le but serait d'avoir une vingtaine d' aiguilles sur chaque Méga, avec un code plus "light"

Merci d'avance aux sachants pour les pistes de réflexion,
Nicolas

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3045
  • 100% Arduino et N
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #9 le: juin 08, 2021, 10:00:34 am »
Avez-vous regardé ma réalisation pour une vingtaine d’aiguilles :
https://forum.locoduino.org/index.php?topic=290.msg3412#msg3412

Cordialement,
Dominique

Nicolas 33000

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #10 le: juin 09, 2021, 06:53:13 pm »
Bonjour Dominique, et merci pour ce lien.
...
...
Époustouflant !!!!

je prendrai le temps de lire en détail ce week-end, mes semaines sont... bien remplies !

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3045
  • 100% Arduino et N
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #11 le: juin 09, 2021, 07:44:39 pm »
Si besoin, je joindrai le logiciel complet.

J'ai ajouté récemment une file d'attente des commandes d'aiguilles (suite au messages CAN reçus) avec un délai (intervalleAiguille) de 300 ms.
Les commandes sont exécutées dans une tâche de la loop associée au temps millis().

Cela évite plusieurs commandes simultanées car les bobines des moteurs d'aiguilles appellent pas mal de courant et cela peut provoquer un parasite, voire un reset du Mega !!.Et cela indépendamment de ce que fait le gestionnaire qui, en programmant un itinéraire, peut souvent commander 2, 3 ou plus aiguilles et là, dans le gestionnaire, il n'est pas possible de placer des delay().

/*
   *  Toutes les intervalleAiguille millisecodes
   */
 
  if (_AigTour + intervalleAiguille < millis()) { 
    _AigTour = _AigTour + intervalleAiguille; 
   
      if (BougeAIG[BougeAiguille])  { // bouger une seule aiguille à la fois
      if (_debug) {
        Serial.print("bouge aig ");Serial.println(BougeAiguille);
      }
      BougeAIG[BougeAiguille] = false;
      ListeAig[BougeAiguille].Bouger();     
    }
    for (int y = 0; y < MaxAIG; y++) { // recherche d'une autre aiguille pour le prochain coup
      BougeAiguille++;     
      if (BougeAiguille == MaxAIG) {BougeAiguille = 0;}
      if (BougeAIG[BougeAiguille]) break;     // sortie du for
    }
  }
Cordialement,
Dominique

Nicolas 33000

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : commande d'aiguillage à solénoïdes avec DCC++
« Réponse #12 le: juin 30, 2021, 08:30:07 pm »
Bonjour,
Je déteste être le gars qui pose une question et se barre, et là c'est bien le cas malheureusement !
Un autre projet d'envergure me fais complètement lâcher le train pour l'instant, reprise très probable cet hiver, avec le temps que nous sommes les seuls a aimer je pense !
celui qui nous force a rester a la maison ! ;-)