Mesure de température - DS18B20
De Wiki L.A.B
Révision de 8 décembre 2015 à 20:06 par Adminsys (discussion | contributions) (Page créée avec « droite Le DS18B20 est un capteur de température numérique produit par DALLAS US. Il peut être utilisé pour quantifier la tempéra... »)
Le DS18B20 est un capteur de température numérique produit par DALLAS US. Il peut être utilisé pour quantifier la température de l'environnement.
La plage de température -55 ~ 125 °C, la résolution de température est de 0,5 °C. Il dispose d'une sortie série 9-12 bits. Il se connecte avec seulement 3 fils (5v, 0v, et une ligne de données). Plusieurs capteurs peuvent se brancher sur la même ligne de données.
Matériel
- Arduino Uno
- Plaque d'essai (breadbord)
- Capteur 18B20 de chez DFRobot
- Straps ou fils de liaison
Montage
Programme
Voici le programme qu'il faut éditer dans l'IDE Arduino, puis compiler et charger dans la carte Arduino. Il utilise une librairie.
#include <OneWire.h>
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 2
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
float temperature = getTemp();
Serial.println(temperature);
delay(1000); //just here to slow down the output so it is easier to read
}
float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}
if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return -1000;
}
if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print("Device is not recognized");
return -1000;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end
byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for (int i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
}
ds.reset_search();
byte MSB = data[1];
byte LSB = data[0];
float tempRead = ((MSB << 8) | LSB); //using two's compliment
float TemperatureSum = tempRead / 16;
return TemperatureSum;
}