46
Vos projets / Contrôle numérique des aiguillages
« le: janvier 12, 2016, 11:03:12 pm »
Bonjour
Voici le petit chantier qui m’occupe actuellement, sur lequel j’aimerais bien recueillir vos avis éclairés
Commençons d’abord par préciser que je n’ai aucun réseau à la maison, ni aucune expérience du modélisme ferroviaire. Mais j’ai d’autres compétences et centres d’intérêt qui font que je commence à maîtriser un peu arduino et ce qui gravite autour.
Un ami m’a demandé de lui filer un coup de main pour passer son réseau (courant continu) en commande numérique. Il dispose d’une quinzaine d’aiguillages électriques de type jouef, ainsi que quelques dételeurs, qu’il souhaite commander par ordinateur, ou par une centrale qu’il se fabriquera.
On n’est clairement pas dans du modélisme haut de gamme et dispendieux.
Du coup, pour rester dans la même philosophie, mon objectif était de lui proposer une solution bon marché. Suite à la lecture de plusieurs articles très intéressants sur locoduino, je suis parti sur la création de modules de commande d’aiguillages.
Chaque module a 8 sorties, pour gérer 4 aiguillages simples.
Il est constitué d’une arduino pro mini et deux ULN2803, dont les sorties sont couplées deux à deux pour être en mesure de fournir jusqu'à 1A aux bobines de l'aiguillage, bien que j’ai quelques doutes sur la pertinence de ce montage. L’expérience dira si cela tient la route longtemps.
Le tout est assemblé à la main, soudé sur une plaque de prototypage pastillée, avec une connectique de type bornier à vis côté 12V/Aiguillages.
L’arduino pro mini fonctionne comme un périphérique escale I2C. Les modules pourront être branchés en cascade, chacun ayant sa propre adresse I2C. Le tout devra être piloté par une centrale. Une foultitude d’options est possible à ce niveau-là, à affiner plus tard.
Je suis actuellement en phase de réalisation du premier prototype. Mon objectif initial est atteint : le coût matériel d’un module est de moins de 4€ frais de port compris, soit moins de 1€ par aiguillage à commander. Evidemment, il s’agit de composants achetés en ligne auprès de vendeurs asiatiques.
Photo avec les ULN2803 pas encore montés :
Pour les soudures, j’en suis resté aux gros pâtés d’étain bien baveux. Pas très doué à ce niveau-là
Si l'approche reste minimaliste côté hardware, c’est l’inverse côté logiciel embarqué dans l’arduino pro mini : aucune économie de neurones n’est tolérée. Je suis plutôt du genre à ne figer une version de code que lorsque je ne vois absolument plus rien d’améliorable.
L’arduino mini gère en autonomie le premier niveau de sécurité des aiguillages : durée des impulsions, contrôle d’exclusion des sorties contradictoires etc.
J’ai retenu ce principe de module « intelligent » pour sécuriser les équipements contre toute défaillance logique de la centrale en amont et/ou perte de la communication avec celle-ci.
Du coup, c’est dans les fonctionnalités « ferroviaires » que j’ai quelques doutes, du fait de mon manque d’expérience dans ce domaine.
Voici ce qui est réalisé pour l’instant :
L’arduino mini reçoit des consignes de positionnement de chaque aiguillage. Il peut même recevoir simultanément plusieurs consignes pour des aiguillages différents.
Puis, de manière asynchrone, il gère l’activation des deux bobines de chaque aiguillage, sous forme d’impulsions et selon trois paramètres communs à toutes les sorties :
De plus, le dispositif I2C Maître a la possibilité d’interroger l’arduino mini pour connaître son état instantané :
Les trames échangées en I2C comportent aussi des CRC, pour réduire les risques d’erreurs de communication liées à des parasites électriques. Une trame incorrecte est ignorée, charge au Maître de gérer la chose.
A ce stade, la question est : quelles fonctionnalités utiles pourrais-je avoir oubliées, au niveau de l’arduino mini, dans une optique de module le plus générique possible ?
Je m’interroge par exemple sur la position réelle des aiguilles.
Il n’y a aucun capteur pour donner un retour information. Ainsi, à la mise sous tension, la position de chaque aiguillage est indéterminée tant qu’une première impulsion n’a pas été envoyée. De plus, si l’aiguille est déplacée manuellement ou par un train qui circulerait en sens inverse (possible ?), il peut y avoir un déphasage logique avec l’arduino mini.
Actuellement, si l’arduino considère qu’un aiguillage est déjà dans la position indiquée par une nouvelle consigne, il ne déclenche rien.
Peut-être ajouter une fonctionnalité de remise en phase logique?
Autre interrogation : les aiguillages liés, typiques d’un changement de voie entre deux voies parallèles.
Ils seront commandés séparément, mais est-il utile ou nécessaire de gérer leur cohérence au niveau de l’arduino mini?
Autres points oubliés ?
Voici le petit chantier qui m’occupe actuellement, sur lequel j’aimerais bien recueillir vos avis éclairés
Commençons d’abord par préciser que je n’ai aucun réseau à la maison, ni aucune expérience du modélisme ferroviaire. Mais j’ai d’autres compétences et centres d’intérêt qui font que je commence à maîtriser un peu arduino et ce qui gravite autour.
Un ami m’a demandé de lui filer un coup de main pour passer son réseau (courant continu) en commande numérique. Il dispose d’une quinzaine d’aiguillages électriques de type jouef, ainsi que quelques dételeurs, qu’il souhaite commander par ordinateur, ou par une centrale qu’il se fabriquera.
On n’est clairement pas dans du modélisme haut de gamme et dispendieux.
Du coup, pour rester dans la même philosophie, mon objectif était de lui proposer une solution bon marché. Suite à la lecture de plusieurs articles très intéressants sur locoduino, je suis parti sur la création de modules de commande d’aiguillages.
Chaque module a 8 sorties, pour gérer 4 aiguillages simples.
Il est constitué d’une arduino pro mini et deux ULN2803, dont les sorties sont couplées deux à deux pour être en mesure de fournir jusqu'à 1A aux bobines de l'aiguillage, bien que j’ai quelques doutes sur la pertinence de ce montage. L’expérience dira si cela tient la route longtemps.
Le tout est assemblé à la main, soudé sur une plaque de prototypage pastillée, avec une connectique de type bornier à vis côté 12V/Aiguillages.
L’arduino pro mini fonctionne comme un périphérique escale I2C. Les modules pourront être branchés en cascade, chacun ayant sa propre adresse I2C. Le tout devra être piloté par une centrale. Une foultitude d’options est possible à ce niveau-là, à affiner plus tard.
Je suis actuellement en phase de réalisation du premier prototype. Mon objectif initial est atteint : le coût matériel d’un module est de moins de 4€ frais de port compris, soit moins de 1€ par aiguillage à commander. Evidemment, il s’agit de composants achetés en ligne auprès de vendeurs asiatiques.
Photo avec les ULN2803 pas encore montés :
Pour les soudures, j’en suis resté aux gros pâtés d’étain bien baveux. Pas très doué à ce niveau-là
Si l'approche reste minimaliste côté hardware, c’est l’inverse côté logiciel embarqué dans l’arduino pro mini : aucune économie de neurones n’est tolérée. Je suis plutôt du genre à ne figer une version de code que lorsque je ne vois absolument plus rien d’améliorable.
L’arduino mini gère en autonomie le premier niveau de sécurité des aiguillages : durée des impulsions, contrôle d’exclusion des sorties contradictoires etc.
J’ai retenu ce principe de module « intelligent » pour sécuriser les équipements contre toute défaillance logique de la centrale en amont et/ou perte de la communication avec celle-ci.
Du coup, c’est dans les fonctionnalités « ferroviaires » que j’ai quelques doutes, du fait de mon manque d’expérience dans ce domaine.
Voici ce qui est réalisé pour l’instant :
L’arduino mini reçoit des consignes de positionnement de chaque aiguillage. Il peut même recevoir simultanément plusieurs consignes pour des aiguillages différents.
Puis, de manière asynchrone, il gère l’activation des deux bobines de chaque aiguillage, sous forme d’impulsions et selon trois paramètres communs à toutes les sorties :
- Durée d’une impulsion vers une bobine (exemple : 500 ms)
- Durée minimum de repos d’un aiguillage. S’applique à partir de la fin d’impulsion sur une des deux bobines de l’aiguillage (exemple : 300 ms).
- Durée minimum entre deux débuts d’impulsion sur des aiguillages différents. Là, il s’agit de donner la possibilité de ménager la source d’alim 12V, selon sa capacité à délivrer du courant. Si cette durée est à zéro, les 4 aiguillages peuvent être basculés simultanément. Si elle est supérieure à la durée d’impulsion, un seul aiguillage à la fois peut être actif. Et entre les deux, cela permet de régler le nombre maximum de bobines activables simultanément.
De plus, le dispositif I2C Maître a la possibilité d’interroger l’arduino mini pour connaître son état instantané :
- Positions théoriques des aiguillages (= consignes)
- Positions réelles des aiguillages
- Nombre de bobines en cours d’alimentation
- Durée écoulée depuis la dernière fin d’impulsion
- Valeurs des paramètres utilisés, que le Maître peut également modifier.
Les trames échangées en I2C comportent aussi des CRC, pour réduire les risques d’erreurs de communication liées à des parasites électriques. Une trame incorrecte est ignorée, charge au Maître de gérer la chose.
A ce stade, la question est : quelles fonctionnalités utiles pourrais-je avoir oubliées, au niveau de l’arduino mini, dans une optique de module le plus générique possible ?
Je m’interroge par exemple sur la position réelle des aiguilles.
Il n’y a aucun capteur pour donner un retour information. Ainsi, à la mise sous tension, la position de chaque aiguillage est indéterminée tant qu’une première impulsion n’a pas été envoyée. De plus, si l’aiguille est déplacée manuellement ou par un train qui circulerait en sens inverse (possible ?), il peut y avoir un déphasage logique avec l’arduino mini.
Actuellement, si l’arduino considère qu’un aiguillage est déjà dans la position indiquée par une nouvelle consigne, il ne déclenche rien.
Peut-être ajouter une fonctionnalité de remise en phase logique?
Autre interrogation : les aiguillages liés, typiques d’un changement de voie entre deux voies parallèles.
Ils seront commandés séparément, mais est-il utile ou nécessaire de gérer leur cohérence au niveau de l’arduino mini?
Autres points oubliés ?