├── .gitattributes ├── README.md └── Fan_Speed_Control_with___without_Internet └── Fan_Speed_Control_with___without_Internet.ino /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fan-Speed-Control-with-and-without-Internet- 2 | 3 | In this project, we made a fan regulator circuit using ESP32 board in which you'll be able to control the speed of your ceiling fan over interent usign Blynk app on your smart phone. 4 | And not only that you can also control the speed with the regular fan speed regulator which you use in your day to day life and you'll also get realtime feedback of the manual control on your blynk app. 5 | And In case your internet is not working, then also you will be able to control the speed of the fan manually using that fan regulator. 6 | 7 | 8 | 9 | So basically it all started with reverse enginnering a fan regulator circuit and studying all it's components and connections. You can watch out this video to know how we made a fan regulator from scrtach. 10 | 11 | https://youtu.be/kMqcRaBRDRY 12 | 13 | After that we tried to make this project works wihtout internet as well and finally we landed up on this project which is a complete solution for a Interent & Manual control fan regulator. Have a look over this video 14 | 15 | https://youtu.be/AJwdF4L6HNU 16 | -------------------------------------------------------------------------------- /Fan_Speed_Control_with___without_Internet/Fan_Speed_Control_with___without_Internet.ino: -------------------------------------------------------------------------------- 1 | /************************************************************* 2 | This is the code for making your own Fan Regulator that works over internet using Blynk IoT Platform and 3 | also with the manual fan regulator along with realtime feedback on blynk app. 4 | 5 | This project also works when their is no Internet connection using Manual Fan regulator. 6 | 7 | A full tutorial video on this project is uploaded on my YouTube channel. 8 | Have a look over it to know more 9 | 10 | techiesms YouTube Channel - https://www.youtube.com/techiesms 11 | 12 | Code written by - Sachin Soni 13 | Code written on - 17.07.20 14 | 15 | Download latest Blynk library here: 16 | https://github.com/blynkkk/blynk-library/releases/latest 17 | 18 | techiesms 19 | explore | learn | share 20 | 21 | 22 | *************************************************************/ 23 | 24 | #include 25 | #include 26 | #include 27 | BlynkTimer timer; 28 | 29 | // Pins of Fan Regulator Knob 30 | #define s1 13 31 | #define s2 12 32 | #define s3 14 33 | #define s4 27 34 | 35 | // Pins of Relays 36 | #define Speed1 21 37 | #define Speed2 19 38 | #define Speed4 18 39 | 40 | // By default the mode is with_internet 41 | int MODE = 0; 42 | 43 | // You should get Auth Token in the Blynk App. 44 | // Go to the Project Settings (nut icon). 45 | char auth[] = "Your_AUTH_Token"; 46 | 47 | // Your WiFi credentials. 48 | // Set password to "" for open networks. 49 | char ssid[] = "SSID_Name"; 50 | char pass[] = "Pass"; 51 | 52 | bool speed1_flag = 1; 53 | bool speed2_flag = 1; 54 | bool speed3_flag = 1; 55 | bool speed4_flag = 1; 56 | bool speed0_flag = 1; 57 | 58 | 59 | BLYNK_WRITE(V0) 60 | { 61 | int fan_speed = param.asInt(); // assigning incoming value from pin V1 to a variable 62 | if (fan_speed == 0) 63 | { 64 | speed0(); 65 | } 66 | if (fan_speed == 1) 67 | { 68 | speed1(); 69 | } 70 | if (fan_speed == 2) 71 | { 72 | speed2(); 73 | } 74 | if (fan_speed == 3) 75 | { 76 | speed3(); 77 | } 78 | if (fan_speed == 4) 79 | { 80 | speed4(); 81 | } 82 | } 83 | 84 | 85 | void setup() 86 | { 87 | // put your setup code here, to run once: 88 | pinMode(s1, INPUT); 89 | pinMode(s2, INPUT); 90 | pinMode(s3, INPUT); 91 | pinMode(s4, INPUT); 92 | 93 | pinMode(Speed1, OUTPUT); 94 | pinMode(Speed2, OUTPUT); 95 | pinMode(Speed4, OUTPUT); 96 | 97 | Serial.begin(9600); 98 | WiFi.begin(ssid, pass); 99 | timer.setInterval(3000L, checkBlynk); // check if connected to Blynk server every 3 seconds 100 | Blynk.config(auth);//, ssid, pass); 101 | } 102 | 103 | 104 | void loop() 105 | { 106 | 107 | if (WiFi.status() != WL_CONNECTED) 108 | { 109 | Serial.println("Not Connected"); 110 | } 111 | else 112 | { 113 | Serial.println(" Connected"); 114 | Blynk.run(); 115 | } 116 | 117 | 118 | timer.run(); // Initiates SimpleTimer 119 | 120 | if (MODE == 0) 121 | with_internet(); 122 | else 123 | without_internet(); 124 | // put your main code here, to run repeatedly: 125 | } 126 | 127 | 128 | void with_internet() 129 | { 130 | if (digitalRead(s1) == LOW && speed1_flag == 1) 131 | { 132 | speed1(); 133 | Blynk.virtualWrite(V0, 1); 134 | Serial.println("SPEED 1"); 135 | speed1_flag = 0; 136 | speed2_flag = 1; 137 | speed3_flag = 1; 138 | speed4_flag = 1; 139 | speed0_flag = 1; 140 | 141 | 142 | } 143 | if (digitalRead(s2) == LOW && digitalRead(s3) == HIGH && speed2_flag == 1) 144 | { 145 | speed2(); 146 | Blynk.virtualWrite(V0, 2); 147 | Serial.println("SPEED 2"); 148 | speed1_flag = 1; 149 | speed2_flag = 0; 150 | speed3_flag = 1; 151 | speed4_flag = 1; 152 | speed0_flag = 1; 153 | 154 | } 155 | if (digitalRead(s2) == LOW && digitalRead(s3) == LOW && speed3_flag == 1) 156 | { 157 | speed3(); 158 | Blynk.virtualWrite(V0, 3); 159 | Serial.println("SPEED 3"); 160 | speed1_flag = 1; 161 | speed2_flag = 1; 162 | speed3_flag = 0; 163 | speed4_flag = 1; 164 | speed0_flag = 1; 165 | } 166 | if (digitalRead(s4) == LOW && speed4_flag == 1) 167 | { 168 | speed4(); 169 | Blynk.virtualWrite(V0, 4); 170 | Serial.println("SPEED 4"); 171 | speed1_flag = 1; 172 | speed2_flag = 1; 173 | speed3_flag = 1; 174 | speed4_flag = 0; 175 | speed0_flag = 1; 176 | } 177 | if (digitalRead(s1) == HIGH && digitalRead(s2) == HIGH && digitalRead(s3) == HIGH && digitalRead(s4) == HIGH && speed0_flag == 1) 178 | { 179 | speed0(); 180 | Blynk.virtualWrite(V0, 0); 181 | Serial.println("SPEED 0"); 182 | speed1_flag = 1; 183 | speed2_flag = 1; 184 | speed3_flag = 1; 185 | speed4_flag = 1; 186 | speed0_flag = 0; 187 | } 188 | } 189 | 190 | 191 | void without_internet() 192 | { 193 | if (digitalRead(s1) == LOW && speed1_flag == 1) 194 | { 195 | speed1(); 196 | 197 | Serial.println("SPEED 1"); 198 | speed1_flag = 0; 199 | speed2_flag = 1; 200 | speed3_flag = 1; 201 | speed4_flag = 1; 202 | speed0_flag = 1; 203 | 204 | 205 | } 206 | if (digitalRead(s2) == LOW && digitalRead(s3) == HIGH && speed2_flag == 1) 207 | { 208 | speed2(); 209 | 210 | Serial.println("SPEED 2"); 211 | speed1_flag = 1; 212 | speed2_flag = 0; 213 | speed3_flag = 1; 214 | speed4_flag = 1; 215 | speed0_flag = 1; 216 | 217 | } 218 | if (digitalRead(s2) == LOW && digitalRead(s3) == LOW && speed3_flag == 1) 219 | { 220 | speed3(); 221 | 222 | Serial.println("SPEED 3"); 223 | speed1_flag = 1; 224 | speed2_flag = 1; 225 | speed3_flag = 0; 226 | speed4_flag = 1; 227 | speed0_flag = 1; 228 | } 229 | if (digitalRead(s4) == LOW && speed4_flag == 1) 230 | { 231 | speed4(); 232 | 233 | Serial.println("SPEED 4"); 234 | speed1_flag = 1; 235 | speed2_flag = 1; 236 | speed3_flag = 1; 237 | speed4_flag = 0; 238 | speed0_flag = 1; 239 | } 240 | if (digitalRead(s1) == HIGH && digitalRead(s2) == HIGH && digitalRead(s3) == HIGH && digitalRead(s4) == HIGH && speed0_flag == 1) 241 | { 242 | speed0(); 243 | 244 | Serial.println("SPEED 0"); 245 | speed1_flag = 1; 246 | speed2_flag = 1; 247 | speed3_flag = 1; 248 | speed4_flag = 1; 249 | speed0_flag = 0; 250 | } 251 | } 252 | 253 | 254 | void speed0() 255 | { 256 | digitalWrite(Speed1, HIGH); 257 | digitalWrite(Speed2, HIGH); 258 | digitalWrite(Speed4, HIGH); 259 | 260 | } 261 | 262 | void speed1() 263 | { 264 | //Speed1 Relay On - Fan at speed 1 265 | 266 | digitalWrite(Speed1, HIGH); 267 | digitalWrite(Speed2, HIGH); 268 | digitalWrite(Speed4, HIGH); 269 | delay(500); 270 | digitalWrite(Speed1, LOW); 271 | } 272 | 273 | void speed2() 274 | { 275 | //Speed2 Relay On - Fan at speed 2 276 | 277 | digitalWrite(Speed1, HIGH); 278 | digitalWrite(Speed2, HIGH); 279 | digitalWrite(Speed4, HIGH); 280 | delay(500); 281 | digitalWrite(Speed2, LOW); 282 | } 283 | 284 | void speed3() 285 | { 286 | //Speed1 & Speed2 Relays On - Fan at speed 3 287 | 288 | digitalWrite(Speed1, HIGH); 289 | digitalWrite(Speed2, HIGH); 290 | digitalWrite(Speed4, HIGH); 291 | delay(500); 292 | digitalWrite(Speed1, LOW); 293 | digitalWrite(Speed2, LOW); 294 | 295 | } 296 | 297 | void speed4() 298 | { 299 | //Speed4 Relay On - Fan at speed 4 300 | 301 | digitalWrite(Speed1, HIGH); 302 | digitalWrite(Speed2, HIGH); 303 | digitalWrite(Speed4, HIGH); 304 | delay(500); 305 | digitalWrite(Speed4, LOW); 306 | } 307 | 308 | void checkBlynk() 309 | { 310 | bool isconnected = Blynk.connected(); 311 | if (isconnected == false) 312 | { 313 | MODE = 1; 314 | } 315 | if (isconnected == true) 316 | { 317 | MODE = 0; 318 | } 319 | } 320 | --------------------------------------------------------------------------------