Temperatur kontroll för köksmaskiner (2 / 5 steg)
Steg 2: Avkänning temperatur
Alla sensorer presenteras här översätta temperatur till spänning. Särskilt, 10 mV per grad, så 0 Volt = 0 grader och 2,5 V = 250 grader (med undantag för LM34, grader är Celsius). Vi ansluta utdata från sensorn till en Arduinos analoga ingångar. Vi ska göra det nu, och skriva en temperaturkännande program (aka: termometer) som kommer att skicka den aktuella temperaturen tillbaka till datorn.
Koden nedan går med ledningarna i bilden för att göra en enkel termometer.
Om du har aldrig bråkade med en Arduino innan, är här en bra tutorial att komma igång.
Definiera vilken analog ingångsstift har vi kopplat till temperaturgivare
#define TEMP_SENSOR_PIN 0
Om du knyter den Arduino vRef 3,3-volts leverans, ändra detta till 3.3
#define ANALOG_VOTLAGE_REFERENCE 5
void setup() {
Serial.BEGIN(115200);
}
void loop() {
skriver ut den aktuella temperaturen med 1 plats efter decimalkommat
printFloat(getTemperature(), 1);
skriva ut en vagnretur
Serial.println();
resten 100 millisekunder
Delay(100);
}
CtoF(float c) {float
Alternativt konvertera från Celsius till Fahrenheit om du är intresserad av att sorta sak
returnera c * 9.0 / 5.0 + 32,0;
}
flyta analogInToDegreesC(int inputValue) {
division med 1023, det maximala input värde, som skalar ingången mellan 0 - 1
sedan multiplicera av referens spänning, skalor som 0-1 till 0 - vREF (standard är 5V)
Slutligen, multiplicera med 100 att skala det till 10s millivolt eller grader
återgå inputValue / 1023.0 * ANALOG_VOTLAGE_REFERENCE * 100,0;
}
float getTemperature() {
Läs den analog ingång, konvertera till grader C och covert till F
återvända CtoF(analogInToDegreesC(analogRead(TEMP_SENSOR_PIN)));
}
---Denna senaste funktion, printFloat är inte nödvändigt att förstå om du inte vill
---Välkommen att strunta i det för nu, och behandla det som ett inbyggt verktyg,
---Det skriver ut punkt flyttalsvärden
printFloat skriver ut flötet "värde" rundade "platser" platser efter decimalkommat
void printFloat (flytvärdet, int platser) {
Detta används för att kasta siffror
int siffran.
flyta tior = 0,1;
int tenscount = 0;
int i;
flyta tempfloat = värde;
se till att vi runt ordentligt. Detta kunde använda pow från < math.h >, men verkar inte värt import
om detta avrundning steg är inte här, skrivs värdet 54.321 som 54.3209
beräkna avrundning sikt d: 0.5/pow(10,places)
flyta d = 0,5;
om (värdet < 0)
d * =-1.0;
Dela upp av tio för varje decimalen
för (jag = 0; jag < platser; i ++)
d / = 10,0;
här litet tillägg, kombinerat med trunkering avrundas våra värderingar ordentligt
tempfloat += d;
först få värde TEN vara stor kraft tio minst värde
tenscount är inte nödvändigt men det skulle vara bra om du ville veta efter detta hur många tecken nummer tar
om (värdet < 0)
tempfloat * =-1.0;
medan ((tens * 10.0) < = tempfloat) {
tens * = 10,0;
tenscount + = 1;
}
skriva ut negativ om det behövs
om (värdet < 0)
Serial.Print('-');
om (tenscount == 0)
Serial.Print (0, DEC);
för (jag = 0; jag < tenscount; i ++) {
siffra = (int) (tempfloat / TEN);
Serial.Print (siffran, DEC).
tempfloat = tempfloat - ((float) siffran * TEN);
tens = 10,0;
}
om inga platser efter decimal, sluta nu och återgå
om (förlägger < = 0)
hemkomst.
annars skriver poängen och fortsätta på
Serial.Print('.');
nu Skriv ut varje decimaler av skiftande siffrorna ett till de plats och skrivning av värdet för avkortade
för (jag = 0; jag < platser; i ++) {
tempfloat * = 10,0;
siffra = (int) tempfloat;
Serial.Print(DIGIT,dec);
När skrivit, subtrahera bort denna siffra
tempfloat = tempfloat - (float) siffran.
}
}