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:

  1. Podłącz GND czujnika do GND Arduino.
  2. Podłącz VDD do 5 V (lub 3,3 V dla płytek ESP/NodeMCU).
  3. Podłącz DQ do wybranego pinu cyfrowego, np. D2.
  4. 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:

  1. Otwórz Arduino IDE.
  2. Przejdź do: Szkic > Dołącz bibliotekę > Zarządzaj bibliotekami.
  3. 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.