├── .gitattributes ├── .DS_Store └── 4x1_feedback_circuit └── 4x1_feedback_circuit.ino /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/techiesms/All-in-one-Home-Automation-Project-/master/.DS_Store -------------------------------------------------------------------------------- /4x1_feedback_circuit/4x1_feedback_circuit.ino: -------------------------------------------------------------------------------- 1 | /************************************************************* 2 | This is the code for All in one Home Automation project by techiesms. 3 | 4 | Features of this project: 5 | 6 | - Using this project, you can control 4 AC appliances and control speed of 1 AC fan. 7 | 8 | - It works with Internet using Blynk app and also without internet using manual switches 9 | and manual fan regulator. 10 | 11 | - You can also get real-time feedback of all the appliances on to your Blynk app. 12 | 13 | - Using IFTTT, you can control all the applicanes using Google Assistant and Alexa. 14 | 15 | A full tutorial video on this project is uploaded on my YouTube channel. 16 | Have a look over it to know more 17 | 18 | techiesms YouTube Channel - https://www.youtube.com/techiesms 19 | 20 | Code written on - 7.09.20 21 | 22 | Download latest Blynk library here: 23 | https://github.com/blynkkk/blynk-library/releases/latest 24 | 25 | techiesms 26 | explore | learn | share 27 | 28 | 29 | *************************************************************/ 30 | 31 | #include 32 | #include 33 | #include 34 | BlynkTimer timer; 35 | 36 | 37 | #define DEBUG_SW 1 38 | 39 | 40 | // Pins of Fan Regulator Knob 41 | #define s1 27 42 | #define s2 14 43 | #define s3 12 44 | #define s4 13 45 | 46 | 47 | // Pins of Switches 48 | #define S5 32 49 | #define S6 35 50 | #define S7 34 51 | #define S8 39 52 | 53 | // Pins of Relay (Appliances Control) 54 | #define R5 15 55 | #define R6 2 56 | #define R7 4 57 | #define R8 22 58 | 59 | // Pins of Relay (Fan Speed Control) 60 | #define Speed1 21 61 | #define Speed2 19 62 | #define Speed4 18 63 | 64 | // By default the mode is with_internet 65 | int MODE = 0; 66 | 67 | // You should get Auth Token in the Blynk App. 68 | // Go to the Project Settings (nut icon). 69 | char auth[] = "AUTH_TOKEN"; 70 | 71 | // Your WiFi credentials. 72 | // Set password to "" for open networks. 73 | char ssid[] = "SSID"; 74 | char pass[] = "PASS"; 75 | 76 | bool speed1_flag = 1; 77 | bool speed2_flag = 1; 78 | bool speed3_flag = 1; 79 | bool speed4_flag = 1; 80 | bool speed0_flag = 1; 81 | 82 | int switch_ON_Flag1_previous_I = 0; 83 | int switch_ON_Flag2_previous_I = 0; 84 | int switch_ON_Flag3_previous_I = 0; 85 | int switch_ON_Flag4_previous_I = 0; 86 | 87 | 88 | BLYNK_WRITE(V0) 89 | { 90 | int fan_speed = param.asInt(); // assigning incoming value from pin V1 to a variable 91 | if (fan_speed == 0) 92 | { 93 | speed0(); 94 | } 95 | if (fan_speed == 1) 96 | { 97 | speed1(); 98 | } 99 | if (fan_speed == 2) 100 | { 101 | speed2(); 102 | } 103 | if (fan_speed == 3) 104 | { 105 | speed3(); 106 | } 107 | if (fan_speed == 4) 108 | { 109 | speed4(); 110 | } 111 | } 112 | 113 | BLYNK_WRITE(V1) 114 | { 115 | int pinValue = param.asInt(); // assigning incoming value from pin V1 to a variable 116 | digitalWrite(R5, pinValue); 117 | // process received value 118 | } 119 | 120 | BLYNK_WRITE(V2) 121 | { 122 | int pinValue = param.asInt(); // assigning incoming value from pin V2 to a variable 123 | digitalWrite(R6, pinValue); 124 | // process received value 125 | } 126 | 127 | BLYNK_WRITE(V3) 128 | { 129 | int pinValue = param.asInt(); // assigning incoming value from pin V3 to a variable 130 | digitalWrite(R7, pinValue); 131 | // process received value 132 | } 133 | 134 | BLYNK_WRITE(V4) 135 | { 136 | int pinValue = param.asInt(); // assigning incoming value from pin V4 to a variable 137 | digitalWrite(R8, pinValue); 138 | // process received value 139 | } 140 | 141 | 142 | 143 | void setup() 144 | { 145 | // put your setup code here, to run once: 146 | pinMode(s1, INPUT); 147 | pinMode(s2, INPUT); 148 | pinMode(s3, INPUT_PULLUP); 149 | pinMode(s4, INPUT); 150 | pinMode(S5, INPUT); 151 | pinMode(S6, INPUT); 152 | pinMode(S7, INPUT); 153 | pinMode(S8, INPUT); 154 | 155 | pinMode(R5, OUTPUT); 156 | pinMode(R6, OUTPUT); 157 | pinMode(R7, OUTPUT); 158 | pinMode(R8, OUTPUT); 159 | pinMode(Speed1, OUTPUT); 160 | pinMode(Speed2, OUTPUT); 161 | pinMode(Speed4, OUTPUT); 162 | 163 | Serial.begin(9600); 164 | WiFi.begin(ssid, pass); 165 | 166 | timer.setInterval(3000L, checkBlynk); // check if connected to Blynk server every 3 seconds 167 | 168 | Blynk.config(auth);//, ssid, pass); 169 | } 170 | 171 | 172 | void loop() 173 | { 174 | 175 | if (WiFi.status() != WL_CONNECTED) 176 | { 177 | if (DEBUG_SW) Serial.println("Not Connected"); 178 | } 179 | else 180 | { 181 | if (DEBUG_SW) Serial.println(" Connected"); 182 | Blynk.run(); 183 | } 184 | 185 | 186 | timer.run(); // Initiates SimpleTimer 187 | 188 | if (MODE == 0) 189 | with_internet(); 190 | else 191 | without_internet(); 192 | // put your main code here, to run repeatedly: 193 | } 194 | 195 | 196 | void with_internet() 197 | { 198 | 199 | // FOR FAN 200 | if (digitalRead(s1) == LOW && speed1_flag == 1) 201 | { 202 | speed1(); 203 | Blynk.virtualWrite(V0, 1); 204 | speed1_flag = 0; 205 | speed2_flag = 1; 206 | speed3_flag = 1; 207 | speed4_flag = 1; 208 | speed0_flag = 1; 209 | 210 | 211 | } 212 | if (digitalRead(s2) == LOW && digitalRead(s3) == HIGH && speed2_flag == 1) 213 | { 214 | speed2(); 215 | Blynk.virtualWrite(V0, 2); 216 | speed1_flag = 1; 217 | speed2_flag = 0; 218 | speed3_flag = 1; 219 | speed4_flag = 1; 220 | speed0_flag = 1; 221 | 222 | } 223 | if (digitalRead(s2) == LOW && digitalRead(s3) == LOW && speed3_flag == 1) 224 | { 225 | speed3(); 226 | Blynk.virtualWrite(V0, 3); 227 | speed1_flag = 1; 228 | speed2_flag = 1; 229 | speed3_flag = 0; 230 | speed4_flag = 1; 231 | speed0_flag = 1; 232 | } 233 | if (digitalRead(s4) == LOW && speed4_flag == 1) 234 | { 235 | speed4(); 236 | Blynk.virtualWrite(V0, 4); 237 | speed1_flag = 1; 238 | speed2_flag = 1; 239 | speed3_flag = 1; 240 | speed4_flag = 0; 241 | speed0_flag = 1; 242 | } 243 | if (digitalRead(s1) == HIGH && digitalRead(s2) == HIGH && digitalRead(s3) == HIGH && digitalRead(s4) == HIGH && speed0_flag == 1) 244 | { 245 | speed0(); 246 | Blynk.virtualWrite(V0, 0); 247 | speed1_flag = 1; 248 | speed2_flag = 1; 249 | speed3_flag = 1; 250 | speed4_flag = 1; 251 | speed0_flag = 0; 252 | } 253 | 254 | 255 | // FOR SWITCH 256 | if (digitalRead(S5) == LOW) 257 | { 258 | if (switch_ON_Flag1_previous_I == 0 ) 259 | { 260 | digitalWrite(R5, HIGH); 261 | if (DEBUG_SW) Serial.println("Relay1- ON"); 262 | Blynk.virtualWrite(V1, 1); 263 | switch_ON_Flag1_previous_I = 1; 264 | } 265 | if (DEBUG_SW) Serial.println("Switch1 -ON"); 266 | 267 | } 268 | if (digitalRead(S5) == HIGH ) 269 | { 270 | if (switch_ON_Flag1_previous_I == 1) 271 | { 272 | digitalWrite(R5, LOW); 273 | if (DEBUG_SW) Serial.println("Relay1 OFF"); 274 | Blynk.virtualWrite(V1, 0); 275 | switch_ON_Flag1_previous_I = 0; 276 | } 277 | if (DEBUG_SW)Serial.println("Switch1 OFF"); 278 | } 279 | 280 | 281 | if (digitalRead(S6) == LOW) 282 | { 283 | if (switch_ON_Flag2_previous_I == 0 ) 284 | { 285 | digitalWrite(R6, HIGH); 286 | if (DEBUG_SW) Serial.println("Relay2- ON"); 287 | Blynk.virtualWrite(V2, 1); 288 | switch_ON_Flag2_previous_I = 1; 289 | } 290 | if (DEBUG_SW) Serial.println("Switch2 -ON"); 291 | 292 | } 293 | if (digitalRead(S6) == HIGH ) 294 | { 295 | if (switch_ON_Flag2_previous_I == 1) 296 | { 297 | digitalWrite(R6, LOW); 298 | if (DEBUG_SW) Serial.println("Relay2 OFF"); 299 | Blynk.virtualWrite(V2, 0); 300 | switch_ON_Flag2_previous_I = 0; 301 | } 302 | if (DEBUG_SW)Serial.println("Switch2 OFF"); 303 | //delay(200); 304 | } 305 | 306 | if (digitalRead(S7) == LOW) 307 | { 308 | if (switch_ON_Flag3_previous_I == 0 ) 309 | { 310 | digitalWrite(R7, HIGH); 311 | if (DEBUG_SW) Serial.println("Relay3- ON"); 312 | Blynk.virtualWrite(V3, 1); 313 | switch_ON_Flag3_previous_I = 1; 314 | } 315 | if (DEBUG_SW) Serial.println("Switch3 -ON"); 316 | 317 | } 318 | if (digitalRead(S7) == HIGH ) 319 | { 320 | if (switch_ON_Flag3_previous_I == 1) 321 | { 322 | digitalWrite(R7, LOW); 323 | if (DEBUG_SW) Serial.println("Relay3 OFF"); 324 | Blynk.virtualWrite(V3, 0); 325 | switch_ON_Flag3_previous_I = 0; 326 | } 327 | if (DEBUG_SW)Serial.println("Switch3 OFF"); 328 | //delay(200); 329 | } 330 | 331 | if (digitalRead(S8) == LOW) 332 | { 333 | if (switch_ON_Flag4_previous_I == 0 ) 334 | { 335 | digitalWrite(R8, HIGH); 336 | if (DEBUG_SW) Serial.println("Relay4- ON"); 337 | Blynk.virtualWrite(V4, 1); 338 | switch_ON_Flag4_previous_I = 1; 339 | } 340 | if (DEBUG_SW) Serial.println("Switch4 -ON"); 341 | 342 | } 343 | if (digitalRead(S8) == HIGH ) 344 | { 345 | if (switch_ON_Flag4_previous_I == 1) 346 | { 347 | digitalWrite(R8, LOW); 348 | if (DEBUG_SW) Serial.println("Relay4 OFF"); 349 | Blynk.virtualWrite(V4, 0); 350 | switch_ON_Flag4_previous_I = 0; 351 | } 352 | if (DEBUG_SW) Serial.println("Switch4 OFF"); 353 | //delay(200); 354 | } 355 | 356 | 357 | } 358 | 359 | 360 | void without_internet() 361 | { 362 | 363 | // FOR FAN 364 | if (digitalRead(s1) == LOW && speed1_flag == 1) 365 | { 366 | speed1(); 367 | 368 | speed1_flag = 0; 369 | speed2_flag = 1; 370 | speed3_flag = 1; 371 | speed4_flag = 1; 372 | speed0_flag = 1; 373 | 374 | 375 | } 376 | if (digitalRead(s2) == LOW && digitalRead(s3) == HIGH && speed2_flag == 1) 377 | { 378 | speed2(); 379 | 380 | speed1_flag = 1; 381 | speed2_flag = 0; 382 | speed3_flag = 1; 383 | speed4_flag = 1; 384 | speed0_flag = 1; 385 | 386 | } 387 | if (digitalRead(s2) == LOW && digitalRead(s3) == LOW && speed3_flag == 1) 388 | { 389 | speed3(); 390 | 391 | speed1_flag = 1; 392 | speed2_flag = 1; 393 | speed3_flag = 0; 394 | speed4_flag = 1; 395 | speed0_flag = 1; 396 | } 397 | if (digitalRead(s4) == LOW && speed4_flag == 1) 398 | { 399 | speed4(); 400 | 401 | speed1_flag = 1; 402 | speed2_flag = 1; 403 | speed3_flag = 1; 404 | speed4_flag = 0; 405 | speed0_flag = 1; 406 | } 407 | if (digitalRead(s1) == HIGH && digitalRead(s2) == HIGH && digitalRead(s3) == HIGH && digitalRead(s4) == HIGH && speed0_flag == 1) 408 | { 409 | speed0(); 410 | 411 | 412 | speed1_flag = 1; 413 | speed2_flag = 1; 414 | speed3_flag = 1; 415 | speed4_flag = 1; 416 | speed0_flag = 0; 417 | } 418 | 419 | 420 | // FOR SWITCH 421 | digitalWrite(R5, !digitalRead(S5)); 422 | digitalWrite(R6, !digitalRead(S6)); 423 | digitalWrite(R7, !digitalRead(S7)); 424 | digitalWrite(R8, !digitalRead(S8)); 425 | } 426 | 427 | 428 | 429 | // Fan Speed Control 430 | 431 | void speed0() 432 | { 433 | //All Relays Off - Fan at speed 0 434 | if (DEBUG_SW)Serial.println("SPEED 0"); 435 | digitalWrite(Speed1, LOW); 436 | digitalWrite(Speed2, LOW); 437 | digitalWrite(Speed4, LOW); 438 | 439 | } 440 | 441 | void speed1() 442 | { 443 | //Speed1 Relay On - Fan at speed 1 444 | if (DEBUG_SW)Serial.println("SPEED 1"); 445 | digitalWrite(Speed1, LOW); 446 | digitalWrite(Speed2, LOW); 447 | digitalWrite(Speed4, LOW); 448 | delay(1000); 449 | digitalWrite(Speed1, HIGH); 450 | } 451 | 452 | void speed2() 453 | { 454 | //Speed2 Relay On - Fan at speed 2 455 | if (DEBUG_SW)Serial.println("SPEED 2"); 456 | digitalWrite(Speed1, LOW); 457 | digitalWrite(Speed2, LOW); 458 | digitalWrite(Speed4, LOW); 459 | delay(1000); 460 | digitalWrite(Speed2, HIGH); 461 | } 462 | 463 | void speed3() 464 | { 465 | //Speed1 & Speed2 Relays On - Fan at speed 3 466 | if (DEBUG_SW)Serial.println("SPEED 3"); 467 | digitalWrite(Speed1, LOW); 468 | digitalWrite(Speed2, LOW); 469 | digitalWrite(Speed4, LOW); 470 | delay(1000); 471 | digitalWrite(Speed1, HIGH); 472 | digitalWrite(Speed2, HIGH); 473 | 474 | } 475 | 476 | void speed4() 477 | { 478 | //Speed4 Relay On - Fan at speed 4 479 | if (DEBUG_SW)Serial.println("SPEED 4"); 480 | digitalWrite(Speed1, LOW); 481 | digitalWrite(Speed2, LOW); 482 | digitalWrite(Speed4, LOW); 483 | delay(1000); 484 | digitalWrite(Speed4, HIGH); 485 | } 486 | 487 | 488 | //Check Blynk Connectivity every 3 seconds 489 | 490 | void checkBlynk() 491 | { 492 | bool isconnected = Blynk.connected(); 493 | if (isconnected == false) 494 | { 495 | MODE = 1; 496 | } 497 | if (isconnected == true) 498 | { 499 | MODE = 0; 500 | } 501 | } 502 | --------------------------------------------------------------------------------