-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pet_Feeding_Temp_Control.ino
131 lines (108 loc) · 2.62 KB
/
Pet_Feeding_Temp_Control.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <RTClib.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <DHT.h>
#define BLYNK_PRINT Serial
#define dht_data 3
#define fan D3
#define led D4
#define us_trigger D6
#define us_echo D7
#define buzz D8
#define DHTTYPE DHT11
Servo servo;
RTC_DS3231 rtc;
DHT dht(dht_data, DHTTYPE);
char auth[] = "YOUR_AUTH";
char ssid[] = "WIFI_NAME";
char pass[] = "WIFI_PASS";
float set_temp;
int dismm, portion1, portion2;
long set_time1, set_time2;
BLYNK_WRITE(V1){set_time1 = param.asLong();}
BLYNK_WRITE(V2){set_time2 = param.asLong();}
BLYNK_WRITE(V3){portion1 = param.asInt();}
BLYNK_WRITE(V4){portion2 = param.asInt();}
BLYNK_WRITE(V5){set_temp = param.asFloat();}
WidgetLED status_fan (V7);
WidgetLED status_led (V8);
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
Wire.begin(5, 4); //(SDA, SCL)
rtc.begin();
dht.begin();
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(us_echo, INPUT);
pinMode(us_trigger, OUTPUT);
pinMode(buzz, OUTPUT);
//uncomment code below to make RTC adjust it's time according to your PC time
//rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
servo.attach(D5);
servo.write(90);
}
void loop()
{
Blynk.run();
DateTime now = rtc.now();
long rtc_in_sec = (3600 * now.hour() + 60 * now.minute());
float temp = dht.readTemperature();
if ((rtc_in_sec == set_time1) && (now.second() < portion1)) servo_mov(portion1);
else if((rtc_in_sec == set_time2) && (now.second() < portion2)) servo_mov(portion2);
else servo.write(90);
if (temp > set_temp) temp_control(LOW, HIGH);
else if (temp < set_temp) temp_control(HIGH, LOW);
else temp_control(HIGH, HIGH);
level();
Blynk.virtualWrite(V6, temp);
Blynk.virtualWrite(V0, dismm);
}
void temp_control(char fan_val, char led_val)
{
digitalWrite(fan, fan_val);
digitalWrite(led, led_val);
if(fan_val == LOW && led_val == HIGH)
{
status_fan.on();
status_led.off();
}
else if(fan_val == HIGH && led_val == LOW)
{
status_fan.off();
status_led.on();
}
else
{
status_fan.off();
status_led.off();
}
}
void servo_mov(int portion)
{
int portion_delay = portion * 1000;
servo.write(45);
delay(portion_delay);
servo.write(90);
}
int level()
{
digitalWrite(buzz, HIGH);
digitalWrite(us_trigger, LOW);
delayMicroseconds(2);
digitalWrite(us_trigger, HIGH);
delayMicroseconds(10);
digitalWrite(us_trigger, LOW);
float dis = (pulseIn(us_echo, HIGH)/58.3);
dismm = dis*10;
if(dismm >= 95)
{
digitalWrite(buzz, LOW);
delay(250);
digitalWrite(buzz, HIGH);
}
return dismm;
}