Sommario:

Test dei sensori di temperatura: quale fa per me?: 15 passaggi (con immagini)
Test dei sensori di temperatura: quale fa per me?: 15 passaggi (con immagini)

Video: Test dei sensori di temperatura: quale fa per me?: 15 passaggi (con immagini)

Video: Test dei sensori di temperatura: quale fa per me?: 15 passaggi (con immagini)
Video: Trasduttori (sensori) di temperatura: la lamina bimetallica e le termoresistenze pro e contro 2024, Dicembre
Anonim
Test dei sensori di temperatura: quale per me?
Test dei sensori di temperatura: quale per me?

Uno dei primi sensori che i neofiti dell'informatica fisica vogliono provare è qualcosa per misurare la temperatura. Quattro dei sensori più popolari sono il TMP36, che ha un'uscita analogica e necessita di un convertitore analogico-digitale, il DS18B20, che utilizza la connettività a un filo, il DHT22, o il DHT11 leggermente più economico, che necessita solo di un pin digitale, ma anche fornisce una lettura dell'umidità, e infine il BME680 che utilizza I2C (con SPI anche su alcune schede breakout) e fornisce temperatura, umidità, gas (VOC) e pressione atmosferica ma costa un po' di più.

Voglio vedere quanto sono accurati e scoprire eventuali vantaggi o svantaggi. Possiedo già un accurato termometro a mercurio, rimasto dalla stampa fotografica a colori ai tempi dell'elaborazione chimica, con cui confrontarli. (Non buttare mai niente - ne avrai bisogno in seguito!)

Userò CircuitPython e una scheda di sviluppo Adafruit Itsybitsy M4 per questi test. Sono disponibili driver adatti per tutti i dispositivi.

Forniture

La mia lista iniziale:

  • Microcontrollore Itsybitsy M4 Express
  • cavo micro USB - per la programmazione
  • TMP36
  • DS18B20
  • Resistenza da 4,7K Ohm
  • DHT22
  • BME680
  • Multimetro
  • Tagliere o stripboard
  • Cavo di collegamento

Passaggio 1: circuiti

circuiti
circuiti

I fili arancioni sono 3,3 V

I fili neri sono GND

Nella parte inferiore della scheda ci sono i punti di prova per misurare le tensioni. (Uscita analogica 3.3v, GND e TMP36)

Le prese centrali sono, da sinistra a destra:

  • TMP36: 3.3v, uscita segnale analogico, GND
  • DS18B20: GND, uscita segnale digitale, 3.3v
  • DHT22: 3.3v, uscita segnale, vuoto, GND
  • BME680: 3.3v, SDA, SCL, vuoto, GND

Il connettore posteriore, per il collegamento alla scheda IB M4E, da sinistra a destra

  • 3.3v
  • TMP36 - uscita analogica al pin A2
  • GND
  • DS18B20 uscita digitale al pin D3 - verde
  • Uscita digitale DHT22 al pin D2 - giallo
  • SDA - bianco
  • SCL - rosa

Il resistore da 4,7 K Ohm è un pullup dal segnale a 3,3 V per la connessione a un filo sul DS18B20.

Ci sono 2 tracce tagliate sul retro del tabellone:

Sotto l'estremità sinistra di entrambi i fili rosa e bianco. (Sotto il filo giallo.)

Passaggio 2: metodo

Metodo
Metodo

Per ogni sensore scriverò un breve script per leggere la temperatura (e altri elementi se disponibili) più volte e controllare la temperatura rispetto al mio termometro a mercurio (Hg). Cercherò di vedere quanto la temperatura si avvicina alla lettura del mercurio e se le letture sono stabili/coerenti.

Guarderò anche la documentazione per vedere se le letture rientrano nell'accuratezza prevista e se c'è qualcosa che può essere fatto per apportare miglioramenti.

Passaggio 3: TMP36 - Prova iniziale

TMP36 - Prova iniziale
TMP36 - Prova iniziale
TMP36 - Prova iniziale
TMP36 - Prova iniziale

La gamba sinistra è 3,3 V, la gamba destra è GND e la gamba centrale è una tensione analogica che rappresenta la temperatura utilizzando la seguente formula. TempC = (millvolt - 500) / 10

Quindi, 750 millivolt danno una temperatura di 25 C

Sembra che ci siano un paio di problemi qui. La temperatura del termometro a mercurio "normale" è molto più bassa di quella del TMP36 e le letture non sono molto coerenti - c'è un po' di "jitter" o rumore.

Il sensore TMP36 invia una tensione proporzionale alla temperatura. Questo deve essere letto dal convertitore A/D prima che venga calcolata la temperatura. Leggiamo la tensione direttamente dalla gamba centrale del sensore con un multimetro e confrontiamola con il risultato dell'A/D. La lettura dalla gamba centrale con il mio multimetro è 722 millivolt, molto più bassa e una lettura molto stabile.

Ci sono due cose che possiamo provare. Sostituire un potenziometro per il TMP36 e regolare la tensione nel calcolo alla tensione effettiva del microcontrollore. Vedremo quindi se la tensione calcolata è più vicina e se il rumore/jitter è ridotto.

Misuriamo la tensione effettiva utilizzata dal microcontrollore e dall'A/D. Si presumeva che questo fosse 3.3v ma in realtà è solo 3.275v.

Passaggio 4: risultati della sostituzione del potenziometro

Risultati della sostituzione del potenziometro
Risultati della sostituzione del potenziometro

Questo è molto meglio. Le letture sono entro un paio di millivolt con molto meno rumore. Ciò suggerisce che il rumore provenga dal TMP36 piuttosto che dall'A/D. La lettura sul misuratore è sempre stabile - nessun jitter. (Il misuratore potrebbe "attenuare" l'uscita nervosa.)

Un modo per migliorare la situazione potrebbe essere quello di prendere una lettura media. Prendi dieci letture velocemente e usa la media. Calcolerò anche la deviazione standard mentre cambio programma, per dare un'indicazione della diffusione dei risultati. Conterò anche il numero di letture entro 1 deviazione standard della media: maggiore è, meglio è.

Passaggio 5: letture medie e risultato

Letture medie e un risultato
Letture medie e un risultato

C'è ancora molto rumore e la lettura del TMP36 è ancora più alta di quella del termometro a mercurio. Per ridurre il rumore ho incluso un condensatore da 100NF tra segnale e GND

Ho quindi cercato altre soluzioni su Internet e ho trovato queste: https://www.doctormonk.com/2015/02/accurate-and-re… Il Dr Monk suggerisce di includere un resistore da 47 k Ohm tra segnale e GND.

www.desert-home.com/2015/03/battery-operate… Mentre questo ragazzo suggerisce di ordinare 15 letture in ordine e fare una media del centro 5.

Ho modificato la sceneggiatura e il circuito per includere questi suggerimenti e ho incluso una lettura dal termometro a mercurio.

Alla fine! Ora abbiamo letture stabili all'interno dell'intervallo di precisione della descrizione del dispositivo.

Questo è stato un grande sforzo per far funzionare il sensore che ha solo una precisione del produttore di:

Precisione - Massima (minima): ±3°C (±4°C) Costano solo circa $ 1,50 (£2)

Passaggio 6: DS18B20 - Test iniziale

DS18B20 - Test iniziale
DS18B20 - Test iniziale

Essere molto attenti. Questo pacchetto sembra molto simile al TMP36 ma le gambe sono al contrario con 3.3v a destra e GND a sinistra. L'uscita del segnale è al centro. Per far funzionare questo dispositivo abbiamo bisogno di un resistore da 4,7 k Ohm tra segnale e 3,3 V. Questo dispositivo utilizza il protocollo a un filo e abbiamo bisogno di scaricare un paio di driver nella cartella lib dell'Itsybitsy M4 Express.

Questo costa circa $ 4 / £ 4 Specifiche tecniche:

  • Intervallo di temperatura utilizzabile: da -55 a 125 °C (da -67 °F a +257 °F)
  • Risoluzione selezionabile da 9 a 12 bit
  • Utilizza l'interfaccia 1-Wire - richiede solo un pin digitale per la comunicazione
  • ID univoco a 64 bit masterizzato nel chip
  • Più sensori possono condividere un pin
  • ±0,5°C Precisione da -10°C a +85°C
  • Sistema di allarme per il limite di temperatura
  • Il tempo di interrogazione è inferiore a 750 ms
  • Utilizzabile con alimentazione da 3,0 V a 5,5 V

Il problema principale con questo sensore è che utilizza l'interfaccia Dallas 1-Wire e non tutti i microcontrollori hanno un driver adatto. Siamo fortunati, c'è un driver per l'Itsybitsy M4 Express.

Passaggio 7: DS18B20 funziona bene

DS18B20 funziona bene
DS18B20 funziona bene

Questo mostra un ottimo risultato.

Una serie costante di letture senza lavoro extra e costi di calcolo. Le letture rientrano nell'intervallo di precisione previsto di ±0,5°C rispetto al mio termometro a mercurio.

C'è anche una versione impermeabile a circa $ 10 che ho usato in passato con uguale successo.

Passaggio 8: DHT22 e DHT11

DHT22 e DHT11
DHT22 e DHT11

Il DHT22 utilizza un termistore per ottenere la temperatura e costa circa $ 10 / £ 10 ed è il fratello più accurato e costoso del più piccolo DHT11. Utilizza anche un'interfaccia a un filo ma NON è compatibile con il protocollo Dallas utilizzato con il DS18B20. Rileva sia l'umidità che la temperatura. Questi dispositivi a volte necessitano di un resistore di pull up tra 3,3 v e il pin del segnale. Questo pacchetto ne ha già uno installato.

  • Basso costo
  • Alimentazione da 3 a 5 V e I/O
  • Utilizzo corrente max 2,5 mA durante la conversione (durante la richiesta dei dati)
  • Buono per letture di umidità 0-100% con una precisione del 2-5%
  • Buono per letture di temperatura da -40 a 80°C ±0,5°C di precisione
  • Frequenza di campionamento non superiore a 0,5 Hz (una volta ogni 2 secondi)
  • Dimensioni corpo 27 mm x 59 mm x 13,5 mm (1,05" x 2,32" x 0,53")
  • 4 pin, spaziatura 0,1"
  • Peso (solo il DHT22): 2,4 g

Rispetto al DHT11, questo sensore è più preciso, più accurato e funziona in un intervallo più ampio di temperatura/umidità, ma è più grande e più costoso.

Passaggio 9: risultati DHT22

Risultati DHT22
Risultati DHT22

Questi sono risultati eccellenti con pochissimo sforzo. Le letture sono abbastanza stabili e all'interno della tolleranza prevista. La lettura dell'umidità è un vantaggio.

Puoi eseguire solo letture ogni secondo.

Passaggio 10: test DTH11

Prova DTH11
Prova DTH11

Il mio termometro a mercurio ha mostrato 21,9 gradi C. Questo è un DHT11 piuttosto vecchio che ho recuperato da un vecchio progetto e il valore dell'umidità è molto diverso dalle letture DHT22 di pochi minuti fa. Costa circa $ 5 / £ 5.

La sua descrizione include:

  • Buono per letture di umidità del 20-80% con una precisione del 5%
  • Buono per letture di temperatura 0-50 ° C precisione ± 2 ° C - inferiore al DTH22

La temperatura sembra essere ancora nell'intervallo di precisione, ma non mi fido della lettura dell'umidità da questo vecchio dispositivo.

Passaggio 11: BME680

BME680
BME680

Questo sensore contiene capacità di rilevamento di temperatura, umidità, pressione barometrica e gas VOC in un unico pacchetto, ma è il più costoso dei sensori in prova qui. Costa circa £ 18,50 / $ 22. C'è un prodotto simile senza il sensore di gas che è un po' più economico.

Questo è un sensore gold standard dei cinque. Il sensore di temperatura è preciso e, con driver adeguati, è molto facile da usare. Questa versione utilizza I2C ma anche la breakout board Adafruit può utilizzare SPI.

Come il BME280 e il BMP280, questo sensore di precisione Bosch può misurare l'umidità con una precisione di ±3%, la pressione atmosferica con una precisione assoluta di ±1 hPa e la temperatura con una precisione di ±1,0°C. Poiché la pressione cambia con l'altitudine e le misurazioni della pressione sono così buone, puoi anche usarlo come altimetro con una precisione di ± 1 metro o migliore!

La documentazione dice che ha bisogno di un po' di "tempo di rodaggio" per il sensore di gas.

Passaggio 12: quale dovrei usare?

Quale dovrei usare?
Quale dovrei usare?
  • Il TMP36 è molto economico, piccolo e popolare ma piuttosto difficile da usare e potrebbe essere impreciso.
  • Il DS18B20 è piccolo, preciso, economico, molto facile da usare e ha una versione impermeabile.
  • Il DTH22 indica anche l'umidità, ha un prezzo moderato ed è facile da usare ma potrebbe essere troppo lento.
  • Il BME680 fa molto di più degli altri ma è costoso.

Se voglio solo la temperatura, userei il DS18B20 con una precisione di ±0,5°C, ma il mio preferito è il BME680 perché fa molto di più e può essere utilizzato in un gran numero di progetti diversi.

Un ultimo pensiero. Assicurati di tenere il sensore di temperatura ben lontano dal microprocessore. Alcuni HAT Raspberry Pi consentono al calore della scheda principale di riscaldare il sensore, fornendo una lettura errata.

Passaggio 13: ulteriori riflessioni e sperimentazioni

Ulteriori pensieri e sperimentazioni
Ulteriori pensieri e sperimentazioni

Grazie gulliverrr, ChristianC231 e pgagen per i tuoi commenti su ciò che ho fatto finora. Mi scuso per il ritardo ma sono stato in vacanza in Irlanda, senza accesso al mio kit di elettronica per un paio di settimane.

Ecco un primo tentativo di mostrare i sensori che lavorano insieme.

Ho scritto uno script per leggere a turno i sensori e stampare i valori di temperatura ogni 20 secondi circa.

Ho messo il kit in frigo per un'ora, per far raffreddare il tutto. L'ho collegato al PC e ho chiesto a Mu di stampare i risultati. L'output è stato quindi copiato, trasformato in un file.csv (variabili separate da virgole) e i grafici sono stati ricavati dai risultati in Excel.

Ci sono voluti circa tre minuti dall'estrazione del kit dal frigorifero prima che i risultati fossero registrati, quindi in questo intervallo si è verificato un aumento della temperatura. Sospetto che i quattro sensori abbiano capacità termiche diverse e quindi si riscalderebbero a velocità diverse. La velocità di riscaldamento dovrebbe diminuire man mano che i sensori si avvicinano alla temperatura ambiente. L'ho registrato come 24,4 ° C con il mio termometro a mercurio.

Le ampie differenze di temperatura all'inizio delle curve potrebbero essere dovute alle diverse capacità termiche dei sensori. Sono contento di vedere che le linee convergono verso la fine mentre si avvicinano alla temperatura ambiente. Mi preoccupa che il TMP36 sia sempre molto più alto degli altri sensori.

Ho consultato le schede tecniche per ricontrollare l'accuratezza descritta di questi dispositivi

TMP36

  • Precisione ±2°C sulla temperatura (tip)
  • ±0,5°C linearità (tip.)

DS18B20

±0,5°C Precisione da -10°C a +85°C

DHT22

temperatura ±0,5°C

BME680

temperatura con una precisione di ±1.0°C

Passaggio 14: grafico completo

Grafico completo
Grafico completo

Ora puoi vedere che i sensori alla fine si sono stabilizzati e concordano sulla temperatura più o meno entro la precisione descritta. Se si tolgono 1,7 gradi ai valori di TMP36 (è previsto ±2°C) c'è un buon accordo tra tutti i sensori.

La prima volta che ho eseguito questo esperimento il sensore DHT22 ha causato un problema:

output 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

Errore di lettura DHT: ('Sensore DHT non trovato, controllare il cablaggio',)

Traceback (ultima chiamata più recente):

File "main.py", riga 64, in

File "main.py", riga 59, in get_dht22

NameError: variabile locale referenziata prima dell'assegnazione

Quindi ho modificato lo script per far fronte a questo problema e ho riavviato la registrazione:

Errore di lettura DHT: ('Sensore DHT non trovato, controllare il cablaggio',)

25.9, 22.6, -999.0, 22.6

Errore di lettura DHT: ('Sensore DHT non trovato, controllare il cablaggio',)

25.9, 22.8, -999.0, 22.7

25.9, 22.9, 22.1, 22.8

25.9, 22.9, 22.2, 22.9

Errore di lettura DHT: ('Sensore DHT non trovato, controllare il cablaggio',)

27.1, 23.0, -999.0, 23.0

Errore di lettura DHT: ('Sensore DHT non trovato, controllare cablaggio',)

27.2, 23.0, -999.0, 23.1

25.9, 23.3, 22.6, 23.2

Errore di lettura DHT: ('Sensore DHT non trovato, controllare cablaggio',)

28.4, 23.2, -999.0, 23.3

Errore di lettura DHT: ('Sensore DHT non trovato, controllare il cablaggio',)

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

Non ho avuto problemi con la seconda corsa. La documentazione di Adafruit avverte che a volte i sensori DHT non rilevano le letture.

Passaggio 15: Conclusioni

Conclusioni
Conclusioni

Questa curva mostra chiaramente che la maggiore capacità termica di alcuni sensori aumenta il loro tempo di reazione.

Tutti i sensori registrano l'aumento e la diminuzione della temperatura.

Non sono molto veloci ad assestarsi a una nuova temperatura.

Non sono molto precisi. (Sono abbastanza buoni per una stazione meteorologica?)

Potrebbe essere necessario calibrare il sensore rispetto a un termometro affidabile.

Consigliato: