Sonde de température numérique DS18B20 :

Sonde de température DS18B20

  • Le thermomètre numérique DS18B20 offre une mesure de température sur 9 à 12 bits et possède une fonction d'alarme avec des points de déclenchement supérieurs et inférieurs non volatiles et programmables par l'utilisateur.
  • Le DS18B20 communique via un bus 1-Wire qui, par définition ne nécessite qu'une seule ligne de données (et la masse) pour la communication avec un micro-contrôleur.
  • Il a une plage de température de fonctionnement de -55°C à +125°C et est précis à ± 0,5°C sur la plage de -10°C à +85°C.
  • En outre, le DS18B20 peut dériver la puissance directement à partir de la ligne de données ("puissance parasite"), éliminant le besoin d'une alimentation externe.
  • Chaque DS18B20 a un unique code sur 64 bits en série, qui permet à de multiples DS18B20 de fonctionner sur le même bus one-Wire.
  • Ainsi, un seul micro-contrôleur peut contrôler plusieurs DS18B20 répartis sur une grande surface.

Faible coût : 

Un tutoriel pour le Ds18b20 : http://skyduino.wordpress.com/2012/04/26/arduino-capteur-de-temperature-ds18b20/

Ds18b20 étancheIl existe une version étanche de ce capteur :

 

  • environ 11€ l'unité en France ici
  • 4,18€ avec un câble de 3 mètres vendeurs chinois ici
  • 10PCS Waterproof Digital Thermal Probe or Sensor DS18B20 pour 14.02 € super prix sur Ebay ! http://stores.ebay.fr/czbelectronic

 

 

Utilise la bibliothèque OneWire.h

Code de test :

 #include <OneWire.h> // Inclusion de la librairie OneWire

 
#define DS18B20 0x28     // Adresse 1-Wire du DS18B20
#define BROCHE_ONEWIRE 7 // Broche utilisée pour le bus 1-Wire
 
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
 
// Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur
boolean getTemperature(float *temp){
  byte data[9], addr[8];
  // data : Données lues depuis le scratchpad
  // addr : adresse du module 1-Wire détecté
 
  if (!ds.search(addr)) { // Recherche un module 1-Wire
    ds.reset_search();    // Réinitialise la recherche de module
    return false;         // Retourne une erreur
  }
   
  if (OneWire::crc8(addr, 7) != addr[7]) // Vérifie que l'adresse a été correctement reçue
    return false;                        // Si le message est corrompu on retourne une erreur
 
  if (addr[0] != DS18B20) // Vérifie qu'il s'agit bien d'un DS18B20
    return false;         // Si ce n'est pas le cas on retourne une erreur
 
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
   
  ds.write(0x44, 1);      // On lance une prise de mesure de température
  delay(800);             // Et on attend la fin de la mesure
   
  ds.reset();             // On reset le bus 1-Wire
  ds.select(addr);        // On sélectionne le DS18B20
  ds.write(0xBE);         // On envoie une demande de lecture du scratchpad
 
  for (byte i = 0; i < 9; i++) // On lit le scratchpad
    data[i] = ds.read();       // Et on stock les octets reçus
   
  // Calcul de la température en degré Celsius
  *temp = ((data[1] << 8) | data[0]) * 0.0625;
   
  // Pas d'erreur
  return true;
}
 
// setup()
void setup() {
  Serial.begin(9600); // Initialisation du port série
}
 
// loop()
void loop() {
  float temp;
   
  // Lit la température ambiante à ~1Hz
  if(getTemperature(&temp)) {
     
    // Affiche la température
    Serial.print("Temperature : ");
    Serial.print(temp);
    Serial.write(176); // caractère °
    Serial.write('C');
    Serial.println();
  }
}