Stap 2: Sensing temperatuur
Alle hier gepresenteerde sensoren vertalen temperatuur in spanning. Met name, 10 mV per graad, dus 0 Volt = 0 graden en 2.5 V = 250 graden (met uitzondering van de LM34, graden zijn in Celsius). Wij verbinden met de output van de sensor een analoge ingangen van de Arduino. We doen dit nu, en schrijven een temperatuur sensing programma (aka: thermometer) die de huidige temperatuur terug naar uw computer stuurt.
De onderstaande code gaat met de bedrading in de afbeelding te maken van een eenvoudige thermometer.
Als u hebt nooit geknoeid met een Arduino voordat, is hier een geweldige tutorial om u begonnen te krijgen.
Definiëren welke analoge invoer pin die wij hebben verbonden met de temperatuursensor
#define TEMP_SENSOR_PIN 0
Als je van de Arduino vRef voor de levering van 3.3 volt binden, wijzigt u dit aan 3.3
#define ANALOG_VOTLAGE_REFERENCE 5
VOID Setup {}
Serial.begin(115200);
}
void loop {}
afdrukken van de lopende temperatuur met 1 plaats achter de komma
printFloat(getTemperature(), 1);
afdrukken van een regelterugloop
Serial.println();
rest 100 milliseconden
delay(100);
}
float CtoF(float c) {}
optioneel converteren van Celsius naar Fahrenheit, bent u in dat sorta ding
c terugkeer * 9.0 / 5.0 + 32,0;
}
zweven analogInToDegreesC(int inputValue) {}
deling door 1023, de grootst mogelijke input waarde, die weegschaal van de input van 0 - 1
vervolgens vermenigvuldigen door de referentie spanning, schalen die 0-1 naar 0 - vREF (standaard is 5V)
tot slot, vermenigvuldigt met 100 aan schaal het aan 10s millivolts of graden
terug van inputValue / 1023.0 * ANALOG_VOTLAGE_REFERENCE * 100.0;
}
float getTemperature() {}
Lees de analoge ingang, converteren naar graden C en converteren naar F
Return CtoF(analogInToDegreesC(analogRead(TEMP_SENSOR_PIN)));
}
---Deze laatste functie, printFloat is niet nodig om te begrijpen, tenzij je wilt
---voel je vrij om het te negeren voor nu, en het behandelen als een ingebouwde nut,
---het print zwevend punt puntenwaarden
printFloat print de vlotter 'waarde' afgerond op 'plaatsen' plaatsen achter de komma
VOID printFloat (drijvende-kommawaarde, int plaatsen) {}
Dit wordt gebruikt om de stemmen van de cijfers
int cijfers;
zweven tientallen = 0,1;
int tenscount = 0;
int i;
zweven tempfloat = waarde;
Zorg ervoor dat ronden we goed. Dit pow van < math.h > konden gebruiken, maar lijkt niet waard de invoer
Als deze afronding stap niet hier, de waarde 54.321 wordt afgedrukt als 54.3209
afronding term d: 0.5/pow(10,places) berekenen
zweven d = 0,5;
Als (waarde < 0)
d * = -1,0;
verdelen door tien voor elke decimaal
voor (ik = 0; ik < plaatsen; i ++)
d / = 10,0;
deze kleine toevoeging, in combinatie met de PST-bestanden zullen correct onze waarden afrondt
tempfloat += d;
eerst krijgen waarde tientallen te zijn van de grote macht van tien min waarde
tenscount is niet nodig, maar het zou nuttig zijn als je wilde weten na dit hoe veel tekens het nummer vindt
Als (waarde < 0)
tempfloat * = -1,0;
terwijl ((tens * 10.0) < = tempfloat) {}
tientallen * = 10,0;
tenscount += 1;
}
de negatieve uitschrijven indien nodig
Als (waarde < 0)
Serial.Print('-');
Als (tenscount == 0)
Serial.Print (0, DEC);
voor (ik = 0; ik < tenscount; i ++) {}
cijfer = (int) (tempfloat / trans-Europese netwerken);
Serial.Print (cijfers, DEC);
tempfloat = tempfloat - ((float) cijfer * trans-Europese netwerken);
tientallen / = 10,0;
}
Als geen plaatsen achter komma, nu stoppen en terug te keren
Als (plaatsen < = 0)
terugkeer;
schrijven van het punt en voort
Serial.Print('.');
nu elke decimaal uitschrijven door een verschuiving van cijfers een voor een in de plaats en de afgekapte waarde schrijven
voor (ik = 0; ik < plaatsen; i ++) {}
tempfloat * = 10,0;
cijfer = tempfloat (int);
Serial.Print(Digit,DEC);
Zodra geschreven, uit dat cijfer aftrekken
tempfloat = tempfloat - (float) cijfers;
}
}