Auteur Sujet: Un Arduino par module....ou pas.  (Lu 66123 fois)

petitrain

  • Jr. Member
  • **
  • Messages: 86
    • Voir le profil
Un Arduino par module....ou pas.
« le: février 01, 2015, 11:15:17 pm »
  Après avoir tester plein de petits programmes ( clignotements, chenillards, feux de signalisation, la PWM ou les servos...) depuis un bon bout de temps, j'ai envie de m'attaquer à un projet plus ambitieux.
  Je suis l'heureux possesseur de quatre modules de voie unique au norme de la FFMF, une petite gare de passage et deux modules de décor. Ils ne demandent qu'à faire des petits. La gestion des trains est en DCC et me va très bien, surtout dans les expos.
  J'aimerai confié à l'Arduino la gestion de tout le reste: l'éclairage des modules ( rubans de leds RVB et Halogène 220V), l'éclairage des bâtiments et des parties publiques, les aiguillages, le PN, un ouvrier qui soude, etc., et des petits modules de son.
  J'aimerai avoir aussi un afficheur LCD et une horloge HO sur 4 digits.
  J'ai imaginé pour cela un arduino sous chaque module avec deux ULN2803 comme interface de puissance . Pour les rubans de leds 500mA pas de problème, pour les ampoules halogène je passe en 220v sinon l'ampérage est trop important en 12v. Il faut que je teste une commande par triac( pas encore fait). Pour le son j'ai trouvé des petits lecteurs MP3 que je compte booster avec des ampli stéréo 2*3w.
  Je compte utiliser une alimentation d'ordinateur , sortie 12v et 5v avec pas mal d'Ampère., commune à tous les modules.
  Cette disposition me permet d'avoir les I/O suffisantes, pas trop de fils entre chaque module, mais il faut que je puisse réaliser une liaison entre tous mes arduino. En effet il va me falloir un arduino maître pour commander les différences séquences d'éclairage ( plein feu, éteint, à moitié pour travailler  dessus et diverses animations).
  Après toute cette réflexion....le doute s'installe.... est-ce que c'est le mieux....
  Aussi j'ai fait un petit dessin récapitulatif et j'aimerai que vous me disiez ce que vous en pensez....   

Guillaume

  • Global Moderator
  • Full Member
  • *****
  • Messages: 204
    • Voir le profil
    • Locoduino
Re : Un Arduino par module....ou pas.
« Réponse #1 le: février 02, 2015, 08:09:16 am »
Pourquoi pas je dirais. C'est une réflexion que j'ai eu à un moment, mais je suis passé à un autre projet plus petit en taille (surface au sol du HO, du HOe c'est plus petit en appartement)

Il y a d'autres questions que tu dois te poser qui vont probablement changer ton schéma. Quelles sont tes entrées  ? Je n'en vois pas sur ton schéma.
Un arduino par module est bien vu que cela permet de laisser le moins de fils entre les modules mais il faut synchroniser tout cela, quel protocole ?

Conduite à vue ou automatique ? un tableau de retour de l'occupation des rails.

Ce que tu peux faire, c'est commencer simplement sur un module pour tester déjà comment cela se passe.
J'ai vu aussi un PN dans le lot c'est déjà bien comme petit truc : détection, fermeture des barrières, lumières clignotants et son.

Je sais que ce ne sont pas des réponses mais cela peut t'aiguiller.
G.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #2 le: février 02, 2015, 09:12:45 am »
Bonjour petitrain

Joli projet, il y a beaucoup de choses.

Quelques questions:

1) quelle serait la longueur de fil maximum totale pour la communication entre les Arduino ?
2) est-ce que tous les Arduino emettent des informations ou bien y a-t-il un seul émetteur et plusieurs récepteurs.
3) est-ce que c'est gênant que la communication se fasse mal ponctuellement ?

Concernant l'horloge HO avec un afficheur à DEL, il existe des afficheurs de petite taille conçus pour l'heure avec le ´:´ de séparation : http://www.tme.eu/fr/details/lfd028aue-103a/afficheurs-led-quadruples/#  A l'échelle ça donne une horloge avec des chiffres de 60cm de haut. Ça consomme 13 fils, un Arduino y passe.

Concernant les ULN2803, chaque sortie supporte effectivement 500mA mais si les 8 sorties sont en route, ça fait 4A. La datasheet n'est pas très claire à ce sujet mais, vers la fin, elle parle de 2,5A. Donc je ne suis pas sûr que l'ULN puisse tenir dans ces conditions. A tester, un ULN ne coûte pas si cher. Si il s'agit de commander l'éclairage par bande de DEL, l'alternative est de ne pas les alimenter indépendamment mais en une fois avec un MOSFET de puissance. Pour mon réseau, j'ai un MOSFET pour 5m de DEL 5050 ton chaud et un MOSFET pour 5m de DEL 5050 blanc. De mémoire j'ai 7,5A par ruban.
Cordialement

petitrain

  • Jr. Member
  • **
  • Messages: 86
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #3 le: février 02, 2015, 09:19:19 am »
 Il y a d'autres questions que tu dois te poser qui vont probablement changer ton schéma. Quelles sont tes entrées  ? Je n'en vois pas sur ton schéma

Au niveau des entrées, j'en aurai sur les modules de la gare, surement, pour commander mes aiguilles . Actuellement je les commande avec des moteurs conrad avec des fins de course, je pense mettre un petit relai 2RT pour inverser la polarité du courant ou, si ça ne va pas, des servos comme l'explique jean luc sur son site. Donc une entrée par aiguille. Je n'ai pas précisé: sur mon dessin, les ULN2803 laissent libre les broches RX et TX, les broches A4 et A5 (i2c), et les broches A0,A1,A2 et A3 sont basculables en entrées ou sorties par des straps.
Sur le module maitre, il me faut un bouton pour incrementer une liste de programme et un bouton de validation.

J'ai vu aussi un PN dans le lot c'est déjà bien comme petit truc : détection, fermeture des barrières, lumières clignotants et son

Je pense juste mettre un bouton qui ferme ou ouvre les barrières car, sinon, la détection se retrouve sur les modules voisins et c'est encore des fils suplémentaires.

Un arduino par module est bien vu que cela permet de laisser le moins de fils entre les modules mais il faut synchroniser tout cela, quel protocole ?

Pour la synchro (pas testée), j'ai imaginé créer des créneaux sur une sortie du maitre et les envoyer sur une entrée des esclaves via un bus.
J'aurai dans le programme maitre :
 une variable incrementée par le bouton
--->un switch(ma variable)
case(1)--->digitalWrite(sortie x, HIGH) pendant, disons 50ms
case(2)--->(digitalWrite(sortie x, HIGH) pendant, disons 50ms)2 fois
etc...
Dans chaque esclave:
une variable s'incrémentant sur l'entrée du bus
--->un switch(ma variable)
case(1)--->programme 1
case(2)--->programme 2
etc...
Tout ça a tester.
Reste le grave problème de delay() à régler.
A ce propos, est-ce que c'est la seule fonction bloquante?               


 

petitrain

  • Jr. Member
  • **
  • Messages: 86
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #4 le: février 02, 2015, 09:43:09 am »
Merci pour vos réponses rapides,
Bonjour petitrain

Joli projet, il y a beaucoup de choses.

Quelques questions:

1) quelle serait la longueur de fil maximum totale pour la communication entre les Arduino ?
2) est-ce que tous les Arduino emettent des informations ou bien y a-t-il un seul émetteur et plusieurs récepteurs.
3) est-ce que c'est gênant que la communication se fasse mal ponctuellement ?

Concernant l'horloge HO avec un afficheur à DEL, il existe des afficheurs de petite taille conçus pour l'heure avec le ´:´ de séparation : http://www.tme.eu/fr/details/lfd028aue-103a/afficheurs-led-quadruples/#  A l'échelle ça donne une horloge avec des chiffres de 60cm de haut. Ça consomme 13 fils, un Arduino y passe.

Concernant les ULN2803, chaque sortie supporte effectivement 500mA mais si les 8 sorties sont en route, ça fait 4A. La datasheet n'est pas très claire à ce sujet mais, vers la fin, elle parle de 2,5A. Donc je ne suis pas sûr que l'ULN puisse tenir dans ces conditions. A tester, un ULN ne coûte pas si cher. Si il s'agit de commander l'éclairage par bande de DEL, l'alternative est de ne pas les alimenter indépendamment mais en une fois avec un MOSFET de puissance. Pour mon réseau, j'ai un MOSFET pour 5m de DEL 5050 ton chaud et un MOSFET pour 5m de DEL 5050 blanc. De mémoire j'ai 7,5A par ruban.
Concernant la communication des arduino j'ai un peu expliqué mon idée à Guillaume:
mes modules mesurent 1m de long, pour l'instant j'en ai quatre de fini, mais sur ma pré-maquette, j'en ai prévu 13, je ne sais pas si j'irai jusque là...
si la communication se fait mal, il suffit de refaire la consigne, j'imagine....
Pour ma petite horloge, qui est déjà fonctionnelle, j'ai implantée sur un CI un ATméga328,un quartz et 2 condos avec 4 afficheurs 7 segments que j'avais en stock. Je peux mettre à disposition mon étude si ça intéresse quelqu'un.
Tes réflexions sur les limites des ULN2803 posent effectivement des questions et méritent des tests... à voir....
J'aime bien l'idée de commander l'éclairage  sur chaque module car cela permet des animations plus variées 

Guillaume

  • Global Moderator
  • Full Member
  • *****
  • Messages: 204
    • Voir le profil
    • Locoduino
Re : Un Arduino par module....ou pas.
« Réponse #5 le: février 02, 2015, 09:54:04 am »
Delay() n'est pas vraiment un souci ca se contourne assez facilement. Sais-tu comment faire clignoter une DEL avec millis(). Si non triche et regarde les programmes d'exemples.
La seule fonction : à ma connaissance oui mais elle est petite la mienne. Et encore on a les interruptions ;), mais effectivement mieux vaut s'en passer.

La détection pas obligée de fils supplémentaires, tout dépend comment tu veux ton protocole typiquement la voie série est à oublier un arduino envoie à plusieurs, si on fait avec la voie série le premier arduino va devoir trier ce qui est à lui ou non et renvoyer le message si non (arduinos en cercle dirons nous)
Après tu as l'i2c , peut être bien si les arduinos esclaves n'ont pas d'infos à faire remonter comme pour le PN par exemple et aussi tout dépend de la longueur des fils comme demande le Jean Luc.
Sinon le bus CAN qui rassemble fiabilité sur la longueur et chaque arduino envoie à tout le monde. Bon résumé Jean Luc me tapera dessus sinon.
edit : vu la longueur le bus can parait mieux si j'ai retenu la leçon

Par contre sur ton exemple de programme, c'est encore moins compliqué. Un truc simple peut être de diviser ta partie cerveau sur un arduino (avec entrées, TCO et tout) et des arduinos actionneurs.
Par exemple, pour l'éclairage tu appuis sur ton appui pour allumer l'arduino va envoyer sur le bus le message allumer sur tel module, l'arduino recoit et effectue toutes les manoeuvres que tu as décidé, lampadaire en route en faisant des ratés etc etc...

Le plus dur c'est de faire l'architecture et décider comment faire d'où les questions de Jean Luc, le code  viendra tout seul après.
G.

petitrain

  • Jr. Member
  • **
  • Messages: 86
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #6 le: février 02, 2015, 09:55:04 am »
Pour Guillaume,

 J'avais, moi aussi, un réseau en Hoe, que j'ai vendu à un musée de Nice, et je garde toujours la nostalgie de cette échelle.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #7 le: février 02, 2015, 11:48:35 am »
Si tu envisages d'aller jusqu'à 13 modules, il ne faut pas que la solution de communication choisie te limite. Même si tu ne sais pas si tu iras jusque-là. Nous avons tous nos rêves et il faut se donner les moyens de les réaliser ;)

Donc potentiellement tu auras 14 nœuds sur ton réseaux: le maître + 13 modules et un bus que s'étend sur une vingtaine de mètres. Les interfaces de communication natives de l'Arduino (I2C, SPI, série) ne sont pas du tout faites pour une telle distance si on veut un débit suffisamment élevé et une bonne sûreté de fonctionnement. De plus, elles n'implémentent que de la communication très bas niveau.  Le lien série n'est pas un bus comme le signale Guillaume et est donc hors jeu.

Donc en bus fiable, prévu pour être déployé sur une grande distance, rapide, avec détection d'erreur et des contrôleurs peu chers qui gèrent la totalité du protocole, il y a le CAN. Problème, les shields CAN sont fort chers (pour une raison qui m'échappe) et les clôneurs chinois ne se sont pas attaqués au créneau. Du coup nous avons conçu un module CAN dont le prix de revient (en kit avec PCB professionnel) est d'environ 6€50. La communication avec l'Arduino se fait par le bus SPI. La bibliothèque est tout simplement celle du shield CAN de seeedstudio. Nous avons fait fabriquer 10 ex du PCB pour 11 livrés chez Electrodragon. Dominique en a 6, Thierry 2 et moi 3. Je sais qu'Hubert est candidat pour quelques exemplaires donc une seconde commande pourrait être faite. Donc si tu veux essayer, c'est faisable. Comme c'est le bus que j'utilise sur mon réseau et que dans les projets LOCODUINO nous somme partis sur ce bus, il y aura prochainement des articles consacrés au CAN avec des exemples de mise en oeuvre.

Concernant l'éclairage public et des bâtiments, une alternative est le TLC5940 de Texas. Ce circuit permet de piloter 16 DEL en courant (donc sans résistance) chacune avec une PWM 12 bits. Il est assez cher en Europe mais bon marché sur eBay Chine. Il y a une bibliothèque pour le piloter. Ces circuits peuvent être chainés pour piloter plus de DEL sans consommer plus de fils sur l'Arduino. J'en ai quelques uns en stock et j'ai testé, ça fonctionne très bien.

Pour l'horloge de gare, nous sommes preneurs d'un article décrivant le système  :)
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #8 le: février 02, 2015, 01:36:31 pm »
Autre chose : sur ton schéma, tu diffuses du 5V à partir d'une alim centrale à tous les Arduino. Ce 5V va être bruité car tu vas avoir des longs fils. Ça risque de provoquer des reset intempestifs des Arduino. Il vaut mieux diffuser une tension plus élevée et utiliser une régulation en tension sur l'Arduino.
Cordialement

petitrain

  • Jr. Member
  • **
  • Messages: 86
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #9 le: février 02, 2015, 04:59:17 pm »
Pour l'horloge de gare, vous voulez un article structuré pour mettre sur le site ou simplement voir ce que j'ai fait?

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #10 le: février 02, 2015, 05:01:39 pm »
Je penche pour un article structuré :)
Cordialement

Hubert

  • Global Moderator
  • Newbie
  • *****
  • Messages: 35
  • J'y crois donc je fais.
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #11 le: février 02, 2015, 06:42:46 pm »
Je pense que tu dois t'orienter sur les Bus CAN pour faire dialoguer tes arduinos entre eux.
il te faut du fil assez gros pour transporter du 5v sur de longues distances et pour éviter l'effet antenne et et de résonnance il te faut du fil blindé.
Une deuxième option et je suis dessus mais pas vraiment avancé dans le projet.
 
La transmission par Wifi:
j'ai les 4 composants WIFI et il me manque une de mes cartes qui à pris un coup. je ne teste que pour 4 cartes mais si cela fonctionne pour 4, avec le wifi nous ne sommes pas limité sauf en adressage mais bon, nos réseaux sont de tailles réduits.
Explication succinte du déroulement du process.
le maître envoi l'ordre de communication avec le byte de reconnaissance spécifique à l'ensemble des cartes en écoute,
l'exclave concerné par le byte de reconnaisance se met en mode reception et traitement jusqu'au byte de fin de transmission;
Les autres cartes qui ont interceptées libèrent la fréquence quand il savent que l'ordre ne les concernent pas en restant à l'écoute d'un nouvel ordre.
A partir de ce moment et jusqu'à l'ordre de fin de transmission, la carte exclave communique avec le maître pour valider les données et peut executer les instructions en même temps.
Avec ce système tu peux avoir un byte de reconnaissance commun à tous les exclaves pour synchroniser ou executer le même ordre.
 Pas de problème de cablage ni de bruits parasitaires.
En fonction de l'ordre reçu, la carte receptrice peut effectuer la tache identifiée par son code, retransmet au maître le code  et l'acquiescement de l'éxécution dudit ordre.
exemple;
allumer la gare de passage sur le secteur 2,
tu envois le byte 1 pour lancer la communication suivi de "carteS2" pour identifier la carte du secteur2.
toutes les cartes recoivent le byte 1 mais seule la carte du secteur 2 sera concerné
tant que la carte ne réponds pas relance de l'ordre selon un timing à définir et selon un max de tentatives (carte HS).
la carte secteur2 répond : pret à recevoir les ordres en envoyant "carteS2" puis un byte à 1.
les autres cartes ne repondent pas et attentent en écoutant l'entrée wifi le byte de fin de transmission en cours .
envoi par le maitre de la commande suivante "carteS2" puis 10 (pour allumer la gare) puis le byte à 255 pour fin d'ordre
execution de l'ordre par la carte et retour de la bonne execution pour contrôle au maître.
"CarteS2" puis 10 puis 1 puis 255 pour fin de trame.
éventuellement contrôle de vérification du bon ordre et libération de la transmission par un ordre de fin
Voilà, quelque chose de ce genre.
 
 
Le bonheur est une trajectoire et non pas une destination.

Guillaume

  • Global Moderator
  • Full Member
  • *****
  • Messages: 204
    • Voir le profil
    • Locoduino
Re : Un Arduino par module....ou pas.
« Réponse #12 le: février 02, 2015, 06:48:57 pm »
Autant en faire profiter tout le monde ;)
Je serai assez intéressé.

Pour ce qui est du code, pas de souci pour aider pour ma part. Fais par étapes et cela découlera facilement.
G.

petitrain

  • Jr. Member
  • **
  • Messages: 86
    • Voir le profil
Re : Un Arduino par module....ou pas.
« Réponse #13 le: février 02, 2015, 08:08:49 pm »
Merci pour l'intérêt que vous portez à mon projet.
  Il me faut réfléchir à vos diverses propositions pour la communication entre arduino ;je me doutais que c'était le point délicat .
  J'avais pensé aussi à une liaison par commande DCC. Ma centrale (une ROCO) devient le maitre et tous mes arduino esclaves: avantage pas de fils supplémentaires et j'économise une platine Arduino. Je n'ai pas vraiment beaucoup d'instruction à passer ( juste un n° de programme).
Pour une séance de jeu, je vais peut-être changé de programme 2 ou 3 fois.
j'appelle une adresse avec ma centrale---> et mes Arduino jouent un programme: simple
.... en théorie.....
car j'ai lu pas mal d'articles et je n'ai pas compris grand chose ( en plus, mon anglais est des plus rudimentaire).
J'ai jeté un oeil au datasheet de l'ULN2803, effectivement la puissance totale est assez faible. Je vais mettre des  Mosfets pour commander les rubans de leds.
Le 5v sur chaque module, c'est pour commander mes petits lecteurs MP3 pas pour les Arduino, je les alimente en 12v via la broche Vin;
  Enfin pour l'article sur mon horloge, donnez moi un peu de temps. Si vous voulez la mettre sur le blog, relisez-moi avant pour apporter les corrections que vous jugerez bonnes. Ou dois-je le poster?

Guillaume

  • Global Moderator
  • Full Member
  • *****
  • Messages: 204
    • Voir le profil
    • Locoduino
Re : Un Arduino par module....ou pas.
« Réponse #14 le: février 02, 2015, 08:28:09 pm »
Ben tout dépend de comment tu voudrais faire. Il faudra réfléchir avant de se lancer.

Sinon si DCC cela veut dire que tu transforme ton arduino en décodeur mais tu n'es pas obligé de connaître tous les numéros, nicolas a fait un joli article avec le xpress.

Par programme changé 2-3 fois, tu penses plutot à lancer ou pas l'animation ?
G.