Jednym z najprostszych i niedrogich sposobów dodania czujnika temperatury do projektu Arduino jest użycie DS18B20 1-Wire Temperature Sensor. Czujniki te są dość precyzyjne i nie potrzebują żadnych zewnętrznych komponentów do pracy. Tak więc, z zaledwie kilkoma połączeniami i odrobiną kodu Arduino będziesz wykrywał temperaturę w mgnieniu oka!

DS18B20 1-Wire Temperature Sensor

DS18B20 jest czujnikiem temperatury z interfejsem 1-Wire produkowanym przez Dallas Semiconductor Corp. Unikalny interfejs 1-Wire® wymaga tylko jednego cyfrowego pinu do dwukierunkowej komunikacji z mikrokontrolerem.

Czujnik jest dostarczany zazwyczaj w dwóch formach. Jeden, który jest dostarczany w opakowaniu TO-92 wygląda dokładnie jak zwykły tranzystor. Drugi to wodoodporna sonda, która może być bardziej przydatna, gdy trzeba zmierzyć coś daleko, pod wodą lub pod ziemią.

Types Of DS18B20 Temperature Sensor

DS18B20 temperature sensor jest dość precyzyjny i nie potrzebuje żadnych zewnętrznych komponentów do pracy. Może mierzyć temperatury z zakresu od -55°C do +125°C z dokładnością ±0,5°C.

Rozdzielczość czujnika temperatury jest konfigurowana przez użytkownika na 9, 10, 11 lub 12 bitów. Jednak domyślną rozdzielczością przy włączaniu zasilania jest 12 bitów (tj. precyzja 0,0625°C).

Czujnik może być zasilany napięciem od 3V do 5,5V i pobiera tylko 1mA podczas aktywnej konwersji temperatury.

Tutaj pełna specyfikacja:

.

Zasilanie 3V do 5.5V
Zużycie prądu 1mA
Zakres temperatur -55 do 125°C
Dokładność ±0.5°C
Rozdzielczość 9 do 12 bitów (do wyboru)
Czas konwersji < 750ms

Multiple DS18B20 On Single Bus

Jedną z największych zalet DS18B20 jest to, że wiele DS18B20 może współistnieć na tej samej magistrali 1-żyłowej.przewodowej magistrali. Ponieważ każdy DS18B20 ma fabrycznie wypalony unikalny 64-bitowy kod seryjny, łatwiej jest je od siebie odróżnić.

Ta cecha może być ogromną zaletą, gdy chcemy sterować wieloma DS18B20 rozmieszczonymi na dużym obszarze.

Aby dowiedzieć się, jak odczytać temperaturę z wielu czujników temperatury DS18B20, sprawdź ten poradnik.

Połączenie wielu cyfrowych czujników temperatury DS18B20 z Arduino

Jedną z największych zalet DS18B20 jest to, że wiele DS18B20 może współistnieć na tej samej magistrali 1-Wire. Ponieważ każdy DS18B20 ma unikalną 64-bitową…

DS18B20 Sensor Pinout

GND to pin masy.

DQ to magistrala danych 1-Wire powinna być podłączona do pinu cyfrowego mikrokontrolera.

VDD to pin zasilający czujnik, który może być pomiędzy 3.3 a 5V.

Podłączenie czujnika temperatury DS18B20 do Arduino

Dość teorii, przejdźmy do praktyki! Podłączmy DS18B20 do Arduino.

Podłączenia są dość proste. Zacznij od podłączenia VDD do pinu 5V out na Arduino i GND do masy.

Następnie podłącz pozostały pin sygnału cyfrowego DQ do pinu cyfrowego 2 na Arduino. Będziesz musiał również dodać rezystor podciągający 4,7k pomiędzy pinem sygnałowym a pinem zasilania, aby utrzymać stabilny transfer danych. (wewnętrzne podciąganie w arduino nie działa)

Bądź ostrożny, aby umieścić DS18B20 we właściwy sposób. Jeśli umieścisz go w niewłaściwy sposób, nagrzeje się i pęknie.

Podłączenie czujnika temperatury DS18B20 do Arduino

Jeśli używasz wodoodpornej wersji DS18B20, podłącz czerwony pasek do 5V, czarny do masy, a żółty to dane, które idą do cyfrowego pinu 2 w arduino. Nadal musisz podłączyć rezystor podciągający 4,7K od danych do 5V.

Podłączenie wodoodpornego czujnika temperatury DS18B20 do Arduino

Instalacja biblioteki dla DS18B20

Protokół Dallas 1-Wire jest nieco skomplikowany i wymaga mnóstwa kodu do zrozumienia komunikacji. Aby ukryć tę niepotrzebną złożoność, zainstalujemy bibliotekę DallasTemperature.h, tak abyśmy mogli wydawać proste polecenia w celu uzyskania odczytów temperatury z czujnika.

Aby zainstalować bibliotekę przejdź do Sketch > Include Library > Manage Libraries…Poczekaj aż Library Manager pobierze indeks bibliotek i zaktualizuje listę zainstalowanych bibliotek.

Filtruj wyszukiwanie wpisując 'ds18b20′. Powinno pojawić się kilka wpisów. Poszukaj DallasTemperature by Miles Burton. Kliknij na ten wpis, a następnie wybierz Install.

Ta biblioteka Dallas Temperature jest biblioteką specyficzną dla sprzętu, która obsługuje funkcje niższego poziomu. Musi być sparowana z biblioteką One Wire Library, aby można było komunikować się z dowolnym urządzeniem jednoprzewodowym, nie tylko z DS18B20. Zainstaluj także tę bibliotekę.

KodArduino

Poniższy szkic pozwoli Ci w pełni zrozumieć, jak odczytywać temperaturę z czujnika temperatury DS18B20 i może służyć jako podstawa do bardziej praktycznych eksperymentów i projektów.

#include <OneWire.h>#include <DallasTemperature.h>// Data wire is plugged into digital pin 2 on the Arduino#define ONE_WIRE_BUS 2// Setup a oneWire instance to communicate with any OneWire deviceOneWire oneWire(ONE_WIRE_BUS);// Pass oneWire reference to DallasTemperature libraryDallasTemperature sensors(&oneWire);void setup(void){ sensors.begin();// Start up the library Serial.begin(9600);}void loop(void){ // Send the command to get temperatures sensors.requestTemperatures(); //print the temperature in Celsius Serial.print("Temperature: "); Serial.print(sensors.getTempCByIndex(0)); Serial.print((char)176);//shows degrees character Serial.print("C | "); //print the temperature in Fahrenheit Serial.print((sensors.getTempCByIndex(0) * 9.0) / 5.0 + 32.0); Serial.print((char)176);//shows degrees character Serial.println("F"); delay(500);}

Tak wygląda wyjście w monitorze szeregowym.

Kod objaśniający:

Szkic rozpoczynamy od włączenia bibliotek OneWire.h i DallasTemperature.h oraz zadeklarowania pinu Arduino, do którego podłączony jest pin sygnałowy czujnika.

#include <OneWire.h>#include <DallasTemperature.h>#define ONE_WIRE_BUS 2

Następnie tworzymy obiekt OneWire, przekazując pin sygnałowy czujnika do jego konstruktora. Ten obiekt one-wire pozwala nam na komunikację z dowolnym urządzeniem one-wire, nie tylko z DS18B20. W celu komunikacji z czujnikiem DS18B20, musimy utworzyć obiekt biblioteki DallasTemperature i przekazać referencję obiektu one-wire jako parametr.

OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);

Po utworzeniu obiektu DallasTemperature, możemy wydać poniższe proste polecenia do interakcji z czujnikiem.

  • begin() funkcja wyszukuje podłączone czujniki na magistrali i ustawia rozdzielczość bitową (12 bitów) dla każdego z nich.
  • requestTemperatures() funkcja wysyła polecenie do wszystkich czujników na magistrali, aby dokonały konwersji temperatury.
  • getTempCByIndex(deviceIndex) funkcja odczytuje i zwraca odczyt temperatury z czujnika. deviceIndex to nic innego jak lokalizacja czujnika na magistrali. Jeżeli używasz tylko jednego czujnika DS18B20 na magistrali, ustaw go na 0.

Inne przydatne funkcje w bibliotece DallasTemperature.h

Istnieje kilka przydatnych funkcji, które można wykorzystać z obiektem DallasTemperature. Kilka z nich wymieniono poniżej:

  • setResolution() funkcja ustawia rozdzielczość wewnętrznego przetwornika analogowo-cyfrowego DS18B20 na 9, 10, 11 lub 12 bitów, co odpowiada przyrostom odpowiednio o 0,5°C, 0,25°C, 0,125°C i 0,0625°C.
  • bool getWaitForConversion() funkcja zwraca wartość flagi waitForConversion. Może być przydatna, gdy chcemy sprawdzić, czy konwersja temperatury została zakończona.
  • setHighAlarmTemp() & setLowAlarmTemp() funkcja ustawia wewnętrzne alarmy wysokiej & niskiej temperatury dla urządzenia w stopniach Celsjusza. Ważny zakres to -55 do 125°C
  • bool hasAlarm() funkcja zwraca wartość true, jeżeli urządzenie ma stan alarmowy, gdy temperatura przekracza ustawioną temperaturę wysokiego & niskiego alarmu.

admin

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

lg