Sondes DS18B20 et Arduino Uno

Bonjour à tous.
Nouveau sur ce forum, et juste dégrossi en Arduino.
Je cherche à contrôler 6 sondes DS18B20 avec un Arduino Uno, et je me suis basé sur les tutos de "carnet du maker".
Chaque sonde fonctionne individuellement, c'est à dire renvoie une adresse valide et une température.
Tant que je branche sur le bus 1-Wire 1, 2, 3, ou 4 sondes, tout marche bien.
Mais au delà de 4, ça plante. Toutes les températures affichent 0,0.
Le test avec le "scanner OneWire" stoppe sur la condition if(!ds.search(address)).
L'un de vous aurait-il une idée sur l'origine du problème?
Merci d'avance.

Bonjour
-mode de fonctionnement des sondes ? 3 fils ou 2 seulement (mode parasite) ?
-longueur du câblage ?

Test possible : relever les adresses en montage individuel puis tenter de faire des mesures avec plus de 4 sondes en adressage direct (expliqué sur le site'Carnet du Maker')
La limite vient peut être du scanner I2C de Skywodd (= Carnet du Maker) et de son timing d'affichage des adresses trouvées.

Bonjour Eterlous

Eterlous:
Le test avec le "scanner OneWire" stoppe sur la condition if(!ds.search(address)).

""if(!ds.search(address)"".

Ah! une seule instruction ?
Et cela compile?

Cordialement,
bidouilleelec

Oui cela compile parce que :

  1. le résultat de ce qu'il y a entre les parenthèses est un booléen qui ne prend que les valeurs FALSE OU TRUE
  2. Par convention, au moins dans le C/C++, dans les conditions if, while si ce qu'il y a entre les parenthèses de la condition est une valeur numérique :
    0 est considéré comme FALSE
    Toutes les autres valeurs sont considérées comme TRUE, même les négatives.

Ecrire if (digitalRead(machin) == 1) est parfaitement équivalent à écrire if (digitalRead(machin ))

C'est juste une question de choix : concision ou lisibilité.

Merci Al1fch,
Le branchement est en 3 fils, les longueurs sont inférieures à 3 mètres, avec du cable 0,75 mm2.
Les mesures sont faites en adressage direct.
Il y a un delay de 4 secondes entre chaque cycle de mesure.
Je vais essayer en rajoutant un delay(10) entre chaque mesure individuelle.

Bonjour

As-tu bien ajouté la résistance de 4k7 entre VCC et DQ?

Est-ce que chaque sonde fonctionne individuellement?
Relever son identifiant interne (en principe unique).

Est-ce que le symtôme "jusqu'à 4 OK, à partir de 5 KO" est le même quel que soit l'ordre dans lequel les sondes sont branchées?

(re)Vérifier que le cablage est correct, car il est facile d'inverser deux fils (et pour une sonde montée d'usine sur un cable trois brins, de provenance incertaine, ne pas faire aveuglément confiance à la couleur des fils)

Ce n'est pas parce que les sondes PEUVENT être branchées sur la même pin qu'elles DOIVENT l'être.
Si l'arduino dispose de pins disponibles, les sondes peuvent aussi y être réparties.
Mettre plusieurs sondes sur la même pin oblige à gérer leurs identifiants pour les repérer. Ce n'est pas une grosse affaire, mais pour la maintenance ultérieure, si une sonde défaillante doit être remplacée, il vaut mieux ne pas être obligé de devoir retoucher le programme pour le recompiler.
Donc plusieurs sondes sur le même fil ok, mais à condition que le programme embarque tout ce qu'il faut pour être en mesure de gérer correctement un remplacement de sonde à chaud. Et là c'est moins trivial.

Merci Bricoleau.
Selon ta suggestion, j'ai créé un second bus, pour lui affecter les sondes 5 et 6 qui ne fonctionnaient pas sur le bus unique.
Et ça marche!!!
Je ne comprends donc toujours pas quelle est la cause du problème, mais puisqu'il y a une solution pour le contourner, je m'en contenterai. Merci encore.

En supposant un problème électrique, lié par exemple à l'impédance des cables de 3 mètres qui partent en étoile depuis l'arduino, il serait peut-être plus sécure de répartir les sondes en 3 + 3 au lieu de 4 + 2.

Tu as raison, je vais le faire.

Eterlous:
Tu as raison, je vais le faire.

Bonsoir
un lien à lire absolument

:grin:
lorsque l’on veut jouer un peu serieusement avec du 1-Wire®

Document très instructif.
Merci Artouste.