Communication 433 Mhz entre plusieurs arduino

Bonjour,

J'ai développé un système permettant de communiquer entre plusieurs arduino à l'aide d’émetteur et de récepteur 433Mhz. Actuellement j'ai 3 carte chacune composée d'un émetteur et d'un récepteur . Une carte (maître) permet : *d'envoyer un instruction * de recevoir les réponses des autres arduino.

Les deux autres cartes (ou plus) (esclaves) permettent: * de recevoir les instructions envoyées part la carte "maître". * de renvoyer un accusé de réception. * ou de renvoyer l'instruction reçu si elle ne lui est pas destinée.

Le problème que je rencontre: * Si une carte "esclave" envoie un accusé de réception en même temps qu'une autre ( qui renvoi elle aussi un accusé de réception ou l'instruction qui ne lui est pas destinée) , la carte "maître" ne reçois pas ce que les "esclaves" envoie.

Auriez vous une idée pour résoudre mon problème?

Merci d'avance

Salut,

Plusieurs solutions possible, la plus robuste selon moi : puisque tu as un maitre, c'est lui qui "demande" à chaque module tout simplement. Ainsi un module esclave ne peut envoyer l'info que si le maitre l'a demandé, donc aucune chance qu'il y ait un conflit avec un autre esclave. Ca implique simplement d'implanté un système d'adressage, par exemple le premier byte envoyé correspondra à l'adresse, à la réception les esclave lisent ce premier byte d'abord, si ça correspond à leur adresse ils répondent, sinon le buffer est vidé.

je fonctionne déjà avec un système d’adressage, mais chaque esclave est aussi un répéteur ce qui me permet de placer des cartes assez loin du maître.
Parfois un esclave est entrain de répéter alors que l’esclave qui a bien reçu la commande est entrain de renvoyer l’accusé
Je vous joins deux exemples visuel:

Ton installation fonctionne comme un BUS. Tu peux faire des recherches sur internet pour voir les techniques utilises dite anti conflit ou anti superposition.

Voilà une petite idée toute simple vu que tu peux écouter le "réseaux" pourquoi ne pas vérifier que personne n'écrit sur le BUS avant de communiquer une information. En gros je ne parle que lorsque personne ne parle . Sur le principe ça fonctionne. Après faut faire des tests.

Sujet intéressant

Bon courage :)

Oui c'est une idée d’écouter le réseau et attendre qu'il soit libre mais l'information peut être longue à revenir au maître donc pas forcement idéal.

Dans ce cas il suffit de répéter mais avec un delais supérieur à la réception + traitement par un autre module,

Je pensais aussi à cette solution mais je me demandais s'il n'y avait pas mieux car si je multiplie les esclaves je risque de rencontrer le nouveau problème. Une fois ce problème résolu, j'aurai un système "Mesh" fonctionnel. Il me semble qu'@Infobarquee a voulu faire quelque chose de similaire il y a un petit moment mais je n'ai pas trouvé ou cela en été.

Il suffit de faire en sorte que le délai soit fonction de l'adresse, ainsi pas de répétition simultanée, et d'utiliser d'autres byte pour signaler que le signal a déjà été répété par tel module (sinon un module va répéter un message d'un autre module, qui va le répéter à ce module et ainsi de suite ...

ok, je vais voir pour faire comme ça alors. C'est une solution que j'avais envisagé mais j'espérait qu'il y aurait plus simple ;) A voir par la suite s'il n'y a pas un risque de perturbation par d'autre facteur. Le tout serait pour s'orienter vers de la domotique

Je ne sais pas quelle distance tu souhaites atteindre pour faire ce système de répétition de l'information mais avec des émetteurs low cost on arrive facilement a couvrir une grande maison ( si mur pas trop épais )

Après tu peux faire un bit ACK d'acquittement de l'information par tes modules. Du style tu émets ta trame et au moment de l'acquittement ton émetteur vérifies si le bit est positionné a la bonne valeur.

Ou alors tu pars du principe que tu connais les récepteurs qui seront trop éloigné du maître et tu fais un algo pour ton esclave le plus proche sois au courant .

Ça peut même d'automatiser ce genre de chose . Pour que chaque esclave savent si oui ou non il doit répéter.

Enfin bon plein de solution mais concrètement je pense pas que tout fonctionne. Tourne toi vers les protocoles de communication qui ressemble a ton projet.

Bon courage

Justement j'ai des murs épais à franchir, et je souhaiterais mettre un esclave à l’extérieur. Auriez vous une idée pour savoir qu'un esclave a déjà renvoyé les données qui ne lui étaient pas destinée? De même comment savoir si la fréquence est disponible pour envoyer les données?

Merci

Les modules bluetooth me semblent plus adaptés à ton projet de réseau domotique.

La portée est moins importante en bluetooth. Est-ce que quelqu'un a déjà essayé les modules nRF24L01+ , est il possible d’émettre et de recevoir en même temps?

Merci d'avance

Si tu veux rester dans les 433, il y a les modules APC220: http://www.dx.com/fr/p/arduino-apc220-wireless-rf-modules-w-antennas-usb-converter-143011#.U9dkLvmKVJk

Ils sont au top! Petite interface graphique Windows pour les configurer, portée de 800m.

Je les ai pas testé en extérieur pour l'instant pour voir la portée à laquelle j'arrive, mais déjà rien que pour les brancher et les paramétrer c'est que du bonheur...

ça dépend du type de bluetooth

Je ne pense pas m'orienter de nouveau vers un système en 433Mhz , puisqu'il y a de forte chance que je perde des données ( c'est le cas si deux esclaves envoient en même temps des données au maître.)