Temperatur kontroll för köksmaskiner (4 / 5 steg)
Steg 4: Magiskt Feedback
Fäst filmen visar dig feedback i aktion. Titta på LED-lampan på SSR blinkar på och av. Du kan också värma fläkthastigheten svara på elektrisk belastning enligt värmaren tänds.
Med AD 595, denna process är bara en fråga om gör lite matte på en
analog ingång
//
Tack till Karl Gruenewald för konverteringsformeln
All kod släppt under
Creative Commons Erkännande-Ickekommersiell-Dela Lika 3.0
Denna nuvarande version är baserad på avkänning temperaturen med
en AD595 och termoelement via en A/D stift. Någon annan
sensorn kan användas genom att ersätta en funktionen.
Använd gärna grader C också, det kommer bara att ge en annan
PID tuning än de från F.
//
#define TEMP_SENSOR_PIN 0
#define SSD_PIN 2
Om du knyter den Arduino vRef 3,3-volts leverans, ändra detta till 3.3
#define ANALOG_VOTLAGE_REFERENCE 5
float currentTemperature;
flyta highTargetTemperature = 100;
flyta lowTargetTemperature = 95.
void setup() {
Serial.BEGIN(115200);
pinMode (SSD_PIN, OUTPUT);
}
void loop() {
skriver ut den aktuella temperaturen med 1 plats efter decimalkommat
currentTemperature = getTemperature();
printFloat (currentTemperature, 1);
skriva ut en vagnretur
Serial.println();
om (currentTemperature < lowTargetTemperature) {
digitalWrite (SSD_PIN, hög);
}
om (currentTemperature > highTargetTemperature) {
digitalWrite (SSD_PIN, låg);
}
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)));
}
SLUTET temperaturgivare
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.
}
}