Bonjour, j'ai acheté deux capteurs DS18B20 dont un au format "sonde étanche", et l'autre au format "transistor".
J'arrive parfaitement a faire fonctionner celui au format "transistor" mais j'ai un problème pour l'autre, il me retourne sans cesse une valeur de 85° Celsius (ou 185° Fahrenheit).
/* Pin utilisée :
7 : Capteur température DS18B20
4, 11, 12, 13 : SS, MOSI, MISO, CLK (carte SD)
9 : Moteur
*/
#include <OneWire.h>
OneWire ds(7); // Broche DATA du capteur DS18B20
byte addr[8]; // Contient les adresses du capteur
byte data[9]; // Contient les valeurs du capteur (scratchpad)
float temp;
void setup() {
Serial.begin(9600);
}
void Temperature() {
delay(100);
/* Vérifie qu'un capteur soit trouvé, et vérifie qu'il s'agit d'un DS18B20
La fonction "ds.search()" remplie le tableau "addr" avec les addresses trouvées du capteur
*/
if (ds.search(addr) && addr[0] == 0x28)
{
Serial.print("Capteur DS18B20 trouve");
ds.reset_search();
}
// Sinon, on affiche un msg d'erreur
else
{
Serial.println("Capteur non trouve, ou mauvais capteur ! (DS18B20 seulement)");
return;
}
ds.reset(); // Reset les data du bus
ds.select(addr); // Selectionne l'addresse du capteur
ds.write(0x44, 1); // Envoie une demande de prise de temperature
ds.reset(); // Reset les data du bus
ds.select(addr); // Selectionne l'addresse du capteur
ds.write(0xBE); // Envoie une demande de lecture des valeurs (scratchpad)
/* Ecrit dans le tableau "data" les 9 valeurs du scratchpad */
for (byte i = 0; i < 9; i++)
{
data[i] = ds.read();
}
/* Calcul la temperature en utilisant les données "data[1]" et "data[0]"
* " << " Ajoute 8 "0" a l'écriture binaire du nombre
* " | " Fait un "OU Logique", en binaire, entre la valeur "data[1]" et "data[0]" */
temp = (int16_t) ((data[1] << 8) | data[0]) * 0.0625;
Serial.print(", la temperature est de : ");
Serial.println(temp);
}
void loop() {
Temperature();
}
Bonsoir,
j'ai déjà eu plusieurs fois le soucis...
-127 degrés le capteur n'est pas détecté ou defect
85 degrés c'est un reset
As-tu bien vérifié ton câblage?
Quelle est la longueur du câble pour la sonde étanche?
As-tu bien la résistance de 4.7k qui prend les 2 capteurs ? (Entre VQ et VCC)
As-tu essayé de mettre ton fil bleu derrière la résistance (VQ ==> Résistance ==> Fil bleu) au lieu de le mettre devant (VQ ==> fil bleu ==> résistance)
Pour ton programme, voici une variante un peu plus simple que j'utilise pour les aquariums :
Alors...
Je viens de réessayer avec une carte Arduino de chez moi (car oui, c'est pour un projet au lycée, donc je travaille principalement avec leurs cartes), et avec la mienne ça marche...
Est-ce possible que cela vienne de la version logiciel qui serait peut-être trop ancienne au lycée ?
Ou bien un fonctionnement différent d'une carte à l'autre ?
En tout cas, merci a toi Aegnor de m'avoir répondu !
bricoleau a raison. Utiliser la librairie OneWire pour lire un DS18B20 réclame un peu plus de travail. Le code de ton premier post est un peu trop simpliste.
Sinon, utilise simplement la librairie DallasTemperature qui fera le travail pour toi, et inspire-toi du code fourni par Aegnor1975.