[Conseil] Pilotage d'un réseau de trains miniatures

Bonjour,

Je suis nouveau sur ce forum car j'ai découvert il y a quelques jours les cartes Arduino et elles me semblent vraiment intéressantes.

Je ne suis pas un expert en électronique (des connaissances vieilles d'au moins 25 ans) et je n'y connais rien en microcontrôleur. La programmation d'applications de gestion je connais mais pas la programmation en "temps réel". J'aimerais bien réaliser mon projet ou une partie de celui-ci avec une ou plusieurs cartes Arduino.

Comme mon titre le dit, j'aimerais "piloter" mon réseau avec un microcontrôleur. Mon réseau se compose d'environ 15 blocs (cantons, sections,...) chaque bloc à environ 10 entrées (10 * 15 = 150 Entrées) et 5 sorties (10 * 5 = 50 Sorties). J'ai déjà fait des recherches sur le net pour voir si quelqu'un avait déjà réalisé quelque chose de similaire mais je n'ai pas trouvé. J'ai trouvé des articles qui parlent de piloter un train avec un carte Arduino mais rien qui explique comment faire lorsque l'on a autant d'E/S. C'est toujours le pilotage d'un train avec accélération et freinage avec des ponts en H mais c'est tout.

Les questions que j'aimerais vous poser sont :
Qu'elle est l'architecture matériel (nombres de cartes Arduino et lesquelles et l'électronique à mettre autour des cartes) et logiciel dois-je mettre en place pour gérer les 150 E et 50 S ? Il faudrait que l'application soit souple et évolutive pour ajouter des blocs par la suite si nécessaire.
D'autre part, est-ce compliqué à réaliser si plusieurs cartes Arduino devaient être reliées entre elles ?

Dans un premier temps, les entrées et sorties ne sont que des informations de niveau logique (1 ou 0), avec les entrées, je détermine par programmation l'état des sorties. La gestion de la traction (envoie de la tension sur les voies) se fait à l'extérieur de l'Arduino par de l'électronique de puissance. Les niveaux d'entrées peuvent être donnés soit par un bouton, soit par le contact d'un relais, soit par une sortie de l'Arduino qui va sur l'entrée d'une autre carte Arduino (à voir si ça c'est possible).

Si vous avez besoin d'autres informations pour pouvoir me répondre, n'hésiter pas à me le demander.

D'avance je vous remercie pour vos réponses que je me réjouis d'ores et déjà de lire.

Bien cordialement.
Dbe8f

Désolé réponse brève une course urgente ^^' :

Il faut faire du multiplexage. Typiquement utiliser des CI comme le PCF8574 / 8575, le plus gros que j'ai pu trouver vite fait : http://docs-europe.electrocomponents.com/webdocs/0b4d/0900766b80b4d994.pdf

Il faudrait que l'application soit souple et évolutive pour ajouter des blocs par la suite si nécessaire

Je serais tenté de proposer une arduino mini par bloc. Une arduino c'est 13 entrées sorties logiques + 6 entrées analogiques qui peuvent aussi être utilisées en entrées/sorties logiques soit au maximum 19 entrées/sorties logiques auxquelles ils faut retirer quelques broches pour la communication (voir plus loin). Cela couvre ton besoin de 10 entrées et 5 sorties pour un bloc. Ces cartes ne sont pas particulièrement chères une dizaine d'euros sur le net surtout si tu en prends plusieurs. Les blocs sont ainsi indépendants les uns des autres. Le code peut être commun par contre.

Après pour les faire parler ensemble, il y a du choix:
Avec un maitre:

  • un bus RS485 avec un maitre qui interroge les cartes esclaves. Sans doute le plus simple d'un point de vue hard et soft.
  • un bus SPI avec un maitre qui interroge les cartes esclaves. Le problème du SPI c'est le chip select vers les prériphériques.
    Sans maitre
  • un bus RS485 multi-maitres les cartes parlant à tour de rôle avec leurs voisines et s'autogérant. Le système n'ayant pas de maitre est normalement plus fiable mais le problème des carambolages sur le bus peut être pénalisant avec de nombreux acteurs sur le bus.
  • le RX d'une carte sur le TX de sa voisine et ainsi de suite pour faire une espèce de daisy-chain. Sans doute pas très efficace.

D'autre part, est-ce compliqué à réaliser si plusieurs cartes Arduino devaient être reliées entre elles ?

Si l'architecture que tu retiens colle bien à ton besoin tu ne devrais normalement pas avoir de grosses difficultés.
Par contre cela nécessite un bon travail en amont pour identifier les besoins aussi matériels que logiciels:

  • quelles sont les informations à échanger entre qui et qui.
  • faut-il centraliser le traitement ou peut-il être morcelé et déporté localement (architecture sans maitre)
  • quel niveau d'évolutivité veux-tu?

Bonsoir,

Merci à B@tto pour ta réponse. J'ai regardé ces expanders, cela à l'air intéressant mais un peu compliqué à mettre en oeuvre (pour moi) lorsque l'on n'a pas d'expérience en électronique. Toutefois, je garde en tête cette possibilité.

Merci à fdufnews pour cette réponse. Elle me plaît bien, je souhaitais et j'espérais un peu une réponse dans ce sens, mettre un carte Arduino par bloc est intéressante et souple et cela ne me pose pas de problèmes.

fdufnews:
Les blocs sont ainsi indépendants les uns des autres. Le code peut être commun par contre.

Est-ce que cela veut dire qu'il doit y avoir obligatoirement un carte maître pour que le code soit commun ou le même code est chargé dans chaque carte?

Mon idée étant plutôt ce que tu expliques ici :

Sans maitre

  • un bus RS485 multi-maitres les cartes parlant à tour de rôle avec leurs voisines et s'autogérant. Le système n'ayant pas de maitre est normalement plus fiable mais le problème des carambolages sur le bus peut être pénalisant avec de nombreux acteurs sur le bus.
  • le RX d'une carte sur le TX de sa voisine et ainsi de suite pour faire une espèce de daisy-chain. Sans doute pas très efficace.

Ces problèmes de carambolages peuvent ou vont-ils se produire systématiquement et perturber le fonctionnement ?

En imaginant que je choisisse cette configuration avec des cartes MINI, il faudrait acheter également un module de conversion avec port USB pour charger le programme car il me semble que les mini ne possède pas de port USB ou il y a une autre manière de faire (sans se compliquer) ?
Les cartes NANO sont plus chères mais possèdent un port USB, qu'en penses-tu ?

Je me pose une autre question, tu dis :

le RX d'une carte sur le TX de sa voisine et ainsi de suite pour faire une espèce de daisy-chain. Sans doute pas très efficace.

Dans mon cas, une carte X a besoin d'informations provenant de son propre bloc (entrées) et des sorties d'une carte Y (autres entrées de la carte X) pour savoir ce que le bloc doit faire ou comment la carte X doit se comporter pour mettre ses sorties dans le bon état (1 ou 0). Pourquoi aurai-t-on besoin des signaux RX et TX ? Doivent-elles obligatoirement être connectées ainsi pour accepter des entrées provenant de sorties d'une autre carte (j'espère avoir été suffisamment clair) ?

Pour toutes ces questions que tu poses et qui sont pertinentes :

Si l'architecture que tu retiens colle bien à ton besoin tu ne devrais normalement pas avoir de grosses difficultés.
Par contre cela nécessite un bon travail en amont pour identifier les besoins aussi matériels que logiciels:

  • quelles sont les informations à échanger entre qui et qui.
  • faut-il centraliser le traitement ou peut-il être morcelé et déporté localement (architecture sans maitre)
  • quel niveau d'évolutivité veux-tu?

J'y répondrai dans un prochain post car je vais faire un schéma de comment j'imagine l'architecture !!!

En tous les cas, MERCI pour ces premières informations que tu m'as données, elles me permettent d'avancer.
Bonne soirée à tous.
Bien cordialement.

Dbe8f

dbe8f:
Bonsoir,

Merci à fdufnews pour cette réponse. Elle me plaît bien, je souhaitais et j'espérais un peu une réponse dans ce sens, mettre un carte Arduino par bloc est intéressante et souple et cela ne me pose pas de problèmes.

fdufnews:
Les blocs sont ainsi indépendants les uns des autres. Le code peut être commun par contre.

Est-ce que cela veut dire qu'il doit y avoir obligatoirement un carte maître pour que le code soit commun ou le même code est chargé dans chaque carte?

Pour que le code soit commun il faut que tout les blocs aient le même comportement. Ou du moins que la logique de gestion des blocs soit la même pour tout les blocs.
Après s'il y a des exceptions on peut toujours imaginer des paramètres en EEPROM qui activent/désactivent des options du logiciel.
L’intérêt d'avoir un logiciel commun c'est de ne faire qu'un développement et qu'une mise au point.

dbe8f:
Mon idée étant plutôt ce que tu expliques ici :

Sans maitre

  • un bus RS485 multi-maitres les cartes parlant à tour de rôle avec leurs voisines et s'autogérant. Le système n'ayant pas de maitre est normalement plus fiable mais le problème des carambolages sur le bus peut être pénalisant avec de nombreux acteurs sur le bus.
  • le RX d'une carte sur le TX de sa voisine et ainsi de suite pour faire une espèce de daisy-chain. Sans doute pas très efficace.

Ces problèmes de carambolages peuvent ou vont-ils se produire systématiquement et perturber le fonctionnement ?

Lorsque plusieurs intervenant sont susceptibles de parler sur un même bus il peut y avoir des carambolages. Il faut utiliser/développer un protocole de communication qui soit insensible aux carambolages et qui garantisse l'intégrité des échanges.
Le protocole de communication peut être très simple.
Chaque carte est identifiée par un numéro. La carte avec le numéro le plus bas commence à questionner ses voisines. Lorsqu'elle a fini elle passe la main au numéro suivant et ainsi de suite jusqu'à la dernière.
Ou bien la carte avec le numéro le plus bas commence a publier sont état sur le bus (celle qui sont intéressées le capture au passage). Lorsqu'elle a fini la suivante prend le relais et ainsi de suite jusqu'à la dernière.
Il faut bien sur prévoir des sécurités, si une carte ne parle pas dans un temps imparti, on la déclare en panne et la suivante prend son tour.
Ou alors il faut un maître qui synchronise tout le monde.

dbe8f:
En imaginant que je choisisse cette configuration avec des cartes MINI, il faudrait acheter également un module de conversion avec port USB pour charger le programme car il me semble que les mini ne possède pas de port USB ou il y a une autre manière de faire (sans se compliquer) ?
Les cartes NANO sont plus chères mais possèdent un port USB, qu'en penses-tu ?

Pour programmer les cartes Mini il faut effectivement un câble de téléchargement qui doit coûter une quinzaine d'euros.
A toi de faire tes comptes.
Autres avantages de la nano:

  • 2 I/O supplémentaires
  • toutes les broches sont au pas de 2,54mm alors que sur la Mini il y a des broches qui sont décalées.

dbe8f:
Je me pose une autre question, tu dis :

le RX d'une carte sur le TX de sa voisine et ainsi de suite pour faire une espèce de daisy-chain. Sans doute pas très efficace.

Dans mon cas, une carte X a besoin d'informations provenant de son propre bloc (entrées) et des sorties d'une carte Y (autres entrées de la carte X) pour savoir ce que le bloc doit faire ou comment la carte X doit se comporter pour mettre ses sorties dans le bon état (1 ou 0). Pourquoi aurai-t-on besoin des signaux RX et TX ? Doivent-elles obligatoirement être connectées ainsi pour accepter des entrées provenant de sorties d'une autre carte (j'espère avoir été suffisamment clair) ?

C'était juste un exemple d'architecture de communication. Mais comme je l'ai dit elle n'est pas très efficace.
Il vaut mieux privilégier les architectures qui permettent à une carte d'interroger ces voisines ou alors une architecture centralisée avec une carte maître qui interroge tout le monde et qui ensuite distribue un état du système à toutes les cartes.
Ma préférence allant plutôt vers un système distribué (c'est à dire sans maître) car c'est généralement plus robuste aux pannes matérielles. Si une carte tombe en panne le reste du système peut rester fonctionnel pour autant que cela ait été pris en compte à la conception..

Plutôt qu'un multiplexage (complexe pour un non électronicien), ou du multi-cartes par blocs, je verrai plutôt un système centralisé avec une seule carte de commande et des aller/retours d'informations par un simple protocole 2 fils (type i2c, SPI, ou un truc fait maison...).

Donc des connexions asynchrones intelligentes entre plusieurs composants.

On envoie et reçoit les données (ouverture ou fermeture d'un aiguillage par exemple) sous la forme "adresse+donnée" avec un maître et plusieurs esclaves.

Ca utilise seulement 2 broches (DATA + CLOCK) et c'est évolutif à l'infini.
Des DIP switches peuvent servir à coder des adresses sur les actionneurs, avec 10bits=1024 adresses ça couvre tes besoins actuels et futurs.

Bonsoir,

Merci à fdufnews et Christian_R pour vos réponses.

Je vais les prendre dans l'ordre.
En principe tous les blocs ont le même comportement mais effectivement il peut y avoir des exceptions. On peut dire qu'il y a trois types de blocs ceux qui n'ont pas d'aiguillage et ceux qui ont des aiguillages mais là, je pense que par programmation ou par la mise à un certain niveau de certaines entrées cela peut se régler.
Puis il y a les faisceaux d'aiguillages et là le code est sûrement différent. Cela demande en effet une maintenance plus importantes car deux programmes. Je me dis que peut-être par programmation, je pourrai par la suite faire des classes différentes et par des directives de programmation, chaque carte pourra utiliser la bonne classe.

fdufnews:
Lorsque plusieurs intervenant sont susceptibles de parler sur un même bus il peut y avoir des carambolages. Il faut utiliser/développer un protocole de communication qui soit insensible aux carambolages et qui garantisse l'intégrité des échanges.
Le protocole de communication peut être très simple.
Chaque carte est identifiée par un numéro. La carte avec le numéro le plus bas commence à questionner ses voisines. Lorsqu'elle a fini elle passe la main au numéro suivant et ainsi de suite jusqu'à la dernière.
Ou bien la carte avec le numéro le plus bas commence a publier sont état sur le bus (celle qui sont intéressées le capture au passage). Lorsqu'elle a fini la suivante prend le relais et ainsi de suite jusqu'à la dernière.
Il faut bien sur prévoir des sécurités, si une carte ne parle pas dans un temps imparti, on la déclare en panne et la suivante prend son tour.
Ou alors il faut un maître qui synchronise tout le monde.

Pour toute cette partie, je comprends le raisonnement et le principe mais alors la mise en application, je ne vois pas du tout, utiliser ou créer un protocole, donner un ID à une carte, écouter ce qu'il y a sur le bus puis prendre ou pas l'info, ça je ne vois pas comment !!!

fdufnews:
C'était juste un exemple d'architecture de communication. Mais comme je l'ai dit elle n'est pas très efficace.
Il vaut mieux privilégier les architectures qui permettent à une carte d'interroger ces voisines ou alors une architecture centralisée avec une carte maître qui interroge tout le monde et qui ensuite distribue un état du système à toutes les cartes.
Ma préférence allant plutôt vers un système distribué (c'est à dire sans maître) car c'est généralement plus robuste aux pannes matérielles. Si une carte tombe en panne le reste du système peut rester fonctionnel pour autant que cela ait été pris en compte à la conception.

Donc si je comprends bien ce que tu me dis c'est que l'exemple que je joins, qui est l'architecture que je pensais mettre en place, est possible mais pas efficace, ai-je bien compris ?

Ce que tu préconises c'est de développer/utiliser un protocole d'échange et que les cartes communiquent entre elles sans maître. Si c'est bien ça, il s'agit de mettre en place l'architecture matériel comme dans mon document joins mais les liaisons entre les cartes (blocs) seraient différentes ? Est-ce que je suis juste avec mon schéma joins ? Ta solution me plaît bien.

Concernant les réponses de

Christian_R:
je verrai plutôt un système centralisé avec une seule carte de commande et des aller/retours d'informations par un simple protocole 2 fils (type i2c, SPI, ou un truc fait maison...)

Mais comment gérer 150 entrées et 50 sorties sans multiplexage avec une seule carte ? car l'idée de supprimer le multiplexage me plaît bien... je pense plus simple à gérer...

  • Par quoi (composants) les aller/retour se font-ils ?

Christian_R:
Donc des connexions asynchrones intelligentes entre plusieurs composants.

C'est quoi les "entres plusieurs composants" ?

Christian_R:
On envoie et reçoit les données (ouverture ou fermeture d'un aiguillage par exemple) sous la forme "adresse+donnée" avec un maître et plusieurs esclaves.

Je ne suis pas sûr de bien suivre, au-dessus tu dis que tu verrais mieux un système centralisé avec une seule carte, pourrais-tu stp m'expliquer ce que tu entends !!

Christian_R:
Ca utilise seulement 2 broches (DATA + CLOCK) et c'est évolutif à l'infini.

Ca serait génial si évolutif à l'infini, mais j'ai besoin de plus d'explications ou d'un schéma car je ne comprends pas, désolé !!! Je pense que tu veux dire que les esclaves peuvent être mis à l'infini et il suffit de mettre à jour le programme (ou peut-être même pas) ?

Christian_R:
Des DIP switches peuvent servir à coder des adresses sur les actionneurs,

C'est quoi ces actionneurs ?

J'avoue que tes propositions m'intriguent et m'intéressent mais j'ai de la peine à matérialiser tout ça... et le code là derrière, est-il compliqué ?

Merci à vous et je me réjouis déjà de lire vos réponses. J'aimerais vraiment trouver une solution pas trop complexe pour un premier projet.

Bonne soirée
Bien cordialement

Dbe8f

**PS: Pour le document joins, les alimentations ne sont pas là, les E/S sont prises au hasard, c'est juste pour le principe !**Est-ce que les documents joints ne sont visibles que lorsque l'on se logue ? Voyez-vous le document joint ?

Bonsoir,

Est-ce que quelqu'un pourrait me donner un petit coup de pouce pour mon projet.
Pouvez-vous me dire si le schéma que j'ai joint est réalisable voir réaliste ?

Merci pour vos réponses.
Cordialement.

Dbe8f

Bonsoir,
tu n'imagines pas la complexité de ce projet. Une multitude d'Arduino qui communiquent entre eux avec un protocole que tu vas definir !!
Et tu vas faire comment quand il y aura un probleme ? Arduino maitre, Arduino esclave ou protocole ? comment vas tu chercher ?

A mon avis, si la mise en oeuvre d'un PCF8574 / 8575 comme te le propose B@tto est pour toi un obstacle insurmontable alors, passe ton chemin et ne gaspille pas ton argent.

Tu as l'avantage de travailler sur un processus tres lent. A mon avis, un Atmega est parfaitement capable de gerer toutes les entrees et toutes les sorties comme un grand. Quelle difference au niveau du debug. Tu pourras meme envisager de cabler un TCO (tableau de controle optique). La classe.

Amicalement

Un ancien cheminot
Jacques

Bonjour Jacques,

Merci pour ta réponse.

Tu as raison et je suis tout à fait conscient que le projet n'est pas simple. Toutefois, si je regarde le post de fdufnews, il propose de mettre un Arduino mini par bloc. Partant de là, j'ai fait le schéma soumis et l'objet de mon dernier post est justement de savoir si cela est viable. D'après ce que tu dis, pas vraiment et je t'en remercie.

A mon avis, si la mise en oeuvre d'un PCF8574 / 8575 comme te le propose B@tto est pour toi un obstacle insurmontable

L'utilisation de ce composant n'est pas insurmontable pour moi. Je cherche à m'assurer de trouver la meilleure solution et surtout la plus évolutive et la plus simple à mettre en oeuvre. S'il s'avère que c'est celle-ci, j'irai avec celle-ci.
Je me pose aussi une question, sachant que le réseau est dans une pièce d'environ 4m x 4m, il y aura des fils qui auront 4 ou 5 m de long entre le prélèvement d'une signal sur le réseau et le composant PCF85XX, sera-t-elle un problème cette distance pour ce composant ?

Toutefois, j'ai une question concernant mon schéma : J'ai relié 3 cartes Arduino sans utiliser les pins RX, TX, donc a priori sans protocole d'échange, je les ai juste liées entre elles avec des pins d'entrées/sorties.
Si je mets le programme (le-même) dans chaque carte, les cartes ne seront-elles pas autonomes et ne se géreront-elles pas toutes seules en fonction du ou des informations reçues des autres blocs ?
Est-il obligatoire d'avoir un maître et des esclaves, en d'autres termes est-ce obligatoire de communiquer via un protocole ?
Car dans mon cas (je suis peut-être tout faux), j'ai juste des infos qui viennent d'un bloc adjacent et du bloc lui-même, le programme se chargeant de positionner les sorties en fonction de l'état des entrées !!! Si cette réflexion est totalement fausse de ma part, je vous serais très reconnaissant de m'expliquer pourquoi, parce que j'avoue ne pas comprendre où la mise en série des cartes pose un problème. Désolé de poser ces questions mais je ne m'y connais pas du tout en MC !!!
Dans le cas où une partie de ma question n'est pas bien formulée, je la pose différemment, dans mon schéma les lignes que j'ai nommées SENBS (fil gris), FRS (fil vert), DBS (fil jaune) peuvent-elles être reliées entre elles de cette manière ?

Merci si vous pouvez répondre à mes questions.

Bonne journée.
Cordialement

Dbe8f

Bonjour,
la longeur des fils ne pose pas de probleme, tu peux utiliser de coupleurs optiques

une petite question, si tu veux arreter un train qui se trouve a l'autre bout de ton reseau, il faut bien, a mon avis, une liaison entre le poste de commande et le micro qui gere cette partie du reseau. Donc il faut passer par les micro qui se trouvent entre les 2 .

As-tu pensé qu'a chaque "amelioration" de ton programme "esclave" il va falloir debrancher les I/O sur tous les micros, modifier le programme interne et puis tout reconnecter?. Quelle galere !

Jacques

Re-bonjour Jacques,

Merci pour la réponse.

une petite question, si tu veux arreter un train qui se trouve a l'autre bout de ton reseau, il faut bien, a mon avis, une liaison entre le poste de commande et le micro qui gere cette partie du reseau. Donc il faut passer par les micro qui se trouvent entre les 2 .

Pour arrêter un train, il y a deux cas :

  • Soit par la sortie VIT (pin Arduino dans mon schéma flèche verte) qui commande un relais
  • Soit par un inverseur sur le TCO comme par exemple ARO, FOR,.. dans mon schéma.

Je ne sais pas si je réponds à ta question, je ne suis pas sûr de bien comprendre cette phrase :

Donc il faut passer par les micro qui se trouvent entre les 2 .

As-tu pensé qu'a chaque "amelioration" de ton programme "esclave" il va falloir debrancher les I/O sur tous les micros, modifier le programme interne et puis tout reconnecter?. Quelle galere !

Ça je n'y avais pas forcément pensé. Je pensais qu'en débranchant les alimentations cela suffirait, via le port USB, de reprogrammer. Oui, cela peut être la galère.
Toutefois, en créant des connecteurs sur les cartes Arduino, cela est certes un peu embêtant mais pas dramatique !

As-tu des réponses à mes questions (une déjà répondue : longueur de câble) ou as-tu besoin de plus d'informations de ma part ou peut-être que tu n'as pas les réponses ?

En tous les cas, merci déjà pour ce temps consacré.

Cordialement.

Dbe8f

Au final, tu veux gérer quoi en même temps ?
la vitesse et sens de marche de plusieurs trains en simultané + les positions des aiguillages + des capteurs de présence sur des tronçons de voies ?
on a uniquement un seul train par "bloc" ?

Bonjour!

Je suggère aussi de faire une carte dont la fonction sera de sauvegarder tout ce qui passe par le bus, ou au moins le plus important, pour retrouver une éventuelle panne de carte.
Par exemple, si la carte 3 est en panne, la carte 4 envoi un signal sur le bus destiné à la carte qui gère les logs lui informant qu'il y a un problème avec la carte 3, avant de reprendre le protocole là où il en était.

Ca me semble quand même un peu "usine à gaz" de faire communiquer plein de cartes entre elles.
S'il y a moyen de centraliser, ça simplifie beaucoup le montage.

Bonjour à tous,

Un grand merci pour vos réponses et désolé du retard à me manifester mais je n'ai que peu de temps à disposition.

Je tâche tout de même ce week-end de lire vos réponses et d'y répondre.

Bien à vous et bon week-end.

Dbe8f

Salut Dbef8

Ton réseau c'est du HO ou du N ?
Peut être que tu pourrais faire quelque chose plus simple en mixant du radio (sur arduino) et du filaire.
Ta loco (ou le 1er vagon) pourrait embarquer un nano pour piloter démarrage progressif, son, éclairage,tag RFID pour identifier où il est sur le circuit... et du coup tu aurais moins de choses a gérer coté sectionnement (uniquement la sécurité anti-colision ?

Sinon, comme proposé l'idée d'un bus i2C est assez bonne. Par contre ca nécessite un peu plus d'electronique au niveau de chaque capteur/actionneur. Mais ensuite c'est totalement souple et ne nécessite qu'un seul arduino.

Ca m’intéresserait de savoir comment tu modélise ton circuit.