Innehållsförteckning:

Testa temperatursensorer - vilken för mig ?: 15 steg (med bilder)
Testa temperatursensorer - vilken för mig ?: 15 steg (med bilder)

Video: Testa temperatursensorer - vilken för mig ?: 15 steg (med bilder)

Video: Testa temperatursensorer - vilken för mig ?: 15 steg (med bilder)
Video: Почему тесто на закваске липкое? Разбираем причины и делаем тесто на закваске упругим и эластичным! 2024, November
Anonim
Testa temperatursensorer - vilken för mig?
Testa temperatursensorer - vilken för mig?

En av de första sensorerna som nykomlingar till fysisk dator vill testa är något för att mäta temperaturen. Fyra av de mest populära sensorerna är TMP36, som har analog utgång och behöver en analog till digital omvandlare, DS18B20, som använder en-tråds anslutning, DHT22 eller den lite billigare DHT11, som bara behöver en digital stift, men också ger en fuktighetsavläsning, och slutligen BME680 som använder I2C (med SPI också på vissa utbrottskort) och ger temperatur, luftfuktighet, gas (VOC) och atmosfärstryck men kostar lite mer.

Jag vill se hur exakt de är och upptäcka eventuella fördelar eller nackdelar. Jag äger redan en exakt kvicksilvertermometer, överbliven från färgfotografisk tryckning under kemisk bearbetning, för att jämföra dem mot. (Släng aldrig ut något - du kommer att behöva det senare!)

Jag kommer att använda CircuitPython och en Adafruit Itsybitsy M4 utvecklingskort för dessa tester. Lämpliga drivrutiner finns tillgängliga för alla enheter.

Tillbehör

Min första lista:

  • Itsybitsy M4 Express mikrokontroller
  • mikro -USB -kabel - för programmering
  • TMP36
  • DS18B20
  • 4.7K Ohm motstånd
  • DHT22
  • BME680
  • Multimätare
  • Brödbräda eller bandbräda
  • Anslutningskabel

Steg 1: Kretsar

Kretsar
Kretsar

De orangea ledningarna är 3,3 V

De svarta trådarna är GND

Längst ner på kortet finns testpunkter för mätning av spänningar. (3.3v, GND och TMP36 analog utgång)

Mittuttagen är från vänster till höger:

  • TMP36: 3.3v, analog signal ut, GND
  • DS18B20: GND, digital signal ut, 3.3v
  • DHT22: 3.3v, signal ut, tom, GND
  • BME680: 3.3v, SDA, SCL, tom, GND

Den bakre kontakten, för anslutning till IB M4E -kortet, vänster till höger

  • 3.3v
  • TMP36 - analog ut till stift A2
  • GND
  • DS18B20 digital ut till stift D3 - grön
  • DHT22 digital ut till stift D2 - gul
  • SDA - vit
  • SCL - rosa

Motståndet på 4,7K Ohm är en pullup från signal till 3,3v för 0-trådsanslutning på DS18B20.

Det finns 2 snittspår på baksidan av brädet:

Under den vänstra änden av både de rosa och vita trådarna. (Under den gula tråden.)

Steg 2: Metod

Metod
Metod

För varje sensor skriver jag ett kort manus för att läsa temperatur (och andra objekt om det finns) flera gånger och kontrollera temperaturen mot min kvicksilver (Hg) termometer. Jag kommer att titta för att se hur nära temperaturen jämförs med kvicksilveravläsningen och om avläsningarna är stabila/konsekventa.

Jag kommer också att titta på dokumentationen för att se om avläsningarna passar inom den förväntade noggrannheten och om det finns något som kan göras för att göra förbättringar.

Steg 3: TMP36 - Initial Trial

TMP36 - Initial test
TMP36 - Initial test
TMP36 - Initial test
TMP36 - Initial test

Vänster ben är 3,3v, höger ben är GND och mittbenet är en analog spänning som representerar temperaturen med hjälp av följande formel. TempC = (millivolt - 500) / 10

Så, 750 millivolt ger en temperatur på 25 C

Det verkar finnas ett par problem här. Temperaturen från den "normala", kvicksilvertermometern, är mycket lägre än från TMP36 och avläsningarna är inte särskilt konsekventa - det finns lite "jitter" eller brus.

TMP36 -sensorn sänder ut en spänning som är proportionell mot temperaturen. Detta måste läsas av A/D -omvandlaren innan temperaturen beräknas. Låt oss läsa spänningen direkt från sensorns mittben med en multimeter och jämföra den med resultatet från A/D. Avläsningen från mittbenet med min multimeter är 722 millivolt, mycket lägre och en mycket stabil avläsning.

Det finns två saker vi kan prova. Ersätt en potentiometer för TMP36 och justera spänningen i beräkningen till mikrokontrollerns faktiska spänning. Vi får då se om den beräknade spänningen är närmare och om bruset/jitteret reduceras.

Låt oss mäta den faktiska spänningen som används med min mikrokontroller och A/D. Detta antogs till 3.3v men är faktiskt bara 3.275v.

Steg 4: Potentiometers substitutionsresultat

Potentiometers ersättningsresultat
Potentiometers ersättningsresultat

Det här är mycket bättre. Avläsningarna är inom ett par millivolt med mycket mindre brus. Detta tyder på att bruset kommer från TMP36 snarare än A/D. Avläsningen på mätaren är alltid stabil - ingen skakning. (Mätaren kan utjämna den skakiga utgången.)

Ett sätt att förbättra situationen kan vara att göra en genomsnittlig avläsning. Ta tio avläsningar snabbt och använd genomsnittet. Jag kommer också att beräkna standardavvikelsen medan jag ändrar programmet, för att ge en indikation på spridning av resultaten. Jag kommer också att räkna antalet avläsningar inom 1 standardavvikelse för medelvärdet - ju högre desto bättre.

Steg 5: Genomsnittliga avläsningar och ett resultat

Genomsnittliga avläsningar och ett resultat
Genomsnittliga avläsningar och ett resultat

Det är fortfarande mycket buller och avläsningen från TMP36 är fortfarande högre än från kvicksilvertermometern. För att minska bruset har jag inkluderat en 100NF kondensator mellan signal och GND

Jag sökte sedan efter andra lösningar på internet och hittade dessa: https://www.doctormonk.com/2015/02/accurate-and-re… Dr Monk föreslår att man inkluderar ett 47 k Ohm motstånd mellan signal och GND.

www.desert-home.com/2015/03/battery-operate … Medan den här killen föreslår att man sorterar 15 avläsningar i ordning och ger ett medelvärde av centrum 5.

Jag modifierade manuset och kretsen för att inkludera dessa förslag och inkluderade en avläsning från kvicksilvertermometern.

Äntligen! Nu har vi stabila avläsningar inom noggrannhetsområdet för enhetsbeskrivningen.

Detta var ganska mycket ansträngning för att få sensorn att fungera som bara har en tillverkares noggrannhet på:

Noggrannhet - högsta (lägsta): ± 3 ° C (± 4 ° C) De kostar bara cirka $ 1,50 (£ 2)

Steg 6: DS18B20 - Inledande testning

DS18B20 - Inledande testning
DS18B20 - Inledande testning

Var väldigt försiktig. Detta paket ser mycket ut som TMP36 men benen är tvärtom med 3.3v till höger och GND till vänster. Signalen är i mitten. För att få denna enhet att fungera behöver vi ett 4,7 k Ohm motstånd mellan signal och 3,3 v. Den här enheten använder ett-trådsprotokollet och vi måste ladda ner ett par drivrutiner till lib-mappen på Itsybitsy M4 Express.

Detta kostar cirka $ 4 / £ 4 Tekniska specifikationer:

  • Användbart temperaturområde: -55 till 125 ° C (-67 ° F till +257 ° F)
  • 9 till 12 bitars valbar upplösning
  • Använder 1 -Wire -gränssnitt - kräver bara en digital stift för kommunikation
  • Unikt 64 bitars ID bränt i chip
  • Flera sensorer kan dela en stift
  • ± 0,5 ° C Noggrannhet från -10 ° C till +85 ° C
  • Temperaturgränslarmsystem
  • Frågetiden är mindre än 750 ms
  • Användbar med 3,0V till 5,5V effekt

Huvudproblemet med denna sensor är att den använder Dallas 1-Wire-gränssnittet och inte alla mikrokontroller har en lämplig drivrutin. Vi har tur, det finns en förare för Itsybitsy M4 Express.

Steg 7: DS18B20 fungerar bra

DS18B20 Fungerar bra
DS18B20 Fungerar bra

Detta visar ett bra resultat.

En stadig uppsättning avläsningar utan extra arbete och beräkningsomkostnader. Avläsningarna ligger inom det förväntade noggrannhetsintervallet ± 0,5 ° C jämfört med min kvicksilvertermometer.

Det finns också en vattentät version på cirka $ 10 som jag har använt tidigare med lika framgång.

Steg 8: DHT22 och DHT11

DHT22 och DHT11
DHT22 och DHT11

DHT22 använder en termistor för att få temperaturen och kostar cirka $ 10 / £ 10 och är den mer exakta och dyra brodern till den mindre DHT11. Den använder också ett en-tråds gränssnitt men är INTE kompatibelt med Dallas-protokollet som används med DS18B20. Det känner av fukt och temperatur. Dessa enheter behöver ibland ett uppdragningsmotstånd mellan 3,3 v och signalstiftet. Detta paket har en redan installerad.

  • Låg kostnad
  • 3 till 5V effekt och I/O
  • 2,5 mA max aktuell användning under konvertering (medan du begär data)
  • Bra för 0-100% luftfuktighetsavläsningar med 2-5% noggrannhet
  • Bra för -40 till 80 ° C temperaturavläsningar ± 0,5 ° C noggrannhet
  • Högst 0,5 Hz samplingsfrekvens (en gång varannan sekund)
  • Kroppsstorlek 27 mm x 59 mm x 13,5 mm (1,05 "x 2,32" x 0,53 ")
  • 4 stift, 0,1 "mellanrum
  • Vikt (bara DHT22): 2,4 g

Jämfört med DHT11 är denna sensor mer exakt, mer exakt och fungerar i ett större temperatur-/luftfuktighetsintervall, men den är större och dyrare.

Steg 9: DHT22 -resultat

DHT22 Resultat
DHT22 Resultat

Dessa är utmärkta resultat med mycket liten ansträngning. Avläsningarna är ganska stabila och inom den förväntade toleransen. Fuktavläsningen är en bonus.

Du kan bara ta avläsningar varje sekund.

Steg 10: DTH11 -test

DTH11 -test
DTH11 -test

Min kvicksilvertermometer visade 21,9 grader C. Detta är en ganska gammal DHT11 som jag hämtade från ett gammalt projekt och luftfuktighetsvärdet skiljer sig mycket från DHT22 -avläsningarna från för några minuter sedan. Det kostar ca $ 5 / £ 5.

Beskrivningen innehåller:

  • Bra för 20-80% luftfuktighetsavläsningar med 5% noggrannhet
  • Bra för 0-50 ° C temperaturavläsningar ± 2 ° C noggrannhet - mindre än DTH22

Temperaturen verkar fortfarande ligga i noggrannhetsområdet, men jag litar inte på fuktavläsningen från den här gamla enheten.

Steg 11: BME680

BME680
BME680

Denna sensor innehåller temperatur, luftfuktighet, barometertryck och VOC -gasavkänningsmöjligheter i ett enda paket men är den dyraste av sensorerna som testas här. Det kostar cirka £ 18,50 / $ 22. Det finns en liknande produkt utan gassensorn som är lite billigare.

Detta är en guldstandard -sensor av de fem. Temperatursensorn är exakt, och med lämpliga drivrutiner, mycket lätt att använda. Denna version använder I2C men Adafruit breakout board kan också använda SPI.

Precis som BME280 och BMP280 kan denna precisionssensor från Bosch mäta luftfuktighet med ± 3% noggrannhet, barometertryck med ± 1 hPa absolut noggrannhet och temperatur med ± 1,0 ° C noggrannhet. Eftersom trycket ändras med höjden och tryckmätningarna är så bra kan du också använda den som en höjdmätare med ± 1 meter eller bättre noggrannhet!

Dokumentationen säger att den behöver lite "inbränningstid" för gassensorn.

Steg 12: Vilken ska jag använda?

Vilken ska jag använda?
Vilken ska jag använda?
  • TMP36 är väldigt billig, liten och populär men ganska svår att använda och kan vara felaktig.
  • DS18B20 är liten, exakt, billig, mycket enkel att använda och har en vattentät version.
  • DTH22 indikerar också luftfuktighet, är rimligt prissatt och är lätt att använda men kan vara för långsam.
  • BME680 gör mycket mer än de andra men är dyrt.

Om jag bara vill ha temperatur skulle jag använda DS18B20 med ± 0,5 ° C noggrannhet men min favorit är BME680 eftersom den gör så mycket mer och kan användas i ett stort antal olika projekt.

En sista tanke. Se till att du håller din temperatursensor långt borta från mikroprocessorn. Vissa Raspberry Pi -hattar tillåter värme från huvudkortet att värma upp sensorn, vilket ger en falsk avläsning.

Steg 13: Ytterligare tankar och experiment

Ytterligare tankar och experiment
Ytterligare tankar och experiment

Tack gulliverrr, ChristianC231 och pgagen för dina kommentarer om vad jag har gjort hittills. Jag är ledsen för förseningen men jag har varit på semester i Irland, utan tillgång till mitt elektronikpaket i ett par veckor.

Här är ett första försök att visa sensorerna som arbetar tillsammans.

Jag skrev ett manus för att läsa sensorerna i tur och ordning och skriva ut temperaturvärdena var 20: e sekund eller så.

Jag ställde in satsen i kylen i en timme för att kyla ner allt. Jag kopplade den till datorn och fick Mu att skriva ut resultaten. Utdata kopierades sedan, förvandlades till en.csv -fil (kommaseparerade variabler) och grafer drar från resultaten i Excel.

Det tog ungefär tre minuter från att ta ut satsen ur kylen innan resultaten registrerades, så en viss temperaturökning hade skett i detta intervall. Jag misstänker att de fyra sensorerna har olika termiska kapaciteter och så skulle värma upp med olika hastigheter. Uppvärmningshastigheten förväntas minska när sensorerna närmar sig rumstemperatur. Jag registrerade detta som 24,4 ° C med min kvicksilvertermometer.

De stora skillnaderna i temperatur i början av kurvorna kan bero på sensorernas olika termiska kapacitet. Jag är glad att se att linjerna konvergerar mot slutet när de närmar sig rumstemperatur. Jag är orolig för att TMP36 alltid är mycket högre än de andra sensorerna.

Jag letade upp databladen för att kontrollera den beskrivna noggrannheten för dessa enheter igen

TMP36

  • ± 2 ° C noggrannhet över temperatur (typ)
  • ± 0,5 ° C linjäritet (typ)

DS18B20

± 0,5 ° C Noggrannhet från -10 ° C till +85 ° C

DHT22

temperatur ± 0,5 ° C

BME680

temperatur med ± 1,0 ° C noggrannhet

Steg 14: Fullständig graf

Fullständig graf
Fullständig graf

Du kan nu se att sensorerna så småningom planade ut och enades om temperaturen mer eller mindre inom deras beskrivna noggrannhet. Om 1,7 grader tas bort från TMP36 -värdena (± 2 ° C förväntas) är det bra överensstämmelse mellan alla sensorer.

Första gången jag körde detta experiment orsakade DHT22 -sensorn ett problem:

main.py -utdata:

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

DHT -läsfel: ('DHT -sensor hittades inte, kontrollera ledningar',)

Spår tillbaka (senaste samtal senast):

Fil "main.py", rad 64, in

Fil "main.py", rad 59, i get_dht22

NameError: lokal variabel som refererades till innan tilldelning

Så jag modifierade skriptet för att klara detta problem och startade om inspelningen:

DHT -läsfel: ('DHT -sensor hittades inte, kontrollera ledningar',)

25.9, 22.6, -999.0, 22.6

DHT -läsfel: ('DHT -sensor hittades inte, kontrollera ledningar',)

25.9, 22.8, -999.0, 22.7

25.9, 22.9, 22.1, 22.8

25.9, 22.9, 22.2, 22.9

DHT -läsfel: ('DHT -sensor hittades inte, kontrollera ledningar',)

27.1, 23.0, -999.0, 23.0

DHT -läsfel: ('DHT -sensor hittades inte, kontrollera ledningar',)

27.2, 23.0, -999.0, 23.1

25.9, 23.3, 22.6, 23.2

DHT -läsfel: ('DHT -sensor hittades inte, kontrollera ledningar',)

28.4, 23.2, -999.0, 23.3

DHT -läsfel: ('DHT -sensor hittades inte, kontrollera ledningar',)

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

Jag hade inga problem med den andra körningen. Adafruit -dokumentationen varnar för att DHT -sensorerna ibland missar avläsningar.

Steg 15: Slutsatser

Slutsatser
Slutsatser

Denna kurva visar tydligt att den högre termiska kapaciteten hos vissa sensorer ökar deras reaktionstid.

Alla sensorer registrerar temperaturer som stiger och sjunker.

De är inte särskilt snabba att sätta sig till en ny temperatur.

De är inte särskilt exakta. (Är de tillräckligt bra för en väderstation?)

Du kan behöva kalibrera din sensor mot en pålitlig termometer.

Rekommenderad: