Temperaturen Wand (5 / 6 steg)
Steg 5: kalibrering
Jag har arbetat med temperatursensorer innan. Jag vet att de är svåra att kalibrera särskilt i luften. Det är mycket svårt att få dem att inom en viss F varandra.
Som med de flesta temperaturgivare, KTY81s är inte mycket exakt och behöver kalibreras. Till exempel kan motståndet vid rumstemperatur variera från 1900 till 2100 ohm.
Om du vill bygga detta, kommer du behöva kalibrera din sensorer. Detta innebär Algebra, kanske en spelet mördare för vissa läsare. Men jag ska försöka ta dig igenom en enkel två punkt linjär passform.
Förfarande teori: Först måste du få sensorn (eller i detta fall sensorer) i en fast och kända temperatur. Den kända temperaturen mäts av några kända instrument. Jag använde min IR-termometer. Arduinoen kommer att läsa den associerade sensorn och skicka ut ett nummer från 0 och 1023. Temperatur och antalet registreras. Sedan för annan temperatur upprepas hela processen.
Förfarande: Jag lindade hackade Ethernet-kabel i en spole och stack dem i en låda, sedan stängde den. (Se bilder) Jag lägga den i en relativt stabil miljö på mina golv och låt det inställt för ett tag. Sedan fick jag en avläsning från Arduino, bara rå räkningarna från de analoga sensorerna och jag mätte temperaturen i rutan med min IR-termometer. (Se bild)
Nästa jag sätter boxen utanför på en varmare temperatur och upprepade processen.
Så nu bör du ha två olika temperaturer och två olika räknas för varje sensor.
Algebra: Så är dessa sensorer ganska linjär. Det innebär att de motstånd förändringarna ganska jämnt med temperaturen. Så använde jag en linjär passform.
TempF = multiplikator * räkna + Offset
TempF är temperaturen i Fahrenheit.
Detta är antalet Arduino.
Multiplikatorn är en konstant för varje sensor.
Förskjutningen är olika konstanter för varje sensor.
När du lista ut vad multiplikator och Offset är för varje sensor då när Arduino läser räkningen från sensorn, programvaran kommer att multiplicera detta med multiplikatorn och lägga till förskjutningen för att ge temperaturen i Fahrenheit.
Att hitta den multiplikator och Offset för en sensor, du känner till TempF och räknas för två olika punkter så att du har två olika ekvationer. Exempel:
83,5 grader hade femte sensorn 999.3 räknas.
På 75,5 grader hade femte sensorn 979.5 räknas.
Två ekvationer är:
83,5 = M * 999.3 + O
75,5 = M * 979.5 + O
M = multiplikator och O = Offset
Med hjälp av Algebra kan du dra ifrån den andra ekvationen från först
83,5-75,5 = M * 999.3 - M * 979.5 + O - O
Förenkla:
8 = M * 999.3 - M * 979.5
8 = 19,8 * M
M = 0.4040
Så nu vet du vad M är. För att hitta O, bara koppla M till en av de startande ekvationerna:
83,5 = M * 999.3 + O
83,5 = 0.4040 * 999.3 + O
83,5 = 403.7576 + O
83,5-403.7576 = O
O =-320.258
Om du vill kontrollera dina beräkningar kan du ansluta M och O in i ekvationen.
Varna läsare: Vissa kanske undrar hur jag fick räkna till 999.3 när Arduino endast utgångar 0 till 1023. Det är rätt men jag använder ett genomsnittligt värde över 25 prover.
Förskjutningen är ett negativt tal. Detta är okej som vet datorn att lägga till ett negativt tal är detsamma som att subtrahera det.
Upprepa proceduren för de andra fem sensorerna och koppla in värdena i programvaran. Förresten använde jag Excel för att göra beräkningar.
Arduino programvaran bifogas.
Programmet Anteckningar:
När programvaran är laddad till Arduino, används serial-uttaget för att visa resultatet. Varje rad innehåller temperaturerna från översta sensorn till botten avgränsade med kommatecken.
Programvaran måste du köra genom 25 prover innan den startar korrekt i genomsnitt. Detta tar ungefär en minut.
Koden anteckningar:
float TempArray [NUM_SAMPLES] [MAX_TEMPS];
Detta är en dubbel array, 25 prover x 6 sensorer
Under "void setup(void) {" du kommer att se multiplikatorer och kompenserar för varje sensor.
Under "float getTemperatureF (unsigned int TempNum) {"
Det finns två return-deklarationer.
Den bortkommenterade "//return (SumTotal/NUM_SAMPLES);"
är okommenterade att få genomsnittliga raw räkningarna för kalibrering
Den andra "återvända multiplikator [TempNum] *(SumTotal/NUM_SAMPLES) + Offset [TempNum];"
Returnerar den kalibrerad temperaturen.