Capteur DS18B20 bloqué à +85°C

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

Le lien vers le capteur qui ne fonctionne pas :
https://www.gotronic.fr/art-capteur-de-temperature-grove-101990019-23842.htm

Et le code :

/*  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)

Amicalement
Aegnor

Le câble fait 2 mètres.
Oui j'ai bien mis la résistance de 4700 ohm, et pour le branchement, je l'ai fait comme ceci :

J'ai oublié de préciser que je n'utilise qu'un seul capteur à la fois, là je travail que sur la sonde étanche.

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 :

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress fish1 = { 0x28, 0x60, 0xAC, 0xA4, 0x08, 0x00, 0x00, 0x4D }; // adresse aqua1 rouge
DeviceAddress fish2 = { 0x28, 0xFF, 0xE7, 0xA7, 0x56, 0x16, 0x03, 0xE2 }; // adresse aqua2 noir

void setup() {
  sensors.begin();
  sensors.setResolution(fish1, 12);
  sensors.setResolution(fish2, 12);
}

void loop(){
Serial.println(sensors.getTempC(fish1));
Serial.println(sensors.getTempC(fish2));
}

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 !

Hum...

Il faut attendre 750 ms entre le lancement de la prise de température et la lecture du registre qui la contient.

Attente qui n'est pas présente dans le tout premier programme ci-dessus

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.

@+