DS18B20 Temperature Sensor

DS18B20 Digital Temperature Sensor
Precision 1-Wire Interface Temperature Measurement for Arduino and Microcontrollers
Introduction
The DS18B20 is a digital temperature sensor with ±0.5°C accuracy over the range of -10°C to +85°C. It uses the 1-Wire communication protocol, allowing multiple sensors to be connected on a single data line.
Key Features
High Accuracy
±0.5°C from -10°C to +85°C
Simple Wiring
1-Wire interface (single data line)
Multi-Drop
Multiple sensors on one bus
Parasitic Power
Can operate without external power
Technical Specifications
Temperature Range | -55°C to +125°C |
---|---|
Accuracy | ±0.5°C (-10°C to +85°C) |
Resolution | User-selectable 9-12 bits |
Supply Voltage | 3.0V to 5.5V |
Current Draw | 1mA (active), 750nA (standby) |
Conversion Time | 750ms max (12-bit resolution) |
Interface | 1-Wire |
Package Options | TO-92, SOIC, µSOP |
Pin Configuration
Pin | Description | Connection |
---|---|---|
1 (GND) | Ground | GND |
2 (DQ) | Data I/O (1-Wire) | Digital Pin (with 4.7KΩ pull-up) |
3 (VDD) | Power Supply (optional) | 3.3V-5V (for powered mode) |
Note: The 4.7KΩ pull-up resistor between DQ and VDD is required for proper operation
Wiring Diagrams
Library Setup
- Install the OneWire and DallasTemperature libraries
- Include the required libraries:
12#include <OneWire.h>#include <DallasTemperature.h> - Initialize the sensor:
1 2 3 4 5 6 7 8 9 |
#define ONE_WIRE_BUS 2 // Data wire connected to digital pin 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); sensors.begin(); } |
Basic Temperature Reading
1 2 3 4 5 6 7 8 9 10 |
void loop() { sensors.requestTemperatures(); // Send command to all sensors float tempC = sensors.getTempCByIndex(0); // First sensor Serial.print("Temperature: "); Serial.print(tempC); Serial.println("°C"); delay(1000); } |
Advanced Features
Multiple Sensors
1 2 3 4 5 6 7 8 9 10 |
void loop() { sensors.requestTemperatures(); // Send command to all sensors float tempC = sensors.getTempCByIndex(0); // First sensor Serial.print("Temperature: "); Serial.print(tempC); Serial.println("°C"); delay(1000); } |
Resolution Control
1 2 3 4 5 6 |
void setHighResolution() { sensors.setResolution(12); // 9-12 bits (0.0625°C resolution) Serial.print("Resolution: "); Serial.println(sensors.getResolution()); } |
Fahrenheit Conversion
1 2 3 4 |
float getTempF() { float tempC = sensors.getTempCByIndex(0); return DallasTemperature::toFahrenheit(tempC); } |
Troubleshooting
Sensor Not Detected
- Verify 4.7KΩ pull-up resistor is installed
- Check wiring connections (GND must be connected)
- Try different digital pin
Incorrect Readings (-127°C)
- Check sensor is properly wired
- Ensure adequate power supply
- Try shorter wires (especially in parasitic mode)
Unstable Values
- Add 0.1μF capacitor between VDD and GND
- Use proper pull-up resistor (4.7KΩ recommended)
- Implement software filtering