Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki
R1ayeKkbOZSAQ1
{position#prawo} Do budowy następnego termometru użyjemy cyfrowego czujnika temperatury DS18B20 firmy Dallas. W przeciwieństwie do czujnika analogowego, na wyjściu danych czujnika nie będziemy mieć do czynienia z napięciem, które jest zależne od temperatury, lecz z cyfrową informacją o temperaturze. {audio#0} ### {audio#1} {position#lewo} {image#obrazek1}{alt#Zdjęcie przedstawia czujnik temperatury DS18B20 w kształcie cylindra przekrojonego wzdłuż. Na czujniku wytłoczono napis: "DALLAS 18B20 1908C4 +887AB". Od podstawy cylindra odchodzą trzy takiej samej długości nóżki, które osadzone są w jednej płaszczyźnie. Lewa nóżka to GND, środkowa to DQ, a prawa VDD.} Konstrukcja czujnika DS18B20 jest taka sama jak czujnika analogowego TMP36, ale odwrotnie wyprowadzone są nóżki masy i zasilania. Podstawowe parametry czujnika: - napięcie zasilania: od 3 do 5,5 V, - zakres pomiarowy: od -55 do 125°C, - dokładność pomiaru dla zakresu od -10 do 85°C: ± 0,5°C, - dokładność pomiaru dla zakresów od -55 do -11°C oraz od 86 do 125°C: ± 2°C. ### {audio#2} {position#prawo} Aby czujnik działał prawidłowo, musimy dołączyć do niego rezystor 4,7 kΩ. Rezystor ten wpinamy pomiędzy wyprowadzenie DQ a zasilanie. Czujnik ma wyjście typu "otwarty dren", co oznacza, że przekazuje stan LOW albo "niepodłączony". Dołączony rezystor sprawi, że stan "niepodłączony" będzie odczytywany jako HIGH. Pozwoli to płytce Arduino prawidłowo odczytywać dane. ### {audio#3} {position#lewo} {image#obrazek2}{alt#Rysunek przedstawia połączone ze sobą za pomocą trzech przewodów moduł główny Arduino UNO (po lewo) oraz płytkę stykową (po prawo). W płytkę stykową wpięto pionowo czujnik temperatury w kolumnie j w wierszach piątym, szóstym i siódmym. Środkowa nóżka za pomocą pierwszego przewodu połączona została do pinu 4 na module głównym, czyli jeden koniec przewodu podpięto w module do pinu 4, a drugi wpięto w otwór na płytce w tym samym wierszu, co środkowa nóżka, to znaczy w wierszu szóstym, ale tu w kolumnie g. Masa płytki, czyli lewa nóżka została połączona z modułem głównym poprzez wpięcie przewodu w otwór w wierszu piątym w kolumnie f na płytce stykowej, a drugi koniec przewodu został podpięty w module głównym do GND. Prawa nóżka została połączona za pomocą dwóch kabelków z modułem głównym. Pierwszy z tych kabelków ustawiony jest pionowo w kolumnie g od wiersza siódmego do dziesiątego. Drugi wpięty jest w otwór w kolumnie f w wierszu dziesiątym i jego drugi koniec wpięto w module głównym w 5V.} Budujemy układ przedstawiony na schemacie. Środkową nóżkę podpinamy do pinu 4. w płytce Arduino. Łączymy masę płytki z wyjściem GND czujnika. Następnie podpinamy zasilanie z płytki do wyprowadzenia VDD oraz poprzez rezystor 4,7 kΩ do wyprowadzenia DQ. ### {audio#4} {position#prawo} Do obsługi czujnika będziemy potrzebować biblioteki. Biblioteka w przypadku Arduino to zbiór instrukcji mówiący kontrolerowi, w jaki sposób ma obsługiwać dane urządzenie lub np. transmisję danych. W przypadku czujnika DS18B20 potrzebne są dwie biblioteki: jedna do obsługi samego czujnika, a drugą do obsługi transmisji 1-Wire, gdyż w tej technologi czujnik komunikuje się z mikrokontrolerem. Pobieramy z internetu dwie biblioteki: - OneWire - DallasTemperature ### {audio#5} {position#lewo} {image#obrazek3}{alt#Zrzut przedstawia okno dialogowe Simple kreska pionowa Arduino 1.8.12. Poniżej górnego paska mamy następujące menu: plik, edytuj, szkic, narzędzia, pomoc. Opcja szkic jest rozwinięta. W rozwinięciu mamy kolejno: Weryfikuj/Kompiluj (skrót Ctrl+R), Wgraj (skrót Ctrl+U), Wgraj używając programatora (skrót Ctrl+Shift+U), Eksport skompilowanego programu (skrót Ctrl+Alt+S), Pokaż folder szkicu (skrót Ctrl+K), Dołącz bibliotekę – tu można rozwinąć dalsze opcje i Dodaj plik… Na zrzucie wybrano opcję „Dołącz bibliotekę”. Nie wszystkie rozwinięte opcje dołączania biblioteki są widoczne na zrzucie, natomiast te, które pokazano to: Zarządzaj bibliotekami… (skrót Ctrl+Shift+I), Dodaj bibliotekę .ZIP…, nieaktywna opcja Biblioteka Arduino, Bridge, EEPROM, Esplora, Ethernet. Zaznaczono opcję „Dodaj bibliotekę .ZIP…”. Za rozwiniętymi opcjami widoczne jest pole z zapisanymi komendami.} Pobrane biblioteki mają zazwyczaj postać spakowanego archiwum. Aby je zainstalować otwieramy środowisko Arduino IDE, przechodzimy do menu Szkic | Dołącz bibliotekę | Dodaj bibliotekę .ZIP. Wskazujemy pobraną bibliotekę i klikamy Open. Czynność tę wykonujemy dla obu bibliotek. ### {audio#6} {position#prawo} Na początku szkicu musimy dołączyć zainstalowane biblioteki:
#include <OneWire.h>
#include <DallasTemperature.h>
Biblioteka OneWire.h jest odpowiedzialna za komunikację 1-Wire. Możemy przy jej użyciu obsłużyć wszystkie urządzenia komunikujące się w tej transmisji danych. Natomiast biblioteka DallasTemperature.h pomoże nam odczytać dane z czujnika DS18B20. ### {audio#7} {position#lewo} Definiujemy pin, do którego podłączyliśmy wyjście DQ czujnika. Następnie wywołujemy transmisję 1-Wire na tym pinie oraz za pomocą instrukcji DallasTemperature sensors(&oneWire); informujemy Arduino, że będziemy komunikować się za pomocą 1-Wire z czujnikiem temperatury.
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
### {audio#8} {position#prawo} W ciele funkcji setup() inicjujemy transmisję szeregową oraz transmisję 1-Wire pomiędzy Arduino a czujnikiem.
void setup(void) {
	Serial.begin(9600);
	sensors.begin();
}
### {audio#9} {position#lewo} Następnie w pętli loop() korzystamy z funkcji sensors.requestTemperatures(); żądamy w ten sposób od czujnika, aby wysłał do nas dane. W monitorze portu szeregowego wyświetlamy napis "Temperatura: " oraz, za pomocą polecenia Serial.println(sensors.getTempCByIndex(0)), pokazujemy aktualną temperaturę z czujnika o indeksie 0. Jest to pierwszy czujnik jaki podepniemy do Arduino. Musimy podać indeks czujnika, ponieważ za pomocą 1-Wire możemy takich czujników podpiąć kilka do jednego pinu. Dzięki temu uzyskamy odczyt z różnych czujników przy użyciu tylko jednego pinu cyfrowego.
void loop(void) {
	sensors.requestTemperatures();
	Serial.print("Temperatura: ");
	Serial.println(sensors.getTempCByIndex(0));  
	delay(1000);
}
Pamiętaj: gdy połączymy kilka czujników, ich indeksy mogą się zmienić. Nie zawsze ten, który podepniemy jako pierwszy, czy ten, który jest bliżej płytki Arduino, ma indeks 0. Zależy to od adresów czujników. Najprostszym sposobem sprawdzenia indeksów poszczególnych czujników jest ich chwilowe podgrzanie. ### {audio#10} {position#prawo} {image#obrazek4}{alt# Zrzut przedstawia okno dialogowe COM3, w którego górnej części znajduje się jednowierszowe pole. Po jego prawej stronie znajduje się przycisk „wyślij”. Poniżej znajduje się pole zajmujące większą część okna, w którym w jednej kolumnie zostało zwrócone sześć identycznych wartości temperatury: „Temperatura: 22.75”. Poniżej pola znajdują się następujące opcje: po lewo zaznaczony Autoscroll, odznaczone „pokaż znacznik czasu”, po prawo z listy wyboru „Nowa linia”, „9600 baud”, „Wyczyść okno”.} Otwieramy monitor portu szeregowego, w którym możemy odczytać aktualną temperaturę. @@@ mode=verticalpoints
Polecenie 1

Zbuduj oraz zaprogramuj układ z dwoma czujnikami DS18B20 podłączonymi do jednego pinu płytki Arduino.