DS18B20 to jeden z najpopularniejszych cyfrowych czujników temperatury dla Arduino i ESP. Dzięki protokołowi OneWire mierzy od -55 °C do +125 °C z rozdzielczością do 12 bitów, a wiele egzemplarzy można podłączyć do jednego pinu danych. Prosta topologia i cyfrowy odczyt zapewniają szybki start i wysoką niezawodność w projektach DIY oraz IoT.
Czym jest czujnik DS18B20 i dlaczego warto go wybrać?
Czujnik DS18B20 (Maxim Integrated) to cyfrowy termometr o dokładności ±0,5 °C w zakresie -10 °C do +85 °C, dostępny również w wersji wodoodpornej. Pracuje przy napięciu 3,0–5,5 V, więc świetnie współpracuje z Arduino Uno/Nano oraz płytkami ESP (np. NodeMCU).
Najważniejsze korzyści w praktyce to:
- OneWire – pojedyncza linia danych dla wielu czujników, minimalne okablowanie;
- cyfrowy odczyt – brak konieczności używania ADC i kalibracji analogowej;
- unikalny 64‑bitowy adres – jednoznaczna identyfikacja każdego sensora na magistrali;
- tryb pasożytniczy – możliwość pracy na dwóch przewodach (DQ + GND);
- stabilność i powtarzalność – popularne biblioteki i szerokie wsparcie społeczności.
W porównaniu z analogowymi sensorami (np. LM35), DS18B20 oferuje lepszą odporność na zakłócenia, prostsze prowadzenie przewodów i odczyt bezpośrednio w stopniach Celsjusza.
Wyprowadzenia czujnika DS18B20
Czujnik ma tylko trzy wyprowadzenia, co znacząco upraszcza montaż:
- GND – masa zasilania;
- DQ – linia danych (otwarty dren, wymagany rezystor podciągający 4,7 kΩ);
- VDD – zasilanie 3–5,5 V.
W wersji wodoodpornej (stalowa obudowa) przewody zwykle mają kolory: czarny = GND, czerwony = VDD, żółty = DQ.
Podstawowe podłączenie DS18B20 do Arduino – krok po kroku
Do połączenia potrzebujesz płytki stykowej, przewodów oraz rezystora 4,7 kΩ (pull‑up na linii DQ). Schemat standardowego połączenia wygląda następująco:
| Pin Arduino | Pin DS18B20 |
|---|---|
| GND | GND |
| 5 V | VDD |
| Pin cyfrowy (np. 2 lub 10) | DQ + rezystor 4,7 kΩ do 5 V |
Instrukcja montażu:
- Podłącz GND czujnika do GND Arduino.
- Podłącz VDD do 5 V (lub 3,3 V dla płytek ESP/NodeMCU).
- Podłącz DQ do wybranego pinu cyfrowego, np. D2.
- Załóż rezystor 4,7 kΩ między DQ a 5 V (gotowe moduły mogą mieć go wbudowanego).
Ten układ jest stabilny nawet przy przewodach o długości kilku metrów.
Tryb pasożytniczy – podłączenie za pomocą dwóch przewodów
DS18B20 obsługuje tryb zasilania pasożytniczego, w którym VDD łączy się z GND, a czujnik pobiera energię z linii DQ. To idealne rozwiązanie, gdy chcesz ograniczyć liczbę przewodów:
| Pin Arduino | Pin DS18B20 |
|---|---|
| GND | GND i VDD |
| Pin cyfrowy (np. 2) | DQ + rezystor 4,7 kΩ do 5 V |
Uwaga: powyżej 100 °C tryb pasożytniczy może powodować niestabilne wskazania – do wysokich temperatur wybierz zasilanie osobne.
Podłączenie wielu czujników DS18B20 do jednego pinu Arduino
Protokół OneWire umożliwia kaskadowe połączenie wielu czujników na jednym pinie. Podłącz je równolegle, zgodnie z poniższymi wskazówkami:
- GND – połącz wszystkie masy do GND Arduino;
- VDD – połącz wszystkie do 5 V (lub do GND w trybie pasożytniczym);
- DQ – połącz wszystkie do jednego pinu cyfrowego + jeden rezystor 4,7 kΩ do 5 V.
Każdy czujnik ma unikalny adres ROM – zeskanuj magistralę kodem, aby uzyskać ich listę przed przypisaniem nazw.
Instalacja bibliotek w Arduino IDE
Do obsługi czujnika wykorzystaj biblioteki: OneWire (komunikacja) oraz DallasTemperature (warstwa wysokiego poziomu). Instalacja przebiega tak:
- Otwórz Arduino IDE.
- Przejdź do: Szkic > Dołącz bibliotekę > Zarządzaj bibliotekami.
- Wyszukaj i zainstaluj OneWire (autor: Jim Studt) oraz DallasTemperature (autor: Miles Burton).
Przykładowy kod – odczyt temperatury z pojedynczego DS18B20
Ten prosty szkic odczytuje temperaturę co sekundę i wyświetla ją w Monitorze portu szeregowego:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // pin DQ
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
}
void loop() {
sensors.requestTemperatures(); // żądanie pomiaru
float tempC = sensors.getTempCByIndex(0); // pierwszy wykryty czujnik
Serial.print(tempC);
Serial.println("°C");
delay(1000);
}
Wgraj szkic (Ctrl+U), otwórz Monitor portu szeregowego (Ctrl+Shift+M, 9600 b/s) i obserwuj odczyty. W razie potrzeby zmień stałą ONE_WIRE_BUS na używany pin.
Odczyt z wielu czujników – przykład
W przypadku kilku DS18B20 możesz iterować po indeksach lub adresach ROM. Przykład z dwoma czujnikami:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#define SENSORS_NUM 2 // liczba czujników
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
for (int i = 0; i < SENSORS_NUM; i++) {
float tempC = sensors.getTempCByIndex(i);
Serial.print("Czujnik ");
Serial.print(i);
Serial.print(": ");
Serial.print(tempC);
Serial.println("°C");
}
Serial.println("---");
delay(2000);
}
Aby odczytywać po adresach ROM, najpierw uruchom skaner adresów (przykład w bibliotece OneWire), a następnie użyj zwróconych wartości, np.: byte address = {0x28, 0xB1, 0x6D, 0xA1, 0x03, 0x00, 0x00, 0x11}; i wywołaj sensors.getTempC(address);.
Rozdzielczość i konfiguracja DS18B20
Domyślna rozdzielczość to 12 bitów (krok 0,0625 °C). Możesz ją zmienić poleceniem sensors.setResolution(9); (krok 0,5 °C, szybsza konwersja). Liczbę wykrytych urządzeń sprawdzisz przez sensors.getDeviceCount();.
Typowe problemy i rozwiązania
Jeśli pojawią się kłopoty z odczytem, zwróć uwagę na poniższe punkty:
- Brak odczytu (85 °C lub -127 °C) – sprawdź rezystor pull‑up, połączenia oraz poprawną instalację bibliotek;
- Niestabilność w trybie pasożytniczym – przełącz na zasilanie osobne i skróć przewody;
- Płytki ESP (3,3 V) – zasilaj czujnik z 3,3 V; użycie 5 V tylko w zgodnych modułach;
- Długie przewody – stosuj skrętkę, dbaj o wspólną masę, ewentualnie zwiększ pull‑up do 10 kΩ.
Zastosowania w robotyce i elektronice
DS18B20 sprawdza się w wielu projektach, m.in.:
- robotyka – monitoring temperatury silników, przekładni, pakietów Li‑Ion;
- IoT i automatyka – integracja z LCD/OLED, Blynk, MQTT i rejestracją danych;
- akwarystyka i HVAC – wersje wodoodporne do pomiaru wody i instalacji grzewczych.