Kurs Arduino #9: Obsługa czujnika Dallas DS18B20 1-Wire

kurs 9W dzisiejszej części kursu o Arduino dowiesz się jak odczytywać temperaturę z cyfrowego termometru DS18B20 firmy Dallas. Zapraszam

 

 

 

 

 

Co będziesz potrzebować do dzisiejszej części kursu:

Dokładność odczytu

Z noty katalogowej tego czujnika/ termometru DS18B20 możemy się dowiedzieć, o takiej opcji jak wybór rozdzielczości (czyt. dokładnością) odczytu temperatury. Rozdzielczość możemy zmieniać w zakresie od 9-12bitów. Standardowo w tych bibliotekach ustawiona jest rozdzielczość 12-bitów.

W dużym skrócie oznacza to tyle, że dla Rozdzielczość 9-bitowa zwracałaby nam wartości z dokładnością 0,5*C :

  • 0,0
  • 0,5

Natomiast 12-bitowa z dokładnością 0.0625*C :

  • 0,0
  • 0,0625
  • 0,125
  • 0,1875
  • 0,25
  • 0,3125
  • 0,375
  • 0,4375
  • 0,5
  • 0,5625
  • 0,625
  • 0,6875
  • 0,75
  • 0,8125
  • 0,875
  • 0,9375

Ponadto sam czujnik mierzy z dokładnością +/- 0.5*C oznacza to tyle, że wartość otrzymanej temperatury może być 0,5 stopnia za duża albo za mała

Sposoby podłączenia czujnika do Arduino

Czujnik DS18B20 można podłączyć na dwa sposoby.
Pierwszy sposób, zwykły podłączenie czujnika do linii +5V, GND, DATA:

normal

Drugi sposób, pasożytniczy, podłączenie czujnika za pomocą linii GND,DATA:

pasozyt

O ile pierwszy sposób jest zrozumiały o tyle w drugim warto wspomnieć na jakiej zasadzie działa wtedy czujnik. Jak każde urządzenie potrzebne jest zasilanie, aby mogło działać. W tym przypadku może się wydawać, że czujnik nie otrzymuje napięcia bo nie doprowadziliśmy linii +5V do niego. Nic bardziej mylnego, jakby to powiedział sławny youtuber. Napięcie ten czujnik, w takim połaczeniu pobiera z linii danych, dlatego jest to pasożytniczy sposób podłączenia.

Instalacja bibliotek

Zanim przystąpimy do jakichkolwiek prac to musimy do naszego środowiska Arduino wgrać dwie biblioteki: jedną obsługującą termometr oraz drugą obsługującą transmisję 1-Wire. Możesz je pobrać z punktu 6. Następnie rozpakuj paczkę i dwa foldery „Dallas” i „OneWire” wklej Arduino\libraries albo do folderu libraries ze wszystkimi szkicami (jeżeli nie masz takiego folderu to możesz go samemu stworzyć). Przedstawiłem ten sposób instalacji, ponieważ na nowszych wersjach Arduino, nie mogłem wgrać tych bibliotek po przez managera w Arduino IDE.
Gdy już mamy wgrane biblioteki to mogę przejść do opisu najważniejszych funkcji do obsługi naszego termometru.
Najważniejsze funkcje

Podstawowe funkcje

W tym punkcie przedstawię wszystkie funkcję, które będziemy potrzebować do uruchomienia czujnika.

Dołączenie bibliotek:

Pierwsza biblioteka- OneWire służy do obsługi komunikacji 1-Wire. Jest ona uniwersalna dla wszystkich urządzeń korzystających z tego typu transmisji. Druga biblioteka DallasTemperature służy do odczytu danych z najpopularniejszych czujników firmy Dallas, m.in. DS18B20.

Wywołanie transmisji 1-Wire:

Przy pomocy tej funkcji jesteśmy w stanie poinformować Arduino, że chcemy korzystać z transmisji 1-Wire. W nawiasie podajemy numer pinu, bądź alias przy pomocy którego będzie realizowana owa transmisja.
Gdy już ustaliliśmy, że chcemy korzystać z 1-Wire to musimy również poinformować Arduino, że przy jego chcemy komunikować się z czujnikiem:

Konfiguracja czujnika gotowa. Teraz musimy rozpocząć transmisję danych z czujnika do Arduino przy pomocy 1-Wire. Z pomocą przychodzi nam funkcja:

Jak już nasz czujnik otrzymał informację, że chcemy się z nim komunikować to musimy jeszcze go poinformować, że chcemy aby wysyłał do nas dane.  Aby tego dokonać to musimy użyć funkcji:

Teraz gdy już odebraliśmy naszą temperaturę to pozostało ją wyświetlić przy pomocy funkcji:

Jak widać cały proces jest dosyć blokowy. Rozpocznij transmisję > pobierz dane > Wyświetl dane.