Go Down

Topic: Sondes DS18B20 et Arduino Uno (Read 279 times) previous topic - next topic

Eterlous

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.

al1fch

#1
Nov 26, 2018, 08:41 am Last Edit: Nov 26, 2018, 09:26 am by al1fch
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.

bidouilleelec

Bonjour 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

68tjs

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é.

Eterlous

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.

bricoleau

#5
Nov 26, 2018, 11:51 am Last Edit: Nov 26, 2018, 11:52 am by bricoleau
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.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Eterlous

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.

bricoleau

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.
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Eterlous

Tu as raison, je vais le faire.

Artouste

Tu as raison, je vais le faire.
Bonsoir
un lien à lire absolument   

:smiley-mr-green:
lorsque l'on veut jouer un peu serieusement avec du 1-Wire®



Eterlous

Document très instructif.
Merci Artouste.

Go Up