Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Obwody
- Krok 2: Metoda
- Krok 3: TMP36 - Wstępna wersja próbna
- Krok 4: Wyniki podstawienia potencjometru
- Krok 5: Średnie odczyty i wynik
- Krok 6: DS18B20 - Testowanie wstępne
- Krok 7: DS18B20 działa dobrze
- Krok 8: DHT22 i DHT11
- Krok 9: Wyniki DHT22
- Krok 10: Test DTH11
- Krok 11: BME680
- Krok 12: Którego powinienem użyć?
- Krok 13: Dalsze przemyślenia i eksperymenty
- Krok 14: Pełny wykres
- Krok 15: Wnioski
Wideo: Testowanie czujników temperatury – który dla mnie?: 15 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
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
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
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
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
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
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
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
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 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
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
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
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ć?
- 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
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
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
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:
ESP8266 NodeMCU Access Point (AP) dla serwera WWW z czujnikiem temperatury DT11 i drukowaniem temperatury i wilgotności w przeglądarce: 5 kroków
ESP8266 NodeMCU Access Point (AP) dla serwera WWW z czujnikiem temperatury DT11 i drukowaniem temperatury i wilgotności w przeglądarce: Cześć, w większości projektów używamy ESP8266, a w większości projektów używamy ESP8266 jako serwera WWW, dzięki czemu można uzyskać dostęp do danych dowolne urządzenie przez Wi-Fi, uzyskując dostęp do serwera WWW obsługiwanego przez ESP8266, ale jedynym problemem jest to, że potrzebujemy działającego routera
Sieć czujników temperatury: 6 kroków
Sieć czujników temperatury: Temperatura i wilgotność to kluczowe dane w laboratorium, kuchni, linii produkcyjnej, biurze, zabójczych robotach, a nawet w domu. Jeśli potrzebujesz monitorować wiele lokalizacji lub pomieszczeń lub przestrzeni, potrzebujesz czegoś, co jest niezawodne, kompaktowe, dokładne i niedrogie
Mod 3.3V dla czujników ultradźwiękowych (przygotuj HC-SR04 dla logiki 3.3V w ESP32/ESP8266, Particle Photon, itp.): 4 kroki
3.3V Mod dla czujników ultradźwiękowych (przygotuj HC-SR04 dla logiki 3.3V na ESP32/ESP8266, Particle Photon, itp.): TL;DR: Na czujniku odetnij ślad do pinu Echo, a następnie podłącz go ponownie za pomocą dzielnik napięcia (przebieg echa -> 2,7 kΩ -> pin echa -> 4,7 kΩ -> GND)
Robot autonomiczny Wallace - część 4 - dodanie czujników odległości na podczerwień i czujników „wzmacniacza”: 6 kroków
Robot autonomiczny Wallace – część 4 – Dodaj czujniki odległości na podczerwień i czujniki „wzmacniacza”: Witam, dzisiaj rozpoczynamy kolejny etap ulepszania możliwości Wallace'a. W szczególności staramy się poprawić jego zdolność wykrywania i omijania przeszkód za pomocą czujników odległości na podczerwień, a także wykorzystać możliwości kontrolera silnika Roboclaw
Używanie czujników temperatury, wody deszczowej i wibracji w Arduino do ochrony linii kolejowych: 8 kroków (ze zdjęciami)
Wykorzystanie czujników temperatury, wody deszczowej i wibracji w Arduino do ochrony kolei: we współczesnym społeczeństwie wzrost liczby pasażerów pociągów oznacza, że firmy kolejowe muszą zrobić więcej, aby zoptymalizować sieci, aby nadążyć za popytem. W tym projekcie pokażemy w małej skali, jak czujniki temperatury, wody deszczowej i wibracji działają