Arduino termostat (mekanisk) (3 / 6 steg)
Steg 3: Programmet
#include < Servo.h >
#define aref_voltage 3.3 / / vi knyta 3.3V till ARef och mäta med en multimeter!
Servomotor;
int offPos = 500, onPos = 1800, vänta = 10000; justera offPos och onPos tills motorn bara knappt slår på och av din värmare/AC
flyta tempLow = 68,0, tempHigh = 72,0, temperatureF; Justera tempLow och tempHigh till spänna av temperatur du vill ha rummet höll på
booleska värme = false;
int tempPin = 1; den analoga stift TMP36 Vout (känsla) pin är ansluten till
resolutionen är 10 mV / grad Celsius med en
500 mV offset för negativa temperaturer
int tempReading; analog läsning från sensorn
void setup(void)
{
Serial.BEGIN(9600);
analogReference(EXTERNAL);
turnOff();
}
void loop(void)
{
readTemp();
checkTemp();
Delay(Wait);
}
void readTemp()
{
tempReading = analogRead(tempPin);
konvertera att läsning till spänning, som bygger upp referensspänningen
flyta spänning = tempReading * aref_voltage;
spänning = 1024.0;
Nu skriva ut temperaturen
flyta temperatureC = (spänning - 0,5) * 100; konvertering från 10 mv per grad med 500 mV offset
grader ((volatge - 500mV) gånger 100)
nu konvertera till Fahrenheight
temperatureF = (temperatureC * 9.0 / 5.0) + 32,0;
Serial.Print(temperatureF); Serial.println ("grader F");
}
void checkTemp()
{
om (temperatureF < tempLow & & värme == false)
{
turnOn();
}
annat if(temperatureF > tempHigh)
{
turnOff();
}
}
void turnOff()
{
motor.attach(11);
Delay(1000);
motor.writeMicroseconds(offPos);
Delay(1000);
motor.detach();
Delay(1000);
värme = false;
}
void turnOn()
{
motor.attach(11);
Delay(1000);
motor.writeMicroseconds(onPos);
Delay(1000);
motor.detach();
Delay(1000);
värme = sant;
}