Rum ljus & temperatur Regulator (6 / 6 steg)
Steg 6: Final koden
Temperature1 och Light1 bör placeras mellan mörkarna och fönster, temperature2 någonstans i skuggan en undersökningen2 direkt utanför mörkarna. Mörkarna bör också redan vara öppen när du kör detta program. Glöm inte att fylla i alla variabler från tidigare kalibreringar. Koden verkar lite hackade upp här, tyvärr. Det är autoformatet på Instructables.
#define RELAY1 3
#define RELAY2 4
#define RELAY3 5
#define RELAY4 6
#define TEMP1 54 //A0
#define TEMP2 55 //A1
#define LIGHT1 56 //A2
#define undersökningen2 57 //A3
#define LIGHT3 58 //A4
#define LIGHT4 59 //A5
#define öppen sant
#define nära falskt
#define SVALARE 12
float ersättning.
float temperature1, temperature2;
flyta upper_temp_threshold = 30.
flyta lower_temp_threshold = 20;
float light1, undersökningen2;
flyta lower_light_threshold = 50;
flyta upper_light_threshold = 700;
int adjustBlindsBy = 2500;
booleska blindsAreOpen = sant;
booleska isCooling = false;
int tempDegrees = 0;
String tempString = "";
int amountToOpenBlind1;
int amountToCloseBlind1;
int amountToOpenBlind2;
int amountToCloseBlind2;
int amountToOpenBlind3;
int amountToCloseBlind3;
int amountToOpenBlind4;
int amountToCloseBlind4;
/**
Motor
*/
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
int steg = 0;
booleska riktning = sant; / / gre
osignerade långa last_time;
osignerade långa currentMillis;
int steps_left = 4095;
lång tid;
void setup() {
Serial.BEGIN(9600);
pinMode (IN1, OUTPUT);
pinMode (IN2, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
pinMode (RELAY1, OUTPUT);
pinMode (RELAY2, OUTPUT);
pinMode (RELAY3, OUTPUT);
pinMode (TEMP1, indata);
pinMode (TEMP2, indata);
pinMode (LIGHT1, indata);
pinMode (undersökningen2, indata);
pinMode (LIGHT3, indata);
pinMode (LIGHT4, indata);
pinMode (SVALARE, OUTPUT);
ersättning = 23,5 / 90;
}
void loop() {
temperature1 = getTemp(TEMP1);
temperature2 = getTemp(TEMP2);
light1 = analogRead(LIGHT1);
undersökningen2 = analogRead(LIGHT2);
om ((temperature1 > = upper_temp_threshold & & blindsAreOpen) ||
light1 > upper_light_threshold) {
adjustBlinds(OPEN);
om (! isCooling) {
coolDown(true);
}
}
om (temperature2 > = temperature1 & &! blindsAreOpen) {
adjustBlinds(CLOSE);
om (isCooling) {
coolDown(false);
}
}
om (temperature1 < = lower_temp_threshold & & isCooling) {
coolDown(false);
}
Serial.println(temperature1);
Delay(1000);
}
flyta getTemp(int nr) {
flyta tmp = 0;
för (sväva jag = 0; jag < 5; i ++) {
tmp += analogRead(nr) * ersättning.
Delay(100);
}
returnera tmp / = 5.0;
}
void adjustBlinds(boolean openIt) {
closeRelays();
fördröjning (200);
digitalWrite (RELAY1, öppen);
turnDegrees (openIt? amountToOpenBlind1: amountToCloseBlind1);
digitalWrite (RELAY1, nära);
Delay(1000);
digitalWrite (RELAY2, öppen);
turnDegrees (openIt? amountToOpenBlind2: amountToCloseBlind2);
digitalWrite (RELAY2, nära);
Delay(1000);
digitalWrite (RELAY3, öppen);
turnDegrees (openIt? amountToOpenBlind3: amountToCloseBlind3);
digitalWrite (RELAY3, nära);
blindsAreOpen =! blindsAreOpen;
closeRelays();
}
void coolDown(boolean cool) {
digitalWrite (SVALARE, cool);
}
void turnDegrees (int grader) {
flyta tmpDegree = (float) grader;
grader = (int)(tmpDegree * 11.38);
Riktning = grader > 0? falska: sant;
om (grader < 0)
grader * = -1;
medan (grader > 0) {
currentMillis = micros();
om (currentMillis - last_time > = 1000) {
stepper(1);
tid = tid + micros() - last_time;
last_time = micros();
grader--;
}
}
Delay(2000);
}
Annullera stepper (int xw) {
för (int x = 0; x < xw; x ++) {
Switch (steg) {
fall 0:
digitalWrite (IN1, låg);
digitalWrite (IN2, låg);
digitalWrite (IN3, låg);
digitalWrite (IN4, hög);
bryta;
fall 1:
digitalWrite (IN1, låg);
digitalWrite (IN2, låg);
digitalWrite (IN3, hög);
digitalWrite (IN4, hög);
bryta;
fall 2:
digitalWrite (IN1, låg);
digitalWrite (IN2, låg);
digitalWrite (IN3, hög);
digitalWrite (IN4, låg);
bryta;
fall 3:
digitalWrite (IN1, låg);
digitalWrite (IN2, hög);
digitalWrite (IN3, hög);
digitalWrite (IN4, låg);
bryta;
fall 4:
digitalWrite (IN1, låg);
digitalWrite (IN2, hög);
digitalWrite (IN3, låg);
digitalWrite (IN4, låg);
bryta;
fall 5:
digitalWrite (IN1, hög);
digitalWrite (IN2, hög);
digitalWrite (IN3, låg);
digitalWrite (IN4, låg);
bryta;
fall 6:
digitalWrite (IN1, hög);
digitalWrite (IN2, låg);
digitalWrite (IN3, låg);
digitalWrite (IN4, låg);
bryta;
fall 7:
digitalWrite (IN1, hög);
digitalWrite (IN2, låg);
digitalWrite (IN3, låg);
digitalWrite (IN4, hög);
bryta;
standard:
digitalWrite (IN1, låg);
digitalWrite (IN2, låg);
digitalWrite (IN3, låg);
digitalWrite (IN4, låg);
bryta;
}
SetDirection();
}
}
void SetDirection() {
om (riktning == 1) {
Steg ++;
}
om (riktning == 0) {
Steg--;
}
om (steg > 7) {
Steg = 0;
}
om (steg < 0) {
Steg = 7.
}
}
Annullera utskrift (strängen str) {
Serial.println(Str);
}
void closeRelays() {
digitalWrite (RELAY1, nära);
digitalWrite (RELAY2, nära);
digitalWrite (RELAY3, nära);
digitalWrite (RELAY4, nära);
}
void openRelays() {
digitalWrite (RELAY1, låg);
digitalWrite(RELAY2,LOW);
}