Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

The DS18B20 1-Wire digital temperature sensor from Maxim IC reports degrees C with 9 to 12-bit precision, -55C to 125C (+/-0.5C). Each sensor has a unique 64-Bit Serial number etched into it - allows for a huge number of sensors to be used on one data bus.

Wiring the DS18B20



Normal Power Mode

Image Added


Parasitic Power Mode

Image Added


Arduino Sample Code


Code Block
languagecpp
themeFadeToGrey
linenumberstrue
#include <OneWire.h>
#include <DallasTemperature.h>
 
int#define DS18S20PIN_Pin = 7; //DS18S20 Signal pin on digital 7
 
//Temperature chip i/oTEMPERATURE 4

OneWire dsoneWire(DS18S20PIN_PinTEMPERATURE); // on digital pin 7
 
void setup(void) {
 Serial.begin(9600); //Start Serial Communication Baud Rate 9600
}
 
void loop(void) {
 float temperature = getTemp();
 Serial.println(temperature);
 
 delay(100); //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;
 
}
DallasTemperature sensors(&oneWire);

float currentTemp = 0;


void setup() {

  Serial.begin(115200);
  
}

void loop() {

  sensors.requestTemperatures(); 
  currentTemp = sensors.getTempCByIndex(0);
  
  Serial.print("Temperature: ");
  Serial.println(currentTemp);
  
  delay(500);

}





References

ReferenceURL
Product Sheethttps://www.maximintegrated.com/en/products/sensors/DS18B20.html
Interfacing DS18B20 1-Wire Digital Temperature Sensor with Arduinohttps://lastminuteengineers.com/ds18b20-arduino-tutorial/
Arduino Temperature Control Libraryhttps://github.com/milesburton/Arduino-Temperature-Control-Library
MAX31850 OneWire Libraryhttps://github.com/adafruit/MAX31850_OneWire

How to measure temperature with your Arduino and a DS18B20

https://www.tweaking4all.com/hardware/arduino/arduino-ds18b20-temperature-sensor/