

The DS18B20 is a digital temperature sensor that provides accurate temperature readings in the range of -55°C to +125°C. It communicates over a 1-Wire interface, which simplifies wiring and allows multiple sensors to be connected to a single data line. This makes the DS18B20 an excellent choice for applications requiring temperature monitoring, such as HVAC systems, weather stations, industrial equipment, and home automation projects.








The DS18B20 is a robust and versatile sensor with the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 3.0V to 5.5V |
| Temperature Range | -55°C to +125°C |
| Accuracy | ±0.5°C (from -10°C to +85°C) |
| Resolution | Programmable: 9-bit to 12-bit |
| Interface | 1-Wire |
| Maximum Current (Active) | 1.5 mA |
| Standby Current | 750 nA |
| Conversion Time | 93.75 ms (9-bit) to 750 ms (12-bit) |
| Unique 64-bit ROM Code | Yes |
The DS18B20 is available in a 3-pin TO-92 package or as a waterproof probe. Below is the pin configuration for the TO-92 package:
| Pin | Name | Description |
|---|---|---|
| 1 | GND | Ground connection |
| 2 | DQ | Data line (1-Wire communication) |
| 3 | VDD | Power supply (optional for parasitic power mode) |
For a typical setup, connect the DS18B20 as follows:
Below is an example of how to interface the DS18B20 with an Arduino UNO using the DallasTemperature and OneWire libraries:
#include <OneWire.h>
#include <DallasTemperature.h>
// Pin connected to the DS18B20 data line
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any 1-Wire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass the oneWire reference to DallasTemperature library
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600); // Initialize serial communication
sensors.begin(); // Start the DS18B20 sensor
Serial.println("DS18B20 Temperature Sensor Example");
}
void loop() {
sensors.requestTemperatures(); // Request temperature readings
float temperatureC = sensors.getTempCByIndex(0); // Get temperature in Celsius
if (temperatureC != DEVICE_DISCONNECTED_C) {
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.println(" °C");
} else {
Serial.println("Error: Sensor not detected!");
}
delay(1000); // Wait 1 second before the next reading
}
No Temperature Reading:
Incorrect Temperature Values:
Sensor Not Detected:
Interference with Multiple Sensors:
Q: Can I connect multiple DS18B20 sensors to the same data line?
A: Yes, the DS18B20 supports multiple sensors on a single data line. Each sensor has a unique 64-bit ROM code for identification.
Q: What is the maximum cable length for the DS18B20?
A: The maximum cable length depends on the pull-up resistor value and environmental noise. Typically, lengths up to 30 meters are achievable with a 4.7 kΩ resistor.
Q: Can the DS18B20 operate without a power supply (VDD)?
A: Yes, the DS18B20 can operate in parasitic power mode, drawing power from the data line. However, this mode is less reliable in noisy environments.
Q: How do I increase the accuracy of temperature readings?
A: Use the default 12-bit resolution for maximum accuracy (±0.5°C). Lower resolutions (9-bit to 11-bit) may result in faster readings but reduced accuracy.
By following this documentation, you can effectively integrate the DS18B20 temperature sensor into your projects for reliable and accurate temperature monitoring.