Spisu treści:

Testowanie czujników temperatury – który dla mnie?: 15 kroków (ze zdjęciami)
Testowanie czujników temperatury – który dla mnie?: 15 kroków (ze zdjęciami)

Wideo: Testowanie czujników temperatury – który dla mnie?: 15 kroków (ze zdjęciami)

Wideo: Testowanie czujników temperatury – który dla mnie?: 15 kroków (ze zdjęciami)
Wideo: Czujnik temperatury i wilgotności z wyświetlaczem od #tuya #zigbee 2024, Listopad
Anonim
Testowanie czujników temperatury - który dla mnie?
Testowanie czujników temperatury - który dla mnie?

Jednym z pierwszych czujników, które nowicjusze w dziedzinie komputerów fizycznych chcą wypróbować, jest czujnik do pomiaru temperatury. Cztery z najpopularniejszych czujników to TMP36, który ma wyjście analogowe i potrzebuje przetwornika analogowo-cyfrowego, DS18B20, który wykorzystuje łączność jednoprzewodową, DHT22 lub nieco tańszy DHT11, który potrzebuje tylko pinu cyfrowego, ale także zapewnia odczyt wilgotności, a na koniec BME680, który wykorzystuje I2C (z SPI również na niektórych tablicach zaciskowych) i podaje temperaturę, wilgotność, gaz (VOC) i ciśnienie atmosferyczne, ale kosztuje nieco więcej.

Chcę zobaczyć, na ile są dokładne i odkryć zalety lub wady. Posiadam już dokładny termometr rtęciowy, pozostały po barwnym drukowaniu fotograficznym z czasów obróbki chemicznej, aby je porównać. (Nigdy niczego nie wyrzucaj - przyda się później!)

Do tych testów użyję CircuitPythona i płytki rozwojowej Adafruit Itsybitsy M4. Dla wszystkich urządzeń dostępne są odpowiednie sterowniki.

Kieszonkowe dzieci

Moja początkowa lista:

  • Mikrokontroler Itsybitsy M4 Express
  • kabel micro USB - do programowania
  • TMP36
  • DS18B20
  • Rezystor 4,7 K Ohm
  • DHT22
  • BME680
  • Multimetr
  • Deska do krojenia chleba lub deska do pasków
  • Przewód łączący

Krok 1: Obwody

Obwody
Obwody

Przewody pomarańczowe to 3,3 V

Czarne przewody to GND

W dolnej części płytki znajdują się punkty testowe do pomiaru napięć. (wyjście analogowe 3,3 V, GND i TMP36)

Gniazda środkowe to, od lewej do prawej:

  • TMP36: 3.3v, wyjście sygnału analogowego, GND
  • DS18B20: GND, wyjście sygnału cyfrowego, 3.3v
  • DHT22: 3.3v, wyjście sygnału, pusty, GND
  • BME680: 3.3v, SDA, SCL, pusty, GND

Tylne złącze do podłączenia do płyty IB M4E, od lewej do prawej

  • 3.3v
  • TMP36 - wyjście analogowe do pinu A2
  • GND
  • Wyjście cyfrowe DS18B20 na pin D3 - zielone
  • Wyjście cyfrowe DHT22 do pinu D2 - żółte
  • SDA - biały
  • SCL - różowy

Rezystor 4,7 K Ohm to podciąganie z sygnału do 3,3 V dla połączenia 0-wire w DS18B20.

Z tyłu planszy znajdują się 2 wycięte tory:

Poniżej lewego końca różowego i białego przewodu. (Pod żółtym przewodem.)

Krok 2: Metoda

metoda
metoda

Dla każdego czujnika napiszę krótki skrypt do kilkukrotnego odczytu temperatury (i innych elementów, jeśli są dostępne) i porównania temperatury z moim termometrem rtęciowym (Hg). Będę sprawdzał, jak blisko temperatura jest porównywana z odczytem rtęci i czy odczyty są stabilne/spójne.

Przyjrzę się również dokumentacji, aby sprawdzić, czy odczyty mieszczą się w oczekiwanej dokładności i czy można coś zrobić, aby wprowadzić ulepszenia.

Krok 3: TMP36 - Wstępna wersja próbna

TMP36 - Wstępna próba
TMP36 - Wstępna próba
TMP36 - Wstępna próba
TMP36 - Wstępna próba

Lewa noga to 3,3 V, prawa noga to GND, a środkowa noga to analogowe napięcie reprezentujące temperaturę według następującego wzoru. TempC = (miliwolty - 500) / 10

Tak więc 750 miliwoltów daje temperaturę 25 C

Wydaje się, że jest tu kilka problemów. Temperatura z 'normalnego' termometru rtęciowego jest znacznie niższa niż z TMP36 i odczyty nie są zbyt spójne - pojawiają się pewne 'jitter' lub szumy.

Czujnik TMP36 wysyła napięcie proporcjonalne do temperatury. Musi to zostać odczytane przez przetwornik A/C przed obliczeniem temperatury. Odczytajmy napięcie bezpośrednio ze środkowej nogi czujnika za pomocą multimetru i porównajmy je z wynikiem z A/D. Odczyt ze środkowej nogi z mojego multimetru wynosi 722 miliwolty, znacznie niższy i bardzo stabilny odczyt.

Możemy spróbować dwóch rzeczy. Zastąp potencjometr TMP36 i dostosuj napięcie w obliczeniach do rzeczywistego napięcia mikrokontrolera. Zobaczymy wtedy, czy obliczone napięcie jest bliższe i czy szum/jitter jest zmniejszony.

Zmierzmy napięcie używane przez mikrokontroler i A/D. Przyjęto, że to 3,3 V, ale w rzeczywistości jest to tylko 3,275 V.

Krok 4: Wyniki podstawienia potencjometru

Wyniki podstawienia potencjometru
Wyniki podstawienia potencjometru

To jest dużo lepsze. Odczyty mieszczą się w zakresie kilku miliwoltów przy znacznie mniejszym szumie. Sugeruje to, że szum pochodzi z TMP36, a nie z A/D. Odczyt na mierniku jest zawsze stały - bez jittera. (Miernik może „wygładzać” roztrzęsiony sygnał wyjściowy.)

Jednym ze sposobów poprawy sytuacji może być wykonanie przeciętnego odczytu. Szybko wykonaj dziesięć odczytów i użyj średniej. Przy zmianie programu obliczę również odchylenie standardowe, aby wskazać rozrzut wyników. Ilość odczytów policzę również w granicach 1 odchylenia standardowego średniej - im wyższa tym lepiej.

Krok 5: Średnie odczyty i wynik

Średnie odczyty i wynik
Średnie odczyty i wynik

Nadal jest dużo szumów, a odczyt z TMP36 jest nadal wyższy niż z termometru rtęciowego. Aby zredukować szum, dołączyłem kondensator 100NF między sygnałem a GND

Następnie szukałem innych rozwiązań w Internecie i znalazłem te: https://www.doctormonk.com/2015/02/accurate-and-re… Dr Monk sugeruje włączenie rezystora 47 k Ohm między sygnałem a GND.

www.desert-home.com/2015/03/battery-operate… Podczas gdy ten facet sugeruje posortowanie 15 odczytów w kolejności i uśrednienie centrum 5.

Zmodyfikowałem skrypt i obwód, aby uwzględnić te sugestie i dołączyłem odczyt z termometru rtęciowego.

W końcu! Teraz mamy stałe odczyty w zakresie dokładności opisu urządzenia.

Było to dość dużo wysiłku, aby czujnik działał, który ma tylko dokładność producenta:

Dokładność - najwyższa (najniższa): ± 3 ° C (± 4 ° C) Kosztują tylko około 1,50 USD (2 GBP)

Krok 6: DS18B20 - Testowanie wstępne

DS18B20 - Wstępne testy
DS18B20 - Wstępne testy

Bądź bardzo ostrożny. Ten pakiet wygląda bardzo podobnie do TMP36, ale nogi są odwrotnie, z 3,3 V po prawej i GND po lewej. Sygnał jest w centrum. Aby to urządzenie działało, potrzebujemy rezystora 4,7 k Ohm między sygnałem a 3,3 V. To urządzenie korzysta z protokołu jednoprzewodowego i musimy pobrać kilka sterowników do folderu lib programu Itsybitsy M4 Express.

Kosztuje to około 4 USD / 4 GBP Specyfikacja techniczna:

  • Użyteczny zakres temperatur: -55 do 125°C (-67°F do +257°F)
  • Rozdzielczość do wyboru od 9 do 12 bitów
  • Wykorzystuje interfejs 1-Wire-wymaga tylko jednego cyfrowego pinu do komunikacji
  • Unikalny 64-bitowy identyfikator wypalony w chipie
  • Wiele czujników może dzielić jeden pin
  • ±0,5°C Dokładność od -10°C do +85°C
  • System alarmowy ograniczający temperaturę
  • Czas zapytania jest mniejszy niż 750ms
  • Można używać z zasilaniem od 3,0 V do 5,5 V

Główny problem z tym czujnikiem polega na tym, że wykorzystuje on interfejs Dallas 1-Wire i nie wszystkie mikrokontrolery mają odpowiedni sterownik. Mamy szczęście, jest kierowca do Itsybitsy M4 Express.

Krok 7: DS18B20 działa dobrze

DS18B20 działa dobrze
DS18B20 działa dobrze

To pokazuje świetny wynik.

Stały zestaw odczytów bez dodatkowych nakładów pracy i obliczeń. Odczyty mieszczą się w oczekiwanym zakresie dokładności ±0,5°C w porównaniu z moim termometrem rtęciowym.

Istnieje również wersja wodoodporna za około 10 USD, z której korzystałem w przeszłości z równym powodzeniem.

Krok 8: DHT22 i DHT11

DHT22 i DHT11
DHT22 i DHT11

DHT22 wykorzystuje termistor do uzyskania temperatury i kosztuje około 10 USD / 10 GBP i jest dokładniejszym i droższym bratem mniejszego DHT11. Wykorzystuje również interfejs jednoprzewodowy, ale NIE jest kompatybilny z protokołem Dallas używanym z DS18B20. Wyczuwa zarówno wilgotność, jak i temperaturę. Urządzenia te czasami wymagają rezystora podciągającego między 3,3 V a pinem sygnałowym. Ten pakiet ma już zainstalowany.

  • Niska cena
  • Zasilanie od 3 do 5 V i we/wy
  • Maksymalne natężenie prądu 2,5mA podczas konwersji (podczas żądania danych)
  • Dobry dla odczytów wilgotności 0-100% z dokładnością 2-5%
  • Dobry dla odczytów temperatury od -40 do 80 ° C ± 0,5 ° C dokładność
  • Częstotliwość próbkowania nie większa niż 0,5 Hz (raz na 2 sekundy)
  • Rozmiar korpusu 27 mm x 59 mm x 13,5 mm (1,05" x 2,32" x 0,53")
  • 4 piny, rozstaw 0,1"
  • Waga (tylko DHT22): 2,4 g

W porównaniu do DHT11 czujnik ten jest dokładniejszy, dokładniejszy i pracuje w większym zakresie temperatury/wilgotności, ale jest większy i droższy.

Krok 9: Wyniki DHT22

Wyniki DHT22
Wyniki DHT22

Są to doskonałe wyniki przy niewielkim wysiłku. Odczyty są dość stabilne i mieszczą się w oczekiwanej tolerancji. Dodatkowym atutem jest odczyt wilgotności.

Możesz odczytywać tylko co sekundę.

Krok 10: Test DTH11

Test DTH11
Test DTH11

Mój termometr rtęciowy wskazywał 21,9 stopnia C. To dość stary DHT11, który pobrałem ze starego projektu, a wartość wilgotności bardzo różni się od odczytów DHT22 sprzed kilku minut. Kosztuje około 5 USD / 5 GBP.

Jego opis obejmuje:

  • Dobry dla odczytów wilgotności 20-80% z dokładnością 5%
  • Dobry dla odczytów temperatury 0-50°C Dokładność ±2°C - mniej niż DTH22

Wydaje się, że temperatura nadal mieści się w zakresie dokładności, ale nie ufam odczytowi wilgotności z tego starego urządzenia.

Krok 11: BME680

BME680
BME680

Ten czujnik zawiera w jednym pakiecie możliwości wykrywania temperatury, wilgotności, ciśnienia barometrycznego i gazu VOC, ale jest najdroższym z testowanych czujników. Kosztuje około 18,50 GBP / 22 USD. Jest podobny produkt bez czujnika gazu, który jest trochę tańszy.

Jest to złoty standard czujnika z pięciu. Czujnik temperatury jest dokładny, a dzięki odpowiednim sterownikom bardzo łatwy w użyciu. Ta wersja używa I2C, ale tabliczka zaciskowa Adafruit może również używać SPI.

Podobnie jak BME280 i BMP280, ten precyzyjny czujnik firmy Bosch może mierzyć wilgotność z dokładnością ±3%, ciśnienie barometryczne z dokładnością bezwzględną ±1 hPa oraz temperaturę z dokładnością ±1,0°C. Ponieważ ciśnienie zmienia się wraz z wysokością, a pomiary ciśnienia są tak dobre, można go również używać jako wysokościomierza z dokładnością ±1 metra lub lepszą!

Dokumentacja mówi, że czujnik gazu potrzebuje trochę „czasu wygrzewania”.

Krok 12: Którego powinienem użyć?

Którego powinienem użyć?
Którego powinienem użyć?
  • TMP36 jest bardzo tani, mały i popularny, ale dość trudny w użyciu i może być niedokładny.
  • DS18B20 jest mały, dokładny, tani, bardzo łatwy w obsłudze i ma wodoodporną wersję.
  • DTH22 wskazuje również wilgotność, jest niedrogi i łatwy w użyciu, ale może być zbyt wolny.
  • BME680 robi znacznie więcej niż inne, ale jest drogi.

Jeśli chcę tylko temperatury, użyłbym DS18B20 z dokładnością ±0,5°C, ale moim ulubionym jest BME680, ponieważ robi o wiele więcej i może być wykorzystany w wielu różnych projektach.

Ostatnia myśl. Upewnij się, że trzymasz czujnik temperatury z dala od mikroprocesora. Niektóre nakładki nakładkowe Raspberry Pi umożliwiają rozgrzanie czujnika przez ciepło z płyty głównej, co daje fałszywy odczyt.

Krok 13: Dalsze przemyślenia i eksperymenty

Dalsze przemyślenia i eksperymenty
Dalsze przemyślenia i eksperymenty

Dziękuję gulliverrr, ChristianC231 i pgagen za komentarze na temat tego, co zrobiłem do tej pory. Przepraszam za opóźnienie, ale od kilku tygodni jestem na wakacjach w Irlandii, bez dostępu do mojej elektroniki.

Oto pierwsza próba pokazania współpracy czujników.

Napisałem skrypt do odczytywania czujników po kolei i drukowania wartości temperatury co około 20 sekund.

Zestaw wkładam na godzinę do lodówki, żeby wszystko ostygło. Podłączyłem go do komputera i zmusiłem Mu do wydrukowania wyników. Dane wyjściowe zostały następnie skopiowane, przekształcone w plik.csv (zmienne oddzielone przecinkami), a wykresy zostały narysowane na podstawie wyników w programie Excel.

Minęło około trzech minut od wyjęcia zestawu z lodówki, zanim zarejestrowano wyniki, więc w tym czasie nastąpił pewien wzrost temperatury. Podejrzewam, że cztery czujniki mają różne pojemności cieplne, a więc nagrzewałyby się w różnym tempie. Oczekuje się, że tempo nagrzewania się zmniejszy, gdy czujniki zbliżają się do temperatury pokojowej. Zarejestrowałem to jako 24,4°C za pomocą mojego termometru rtęciowego.

Duże różnice temperatur na początku krzywych mogą wynikać z różnych pojemności cieplnych czujników. Cieszę się, że linie zbiegają się pod koniec, gdy zbliżają się do temperatury pokojowej. Obawiam się, że TMP36 jest zawsze znacznie wyższy niż pozostałe czujniki.

Przejrzałem arkusze danych, aby ponownie sprawdzić opisaną dokładność tych urządzeń

TMP36

  • Dokładność ±2°C w stosunku do temperatury (typ)
  • ±0,5°C liniowość (typ)

DS18B20

±0,5°C Dokładność od -10°C do +85°C

DHT22

temperatura ±0,5°C

BME680

temperatura z dokładnością ±1.0°C

Krok 14: Pełny wykres

Pełny wykres
Pełny wykres

Możesz teraz zobaczyć, że czujniki ostatecznie wyrównały się i uzgodniły temperaturę mniej więcej w ramach opisanej dokładności. Jeśli odejmuje się 1.7 stopnia od wartości TMP36 (oczekiwane jest ±2°C), istnieje dobra zgodność pomiędzy wszystkimi czujnikami.

Kiedy pierwszy raz przeprowadziłem ten eksperyment, czujnik DHT22 spowodował problem:

wyjście main.py:

14.9, 13.5, 10.3, 13.7

15.7, 14.6, 10.5, 14.0

16.6, 15.6, 12.0, 14.4

18.2, 16.7, 13.0, 15.0

18.8, 17.6, 14.0, 15.6

19.8, 18.4, 14.8, 16.2

21.1, 18.7, 15.5, 16.9

21.7, 19.6, 16.0, 17.5

22.4, 20.2, 16.5, 18.1

23.0, 20.7, 17.1, 18.7

Błąd odczytu DHT: („Nie znaleziono czujnika DHT, sprawdź okablowanie”,)

Traceback (ostatnie ostatnie połączenie):

Plik "main.py", wiersz 64, in

Plik "main.py", wiersz 59, w get_dht22

NameError: zmienna lokalna, do której odwołuje się przed przypisaniem

Zmodyfikowałem więc skrypt, aby poradzić sobie z tym problemem i zrestartowałem nagrywanie:

Błąd odczytu DHT: („Nie znaleziono czujnika DHT, sprawdź okablowanie”,)

25.9, 22.6, -999.0, 22.6

Błąd odczytu DHT: („Nie znaleziono czujnika DHT, sprawdź okablowanie”,)

25.9, 22.8, -999.0, 22.7

25.9, 22.9, 22.1, 22.8

25.9, 22.9, 22.2, 22.9

Błąd odczytu DHT: („Nie znaleziono czujnika DHT, sprawdź okablowanie”,)

27.1, 23.0, -999.0, 23.0

Błąd odczytu DHT: („Nie znaleziono czujnika DHT, sprawdź okablowanie”,)

27.2, 23.0, -999.0, 23.1

25.9, 23.3, 22.6, 23.2

Błąd odczytu DHT: („Nie znaleziono czujnika DHT, sprawdź okablowanie”,)

28.4, 23.2, -999.0, 23.3

Błąd odczytu DHT: („Nie znaleziono czujnika DHT, sprawdź okablowanie”,)

26.8, 23.1, -999.0, 23.3

26.5, 23.2, 23.0, 23.4

26.4, 23.3, 23.0, 23.5

26.4, 23.4, 23.1, 23.5

26.2, 23.3, 23.1, 23.6

Z drugim przejazdem nie miałem problemu. Dokumentacja Adafruit ostrzega, że czasami czujniki DHT gubią odczyty.

Krok 15: Wnioski

Wnioski
Wnioski

Krzywa ta wyraźnie pokazuje, że wyższa pojemność cieplna niektórych czujników wydłuża ich czas reakcji.

Wszystkie czujniki rejestrują wzrost i spadek temperatury.

Nie bardzo szybko przyzwyczajają się do nowej temperatury.

Nie są zbyt dokładne. (Czy są wystarczająco dobre na stację pogodową?)

Może być konieczne skalibrowanie czujnika względem zaufanego termometru.

Zalecana: