Stap 5: kalibratie
Ik heb gewerkt met temperatuursensoren voor. Ik weet dat ze zijn moeilijk te kalibreren met name in de lucht. Het is zeer moeilijk om hen te binnen zekere F van elkaar.
Zoals met de meeste temperatuursensoren, de KTY81s zijn niet erg nauwkeurig en moet worden gekalibreerd. Bijvoorbeeld, kan de weerstand bij kamertemperatuur variëren van 1900 tot 2100 Ohm.
Als u bouwen dit wilt, moet u uw sensoren kalibreren. Het gaat hierbij om Algebra, misschien een spel killer voor sommige lezers. Maar ik zal proberen om u door een eenvoudige lineaire pasvorm van de twee punten.
Procedure theorie: Eerst moet u de sensor te krijgen (of in dit geval sensoren) bij een temperatuur van vaste en bekend. De bekende temperatuur wordt gemeten door enkele bekende instrument. Ik gebruikte mijn IR thermometer. De Arduino zal de bijbehorende sensor lezen en verzenden uit een getal van 0 en 1023. De temperatuur en de graaf is vastgelegd. Vervolgens voor een verschillende temperatuur is het hele proces herhaald.
Procedure toegepast: Ik wikkelde de gehackte Ethernet-kabel in een spoel en stak ze in een doos, dan gesloten. (Zie foto's) Ik zet het in een vrij stabiele omgeving op mijn vloer en laat die het instellen voor een tijdje. Vervolgens kreeg ik een uitlezing van de Arduino, alleen de ruwe graven uit de analoge sensoren en ik de temperatuur in het vak met mijn IR Thermometer gemeten. (Zie afbeelding)
Volgende ik het vak buiten op een warmere temperatuur en het proces herhaald.
Dus nu moet je twee verschillende temperaturen en twee verschillende telt voor elke sensor.
Algebra: Deze sensoren zijn dus vrij lineair. Dat betekent dat de wijzigingen van de weerstand vrij gelijkmatig met de temperatuur. Dus gebruikte ik een lineaire pasvorm.
TempF = Multiplier * rekenen + Offset
TempF is de temperatuur in Fahrenheit.
Tellen is de telling van de Arduino.
Multiplier is een constante voor elke sensor.
Offset is een verschillende constante voor elke sensor.
Zodra u erachter te komen wat de Multiplier en Offset is voor elke sensor dan wanneer de Arduino leest de telling van de sensor, de software zal vermenigvuldig dit met de Multiplier en voeg de Offset zodat de temperatuur in Fahrenheit.
De Multiplier en Offset te vinden voor een sensor, u weet dat de TempF en telt voor twee verschillende punten dus je twee verschillende vergelijkingen hebt. In het volgende voorbeeld:
Op 83,5 graden had de vijfde sensor 999.3 graven.
75,5 graden had de vijfde sensor 979.5 graven.
De twee vergelijkingen zijn:
83,5 = M * 999.3 + O
75,5 = M * 979.5 + O
M = Multiplier en O = Offset
Met behulp van Algebra kunt u aftrekken de tweede vergelijking van de eerste
83,5-75,5 = M * 999.3 - M * 979.5 + O - O
Vereenvoudigen:
8 = M * 999.3 - M * 979.5
8 = 19,8 * M
M = 0.4040
Dus nu weet je wat M is. Om te zoeken naar O, gewoon aansluiten de M op een van de eerste vergelijkingen:
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 te controleren uw berekeningen die u kunt aansluiten op de M en O de andere vergelijking.
Waarschuwen lezers: Sommigen kunnen vragen zich af hoe ik een telling van 999.3 kreeg toen de Arduino alleen 0 tot 1023 uitgangen. Dat klopt, maar ik ben met behulp van een gemiddelde waarde over 25 monsters.
De Offset is een negatief getal. Dit is goed als de computer weet dat het toevoegen van een negatief getal hetzelfde is als het aftrekken.
Herhaal de bovenstaande procedure voor de andere vijf sensoren en steek de waarden in de software. By the way gebruikte ik Excel de berekeningen wilt uitvoeren.
De Arduino software is gekoppeld.
Software Notes:
Zodra de software is geladen aan de Arduino, wordt de seriële terminal gebruikt om de resultaten weer te geven. Elke regel bevat de temperaturen van de bovenste sensor aan de onderzijde gescheiden door komma's.
De software zal hebben om 25 monsters te doorlopen voordat het begint gemiddeld goed. Dit duurt ongeveer een minuut.
Code opmerkingen:
float TempArray [NUM_SAMPLES] [MAX_TEMPS];
Dit is een dubbele array, 25 monsters x 6 sensoren
Onder "void setup(void) {" ziet u het Multipliers en de verschuivingen voor elke sensor.
Onder "getTemperatureF (unsigned int TempNum) {zweven"
Er zijn twee return-opdrachten.
De uitgecommentarieerd "//return (SumTotal/NUM_SAMPLES);"
is commentaar te krijgen van de gemiddelde ruwe graven voor kalibratie
De andere "retourneren Multiplier [TempNum] *(SumTotal/NUM_SAMPLES) + Offset [TempNum];"
Deze eigenschap retourneert de gekalibreerde temperatuur.