Jedno źle rozpoznane wyprowadzenie albo brak rezystora podciągającego wystarczy, żeby DS18B20 zwracał błędne odczyty lub nie został wykryty wcale. Pokażę sprawdzony schemat podłączenia czujnika, różnice między zasilaniem klasycznym i pasożytniczym, zasady dla Arduino oraz ESP32, a także sposób diagnozowania typowych problemów.
Trzy przewody i jeden rezystor wystarczą do pewnego odczytu
- VDD podłącz do napięcia zasilania, GND do masy, a DQ do wybranego wejścia cyfrowego.
- Między linię danych DQ a VDD dodaj rezystor podciągający 4,7 kΩ.
- W przypadku ESP32 i ESP8266 użyj zasilania oraz podciągania do 3,3 V.
- Do długich przewodów lepiej wybrać zasilanie trzyprzewodowe niż tryb pasożytniczy.
- Kolory przewodów w wodoodpornych sondach nie są całkowicie uniwersalne, dlatego trzeba sprawdzić je z dokumentacją lub miernikiem.
Najpierw rozpoznaj wyprowadzenia DS18B20
DS18B20 korzysta z magistrali 1-Wire, czyli do komunikacji wykorzystuje jedną linię danych. Sam czujnik potrzebuje jednak jeszcze masy i zasilania, dlatego najstabilniejsze połączenie ma trzy przewody.
W obudowie TO-92, przy patrzeniu na płaską stronę elementu, wyprowadzenia zwykle znajdują się od lewej w kolejności GND, DQ, VDD. Dotyczy to popularnego układu w obudowie tranzystorowej, ale przed podłączeniem zawsze sprawdzam oznaczenie konkretnej wersji. Pomylenie VDD z GND może uszkodzić czujnik.
| Wyprowadzenie | Funkcja | Połączenie z mikrokontrolerem |
|---|---|---|
| GND | Masa układu | GND |
| DQ | Dane magistrali 1-Wire | Wybrany pin GPIO |
| VDD | Zasilanie czujnika | 3,3 V albo 5 V, zależnie od platformy |
Wodoodporne sondy często mają czerwony przewód zasilania, czarny przewód masy oraz żółty albo biały przewód danych. To popularny układ, ale nie należy traktować kolorów jako pewnego standardu. Przy nieznanej sondzie lepiej sprawdzić ciągłość przewodu i oznaczenia płytki lub producenta.
Najpewniejsze podłączenie z zewnętrznym zasilaniem
W praktyce najczęściej wybieram klasyczny wariant trzyprzewodowy. VDD otrzymuje stałe zasilanie, GND trafia do masy, a DQ łączy się z wejściem cyfrowym. Między DQ i VDD trzeba dodać rezystor podciągający 4,7 kΩ.
Rezystor nie jest dodatkiem poprawiającym jakość odczytu, lecz elementem wymaganym przez sposób działania magistrali. Linia 1-Wire jest typu otwarty dren, więc urządzenia potrafią aktywnie zwierać ją do masy, ale nie wystawiają samodzielnie stanu wysokiego.
| Element DS18B20 | Arduino Uno | ESP32 lub ESP8266 |
|---|---|---|
| GND | GND | GND |
| DQ | Wybrany pin cyfrowy, na przykład D2 | Wybrany GPIO, na przykład GPIO 4 |
| VDD | 5 V | 3,3 V |
| Rezystor | 4,7 kΩ między DQ i 5 V | 4,7 kΩ między DQ i 3,3 V |
W przypadku Arduino Uno zasilanie 5 V jest naturalnym wyborem. Dla ESP32 i ESP8266 podciąganie powinno trafiać do 3,3 V, ponieważ ich wejścia GPIO nie są przeznaczone do pracy z poziomem 5 V. Sam czujnik może pracować przy niższym napięciu, więc nie ma potrzeby podawać mu 5 V tylko dlatego, że moduł Arduino ma takie wyjście.
Moduł z gotowym rezystorem
Niektóre płytki z DS18B20 mają już zamontowany rezystor 4,7 kΩ. Jeśli dołożę drugi bez sprawdzenia schematu, rezystancja zastępcza może spaść do około 2,35 kΩ. Przy krótkich przewodach zwykle nie powoduje to katastrofy, ale nie ma sensu obciążać magistrali bez wyraźnej potrzeby.
Najłatwiej sprawdzić płytkę wzrokowo albo zmierzyć rezystancję między DQ i VDD przy odłączonym zasilaniu. Dla gołego czujnika pomiar powinien pokazać brak takiego rezystora, a dla gotowego modułu często będzie widoczna wartość bliska 4,7 kΩ.
Zasilanie pasożytnicze ma zalety, ale wymaga dyscypliny
DS18B20 może działać w trybie parasite power, czyli bez osobnego przewodu zasilającego. W takim układzie VDD łączy się z GND, a układ pobiera energię z linii DQ przez rezystor podciągający.
To rozwiązanie ma sens tam, gdzie doprowadzenie trzeciego przewodu jest trudne. Sam stosuję je raczej przy krótkich połączeniach i prostych układach testowych, ponieważ podczas konwersji temperatury czujnik może potrzebować chwilowo do około 1,5 mA. Słaba linia danych albo długi przewód mogą wtedy powodować reset i losowe wyniki.
| Wariant | Zalety | Ograniczenia |
|---|---|---|
| Zasilanie trzyprzewodowe | Największa stabilność i prostsza diagnostyka | Potrzebny dodatkowy przewód VDD |
| Zasilanie pasożytnicze | Tylko dwa przewody do sondy | Większa wrażliwość na długość przewodu i timing programu |
W trybie pasożytniczym VDD musi być połączone z masą, a program sterujący powinien zapewnić odpowiednio silne podciąganie podczas konwersji. Jeśli dopiero uruchamiasz czujnik, nie zaczynałbym od tego wariantu. Klasyczne trzy przewody pozwalają szybciej odróżnić problem sprzętowy od błędu w kodzie.
Połączenie z Arduino i ESP32 w praktyce
Sam wybór pinu cyfrowego nie jest krytyczny, ale musi zgadzać się z konfiguracją programu. Jeśli przewód DQ trafi do GPIO 4, biblioteka 1-Wire również musi korzystać z GPIO 4. Częsty błąd polega na poprawnym zmontowaniu układu i pozostawieniu w kodzie innego numeru pinu.
Do pierwszego testu podłączam jeden czujnik, przewody możliwie krótko i bez płytki stykowej o luźnych stykach. Dopiero gdy odczyt jest stabilny, dokładam dłuższą sondę, kolejne urządzenia albo prowadzę przewody poza obudowę.
Przeczytaj również: Sonar - co to jest i jak działa? Przewodnik po technologii
Jeden przewód danych, wiele czujników
Każdy DS18B20 ma własny, unikalny 64-bitowy identyfikator. Dzięki temu kilka czujników może pracować na jednej magistrali, pod warunkiem że wszystkie mają wspólne GND, wspólną linię DQ i odpowiednio dobrane zasilanie.
Przy kilku sondach nie tworzę rozbudowanej topologii gwiazdy. Krótkie odgałęzienia zwykle działają, ale długie rozgałęzienia zwiększają pojemność przewodów i pogarszają kształt sygnału. Układ liniowy z krótkimi odczepami jest zazwyczaj bardziej przewidywalny.
Najczęstsze błędy i szybka diagnostyka
Jeżeli biblioteka nie wykrywa czujnika, nie zaczynam od wymiany kodu. Najpierw sprawdzam zasilanie, kolejność wyprowadzeń i rezystor. W większości prostych projektów problem leży właśnie w jednym z tych trzech miejsc.
| Objaw | Prawdopodobna przyczyna | Co sprawdzić |
|---|---|---|
| Brak wykrytych urządzeń | Pomyłka pinów lub brak rezystora | Napięcie VDD, masę, DQ i rezystor 4,7 kΩ |
| Odczyt 85°C | Wartość domyślna przed zakończeniem konwersji | Czy program czeka na konwersję temperatury |
| Odczyty losowo znikają | Za długi przewód, słabe styki lub zakłócenia | Połączenia, prowadzenie przewodu i zasilanie trzyprzewodowe |
| Ujemne lub absurdalne wartości | Błąd komunikacji albo uszkodzona sonda | Inny czujnik, krótszy przewód i poprawny pin GPIO |
Przewód danych i masa powinny biec blisko siebie, szczególnie przy dłuższej sondzie. Dobrze sprawdza się para skręcona, a przy przewodach prowadzonych obok silników, przekaźników lub przewodów zasilających warto ograniczyć długość równoległego odcinka.
Nie zakładam też, że wodoodporna obudowa oznacza pełną odporność całego połączenia. Sama sonda może być zabezpieczona, lecz złącze i miejsce łączenia przewodów nadal wymagają ochrony przed wilgocią.
Mały test przed zabudowaniem czujnika oszczędza najwięcej czasu
Przed zamknięciem układu sprawdzam napięcie między VDD i GND, a potem upewniam się, że linia DQ ma stan wysoki dzięki rezystorowi podciągającemu. Następnie uruchamiam odczyt z jednym czujnikiem i obserwuję kilka kolejnych pomiarów, zamiast uznawać pojedynczy wynik za dowód poprawnego działania.
Najrozsądniejszy zestaw startowy to zasilanie trzyprzewodowe, rezystor 4,7 kΩ, krótki przewód i jeden DS18B20. Taki układ jest prosty, tani i łatwy do sprawdzenia. Dopiero po uzyskaniu stabilnych odczytów warto przejść do długiej instalacji, wielu czujników albo trybu pasożytniczego.