DS18B20 jest cyfrowym czujnikiem temperatury umieszczonym w obudowie TO92 z trzema wyprowadzeniami do montażu przewlekanego (THT). Czujnik umożliwia precyzyjne wykonywanie pomiarów temperatury z rozdzielczością od 9 do 12 bitów.
Czujnik posiada wbudowaną funkcję wyzwalania alarmu w przypadku, gdy pomiar temperatury przekroczy jej dolną lub górną wartość progową. Dzieje się to w zależności od ustawień wprowadzonych przez użytkownika. Nastawione wartości progowe są przechowywane w pamięci nieulotnej, tj. po odłączeniu napięcia zasilania i jego ponownym podłączeniu nawet po dłuższym czasie przestoju ustawienia wartości progowych temperatury będą zachowane.
Czujnik DS18B20 komunikuje się z osprzętem zewnętrznym za pomocą interfejsu 1-Wire. Do funkcjonowania wymaga on pojedynczego pinu cyfrowego mikrokontrolera (zaprogramowanego w tryb wejścia) oraz masy. Ponadto zasilanie czujnika można doprowadzić bezpośrednio z linii danych, dzięki czemu nie ma potrzeby podłączania zewnętrznego zasilacza. Każdy z czujników DS18B20 ma zaimplementowany, 64-bitowy kod adresujący. Z jego pomocą mikrokontroler może łatwo rozpoznać, z którego czujnika pochodzi sygnał w przypadku, gdy więcej niż jeden czujnik jest podłączony do szyny komunikacyjnej 1-Wire. Czujnik sprawdzi się w różnych aplikacjach wymagających precyzyjnego pomiaru temperatury, takich jak np. termostaty, układy pomiarowe i diagnostyczne w automatyce przemysłowej, termometry medyczne, systemy klimatyzacji i ogrzewania i w wielu innych.
Specyfikacja techniczna cyfrowego czujnika temperatury
- Obudowa: TO92
- Napięcie zasilania: 3,0 – 5,5 V
- Możliwość zasilania przez szynę danych (DQ)
- Zakres pomiaru: -55°C – +125°C, z dokładnością ±0.5°C
- Rozdzielczość pomiaru: 9-bit – 12-bit (od 512 do 4096 wartości)
- Wbudowana pamięć EEPROM
- Programowalne wartości progowe temperatury niezbędne do wyzwalania alarmu
Przykładowy kod programu w środowisku Arduino IDE
Aby podłączyć czujnik DS18B20 do Arduino, należy wyprowadzenie “VDD” podłączyć do szyny zasilania “5V” w Arduino, a wyprowadzenie “GND” do masy. Następnie wyprowadzenie “DQ” podłączamy do pinu cyfrowego nr 3 w sekcji “DIGITAL” na płytce Arduino. Aby zapewnić stabilność przesyłu danych, dodamy rezystor podciągający o wartości 3,3 kΩ podłączając go między wyprowadzeniami “VDD” i “DQ”.
Następnie, po uruchomieniu środowiska Arduino IDE, musimy zainstalować niezbędne biblioteki. Dla obsługi protokołu 1-Wire została utworzona dedykowana biblioteka DallasTemperature.h. W celu instalacji biblioteki idziemy do menu głównego, klikając po kolei: Szkic -> Dołącz bibliotekę – > Zarządzaj bibliotekami… – po pojawieniu się okna “Menedżer bibliotek”, należy wyszukać frazę “DS18B20” i zainstalować bibliotekę. Do prawidłowego funkcjonowania biblioteki DallasTemperature.h potrzebna jest także instalacja biblioteki OneWire.h, którą również należy wyszukać i zainstalować.
W kodzie programu musimy na początku zainicjować obie biblioteki, a następnie przypisać wyprowadzenie sygnału pomiarowego z czujnika do pinu cyfrowego nr 3 na płytce Arduino. Za pomocą funkcji begin() wyszukujemy wszystkie czujniki podłączone do magistrali 1-Wire i ustawiamy ich rozdzielczość na 12 bitów – w tym wypadku używamy pojedynczego czujnika. Funkcja requestTemperatures() wysyła do czujnika sygnał rozkazu przekształcenia zmierzonej temperatury na wartość bitową. Natomiast funkcja getTempCByIndex(deviceIndex) wykonuje odczyt wartości bitowej, która jest przekształcana na wartość liczbową temperatury w celu jej wyświetlenia na monitorze portu szeregowego. Podfunkcja (deviceIndex) określa adres czujnika na szynie danych. Gdy podłączyliśmy tylko jeden czujnik, wówczas należy w nawias wpisać wartość 0.
Kod przykładowego programu z użyciem czujnika DS18B20:
/*
Przykładowy program do obsługi cyfrowego czujnika temperatury DS18B20
*/
#include <OneWire.h> // inicjalizacja biblioteki OneWire.h
#include <DallasTemperature.h> // inicjalizacja biblioteki DallasTemperature.h
// Wyprowadzenie DQ czujnika jest podłączone do pinu dwustanowego nr 3 w płytce Arduino
#define ONE_WIRE_BUS 3
// Przyporządkowanie interfejsu OneWire do komunikacji z urządzeniem zewnętrznym
OneWire oneWire(ONE_WIRE_BUS);
// Przyporządkowanie biblioteki oneWire do biblioteki DallasTemperature
DallasTemperature sensors(&oneWire);
void setup(void)
{
sensors.begin(); // Uruchomienie bibliotek niezbędnych do obsługi czujnika
Serial.begin(9600); // Uruchomienie transmisji danych przez interfejs UART; Prędkość transmisji: 9600 bodów na sekundę
}
void loop(void)
{
// Wysłanie rozkazu pobrania pomiaru temperatury
sensors.requestTemperatures();
// Wyświetlanie pomiaru temperatury w stopniach Celsjusza
Serial.print("TEMPERATURA: "); //Wyświetlanie wyrazu "TEMPERATURA: " określającego rodzaj mierzonej wielkości
Serial.print(sensors.getTempCByIndex(0));
Serial.print((char)176);//Wyświetlenie znaku stopni temperatury według kodowania Unicode / UTF-8
Serial.print("C | ");//
// Wyświetlanie pomiaru temperatury w stopniach Fahrenheita
Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0);
Serial.print((char)176); // Wyświetlenie znaku stopni temperatury według kodowania Unicode / UTF-8
Serial.println("F");
delay(400); //opóźnienie przed wykonaniem kolejnego pomiaru
}
Jak oceniasz ten wpis blogowy?
Kliknij gwiazdkę, aby go ocenić!
Średnia ocena: 5 / 5. Liczba głosów: 1
Jak dotąd brak głosów! Bądź pierwszą osobą, która oceni ten wpis.