diff --git a/Smart Home/Smart Roller Blind/3D Models/Axel.stl b/Smart Home/Smart Roller Blind/3D Models/Axel.stl new file mode 100644 index 0000000..c9401f2 Binary files /dev/null and b/Smart Home/Smart Roller Blind/3D Models/Axel.stl differ diff --git a/Smart Home/Smart Roller Blind/3D Models/Bottom Cover.stl b/Smart Home/Smart Roller Blind/3D Models/Bottom Cover.stl new file mode 100644 index 0000000..0ebcc3c Binary files /dev/null and b/Smart Home/Smart Roller Blind/3D Models/Bottom Cover.stl differ diff --git a/Smart Home/Smart Roller Blind/3D Models/Main Body.stl b/Smart Home/Smart Roller Blind/3D Models/Main Body.stl new file mode 100644 index 0000000..3cb9801 Binary files /dev/null and b/Smart Home/Smart Roller Blind/3D Models/Main Body.stl differ diff --git a/Smart Home/Smart Roller Blind/3D Models/Main Gear.stl b/Smart Home/Smart Roller Blind/3D Models/Main Gear.stl new file mode 100644 index 0000000..84330e2 Binary files /dev/null and b/Smart Home/Smart Roller Blind/3D Models/Main Gear.stl differ diff --git a/Smart Home/Smart Roller Blind/3D Models/Motor Gear Left.stl b/Smart Home/Smart Roller Blind/3D Models/Motor Gear Left.stl new file mode 100644 index 0000000..d9d4f35 Binary files /dev/null and b/Smart Home/Smart Roller Blind/3D Models/Motor Gear Left.stl differ diff --git a/Smart Home/Smart Roller Blind/3D Models/Motor Gear Right.stl b/Smart Home/Smart Roller Blind/3D Models/Motor Gear Right.stl new file mode 100644 index 0000000..d9d4f35 Binary files /dev/null and b/Smart Home/Smart Roller Blind/3D Models/Motor Gear Right.stl differ diff --git a/Smart Home/Smart Roller Blind/3D Models/Top Cover.stl b/Smart Home/Smart Roller Blind/3D Models/Top Cover.stl new file mode 100644 index 0000000..7d2a6f0 Binary files /dev/null and b/Smart Home/Smart Roller Blind/3D Models/Top Cover.stl differ diff --git a/Smart Home/Smart Roller Blind/3d Model.png b/Smart Home/Smart Roller Blind/3d Model.png new file mode 100644 index 0000000..ac72818 Binary files /dev/null and b/Smart Home/Smart Roller Blind/3d Model.png differ diff --git a/Smart Home/Smart Roller Blind/Circuit Diagram.png b/Smart Home/Smart Roller Blind/Circuit Diagram.png index a8c27ef..143730e 100644 Binary files a/Smart Home/Smart Roller Blind/Circuit Diagram.png and b/Smart Home/Smart Roller Blind/Circuit Diagram.png differ diff --git a/Smart Home/Smart Roller Blind/Smart_Roller_Bilind_V2/Smart_Roller_Bilind_V2.ino b/Smart Home/Smart Roller Blind/Smart_Roller_Bilind_V2/Smart_Roller_Bilind_V2.ino index 442dbf5..6d74cec 100644 --- a/Smart Home/Smart Roller Blind/Smart_Roller_Bilind_V2/Smart_Roller_Bilind_V2.ino +++ b/Smart Home/Smart Roller Blind/Smart_Roller_Bilind_V2/Smart_Roller_Bilind_V2.ino @@ -17,14 +17,12 @@ IPAddress dns(192, 168, 1, 1); IPAddress dns2(8, 8, 8, 8); const char *deviceName = "MakeItSmart_Roller_Blind"; - const char *ssid = "**********Your_SSID************"; - const char *password = "********Your Password**********"; +const char *ssid = "**********Your_SSID************"; +const char *password = "********Your Password**********"; ESP8266WebServer httpServer(80); ESP8266HTTPUpdateServer httpUpdater; -#define encoder_clk_pin 5 -#define encoder_data_pin 4 #define left_Motor_forward_pin 14 #define left_Motor_backward_pin 12 @@ -32,30 +30,10 @@ ESP8266HTTPUpdateServer httpUpdater; #define right_Motor_forward_pin 15 #define right_Motor_backward_pin 13 -#define int_max 2147483647 -#define Position_check_interval 60000 //1 dk -#define Position_check_interval_as_sec 60 - WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org"); -unsigned long lastSensorRead = 0; -unsigned long sensorReadDelay = 500; - -int previous_clk; -int previous_data; -int current_clk; -int current_data; - -long last_read = 0; -long last_position_saved = 0; -long last_Position_Checked = 0; - int motor_direction = 0; -long motor_position_counter = 0; - -int goingTo = int_max; - int timeZone = 3; bool isReverse = false; @@ -82,12 +60,6 @@ void setup() { pinMode(right_Motor_forward_pin, OUTPUT); pinMode(right_Motor_backward_pin, OUTPUT); - pinMode(encoder_clk_pin, INPUT); - pinMode(encoder_data_pin, INPUT); - - previous_clk = digitalRead(encoder_clk_pin); - previous_data = digitalRead(encoder_data_pin); - connectToWifi(); loadLastValues(); @@ -96,43 +68,12 @@ void setup() { } void loop() { - if (goingTo != int_max) { - if (motor_position_counter < goingTo) motor_direction = 1; - else if (motor_position_counter > goingTo) motor_direction = -1; - else { - motor_direction = 0; - goingTo = int_max; - } - } - digitalWrite(left_Motor_forward_pin, motor_direction > 0 ? HIGH : LOW); digitalWrite(right_Motor_forward_pin, motor_direction > 0 ? HIGH : LOW); digitalWrite(left_Motor_backward_pin, motor_direction < 0 ? HIGH : LOW); digitalWrite(right_Motor_backward_pin, motor_direction < 0 ? HIGH : LOW); - if (millis() - last_read > 0.01) read_encoder(); - - if (motor_direction == 0) { - if (millis() - last_position_saved > 3000) saveMotorPosition(); - - if (millis() - last_Position_Checked > Position_check_interval) { - last_Position_Checked = millis(); - timeClient.update(); - - int hr = timeClient.getHours(); - int mnt = timeClient.getMinutes(); - int sec = timeClient.getSeconds() + 60 * mnt + 3600 * hr; - - for (int i = 0; i < numPositions; i++) { - if (!isnan(positionList[i].time) && positionList[i].time > 0 && (sec - positionList[i].time) > 0 && (sec - positionList[i].time) < Position_check_interval_as_sec) { - go(positionList[i].position); - break; - } - } - } - } - httpServer.handleClient(); } @@ -145,8 +86,8 @@ void connectToWifi() { //If you are using the device with a powerbank, You can uncomment the ones you want to use to reduce power consuption of the project. //The default value is 20dbm and it's power consuption is 100mW. - //when you reduce the output power it's connection range also will reduce. So you need to decide optimum value by trying yourself - + //when you reduce the output power it's connection range also will reduce. So you need to decide optimum value by trying yourself + //WiFi.setOutputPower(20); // Set to 20 dBm (100 mW) (default value) //WiFi.setOutputPower(18); // Set to 18 dBm (63 mW) //WiFi.setOutputPower(12); // Set to 12 dBm (16 mW) @@ -171,102 +112,23 @@ void connectToWifi() { httpServer.on("/deletePosition", deletePosition); httpServer.on("/getPositionList", getPositionList); httpServer.on("/getPosition", getPosition); - httpServer.on("/resetEncoder", resetEncoder); httpServer.begin(); } -void saveMotorPosition() { - File f = SPIFFS.open("/motor_position1.log", "w"); - if (f) { - f.println(motor_position_counter); - f.close(); - } - - last_position_saved = millis(); -} void loadLastValues() { - File f = SPIFFS.open("/motor_position1.log", "r"); - if (f) { - motor_position_counter = f.readStringUntil('\n').toInt(); - f.close(); - } - - f = SPIFFS.open("/reverse.log", "r"); + File f = SPIFFS.open("/reverse.log", "r"); if (f) { isReverse = f.readStringUntil('\n').toInt() == 1; f.close(); } - - File file = SPIFFS.open("/Position.log", "r"); - if (file) { - String line; - while (file.available()) { - line = file.readStringUntil('\n'); - int comma1 = line.indexOf(','); - int comma2 = line.indexOf(',', comma1 + 1); - int comma3 = line.indexOf(',', comma2 + 1); - if (comma1 == -1 || comma2 == -1 || comma3 == -1) continue; - - String id = line.substring(0, comma1); - String name = line.substring(comma1 + 1, comma2); - int position = line.substring(comma2 + 1, comma3).toInt(); - int time = line.substring(comma3 + 1).toInt(); - - Position newPosition; - newPosition.id = id; - newPosition.name = name; - newPosition.position = position; - newPosition.time = time; - - positionList[numPositions] = newPosition; - numPositions++; - } - file.close(); - } } -void go(int p) { - goingTo = p; -} - -void read_encoder() { - current_clk = digitalRead(encoder_clk_pin); - current_data = digitalRead(encoder_data_pin); - - if (previous_clk == 0 && previous_data == 1) { - if (current_clk == 1 && current_data == 0) motor_position_counter++; - else if (current_clk == 1 && current_data == 1) motor_position_counter--; - } else if (previous_clk == 1 && previous_data == 0) { - if (current_clk == 0 && current_data == 1) motor_position_counter++; - else if (current_clk == 0 && current_data == 0) motor_position_counter--; - } else if (previous_clk == 0 && previous_data == 0) { - if (current_clk == 1 && current_data == 1) motor_position_counter--; - else if (current_clk == 1 && current_data == 0) motor_position_counter++; - } else if (previous_clk == 1 && previous_data == 1) { - if (current_clk == 0 && current_data == 0) motor_position_counter--; - else if (current_clk == 0 && current_data == 1) motor_position_counter++; - } - - previous_clk = current_clk; - previous_data = current_data; - - last_read = millis(); -} - - - //--------------------HTTP functions----------------------------------------- -void resetEncoder() { - motor_position_counter = 0; - saveMotorPosition(); - - httpServer.send(200, "text/plain", "Ok."); -} void getInfo() { - httpServer.send(200, "text/plain", String(motor_position_counter) + "," + String(isReverse)); + httpServer.send(200, "text/plain", "0," + String(isReverse)); } void get_device_type() { @@ -274,22 +136,14 @@ void get_device_type() { } void motor_move() { - int m_direction = httpServer.arg("direction").toInt(); - if (goingTo == int_max) { - motor_direction = m_direction; - if (isReverse) motor_direction = motor_direction * -1; - } - - if (m_direction == 0) goingTo = int_max; + motor_direction = httpServer.arg("direction").toInt(); + if (isReverse) motor_direction *= -1; httpServer.send(200, "text/plain", "Moving"); } void go_to() { - int p = httpServer.arg("p").toInt(); - go(p); - - httpServer.send(200, "text/plain", "Going to p" + String(p)); + httpServer.send(200, "text/plain", "Ok."); } void setReverse() { @@ -306,121 +160,17 @@ void setReverse() { } void addPosition() { - if (numPositions >= 10) - httpServer.send(400, "text/plain", "You have reached max number of positions!"); - - File f = SPIFFS.open("/Position.log", "w"); - if (f) { - String id = httpServer.arg("id"); - String name = httpServer.arg("name"); - int position = httpServer.arg("position").toInt(); - int time = httpServer.arg("time").toInt(); - - int index = -1; - for (int i = 0; i < numPositions; i++) { - if (positionList[i].id == id) { - index = i; - break; - } - } - - if (index == -1) { - Position newPosition; - newPosition.id = id; - newPosition.name = name; - newPosition.position = position; - newPosition.time = time; - - positionList[numPositions] = newPosition; - numPositions++; - } else { - positionList[index].id = id; - positionList[index].name = name; - positionList[index].position = position; - positionList[index].time = time; - } - - for (int i = 0; i < numPositions; i++) { - f.print(positionList[i].id); - f.print(","); - f.print(positionList[i].name); - f.print(","); - f.print(positionList[i].position); - f.print(","); - f.println(positionList[i].time); - } - - f.close(); - httpServer.send(200, "text/plain", "Position added."); - } else { - httpServer.send(400, "text/plain", "File system can't be accessed!"); - } + httpServer.send(200, "text/plain", "Ok."); } void deletePosition() { - String id = httpServer.arg("id"); - - int index = -1; - for (int i = 0; i < numPositions; i++) { - if (positionList[i].id == id) { - index = i; - break; - } - } - - if (index == -1) { - httpServer.send(400, "text/plain", "Position not found"); - } else { - - File f = SPIFFS.open("/Position.log", "w"); - if (f) { - numPositions--; - for (int i = index; i < numPositions; i++) { - positionList[i] = positionList[i + 1]; - } - - for (int i = 0; i < numPositions; i++) { - f.print(positionList[i].id); - f.print(","); - f.print(positionList[i].name); - f.print(","); - f.print(positionList[i].position); - f.print(","); - f.println(positionList[i].time); - } - - f.close(); - - httpServer.send(200, "text/plain", "Position removed successfully"); - } else { - httpServer.send(400, "text/plain", "File system can't be accessed!"); - } - } + httpServer.send(200, "text/plain", "Ok."); } void getPositionList() { - String result = ""; - for (int i = 0; i < numPositions; i++) { - result += positionList[i].id + "#*#" + positionList[i].name + "#*#" + positionList[i].position + "#*#" + positionList[i].time + "*p*"; - } - - httpServer.send(200, "text/plain", result); + httpServer.send(200, "text/plain", ""); } void getPosition() { - String id = httpServer.arg("id"); - - int index = -1; - for (int i = 0; i < numPositions; i++) { - if (positionList[i].id == id) { - index = i; - break; - } - } - - if (index == -1) { - httpServer.send(400, "text/plain", "Position not found"); - } else { - httpServer.send(200, "text/plain", positionList[index].id + "#*#" + positionList[index].name + "#*#" + positionList[index].position + "#*#" + positionList[index].time); - } + httpServer.send(400, "text/plain", "Position not found"); }