Hacka en picknick svalare (in en termostatstyrd kammare) (4 / 5 steg)
Steg 4: Temperatur kontroll logik
Koden består av 3 delar:
-läsa temperatur från sensorn och skriva det på displayen, vi kontrollera temperaturen varje 800ms
-läsa knappar och skriva önskad temperatur på displayen
-avgöra mellan uppvärmning, kylning och off stat. Vi inkluderat temperaturen hysteres för att undvika växling mellan två stater att ofta när vi är nära önskad temperatur.
PROGRAM:
#include < OneWire.h >
#include < DallasTemperature.h >
#include < LiquidCrystal.h >
osignerade långa lasttime;
int comand;
float oldTc;
flyta Td = 21; önskad T, kontrollerad med buttonI och buttonD
flyta Th = 1,0; tillåten avvikelse
float Tc; kammartemperatur
int buttonD = 9; knappen som minska önskad T
int buttonI = 8; knappen som ökar önskas T
int relay1 = 5;
int relay2 = 4;
FUNKTION SOM LÄSER KAMMARTEMPERATUR
#define ONE_WIRE_BUS 6 / / temperatur sensorer data kabeln är ansluten till stift 6 på Arduino.
OneWire oneWire(ONE_WIRE_BUS);
Passera vår oneWire referens till Dallas temperatur.
DallasTemperature sensorer (& oneWire);
LiquidCrystal lcd(A3,A2,A1,A0,13,12);
void setup(void) {
LCD.BEGIN (16, 2);
Delay(200);
Starta upp biblioteket
sensors.BEGIN();
sensors.setWaitForConversion(false);
pinMode (relay1, produktionen);
pinMode (relay2, produktionen);
lasttime = millis();
}
void loop(void)
{
int button_state;
IF((Millis()-lasttime) > 800) {
TC = sensors.getTempCByIndex(0);
sensors.requestTemperatures(); Skicka kommandot att få temperaturer.
lasttime = millis();
}
lcd.setCursor (0, 0);
LCD.Print("T=");
LCD.Print(TC,1);
LCD.Print ("C").
lcd.setCursor (0, 1);
LCD.Print ("önskas T =");
LCD.Print(TD,1);
LCD.Print ("C").
int ner = 0;
button_state=digitalRead(buttonD);
IF(button_state==0) {
TD = Td - 0,1;
ned = 1;
}
button_state=digitalRead(buttonI);
IF(button_state==0) {
TD = Td + 0,1;
ned = 1;
}
IF (nedåt) {//for snabbare/bättre knappen svar
Delay(200);
}
ATT VÄLJA MELLAN VÄRME, KYLA OCH AV
om (Tc < =(Td-Th/2)) {
comand = 1;
}
om (Tc > =(Td+Th/2)) {
comand = -1;
}
om (Tc > Td & & oldTc < = Td) {//hysteresis
comand = 0;
}
IF(TC=TD) {//hysteresis
comand = 0;
}
oldTc = Tc;
kommandon för uppvärmning, kyla och av
lcd.setCursor (9, 0);
IF(comand==-1) {//cooling
digitalWrite (4, hög).
digitalWrite (5, låg).
LCD.Print("Cooling");
}
IF(comand==1) {//heating
digitalWrite 5, hög,
digitalWrite (4, låg).
LCD.Print("Heating");
}
IF(comand==0) {//off
digitalWrite (4, hög).
digitalWrite 5, hög,
LCD.Print ("OFF");
}
}