Stap 8: Met behulp van MCP9701 temperatuur sensor
Probleem: De maximale uitgangsspanning is 3,0 volt en de standaard Arduino gebruikt de 5 volt levering vaak uit de computer/laptop USB. Deze spanning kan variëren waardoor de lezingen variëren.
Oplossing: Om de nauwkeurigheid te verbeteren, besloten heb ik om het gebruik van de 3.3Vdc van de Arduino aangesloten op de pin van de Arduino AREF via een 3,3 K weerstand. De 3.3Vdc bron is veel nauwkeuriger dan de 5Vdc. Voor de techno-geeks, interne weerstand is 32K zo AREF = 3.3/(32K/(32K+3.3K) = 3,0 Vdc.
Als u wilt gebruiken de AREF pin, werd de volgende regel toegevoegd aan de code van de Arduino.
analogReference(EXTERNAL);
Het ontwerp van de software:
Hier is de essentiële code:
Temperatuur lezingen gemiddelde nsamps krijgen
voor (byte j = 0; j < nsamp; j ++)
{
ThermValue += analogRead(ThermPin);
}
ThermValueAvg = ThermValue/nsamp;
mVout=(float) ThermValueAvg*3000.0/1023.0; 3.0V = 3000mV
TempC =(mVout-400.0)/19.5; Ta = (Vout-400mV) / 19.5mV //Original
TempC =(mVout-490.0)/19.5; Ta = (Vout-400mV) / 19.5mV //Modified
TempF = TempC * (9.0/5.0) + 32;
Code uitleg: De analoge 2 ThermPin is bemonsterd tien keer dan gemiddeld. De gemiddelde analoge telling wordt geconverteerd naar mVolts(mVout). De mVout wordt omgezet in TempC (Celsius). De eerste TempC berekening is uitgecommentarieerd. Dit is de voorgestelde omzetting. Voor de MCP9701 die mij watertje using, vond ik dat dit uit ongeveer 8 graden, was dus ik heb aangepast (trial and error) de formule aan de tweede formule. U kunt pas de 490 waarde, indien u van een MCP9701 gebruikmaakt en vinden dat het niet de juiste temperatuur is de rapportage. Vervolgens converteert de volgende regel TempC naar TempF (Fahrenheit).