Rum ljus & temperatur Regulator (4 / 6 steg)
Steg 4: Kalibrering 1: sensorer
Denna del kommer att vara mer relevant om du är en perfektionist.
Kalibrering av termistor
En termistor är mycket känsliga. Om du läsa raw utdata visas mycket variation. Vad du vill göra är att stabilisera den läsa upp temperaturen. Den resulterande ekvationen vore actual_temperate = utgång * ersättning. Så är nuvarande rumstemperatur skulle vara 20Celsius, ekvationen skulle vara 20 = utgång * ersättning. Ersättningen skulle då vara 20 / utgång. Denna variabel kommer att användas i den Arduino skissen. I mitt fall, var ersättningen (23,5 / 90). Detta bör naturligtvis vara en flottör.
Jag har ännu att testa det för extrema temperaturer, som iskalla eller en ugn eller något. Om du vill ha en noggrann avläsning runt om, du kommer att sluta med en andra graden ekvation. Eftersom temperaturen spänner vi behöver är begränsad, och temperaturen avläsning själv kommer inte att användas direkt, har jag valt en linjär ekvation.
Kalibrering av photosensor
Detta kommer att vara mer subjektiva. Detta kommer att omfatta hur mycket solljus är nödvändigt att uppmana en åtgärd som kommer att variera beroende på situation och person. Jag har hittat en avläsning av 700 för att vara tillräckligt för att uppmana en åtgärd. Observera att direkt solljus kan användas för kalibrering, artificiellt ljus avger inte tillräckligt fotoner för korrekt kalibrering. Direkt solljus i kombination med mycket tillfällig cloudedness skulle vara perfekt att observera avläsning.
Kod för kalibrering av sensorerna
Att skriva i "A" i följetong monitor får du photosensor avläsning. Typ "B" får termistor resultaten, med ersättning bredvid den. När i antingen klausul, ange alla singular värde och tryck enter för att komma tillbaka in i slingan.
#define TEMP1 54 //thermistor 1
#define TEMP2 55 //thermistor 2
#define PHOTO1 56 //photosensor 1
#define PHOTO2 57 //photosensor 2
flyta ersättning = 23,5 / 90;
void setup() {
Serial.BEGIN(9600);
pinMode (TEMP1, indata);
pinMode (TEMP2, indata);
pinMode (PHOTO1, indata);
pinMode (PHOTO2, indata);}
void loop() {
om (Serial.available() > 0) {
char chr = (char)Serial.read();
Serial.println(Chr);
om (chr == "A") {
medan ((Serial.available() < 1)) {
Sträng output = analogRead(PHOTO1) + "\t";
Serial.Print(analogRead(PHOTO1));
Serial.Print("\t");
Serial.println(analogRead(PHOTO2));
Delay(250);
}
}
om (chr == 'B') {
medan ((Serial.available() < 1)) {
flyta tmp1 = (float)analogRead(TEMP1);
flyta tmp2 = (float)analogRead(TEMP2);
Serial.Print((int)tmp1);
Serial.Print ("\t, ersättning: \t");
Serial.Print(tmp1 * Compensation);
Serial.Print("\t");
Serial.Print((int)tmp2);
Serial.Print ("\t, ersättning: \t");
Serial.println(tmp2 * Compensation);
Delay(250);
}
}
}
Delay(500);
}