Pages: [1] 2   Go Down
Author Topic: Faire papoter deux Arduino entre elles  (Read 2238 times)
0 Members and 1 Guest are viewing this topic.
france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir à tous !

J'espère que vous allez tous bien,

j'ai une question pour vous, comment faire discuter deux Arduino entre elles ?
Je m'explique, c'est un peu vague tel quel !
Imaginons que nous avons deux Arduino, je souhaite que l'une commande l'autre en fonction des informations qu'elle recoie par exemple.

Exemple: Arduino2 recoit l'ordre X, elle envoie donc l'information Z à Arduino1 qui elle va comparer cela avec d'autres paramètres. Puis Arduino1 va concevoir d'envoyer l'ordre Y à l'Arduino2, qui elle va en recevant l'ordre Y effectuer la tache H.

Voilà pour la petite histoire >< Cependant il faudrait pouvoir mettre en place plus d'Arduno type Arduino2 sous les ordres d'Arduino1.
Mon problème est comment faire transvaser ces/des informations entre elle ?
J'ai pensé à l'Ethernet mais trop encombrant en cable et coût si il y a 10 Arduino du type Arduino2...
Le Rx/Tx mélangé de toutes pourrait fonctionner ?

Merci d'avance de vos solutions à toutes et à tous !

Jean-Baptiste
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 278
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Il y a des émetteurs/recepteurs sans fil qui peuvent faire ça, faire une recherche sur "NRF24L01" par exemple, ça coute pas bien cher et ça s'achète par deux souvent, un pour chaque arduino. Moins de 10€ sur eBay par exemple.

Après faut voir la distance qui sépare les deux Arduino.

Si quelqu'un connait la distance que peut couvrir le NRF24L01 2.4Ghz ?
« Last Edit: November 06, 2011, 03:46:23 pm by arduimat » Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'avais pensé au Rx/Tx, mais dans un dialogue, il faut que le Rx de l'une soit connecté au Tx de l'autre et inversement, ce qui fait que c'est pas possible (un ordre contenant une adresse, oui, mais il faut que toutes les autres cartes l'entendent pour savoir à qui ça s'adresse, dans ce cas, toutes les Rx doivent être reliées... Ca ne marche que si une seule est maître et toutes les autres esclave).

Reste le TWI (I2C), un data, un clk et un ground... ça marche. Et les petits modules RF genre xbee et toute la clique? c'est plus cher, mais...

EDIT : j'ai relu... si arduino1 est le seul maître, et que toutes les autres acceptent de la boucler tant qu'on leur demande rien, alors tu peux passer en Serial : tu envoies un premier octet d'adresse, tes données / ordres, un octet de fin d'ordre pourquoi pas et roule. Dans ce cas, le Tx de arduino1 est relié à tous les Rx des autres, et le Rx1 aux Tx des autres. Il faut juste qu'un esclave ne tente pas de causer si c'est pas son tour... Le maître cause et entend, mais chaque esclave ne peut entendre ce que raconte un autre esclave. Tu peux en même temps avoir une adresse neutre, qui fait que tous les esclaves écoutent l'ordre, créer une adresse de groupe (reconnue par deux esclaves par ex...) etc etc. A voir ensuite les longueurs de ligne, mais ça ne devrait pas poser de problème.
« Last Edit: November 06, 2011, 03:53:17 pm by Super_Cinci » Logged

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pour revenir au Rx/Tx, on ne peut pas dans l'ordre on peut pas rajouter une partie, ce qui fait que toutes les arduino esclave vont le recevoir mais seulement une sait qu'elle doit réagir car c'est la partie qui lui correspond.

Je sais je m'explique mal mais c'est compliqué à expliquer =/

Sinon la soluce par wifi me plait beaucoup aussi ! Il y aura maximum 20mètres entres les Arduino...

A vous de me guider =)
Logged

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

EDIT : j'ai relu... si arduino1 est le seul maître, et que toutes les autres acceptent de la boucler tant qu'on leur demande rien, alors tu peux passer en Serial : tu envoies un premier octet d'adresse, tes données / ordres, un octet de fin d'ordre pourquoi pas et roule. Dans ce cas, le Tx de arduino1 est relié à tous les Rx des autres, et le Rx1 aux Tx des autres. Il faut juste qu'un esclave ne tente pas de causer si c'est pas son tour... Le maître cause et entend, mais chaque esclave ne peut entendre ce que raconte un autre esclave. Tu peux en même temps avoir une adresse neutre, qui fait que tous les esclaves écoutent l'ordre, créer une adresse de groupe (reconnue par deux esclaves par ex...) etc etc. A voir ensuite les longueurs de ligne, mais ça ne devrait pas poser de problème.

Oui oui oui ouiiiiiiiiiiiiiiiiii !!! ><

C'est exactement ça !!! Donc c'est possible ?
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

t'as pas vu mon édit (ah ben si, tu l'as vu...),

Les sorties Tx sont à collecteur ouvert, donc tu peux les mettre en parallèle (en vérifiant que les résistances de pull-up ne deviennent pas trop nombreuses : si c'est 4.7K par exemple, avec 10 arduinos, tu arrives à 470 ohms, ce qui commence à faire hard. Tu divises la valeur de la résistance par le nombre de connectés)

Le mode adresse : un premier octet d'adressage, celui qui a cette adresse écoute la suite, pas les autres qui feront un flush quand la transmission sera terminée), puis le ou les ordres, question etc etc et on finit par un code "fin de transmission" pour remettre tout le monde en mode W&S...
si l'adresse est 0x00, alors tout le monde écoute l'ordre (genre reset général).
si l'adresse est 0x02, alors l'arduino 2 écoute l'ordre,
si l'adresse est 0xF0, alors les arduinos du groupe 0 écoutent l'ordre,
si l'adresse est 0xF1, alors les arduinos du groupe 1 écoutent l'ordre...

Ca te laisse pas mal de libertés, à tester sur de grandes distances, quitte à mettre un ampli de ligne de temps en temps en étudiant le sens des données sur le fil...

EDIT : pense à prévoir de déconnecter les Rx/Tx si tu dois faire une MAJ du soft sur une de tes cartes, car ça risque de mettre le bazar chez les autres, voire de t'empêcher de faire ta MAJ
« Last Edit: November 06, 2011, 04:11:32 pm by Super_Cinci » Logged

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok super =)

Si les résistances de pull-up deviennes trop nombreuses je rajoute une résistance ? =)

Merci encore, l'idée est comprise !

Mais je vais avoir besoin de votre aide pour mettre tout cela en route...

Rien que pour l'adresse et la réception des ordres.

Sinon un petit schéma avec les arduino et les/la résistance si nécessaire ? =)

Merci encore !
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



Ca, c'est le principe de connexion entre tes cartes, avec des flèches qui indiquent le sens des infos. Arduino1 en maître, les autres en esclave.

Ne rajoute pas de résistances, mais des amplis, pourquoi pas des optos, peut-être ce qu'il y a de plus simple :



C'est pas optimal, mais ça marche. Je pense qu'il existe des amplis de ligne, mais j'en ai pas sous la main...

Pour la suite, il faut que tu prennes papier crayon et que tu définisses un protocole de transmission (un langage) afin que chaque arduino s'y retrouve.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello,

Pour mettre plusieurs ATmega sur le même bus série, tu as des options qui facilitent les choses, notamment l'adressage.
Je ne m'en suis jamais servi, mais tu devrais jeter un oeil à la section 22.8 Multi-processor Communication Mode dans la documentation d'Atmel !
(Lien)
Logged

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir à tous,
merci à tous tout d'abord pour votre aide =)

J'ai un peu travaillé le sujet aujourd'hui, il me semble que passer par ces petits modules de transmissions NRF24L01 reste le plus simple !
Ai-je tord ?

Celui-ci conviendrai ? http://cgi.ebay.fr/NRF24L01-Wireless-Transceiver-Module-2-4GHz-Arduino-x1-/320771905186?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item4aaf7ed6a2#ht_849wt_1157

Merci encore à tous

NB Est-ce possible de mettre sur une arduino Mega l'ethernet Shiel, avec le module de transmission, plus un ecran lcd type 2*16, tout en gardant des entrées analogiques disponibles ?
« Last Edit: November 07, 2011, 12:39:09 pm by Jean & Jean-Baptiste » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Pour faire communiquer plusieurs arduino il y a énormement de solutions :
Filaire :
- UART (aka serial) -> un maitre et n esclaves,
- SPI -> un bus commun et un "chip enable" pour chaque esclaves,
- I2C -> bus 2fils trés commun, trés simple à mettre en oeuvre avec la librairie Wire (que ce soit en esclave ou en maitre),
- RS485 -> équivalent du rs-232 pour les ordinateurs mais en tension différentielle (= fils beaucoup plus long sans interférences),
- Ethernet -> sans commentaires.

Sans fils :
- nRF24L01 -> portance relativement courte (<100m sur terrain dégagé, <10m si il y a un obstacle), trés simple d'utilisation avec arduino,
- wifi -> tout dépend de la shield wifi, certaine sont trés puissante d'autre moyenne,
- zigBee -> les version pro en 60mW peuvent porté sur +1Km, les version "normal" sur une 100aine de mètres, utilisation trés commune pour faire des "nodes" arduino,
- bluetooth -> portée assez limité, cout relativement élevé mais l'avantage d'étre un standard (téléphone, certain ordi, shield arduino, ...),
- module "transceiver" 433MHz -> trés low-cost (<6€) porté de 50m environ, demande un encodage logiciel (manchester avec virtualwire par exemple),
- Infrarouge -> porté trés courte mais relativement simple à mettre en place.

Si quelqu'un connait la distance que peut couvrir le NRF24L01 2.4Ghz ?
Sa va de 10m avec le nRF24l01, à 100m avec un nRF24l01+ et une antenne cms, avec une antenne externe sa peut porté sur 1km max (valeur en terrain dégagé, au moindre obstacle il faut diviser la distance par 2).

Quote
NB Est-ce possible de mettre sur une arduino Mega l'ethernet Shiel, avec le module de transmission, plus un ecran lcd type 2*16, tout en gardant des entrées analogiques disponibles ?
Sans aucun probléme, pour connecter un lcd il faut en gros 7 broche digitale, la mega en possède 54.

PS: pas de liens ebay, ne donne pas du taff en plus à Jean-Francois, le titre du produit et le nom du vendeur suffit smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il serait donc possible de faire discuter plusieurs cartes avec le module nRF24L01 toutes sur le même canal ? =)

merci encore !!
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3655
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quelque soit le protocole, c'est quasiment toujours possible : il suffit de gérer un système d'adressage. Plus concrètement ça peut consister à envoyer une adresse avant le message, et le récepteur réagira ou non suivant que l'adresse soit la sienne ou pas. Après il faut gérer les éventuels conflits : par exemple si deux émetteurs émettent en simulatané, comment le récepteur va gérer les deux messages ...
Logged


france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok super merci
Logged

Forum Moderator
Toulouse / France
Offline Offline
Full Member
*****
Karma: 5
Posts: 241
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

un post de ce jour sur Hackaday évoque la solution I2C
http://rodelectronics.blogspot.com/2010/03/expand-io-ports-with-another-arduino.html



Simple et efficace

Lionel

Logged

- Distributeur officiel Arduino - France

Pages: [1] 2   Go Up
Jump to: