W tym artykule omówimy różne typy czujników temperatury i sposoby ich wykorzystania w każdym konkretnym przypadku. Temperatura to fizyczny parametr mierzony w stopniach. Jest istotną częścią każdego procesu pomiarowego. Obszary wymagające dokładnych pomiarów temperatury obejmują medycynę, badania biologiczne, elektronikę, badania materiałów i właściwości termiczne produktów elektrycznych. Urządzenie służące do pomiaru ilości energii cieplnej, które pozwala nam wykryć fizyczne zmiany temperatury, nazywane jest czujnikiem temperatury. Są cyfrowe i analogowe.
Główne typy czujników
Ogólnie rzecz biorąc, istnieją dwie metody pozyskiwania danych:
1. Kontakt... Kontaktowe czujniki temperatury mają fizyczny kontakt z przedmiotem lub substancją. Mogą być używane do pomiaru temperatury ciał stałych, cieczy lub gazów.
2. Bezkontaktowy... Bezkontaktowe czujniki temperatury wykrywają temperaturę, przechwytując część energii podczerwonej emitowanej przez obiekt lub substancję i wyczuwając jej intensywność. Mogą być używane tylko do pomiaru temperatury ciał stałych i cieczy. Nie są w stanie zmierzyć temperatury gazów ze względu na ich bezbarwność (przezroczystość).
Zasady doboru czujników
Czujnik temperatury do ogrzewania podłogowego dobierany jest z uwzględnieniem takich cech jak moc, rodzaj pokrycia dachowego, sposób montażu oraz wyposażenie z dodatkową funkcjonalnością.
Moc
Wartość z pewnością musi spełniać wymagania i obciążenie ciepłej podłogi. W przeciwnym razie czujnik nie będzie działał poprawnie. Gdy moc elementu grzejnego jest większa niż samego regulatora, konieczne staje się dodatkowo zamontowanie między nimi rozrusznika magnetycznego - aby zapobiec uszkodzeniu urządzenia na skutek zwiększonego obciążenia.
Zestaw funkcji
Ciepłą podłogą steruje jednostka elektryczna, która umożliwia regulację pracy elementów grzejnych. Nowoczesne sterowniki posiadają takie funkcje jak uruchamianie i wyłączanie układu, regulacja warunków temperaturowych, a także ustawianie częstotliwości załączania i wyłączania elementu grzejnego.
Łatwość użycia
Jeśli uważasz, że nie zrozumiesz programowania, nie powinieneś kupować złożonego urządzenia. Nawet biorąc pod uwagę całą jego funkcjonalność. Na przykład osoby starsze mają problem z obsługą urządzeń programowalnych. Lepiej wybrali opcję mechaniczną.
Łatwe do podłączenia
Załączona dokumentacja do termostatu zawsze wskazuje sposób podłączenia czujnika ogrzewania podłogowego. Zaciski znajdują się na krawędzi po jednej stronie jednostki sterującej. Po podłączeniu przewodów elektrycznych zgodnie ze schematem konieczne będzie sprawdzenie działania systemu grzewczego. Aby to zrobić, zmierz rezystancję na zaciskach czujnika temperatury i grzejnego kabla elektrycznego lub podłącz ciepłą podłogę i zwiększ wartości temperatury od zera do wskaźnika zalecanego przez SNIP, czyli do 30 ° C.
Wygląd
Czujnik termiczny powinien być nie tylko zrozumiały funkcjonalnie, ale także atrakcyjny w wyglądzie. Nowoczesne gałki są dostępne w różnych kolorach i kształtach. Możesz wybrać opcję harmonizującą z wnętrzem pomieszczenia.
Rodzaje czujników temperatury
Istnieje wiele różnych typów czujników temperatury.Od prostego sterowania włączaniem / wyłączaniem urządzenia termostatycznego po rozbudowane układy sterowania zaopatrzeniem w wodę, z funkcją jej podgrzewania, stosowane w procesach uprawy roślin. Dwa główne typy czujników, stykowe i bezkontaktowe, dzielą się dalej na czujniki rezystancyjne, napięciowe i elektromechaniczne. Trzy najczęściej używane czujniki temperatury to:
- Termistory
- Termopary oporowe
- Termoelement
Te czujniki temperatury różnią się od siebie parametrami eksploatacyjnymi.
Urządzenie
Jest to termopara (płytka lub pręt) składająca się z drutów, które łączą się z zaciskami elementu czujnikowego.
W zależności od informacji o temperaturze zmienia się odpowiednio rezystancja części wrażliwej, zmienia się sygnał elektryczny dostarczany do termostatu. W ten sposób określana jest bezwzględna wartość temperatury medium.
Zewnętrzny (zewnętrzny czujnik temperatury do ogrzewania podłogowego) z reguły znajduje się pod wykończeniową wykładziną podłogową i mierzy jej wskaźniki temperatury. Wewnętrzny (wbudowany), umieszczony wewnątrz regulatora i określa stopień nagrzania powietrza.
Konstrukcja czujników temperatury dobierana jest w zależności od cech systemu:
Termistor
Termistor to wrażliwy rezystor, który zmienia swoją fizyczną rezystancję wraz z temperaturą. Zazwyczaj termistory są wykonane z ceramicznego materiału półprzewodnikowego, takiego jak kobalt, mangan lub tlenek niklu i są pokryte szkłem. Są to małe płaskie uszczelnione dyski, które stosunkowo szybko reagują na każdą zmianę temperatury.
Ze względu na właściwości półprzewodnikowe materiału termistory mają ujemny współczynnik temperaturowy (NTC), tj. opór maleje wraz ze wzrostem temperatury. Istnieją jednak również termistory PTC, których rezystancja rośnie wraz ze wzrostem temperatury.
Harmonogram termistorów
Zalety termistorów
- Wysoka szybkość reakcji na zmiany temperatury, dokładność.
- Niska cena.
- Wyższa rezystancja w zakresie od 2000 do 10000 omów.
- Znacznie wyższa czułość (~ 200 omów / ° C) w ograniczonym zakresie temperatur do 300 ° C.
Zależności temperaturowe rezystancji
Zależność oporu od temperatury wyraża się następującym równaniem:
Gdzie A, B, C - są to stałe (dostarczane przez warunki obliczeniowe), R - rezystancja w omach, T - temperatura w kelwinach. Możesz łatwo obliczyć zmianę temperatury na podstawie zmiany oporu lub odwrotnie.
Jak używać termistora?
Termistory są przystosowane do rezystancji w temperaturze pokojowej (25 ° C). Termistor jest pasywnym urządzeniem rezystancyjnym, dlatego wymaga wykonania monitorowania aktualnego napięcia wyjściowego. Z reguły połączone są szeregowo z odpowiednimi stabilizatorami tworzącymi dzielnik napięcia sieciowego.
Przykład: Weź pod uwagę termistor o wartości rezystancji 2,2 K przy 25 ° C i 50 omów przy 80 ° C. Termistor jest połączony szeregowo z rezystorem 1 kΩ poprzez zasilanie 5 V.
Dlatego jego napięcie wyjściowe można obliczyć w następujący sposób:
Przy 25 ° C, RNTC = 2200 omów;
Przy 80 ° C, RNTC = 50 omów;
Należy jednak zauważyć, że w temperaturze pokojowej standardowe wartości rezystancji są różne dla różnych termistorów, ponieważ są nieliniowe. Termistor ma wykładniczą zmianę temperatury, a więc stałą beta, która jest używana do obliczania jego rezystancji dla danej temperatury. Napięcie wyjściowe rezystora i temperatura są powiązane liniowo.
Cechy dwuprzewodowego interfejsu prądowego w czujnikach temperatury LMT01
Figa. 4. Organizacja obecnego interfejsu z LMT01
Jak wspomniano powyżej, w celu przesłania wyniku pomiaru LMT01 generuje sekwencję bitów w postaci bieżących impulsów zliczających. W tym celu czujnik wymaga tylko dwóch przewodów (rysunek 4). Aby przekształcić impulsy prądu w formę znaną z cyfrowych mikroukładów, w niektórych przypadkach można użyć pojedynczego rezystora (ale nie zawsze - więcej na ten temat poniżej).
Po włączeniu LMT01 rozpoczyna cykl pomiarowy trwający do 54 ms (Rysunek 5). W tym czasie na wyjściu czujnika powstaje prąd o niskim poziomie 28 ... 39 μA. Następnie następuje cykl przekazywania wyniku pomiaru w postaci impulsów prądu o amplitudzie 112 ... 143 μA. Mikrokontroler odbierający musi liczyć te impulsy, na przykład za pomocą wbudowanego licznika / timera. Ponieważ częstotliwość sygnałów wynosi około 82 ... 94 kHz, to przy maksymalnej liczbie impulsów (4095) czas transmisji może osiągnąć 50 ms.
Figa. 5. Diagramy czasowe pracy czujnika LMT01
Na podstawie liczby zliczonych impulsów (PC) wartość temperatury można określić zgodnie ze wzorem 1:
, (1)
Zatem przy 0 ° C czujnik wygeneruje około 800 impulsów.
Niestety użycie jednego zewnętrznego rezystora nie zawsze jest możliwe ze względu na ograniczenie minimalnego spadku napięcia na czujniku LMT01. Podczas cyklu pomiarowego spadek na czujniku musi wynosić co najmniej 2,15 V. Podczas cyklu transmisji danych spadek napięcia można zredukować do 2 V. Nie jest trudno dokonać pewnych przybliżonych obliczeń.
Rozważmy urządzenie o napięciu zasilania Vdd = 3,3 V. Jeśli weźmiemy minimalny dopuszczalny spadek na czujniku równy 2,15 V podczas cyklu pomiarowego, to na rezystorze będzie obserwowany sygnał o wartości nie większej niż 1,15 V. Dla większości cyfrowych kontrolerów jednostką logiczną jest 0, 7 ∙ Vdd, co w naszym przypadku wyniesie 2,31 V. W efekcie użycie prostego rezystora okazuje się niemożliwe, gdyż mikrokontroler po prostu nie „zobaczy” sygnału jednostka logiczna. Wyjściem z tej sytuacji może być zastosowanie mikrokontrolera z wbudowanym komparatorem lub układami konwersji poziomów.
Rezystancyjne czujniki temperatury
Czujniki temperatury (RTD) są wykonane z rzadkich metali, takich jak platyna, których rezystancja elektryczna zmienia się wraz z temperaturą.
Rezystancyjne czujniki temperatury mają dodatni współczynnik temperaturowy i, w przeciwieństwie do termistorów, zapewniają wysoką dokładność pomiaru temperatury. Jednak mają słabą wrażliwość. Pt100 to najpowszechniej dostępny czujnik o standardowej wartości rezystancji 100 omów przy 0 ° C. Główną wadą jest wysoki koszt.
Zalety takich czujników
- Szeroki zakres temperatur od -200 do 650 ° C
- Zapewnij wyjście prądowe o wysokim spadku
- Bardziej liniowy w porównaniu z termoparami i RTD
Dodatkowe komponenty i obwód czujnika
Oprócz głównych urządzeń diodowych obwód czujnika temperatury zawiera szereg dodatkowych elementów. Przede wszystkim jest to kondensator, który chroni urządzenie przed wpływami zewnętrznymi. Faktem jest, że wzmacniacz operacyjny jest bardzo wrażliwy na wpływ zmiennych pól elektromagnetycznych. Kondensator usuwa tę zależność, wprowadzając ujemne sprzężenie zwrotne.
Przy udziale tranzystora i diody Zenera powstaje stabilizowane napięcie odniesienia. Tutaj stosowane są rezystory o wyższej klasie dokładności o niskiej wartości współczynnika temperaturowego rezystancji. Tym samym cały system zyskuje dodatkową stabilność. W przypadku ewentualnych znacznych zmian warunków temperaturowych można pominąć rezystory precyzyjne. Służą tylko do kontrolowania niewielkich przegrzań.
Termoelement
Czujniki temperatury z termoparą są najczęściej używane, ponieważ są dokładne, działają w szerokim zakresie temperatur od -200 ° C do 2000 ° C i są stosunkowo niedrogie. Termopara z przewodem i wtyczką na zdjęciu poniżej:
Działanie termopary
Termopara składa się z dwóch różnych metali zespawanych ze sobą, aby wytworzyć różnicę potencjałów w zależności od temperatury. Z różnicy temperatur między dwoma złączami generowane jest napięcie, które służy do pomiaru temperatury. Różnica napięcia między dwoma złączami nazywana jest efektem Seebecka.
Jeśli oba związki mają tę samą temperaturę, potencjał różnic w różnych związkach wynosi zero, tj. V1 = V2. Jeśli jednak złącza mają różne temperatury, napięcie wyjściowe w stosunku do różnicy temperatur między dwoma złączami będzie równe ich różnicy V1 - V2.
Rodzaje czujników temperatury
Elektroniczno-mechaniczne
Najprostszy i najtańszy typ regulatora. Jego główną częścią roboczą jest specjalna metalowa płyta, która reaguje na wzrost lub spadek temperatury. System jest włączany i wyłączany poprzez zmianę krzywizny płyty podczas grzania i chłodzenia. Ustawienie dokładnej wartości temperatury na takim regulatorze nie zadziała.
Elektroniczny
Urządzenie posiada specjalny element generujący specjalny sygnał. Moc zależy bezpośrednio od wartości temperatury otoczenia. Na takich urządzeniach można ustawić dokładne odczyty temperatury ogrzewania z dokładnością do ułamka stopnia. System sterowany jest za pomocą przycisków i małego ekranu.
Programowalne
Najdroższy z termoelementów. Można na nim ustawić określone wartości, po osiągnięciu których cały system jest włączany lub wyłączany przez regulator. Dzięki urządzeniu w pomieszczeniu tworzony jest mikroklimat odpowiadający konkretnej osobie. Istnieje możliwość skonfigurowania termostatu tak, aby system włączał się o określonej godzinie. Oznacza to, że podłogi są podgrzewane przed przybyciem właściciela do domu, a jednocześnie energia elektryczna nie jest zużywana, gdy właściciel nie jest.
Wiele modeli ma jasne i stylowe wzornictwo oraz ekrany LCD, które dostarczają informacji i ułatwiają dostrojenie.
Praca z gotowymi bibliotekami
Tak więc, aby pracować z czujnikami temperatury DS18B20 w sieci, można znaleźć ogromną liczbę bibliotek, ale z reguły używane są dwie najpopularniejsze. To biblioteka i biblioteka. Co więcej, druga biblioteka jest wygodniejszym dodatkiem w stosunku do pierwszej i nie można jej bez niej używać. Innymi słowy, przed podłączeniem biblioteki DallasTemperature.h należy również podłączyć OneWire.h. Jak zainstalować określone biblioteki w Arduino IDE jest możliwe.
Biblioteka OneWire.h
Najpierw rozważmy pracę z biblioteką OneWire.h. Poniżej znajduje się lista jego funkcji wraz z krótkim opisem.
- Czujnik temperatury OneWire (uint8_t pinNumber)
Ta funkcja jest konstruktorem klasy OneWire i tworzy obiekt temperatureSensor, tj. otwiera kanał komunikacyjny z czujnikiem lub grupą czujników na pinie pinNumber. W naszych przykładach (rysunki 3-5) jest to pin „D2” Arduino Nano. To do niego podłączyliśmy magistralę danych DQ DS18B20.
Przykład:
Czujnik temperatury OneWire
(
D2
);
// Czujnik lub grupa czujników jest podłączona do pinu D2
- uint8_t szukaj (addrArray)
Funkcja wyszukuje następne urządzenie na magistrali 1-Wire i po jego znalezieniu wprowadza wartość adresu do tablicy addrArray, zwracając wartość true. Ponieważ unikatowy adres każdego czujnika jest 64-bitowy, addrArray musi mieć rozmiar 8 bajtów. Jeśli wyszukiwanie nie powiedzie się, funkcja zwraca false. Należy zauważyć, że w przypadku podłączenia kilku czujników temperatury do jednej magistrali każde wywołanie funkcji wyszukiwania będzie kierowane do następnego czujnika, następnie do następnego itd., Aż do wyliczenia wszystkich urządzeń na magistrali. Osobliwością tej funkcji jest zapamiętywanie już przetworzonych adresów. Aby zresetować kolejkę, musisz wywołać funkcję reset_search (), która zostanie omówiona poniżej.
Przykład:
bajt addrArray
[
8
];
// Tablica do przechowywania adresu 64-bitowego // Jeśli urządzenia w ogóle nie ma na magistrali lub wszystkie urządzenia są wyliczone // wyświetlają odpowiednie informacje w monitorze portu
Jeśli(!
czujnik temperatury
.
Szukaj
(
addrArray
))
Seryjny
.
println
(
„Żadnych więcej adresów”.
);
// W przeciwnym razie, jeśli następne urządzenie odpowiedziało na żądanie obecności, // wyświetl jego 64-bitowy adres w monitorze portu
jeszcze{dla(
ja
=
0
;
ja
<
8
;
ja
++)
Seryjny
.
wydrukować
(
addrArray
[
ja
],
KLĄTWA
);
}
- unieważnićreset_search ()
Jak wspomniano powyżej, ta funkcja resetuje kolejkę odpytywania urządzeń na magistrali 1-Wire do samego początku. Powinien być zawsze używany w połączeniu z funkcją wyszukiwania, gdy ta ostatnia zwraca fałsz. Na przykład w naszym przypadku z 5 czujnikami w autobusie, wywołując 5 razy funkcję wyszukiwania, możemy uzyskać 5 adresów. Po raz szósty funkcja wyszukiwania zwróci nam wartość false i będzie to robić przy każdym kolejnym odpytywaniu, aż kolejka zostanie opróżniona. Należy zwrócić na to uwagę, aby uniknąć niezrozumiałych sytuacji.
Przykład:
bajt addrArray
[
8
];
// Tablica do przechowywania adresu 64-bitowego // Jeśli urządzenie jest w ogóle nieobecne na magistrali lub wszystkie urządzenia są wyliczone // zresetuj kolejkę odpytywania, aby powtórzyć cykl wyszukiwania
Jeśli(!
czujnik temperatury
.
Szukaj
(
addrArray
))
czujnik temperatury
.
reset_search
();
- uint8_tResetowanie ()
Funkcja resetowania 1-Wire inicjuje proces komunikacji. Jest wywoływany za każdym razem, gdy chcemy skomunikować się z czujnikiem temperatury. Zwracane wartości mogą być prawdą lub fałszem. Wartość prawdziwą uzyskamy, jeśli przynajmniej jeden czujnik na magistrali odpowie na reset impulsem obecności. W przeciwnym razie otrzymamy fałsz;
Przykład:
Jeśli(!
czujnik temperatury
.
Resetowanie
())
Seryjny
.
println
(
„Brak czujników w autobusie”
);jeszcze
Seryjny
.
println
(
„Czujnik został wykryty”
);
- unieważnićwybierz (addrArray)
Funkcja pozwala na wybranie konkretnego urządzenia, z którym w danej chwili chcemy pracować. Wyboru dokonuje się przez jawne określenie 64-bitowego adresu wprowadzonego w tablicy addrArray. Adres można ustawić jawnie, zapisując go w tablicy lub używając wcześniej odczytanego przez funkcję wyszukiwania. Należy pamiętać, że przed wywołaniem select należy wywołać funkcję resetowania. Przy następnym resecie połączenie z wybranym czujnikiem zostanie zerwane do następnego wezwania do wybrania.
Przykład:
bajt addrArray
[
8
];
// Tablica do przechowywania adresu 64-bitowego // Jeśli urządzenie jest w ogóle nieobecne na magistrali lub wszystkie urządzenia są wyliczone // wyprowadzają odpowiednie informacje do monitora portu
Jeśli(!
czujnik temperatury
.
Szukaj
(
addrArray
))
Seryjny
.
println
(
„Żadnych więcej adresów”.
);
// W przeciwnym razie, jeśli następne urządzenie odpowiedziało na żądanie obecności, // wybierz je do dalszej pracy
jeszcze{
czujnik temperatury
.
Resetowanie ()
;
// Nie zapomnij wydać polecenia resetowania temperatureSensor
.
wybierz (addrArray)
;
// Określ tablicę z adresem do odczytu
}
- unieważnićpominąć ()
Funkcja ma znaczenie tylko podczas pracy z jednym czujnikiem w autobusie i po prostu pomija wybór urządzenia. Innymi słowy, nie możesz korzystać z funkcji wyszukiwania, a zatem szybko uzyskać dostęp za pomocą jedynego czujnika.
Przykład:
czujnik temperatury.
Resetowanie
();
// Zresetuj oponę TemperatureSensor
.
pominąć
();
// Wybierz jedyny czujnik do dalszej pracy z nim
- unieważnićpisać (uint8_tbajt, uint8_t powerType = 0)
Funkcja wysyła bajt danych do wybranego urządzenia na magistrali. Argument powerType wskazuje rodzaj zasilania czujników (0 - czujniki są zasilane bezpośrednio z zewnętrznego źródła; 1 - używane jest zasilanie pasożytnicze). Drugi parametr można pominąć, jeśli używane jest zasilanie zewnętrzne, ponieważ domyślnie wynosi 0.
Przykład:
czujnik temperatury
.
Resetowanie
();
// Zresetuj oponę TemperatureSensor
.
pominąć
();
// Wybierz jedyny czujnik do dalszej pracy z nim // Wyślij polecenie konwersji temperatury, // używając połączenia z pasożytniczym zasilaniem z magistrali danych temperatureSensor
.
pisać
(
0x44
,
1
);
- uint8_tczytaj ()
Ta funkcja odczytuje jeden bajt danych przesłanych przez urządzenie podrzędne (czujnik) do magistrali 1-Wire.
Przykład:
// Odczytaj 9 bajtów danych z magistrali 1-Wire i umieść wynik w tablicy bajtów tablicy
[
9
];dla(
uint8_t i
=
0
;
ja
<
9
;
ja
++){
szyk
[
ja
]=
czujnik temperatury
.
czytać
();}
- statyczny uint8_t crc8 (const uint8_t * addr, uint8_t len);
Funkcja służy do obliczania sumy kontrolnej. Przeznaczony do sprawdzania poprawności komunikacji z czujnikiem temperatury. Tutaj addr jest wskaźnikiem do tablicy danych, a len jest liczbą bajtów.
Przykład:
bajt addrArray
[
8
];
// Tablica do przechowywania adresu 64-bitowego // Jeśli urządzenie jest w ogóle nieobecne na magistrali lub wszystkie urządzenia są wyliczone // wyprowadzają odpowiednie informacje do monitora portu
Jeśli(!
czujnik temperatury
.
Szukaj
(
addrArray
))
Seryjny
.
println
(
„Żadnych więcej adresów”.
);
// W przeciwnym razie, jeśli następne urządzenie odpowiedziało na żądanie obecności, // sprawdź sumę kontrolną jego adresu
jeszcze{
// Jeśli suma kontrolna się nie zgadza, wyświetl komunikat o błędzie
Jeśli(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Seryjny
.
println
(
„CRC jest nieprawidłowe!”
);}}
Przeanalizowaliśmy osobno każdą funkcję biblioteki OneWire.h i aby naprawić materiał poniżej podam szkic do odczytu temperatury z grupy czujników temperatury DS18B20, które zostaną podłączone do pinu D2 za pomocą pasożytniczego obwodu zasilającego. Szkic będzie zawierał szczegółowe komentarze dotyczące wszystkich niezbędnych punktów.
#include // Podłączamy bibliotekę do pracy z czujnikami termicznymi DS18B20OneWire ds
(
2
);
// Czujnik lub grupa czujników jest podłączona do pinu D2 Arduino // PRESET FUNCTION void setup
(
unieważnić
){
Seryjny
.
zaczynać
(
9600
);
// Inicjalizacja pracy z portem szeregowym} // MAIN CYCLE void loop
(
unieważnić
){
bajt i
;
// Zmienna pomocnicza dla pętli z obecnością bajtów
=
0
;
// Zmienna określająca gotowość czujnika do komunikacji bajt type_s
;
// Zmienna do definiowania typu czujnika termicznego na bajtowej magistrali danych
[
12
];
// Tablica do przechowywania informacji otrzymanych z adresu bajtu czujnika
[
8
];
// Tablica do przechowywania 64-bitowego adresu pływakowego czujnika Celsjusza
,
Fahrenheit
;
// Zmienne do obliczania temperatury // Jeśli nie znaleziono urządzeń na magistrali lub wszystkie urządzenia na magistrali są wyliczone // wyświetlają odpowiednie informacje w monitorze portu, zresetuj kolejkę // i przeprowadź wyszukiwanie ponownie, czekając 250ms
Jeśli(!
ds
.
Szukaj
(
adr
)){
Seryjny
.
println
(
„Żadnych więcej adresów”.
);
Seryjny
.
println
();
ds
.
reset_search
();
opóźnienie
(
250
);powrót;}
// Jeśli zostanie znalezione następne urządzenie na magistrali, wyświetl jego unikalny adres // w monitorze portu w postaci szesnastkowej Serial
.
wydrukować
(
„ROM =”
);dla(
ja
=
0
;
ja
<
8
;
ja
++){
Seryjny
.
pisać
(
‘ ‘
);
Seryjny
.
wydrukować
(
adr
[
ja
],
KLĄTWA
);}
// Sprawdź sumę kontrolną adresu znalezionego urządzenia // i jeśli nie pasuje, wyświetl odpowiednie informacje
Jeśli(
OneWire
::
crc8
(
adr
,
7
)!=
adr
[
7
]){
Seryjny
.
println
(
„CRC jest nieprawidłowe!”
);powrót;}
Seryjny
.
println
();
// Sprawdź bajt zerowy adresu, który zawiera informacje // o konkretnym typie czujnika temperatury. W zależności od wartości bajtu // zero, wyświetlamy serię chipa na monitorze portu. Jeśli bajt zerowy zawiera nieznaną // wartość, wyświetlamy komunikat o nieznanej rodzinie czujnika temperatury.
przełącznik(
adr
[
0
]){walizka
0x10
:
Seryjny
.
println
(
„Chip = DS18S20”
);
type_s
=
1
;przerwa;walizka
0x28
:
Seryjny
.
println
(
„Chip = DS18B20”
);
type_s
=
0
;przerwa;walizka
0x22
:
Seryjny
.
println
(
„Chip = DS1822”
);
type_s
=
0
;przerwa;domyślna:
Seryjny
.
println
(
„Urządzenie nie należy do rodziny DS18x20”.
);powrót;}
ds
.
Resetowanie
();
// Zresetuj magistralę, aby zainicjować wymianę danych ds
.
Wybierz
(
adr
);
// Wybierz czujnik z aktualnym adresem do pracy z nim // Wyślij polecenie przeliczenia temperatury (zgodnie z dokumentacją 0x44) // Nie zapomnij o drugim parametrze "1", ponieważ przesyłamy dane poprzez / / linia z pasożytniczym zasilaniem. ds
.
pisać
(
0x44
,
1
);
// Czujnik rozpoczyna konwersję, która zgodnie z dokumentacją zajmuje max. 750ms // Dla pewności zorganizujemy pauzę ё sekundy opóźnienia
(
1000
);
// Zresetuj magistralę ponownie, aby odczytać informacje z czujnika // zapisz odpowiedź funkcji reset () do aktualnej zmiennej do dalszej pracy z nią obecna
=
ds
.
Resetowanie
();
ds
.
Wybierz
(
adr
);
// Ponownie wybierz czujnik po jego adresie, ponieważ nastąpił impuls resetujący // Polecenie 0xBE, zgodnie z dokumentacją techniczną, umożliwia odczyt wewnętrznej pamięci // czujnika temperatury (brudnopis), która składa się z 9 bajtów. ds
.
pisać
(
0xBE
);
// Odczyt i wyświetlenie 9 bajtów z wewnętrznej pamięci czujnika temperatury Szeregowy do monitora portu
.
wydrukować
(
„Dane =”
);
Seryjny
.
wydrukować
(
teraźniejszość
,
KLĄTWA
);
Seryjny
.
wydrukować
(
» «
);dla(
ja
=
0
;
ja
<
9
;
ja
++){
dane
[
ja
]=
ds
.
czytać
();
Seryjny
.
wydrukować
(
dane
[
ja
],
KLĄTWA
);
Seryjny
.
wydrukować
(
» «
);}
// Sprawdź i wyślij do portu monitor sumę kontrolną odebranych danych Serial
.
wydrukować
(
„CRC =”
);
Seryjny
.
wydrukować
(
OneWire
::
crc8
(
dane
,
8
),
KLĄTWA
);
Seryjny
.
println
();
// Rozpocznij proces konwersji otrzymanych danych na aktualną temperaturę, // która jest przechowywana w 0 i 1 bajtach odczytanej pamięci. Aby to zrobić, łączymy te dwa // bajty w jedną 16-bitową liczbę int16_t raw
=(
dane
[
1
]<<
8
)|
dane
[
0
];
// Przed dalszą konwersją należy zdefiniować rodzinę, do której // należy ten czujnik (wcześniej zapisywaliśmy wynik w zmiennej type_s). // W zależności od rodziny temperatura będzie obliczana inaczej, // ponieważ DS18B20 i DS1822 zwracają wartość 12-bitową, podczas gdy DS18S20 zwraca wartość 9-bitową
Jeśli(
type_s
){
// Jeśli czujnik należy do surowej rodziny DS18S20
=
surowy
<<
3
;
// domyślna rozdzielczość to 9 bitów
Jeśli(
dane
[
7
]==
0x10
){
surowy
=(
surowy
&
0xFFF0
)+
12
—
dane
[
6
];}}jeszcze{
// Określ, z jaką dokładnością pomiaru ten czujnik jest skonfigurowany bajt cfg
=(
dane
[
4
]&
0x60
);
// Przy niższych rozdzielczościach możesz wyzerować najmniej znaczące bity, // ponieważ nie są zdefiniowane wcześnie
Jeśli(
cfg
==
0x00
)
surowy
=
surowy
&~
7
;
// 9 bitów (konwersja trwa 93,75 ms)
jeszczeJeśli(
cfg
==
0x20
)
surowy
=
surowy
&~
3
;
// 10 bitów (konwersja trwa 187,5 ms)
jeszczeJeśli(
cfg
==
0x40
)
surowy
=
surowy
&~
1
;
// 11 bitów (konwersja trwa 375 ms) // Domyślna precyzja to 12 bitów (konwersja trwa 750 ms)
}
// Oblicz i wyślij wartości temperatury do monitora portu Celsjusza
=(
pływak
)
surowy
/
16.0
;
Fahrenheit
=
Celsjusz
*
1.8
+
32.0
;
Seryjny
.
wydrukować
(
„Temperatura =”
);
Seryjny
.
wydrukować
(
Celsjusz
);
Seryjny
.
wydrukować
(
"Celsjusz,"
);
Seryjny
.
wydrukować
(
Fahrenheit
);
Seryjny
.
println
(
„Fahrenheit”
);}
Jeśli wszystko zostało zrobione poprawnie, to w oknie monitora portów powinniśmy zobaczyć coś takiego jak poniżej (Rysunek 6):
Rysunek 6 - wynik pracy z biblioteką OneWire.h
Biblioteka DallasTemperature.h
Ta biblioteka jest oparta na poprzedniej i upraszcza nieco proces programowania dzięki bardziej zrozumiałym funkcjom. Po instalacji będziesz mieć dostęp do 14 przykładów dobrze udokumentowanego kodu na każdą okazję. W ramach tego artykułu rozważony zostanie przykład pracy z jednym czujnikiem.
Wynik programu przedstawiono na rysunku 7
Rysunek nr 7 - wynik odczytu temperatury za pomocą biblioteki DallasTemperature.h
// Podłączamy niezbędne biblioteki # include #include // Podłączamy magistralę danych do pinu # 2 Arduino # define ONE_WIRE_BUS 2 // Utwórz instancję klasy dla naszej magistrali i łącze do niej OneWire oneWire
(
ONE_WIRE_BUS
);
Czujniki temperatury Dallas
(&
oneWire
);
// WSTĘPNA FUNKCJA void setup
(
unieważnić
){
Seryjny
.
zaczynać
(
9600
);
// Zainicjuj czujniki portu szeregowego
.
zaczynać
();
// Zainicjuj magistralę
}
// GŁÓWNY CYKL
(
unieważnić
){
Seryjny
.
wydrukować
(
„Temperatura odczytu ...”
);
// Wyślij polecenie odczytu czujników
.
requestTemperatures
();
Seryjny
.
println
(
"Czytać"
);
Seryjny
.
wydrukować
(
„Temperatura czujnika 1:”
);
// Wyświetla wartość temperatury Serial
.
wydrukować
(
czujniki
.
getTempCByIndex
(
0
));}
Czujnik temperatury KY-001 z interfejsem 1-Wire
Ten czujnik służy do dokładnego pomiaru temperatury. Komunikacja z czujnikiem odbywa się poprzez interfejs 1-Wire [1-2], co pozwala na podłączenie kilku podobnych urządzeń do płytki Arduino za pomocą jednego pinu mikrokontrolera [3-4]. Moduł oparty na mikroukładzie ds18b20 [5].
Wymiary modułu 24 x 15 x 10 mm, waga 1,3 g. Do podłączenia służy złącze trójstykowe. Styk centralny - zasilanie + 5V, styk „-” - wspólny, styk „S” - informacyjny.
Płyta posiada czerwoną diodę LED, która zapala się podczas wymiany informacji.
Pobór prądu 0,6 mA podczas wymiany informacji i 20 μA w trybie czuwania.
Podłączanie tego typu czujników do Arduino jest dobrze opisane w wielu źródłach [6-8]. W tym przypadku ponownie ujawniają się główne zalety Arduino - wszechstronność i obecność ogromnej ilości informacji referencyjnych. Do pracy z czujnikiem będziesz potrzebować biblioteki OneWire [9]. Po wczytaniu programu z [8] (w pierwszej wersji programu wystąpił błąd - w nagłówku kodu nie ma połączenia z biblioteką #include), na monitorze portu szeregowego można zaobserwować następujące informacje.
Autor przetestował też kod z [7], wszystko działało od razu, na monitorze portu szeregowego można odczytać informację o typie podłączonego czujnika oraz aktualne dane temperaturowe.
Ogólnie bardzo przydatny czujnik, który pozwala w praktyce zapoznać się z interfejsem 1-Wire. Czujnik natychmiast podaje prawidłowe dane o temperaturze, użytkownik nie musi kalibrować.