Sonde de température numérique 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 :
- 4€ pièce. ici en France
- 9€31 les 10 pièces en chine ici
- 66.98€ les 100 pièces http://stores.ebay.fr/czbelectronic
Un tutoriel pour le Ds18b20 : http://skyduino.wordpress.com/2012/04/26/arduino-capteur-de-temperature-ds18b20/
Il 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-WireOneWire 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'erreurboolean 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-Wireds.reset_search();// Réinitialise la recherche de modulereturnfalse;// Retourne une erreur}if(OneWire::crc8(addr, 7) != addr[7])// Vérifie que l'adresse a été correctement reçuereturnfalse;// Si le message est corrompu on retourne une erreurif(addr[0] != DS18B20)// Vérifie qu'il s'agit bien d'un DS18B20returnfalse;// Si ce n'est pas le cas on retourne une erreurds.reset();// On reset le bus 1-Wireds.select(addr);// On sélectionne le DS18B20ds.write(0x44, 1);// On lance une prise de mesure de températuredelay(800);// Et on attend la fin de la mesureds.reset();// On reset le bus 1-Wireds.select(addr);// On sélectionne le DS18B20ds.write(0xBE);// On envoie une demande de lecture du scratchpadfor(byte i = 0; i < 9; i++)// On lit le scratchpaddata[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'erreurreturntrue;}// setup()voidsetup() {Serial.begin(9600);// Initialisation du port série}// loop()voidloop() {floattemp;// Lit la température ambiante à ~1Hzif(getTemperature(&temp)) {// Affiche la températureSerial.print("Temperature : ");Serial.print(temp);Serial.write(176);// caractère °Serial.write('C');Serial.println();}}