Go Down

Topic: Plusieurs Bus sur un même Arduino (Read 2270 times) previous topic - next topic

slash-07

Apr 14, 2015, 06:36 pm Last Edit: Apr 14, 2015, 06:39 pm by slash-07
Bonsoir à tous !  :)

Je veux mettre en place un système d'acquisition de données avec des microcontrôleurs, pour se faire je connecte des capteurs à des Arduino, eux-mêmes liés via un bus I2C. Le bus I2C entre les Arduino est déjà mis en place et fonctionne très bien. :smiley-cool: . Mon Arduino "maitre" envoie les données à l'ordinateur, puis elles sont traitées avec un programme python.

Il s'agit maintenant de connecter les capteurs a mes arduino. Pour ce faire, j'aimerais utiliser un bus  pour économiser mes pins (je veux utiliser des potards sur mes pins analogiques, et je n'ai pas envie d'avoir des cables dans tous les sens   :P ). Des capteurs DALLAS DS18B20 et  DHT22 me conviendraient par exemple, ils sont précis, communément utilisés, peu chers.

Cependant, nombre de ces capteurs utilisent des bus OneWire (non standardisé !), alors que les Arduino sont connectés entre eux avec un bus I2C et qu'ils n'ont qu'un seul pin pour la connexion vers un bus 1Wire et I2C. Est-il possible de faire cohabiter ces deux bus sur un Arduino ? Je me suis penché sur les capteur I2C, ils  ont des inconvénients... Et j'ai besoin par exemple de capteur de température waterproof et les DS18B20 répondent bien a mes spec. Ou le nombre de capteur I2C qu'on peut connecter est limité par l'adressage défini par le constructeur (sonde de température MCP 9808 par exemple). J'aimerais répondre à cette question centrale avant d'acheter tous mes capteurs.  :smiley-sad-blue:

Dans l'idéal j'aurais donc des Arduino et des capteurs connectés avec une seule liaison Data, mais utilisant des protocoles différents.

Merci d'avance pour votre aide !

trimarco232

#1
Apr 14, 2015, 07:37 pm Last Edit: Apr 14, 2015, 08:26 pm by trimarco232
Bonjour slash-07,

Quote
Le bus I2C entre les Arduino est déjà mis en place et fonctionne très bien
Quote
Arduino "maitre" envoie les données à l'ordinateur, puis elles sont traitées avec un programme python
Avec de telles références, la réussite finale de ton projet ne fait aucun doute !

Je prierais les spécialistes du 1 wire de confirmer, mais il me semble que ce bus peut être émulé avec n'importe quelle broche digitale de l'arduino (si tu veux indiquer "ds18" au limier). Tu peux donc connecter autant de capteurs, et les lire à la suite.

Une autre solution serait effectivement d'utiliser les ports i2c, et, pourquoi pas, libérer ceux-ci en reliant les arduinos et le pc par un bus rs485.

En tous cas, vu le nombre de capteurs évoqué, les distances entre les arduinos sont peut-être telles que la solution rs485 est préférable à l'i2c ?

fdufnews

La broche sur laquelle on connecte les composants One Wire est déclarée lorsqu'on instancie l'objet One Wire. Et on peut en créer autant que l'on veut.
Tout est là:http://www.pjrc.com/teensy/td_libs_OneWire.html

Artouste

#3
Apr 14, 2015, 08:36 pm Last Edit: Apr 14, 2015, 08:38 pm by Artouste
bonsoir
Attention à une chose
si les DHTxx fonctionnent en "1 fil" sur un principe approchant , il ne s'agit pas de composant répondant au  protocole 1-Wire® .

le mieux avec arduino est d'utiliser 1 port pour ce qui est du reel 1-Wire , et un autre pour ce qui est "autres" 1 fil

slash-07

Bonjour à tous,

Dans un premier temps, merci pour vos précieuses réponses !

Je prierais les spécialistes du 1 wire de confirmer, mais il me semble que ce bus peut être émulé avec n'importe quelle broche digitale de l'arduino (si tu veux indiquer "ds18" au limier).
La broche sur laquelle on connecte les composants One Wire est déclarée lorsqu'on instancie l'objet One Wire. Et on peut en créer autant que l'on veut.
Tout est là:http://www.pjrc.com/teensy/td_libs_OneWire.html
J'ignorais ce fait ! Avec cela, je peux donc connecter mes capteurs DS18B20 et DHT22 aux pins digitaux que j'aurais choisi, et cela règle tous mes problèmes ! C'est parfait :)

En tous cas, vu le nombre de capteurs évoqué, les distances entre les arduinos sont peut-être telles que la solution rs485 est préférable à l'i2c ?
J'utilise en réalité seulement deux cartes d'acquisition, une commune à mon prototype et mon produit en prod, l'autre utilisé seulement pour les tests et les étapes de validation prototype. Ainsi le passage vers la mise en production sera très simple, je déconnecte la deuxième carte, je supprime quelques lignes de code et hop le tour est joué ;). De plus le bus n'a pas besoin d'être très robuste, l'I²C est simple et standardisé, pour l'instant ça marche sans problème.

Pour le choix de mes cartes d'acquisition, je me tourne vers la Teensy 3.1 qui a l'air très puissante, facile à utiliser (le passage de mes codes sur mon Uno et mon Nano vers la Teensy ont l'air ultra simples !) et très petite. Je vais me pencher sur cette question :)

Clemzo

Pour le choix de mes cartes d'acquisition, je me tourne vers la Teensy 3.1 qui a l'air très puissante, facile à utiliser (le passage de mes codes sur mon Uno et mon Nano vers la Teensy ont l'air ultra simples !) et très petite. Je vais me pencher sur cette question :)
Pour ce type d'encombrement, il existe l'Arduino Pro Mini (mêmes caracteristiques, totalement compatible au niveau du code et beaucoup moins chère :
http://www.aliexpress.com/snapshot/6545004495.html?orderId=66266408483182
ou le Nano :
http://www.ebay.fr/itm/141477148972?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649

Go Up