Stap 5: Auto-kalibreren levering-onafhankelijke thermometer
In het volgende voorbeeld is vergelijkbaar met de hierboven, behalve dat nu we gebruik maken van een speciale truc waar we de analoge waarde van een vast referentie spanning binnen de chip lezen en die vervolgens gebruiken om een precieze berekening. Dit betekent ook die het recht ongeacht welke spanning zal werken de Arduino draait op!
TMP36 Pin variabelen
int sensorPin = 0; de analoge pin van de TMP36 Vout (sense) pin is aangesloten op
de resolutie is 10 mV / graad Celsius met een
500 mV verschuiving toe voor negatieve temperaturen
#define BANDGAPREF 14 / / speciale indicator die we willen meten de bandgap
/ * Setup - deze functie wordt uitgevoerd zodra wanneer u uw Arduino zet. Initialiseren we de seriële verbinding met de computer
*/
VOID Setup
{
Serial.begin(9600); Start de seriële verbinding met de computer
om het resultaat open de seriële monitor weer te geven
delay(500);
}
void loop / / run over en weer
{
spanning lezing krijgen van de geheime interne 1.05V-verwijzing
int refReading = analogRead(BANDGAPREF);
Serial.println(refReading);
Nu berekenen onze netspanningsvoltage uit de bekende 1.05 volt-lezing
zweven supplyvoltage = (1.05 * 1024) / refReading;
Serial.Print(supplyvoltage); Serial.println ("V power supply");
krijgen van de spanning die het lezen van de temperatuursensor
int lezing = analogRead(sensorPin);
die lezing omzetten in spanning
zweven spanning = lezing * supplyvoltage / 1024;
uitprinten van de spanning
Serial.Print(voltage); Serial.println ("volt");
nu de temperatuur uitprinten
zweven temperatureC = (voltage - 0,5) * 100; converteren van 10 mv per graad wit 500 mV offset
om graden ((volatge - 500mV) keer 100)
Serial.Print(temperatureC); Serial.println ("graden C");
nu omzetten in Fahrenheight
zweven temperatureF = (temperatureC * 9 / 5) + 32;
Serial.Print(temperatureF); Serial.println ("graden F");
delay(1000); wacht een seconde
}