Cuprins:

Testarea senzorilor de temperatură - Care pentru mine ?: 15 pași (cu imagini)
Testarea senzorilor de temperatură - Care pentru mine ?: 15 pași (cu imagini)

Video: Testarea senzorilor de temperatură - Care pentru mine ?: 15 pași (cu imagini)

Video: Testarea senzorilor de temperatură - Care pentru mine ?: 15 pași (cu imagini)
Video: Simptomele unui senzor de temperatură motor DEFECT! 2024, Noiembrie
Anonim
Testarea senzorilor de temperatură - Care pentru mine?
Testarea senzorilor de temperatură - Care pentru mine?

Unul dintre primii senzori pe care noii veniți în calcul fizic vor să-l încerce este ceva pentru a măsura temperatura. Patru dintre cei mai populari senzori sunt TMP36, care are ieșire analogică și are nevoie de un convertor analogic la digital, DS18B20, care utilizează conectivitate cu un singur fir, DHT22 sau DHT11 puțin mai ieftin, care are nevoie doar de un pin digital, dar și oferă o citire a umidității și, în cele din urmă, BME680 care folosește I2C (cu SPI, de asemenea, pe unele plăci de rupere) și oferă temperatură, umiditate, gaz (VOC) și presiune atmosferică, dar costă puțin mai mult.

Vreau să văd cât de precise sunt și să descopăr orice avantaje sau dezavantaje. Dețin deja un termometru precis cu mercur, rămas din imprimarea fotografică color în vremurile procesării chimice, pentru a le compara cu acestea. (Nu aruncați niciodată nimic afară - veți avea nevoie de el mai târziu!)

Voi folosi CircuitPython și o placă de dezvoltare Adafruit Itsybitsy M4 pentru aceste teste. Sunt disponibile drivere adecvate pentru toate dispozitivele.

Provizii

Lista mea inițială:

  • Microcontroler Itsybitsy M4 Express
  • cablu micro USB - pentru programare
  • TMP36
  • DS18B20
  • Rezistor de 4,7K Ohm
  • DHT22
  • BME680
  • Multimetru
  • Panou sau panou de benzi
  • Sârmă de conectare

Pasul 1: Circuite

Circuite
Circuite

Firele portocalii sunt de 3,3 V

Firele negre sunt GND

În partea de jos a plăcii sunt puncte de testare pentru măsurarea tensiunilor. (Ieșire analogică 3.3v, GND și TMP36)

Priza centrală este, de la stânga la dreapta:

  • TMP36: 3.3v, ieșire semnal analog, GND
  • DS18B20: GND, ieșire semnal digital, 3.3v
  • DHT22: 3.3v, semnal ieșit, gol, GND
  • BME680: 3,3v, SDA, SCL, gol, GND

Conectorul din spate, pentru conectarea la placa IB M4E, de la stânga la dreapta

  • 3.3v
  • TMP36 - ieșire analogică la pinul A2
  • GND
  • DS18B20 ieșire digitală la pinul D3 - verde
  • DHT22 ieșire digitală la pinul D2 - galben
  • SDA - alb
  • SCL - roz

Rezistorul de 4.7K Ohm este un pullup de la semnal la 3.3v pentru conexiunea 0ne-wire pe DS18B20.

Există 2 piste tăiate pe spatele plăcii:

Sub capătul din stânga al firelor roz și alb. (Sub firul galben.)

Pasul 2: Metoda

Metodă
Metodă

Pentru fiecare senzor voi scrie un scurt script pentru a citi temperatura (și alte elemente, dacă sunt disponibile) de mai multe ori și pentru a verifica temperatura față de termometrul meu cu mercur (Hg). Voi căuta să văd cât de strâns se compară temperatura cu citirea mercurului și dacă citirile sunt constante / consistente.

De asemenea, voi examina documentația pentru a vedea dacă citirile se încadrează în precizia așteptată și dacă se poate face ceva pentru a face îmbunătățiri.

Pasul 3: TMP36 - Încercare inițială

TMP36 - Încercare inițială
TMP36 - Încercare inițială
TMP36 - Încercare inițială
TMP36 - Încercare inițială

Piciorul stâng este de 3,3v, piciorul drept este GND, iar piciorul central este o tensiune analogică reprezentând temperatura folosind următoarea formulă. TempC = (milivolți - 500) / 10

Deci, 750 milivolți dau o temperatură de 25 C

Se pare că există câteva probleme aici. Temperatura de la termometrul „normal”, cu mercur, este mult mai scăzută decât de la TMP36, iar citirile nu sunt foarte consistente - există o oarecare „zgomot” sau zgomot.

Senzorul TMP36 transmite o tensiune proporțională cu temperatura. Acest lucru trebuie citit de convertorul A / D înainte de calcularea temperaturii. Să citim tensiunea direct de la piciorul central al senzorului cu un multimetru și să o comparăm cu rezultatul de la A / D. Citirea din piciorul central cu multi-metrul meu este de 722 milivolți, mult mai mică și o lectură foarte constantă.

Există două lucruri pe care le putem încerca. Înlocuiți un potențiometru pentru TMP36 și reglați tensiunea din calcul la tensiunea reală a microcontrolerului. Vom vedea apoi dacă tensiunea calculată este mai apropiată și dacă zgomotul / jitterul este redus.

Să măsurăm tensiunea reală folosită de microcontroler și A / D. Acest lucru a fost presupus la 3,3v, dar este de fapt doar 3,275v.

Pasul 4: Rezultatele înlocuirii potențiometrului

Rezultatele înlocuirii potențiometrului
Rezultatele înlocuirii potențiometrului

Este mult mai bine. Citirile sunt în câteva milivolți cu mult mai puțin zgomot. Acest lucru sugerează că zgomotul provine de la TMP36 mai degrabă decât de la A / D. Citirea contorului este întotdeauna constantă - fără jitter. (Contorul poate „netezi” ieșirea nervoasă.)

O modalitate de îmbunătățire a situației poate fi luarea unei citiri medii. Faceți zece citiri rapid și utilizați media. De asemenea, voi calcula abaterea standard în timp ce schimb programul, pentru a da o indicație a răspândirii rezultatelor. De asemenea, voi număra numărul de citiri în cadrul unei deviații standard a mediei - cu cât este mai mare cu atât mai bine.

Pasul 5: Citiri medii și un rezultat

Citiri medii și un rezultat
Citiri medii și un rezultat

Există încă o mulțime de zgomot și citirea de la TMP36 este încă mai mare decât de la termometrul cu mercur. Pentru a reduce zgomotul, am inclus un condensator 100NF între semnal și GND

Am căutat apoi alte soluții pe internet și am găsit următoarele: https://www.doctormonk.com/2015/02/accurate-and-re… Dr. Monk sugerează includerea unui rezistor de 47 k Ohm între semnal și GND.

www.desert-home.com/2015/03/battery-operate… În timp ce acest tip sugerează sortarea a 15 citiri în ordine și media centrului 5.

Am modificat scenariul și circuitul pentru a include aceste sugestii și am inclus o citire din termometrul cu mercur.

În sfârșit! Acum avem citiri constante în intervalul de precizie al descrierii dispozitivului.

A fost un efort destul de mare pentru ca senzorul să funcționeze, care are doar o precizie a producătorului de:

Precizie - Cea mai mare (cea mai mică): ± 3 ° C (± 4 ° C) Costă doar aproximativ 1,50 USD (2 GBP)

Pasul 6: DS18B20 - Testarea inițială

DS18B20 - Testarea inițială
DS18B20 - Testarea inițială

Fii foarte atent. Acest pachet arată foarte asemănător cu TMP36, dar picioarele sunt invers, cu 3.3v în dreapta și GND în stânga. Semnalul de ieșire este în centru. Pentru ca acest dispozitiv să funcționeze, avem nevoie de un rezistor de 4,7 k Ohm între semnal și 3,3v. Acest dispozitiv utilizează protocolul cu un singur fir și trebuie să descărcăm câteva drivere în folderul lib al Itsybitsy M4 Express.

Acest lucru costă aproximativ 4 USD / 4 GBP Specificații tehnice:

  • Gama de temperatură utilizabilă: -55 până la 125 ° C (-67 ° F până la + 257 ° F)
  • Rezoluție selectabilă de la 9 la 12 biți
  • Folosește interfața cu 1 fir - necesită un singur pin digital pentru comunicare
  • ID unic pe 64 de biți ars în cip
  • Mai mulți senzori pot partaja un singur pin
  • ± 0,5 ° C Precizie de la -10 ° C la + 85 ° C
  • Sistem de alarmă cu limită de temperatură
  • Timpul de interogare este mai mic de 750 ms
  • Utilizabil cu putere de la 3.0V la 5.5V

Principala problemă cu acest senzor este că folosește interfața Dallas 1-Wire și nu toate microcontrolerele au un driver adecvat. Suntem norocoși, există un șofer pentru Itsybitsy M4 Express.

Pasul 7: DS18B20 funcționează bine

DS18B20 funcționează bine
DS18B20 funcționează bine

Acest lucru arată un rezultat excelent.

Un set constant de citiri, fără alte lucrări suplimentare și cheltuieli generale. Citirile se încadrează în intervalul de precizie preconizat de ± 0,5 ° C în comparație cu termometrul meu cu mercur.

Există, de asemenea, o versiune impermeabilă la aproximativ 10 USD pe care am folosit-o în trecut cu același succes.

Pasul 8: DHT22 și DHT11

DHT22 și DHT11
DHT22 și DHT11

DHT22 folosește un termistor pentru a obține temperatura și costă aproximativ 10 USD / 10 GBP și este fratele mai precis și mai scump al DHT11 mai mic. De asemenea, folosește o interfață cu un singur fir, dar NU este compatibil cu protocolul Dallas utilizat cu DS18B20. Simte umiditatea și temperatura. Aceste dispozitive au nevoie uneori de un rezistor de tragere între 3,3 v și pinul de semnal. Acest pachet are deja unul instalat.

  • Cost scăzut
  • Putere de la 3 la 5V și I / O
  • Utilizare curentă maximă de 2,5 mA în timpul conversiei (în timp ce solicitați date)
  • Bun pentru citiri de umiditate 0-100% cu o precizie de 2-5%
  • Bun pentru citiri de temperatură de -40 până la 80 ° C precizie ± 0,5 ° C
  • Rată de eșantionare mai mare de 0,5 Hz (o dată la 2 secunde)
  • Dimensiunea corpului 27 mm x 59 mm x 13,5 mm (1,05 "x 2,32" x 0,53 ")
  • 4 pini, distanță de 0,1"
  • Greutate (doar DHT22): 2,4g

Comparativ cu DHT11, acest senzor este mai precis, mai precis și funcționează într-un interval mai mare de temperatură / umiditate, dar este mai mare și mai scump.

Pasul 9: Rezultate DHT22

Rezultate DHT22
Rezultate DHT22

Acestea sunt rezultate excelente, cu foarte puțin efort. Citirile sunt destul de constante și se încadrează în toleranța așteptată. Citirea umidității este un bonus.

Puteți face citiri doar în fiecare secundă.

Pasul 10: Testul DTH11

Testul DTH11
Testul DTH11

Termometrul meu cu mercur a arătat 21,9 grade C. Acesta este un DHT11 destul de vechi pe care l-am preluat dintr-un proiect vechi, iar valoarea umidității este foarte diferită de citirile DHT22 de acum câteva minute. Costă aproximativ 5 USD / 5 GBP.

Descrierea sa include:

  • Bun pentru citiri de umiditate de 20-80% cu o precizie de 5%
  • Bun pentru citiri de temperatură 0-50 ° C precizie ± 2 ° C - mai mică decât DTH22

Temperatura pare să fie încă în intervalul de precizie, dar nu am încredere în citirea umidității de pe acest dispozitiv vechi.

Pasul 11: BME680

BME680
BME680

Acest senzor conține capacități de detectare a temperaturii, umidității, presiunii barometrice și a gazelor COV într-un singur pachet, dar este cel mai scump dintre senzorii testați aici. Costă aproximativ 18,50 GBP / 22 USD. Există un produs similar fără senzorul de gaz, care este puțin mai ieftin.

Acesta este un senzor standard de aur al celor cinci. Senzorul de temperatură este precis și cu drivere adecvate, foarte ușor de utilizat. Această versiune folosește I2C, dar placa de breakout Adafruit poate folosi și SPI.

La fel ca BME280 și BMP280, acest senzor de precizie de la Bosch poate măsura umiditatea cu precizie de ± 3%, presiunea barometrică cu precizie absolută de ± 1 hPa și temperatura cu precizie de ± 1,0 ° C. Deoarece presiunea se schimbă odată cu altitudinea, iar măsurătorile de presiune sunt atât de bune, îl puteți folosi și ca altimetru cu precizie de ± 1 metru sau mai bună!

Documentația spune că are nevoie de un „timp de ardere” pentru senzorul de gaz.

Pasul 12: Pe care ar trebui să îl folosesc?

Pe care ar trebui să îl folosesc?
Pe care ar trebui să îl folosesc?
  • TMP36 este foarte ieftin, mic și popular, dar destul de dificil de utilizat și poate fi inexact.
  • DS18B20 este mic, precis, ieftin, foarte ușor de utilizat și are o versiune impermeabilă.
  • DTH22 indică, de asemenea, umiditatea, are un preț moderat și este ușor de utilizat, dar poate fi prea lent.
  • BME680 face mult mai mult decât celelalte, dar este scump.

Dacă vreau doar temperatura, aș folosi DS18B20 cu o precizie de ± 0,5 ° C, dar preferatul meu este BME680, deoarece face mult mai mult și poate fi folosit într-un număr mare de proiecte diferite.

Un ultim gând. Asigurați-vă că țineți senzorul de temperatură departe de microprocesor. Unele HAT-uri Raspberry Pi permit căldura de pe placa principală să încălzească senzorul, dând o citire falsă.

Pasul 13: Gânduri și experimentări suplimentare

Gânduri și experimentări suplimentare
Gânduri și experimentări suplimentare

Mulțumesc gulliverrr, ChristianC231 și pgagen pentru comentariile tale despre ceea ce am făcut până acum. Îmi pare rău pentru întârziere, dar am fost în vacanță în Irlanda, fără acces la trusa mea electronică de câteva săptămâni.

Iată o primă încercare de a arăta senzorii care lucrează împreună.

Am scris un script pentru a citi pe rând senzorii și a imprima valorile temperaturii la fiecare 20 de secunde sau cam așa ceva.

Am pus trusa la frigider timp de o oră, pentru a răci totul. L-am conectat la computer și am primit Mu să tipărească rezultatele. Ieșirea a fost apoi copiată, transformată într-un fișier.csv (variabile separate prin virgulă) și graficele se extrag din rezultatele din Excel.

Au fost necesare aproximativ trei minute de la scoaterea trusei din frigider înainte ca rezultatele să fie înregistrate, astfel încât s-a produs o creștere a temperaturii în acest interval. Bănuiesc că cei patru senzori au capacități termice diferite și astfel s-ar încălzi la viteze diferite. Se va aștepta ca rata de încălzire să scadă odată cu apropierea senzorilor de temperatura camerei. Am înregistrat acest lucru la 24,4 ° C cu termometrul meu cu mercur.

Diferențele mari de temperatură la începutul curbelor ar putea fi reduse la diferitele capacități termice ale senzorilor. Mă bucur să văd că liniile converg spre final pe măsură ce se apropie de temperatura camerei. Îmi fac griji că TMP36 este întotdeauna mult mai mare decât ceilalți senzori.

Am căutat fișele tehnice pentru a verifica din nou acuratețea descrisă a acestor dispozitive

TMP36

  • Precizie de ± 2 ° C peste temperatură (tip)
  • Liniaritate ± 0,5 ° C (tip)

DS18B20

± 0,5 ° C Precizie de la -10 ° C la + 85 ° C

DHT22

temperatura ± 0,5 ° C

BME680

temperatura cu precizie de ± 1,0 ° C

Pasul 14: Grafic complet

Grafic complet
Grafic complet

Acum puteți vedea că senzorii s-au nivelat în cele din urmă și au fost de acord asupra temperaturii mai mult sau mai puțin în cadrul preciziei lor descrise. Dacă se scot 1,7 grade valorile TMP36 (se așteaptă ± 2 ° C) există un acord bun între toți senzorii.

Prima dată când am rulat acest experiment, senzorul DHT22 a provocat o problemă:

ieșire 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

Eroare de citire DHT: („Senzorul DHT nu a fost găsit, verificați cablarea”,)

Traceback (ultimul apel cel mai recent):

Fișier „main.py”, linia 64, în

Fișier „main.py”, linia 59, în get_dht22

NameError: variabilă locală la care se face referire înainte de atribuire

Așa că am modificat scriptul pentru a face față acestei probleme și am repornit înregistrarea:

Eroare de citire DHT: („Senzorul DHT nu a fost găsit, verificați cablarea”,)

25.9, 22.6, -999.0, 22.6

Eroare de citire DHT: („Senzorul DHT nu a fost găsit, verificați cablarea”,)

25.9, 22.8, -999.0, 22.7

25.9, 22.9, 22.1, 22.8

25.9, 22.9, 22.2, 22.9

Eroare de citire DHT: („Senzorul DHT nu a fost găsit, verificați cablarea”,)

27.1, 23.0, -999.0, 23.0

Eroare de citire DHT: („Senzorul DHT nu a fost găsit, verificați cablarea”,)

27.2, 23.0, -999.0, 23.1

25.9, 23.3, 22.6, 23.2

Eroare de citire DHT: („Senzorul DHT nu a fost găsit, verificați cablarea”,)

28.4, 23.2, -999.0, 23.3

Eroare de citire DHT: („Senzorul DHT nu a fost găsit, verificați cablarea”,)

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

Nu am avut nicio problemă cu a doua cursă. Documentația Adafruit avertizează că uneori senzorii DHT lipsesc citirile.

Pasul 15: Concluzii

Concluzii
Concluzii

Această curbă arată clar că capacitatea termică mai mare a unor senzori le crește timpul de reacție.

Toți senzorii înregistrează creșterea și scăderea temperaturilor.

Nu sunt foarte repezi să se stabilească la o temperatură nouă.

Nu sunt foarte exacte. (Sunt suficient de bune pentru o stație meteo?)

Poate fi necesar să vă calibrați senzorul cu un termometru de încredere.

Recomandat: