طريقة أتمتة الستارة بأسعار معقولة



لا توجد طريقة لمواكبة تطوير أنظمة التشغيل الآلي للمنزل الحديثة من العلامات التجارية البارزة ، ولكن السعر ووظيفة معينة تجعلك تطبق مهاراتك على الأجهزة المنزلية محلية الصنع. لم أكن استثناءًا ، حيث أصبحت التقنية والعمل مع البرامج أكثر سهولة الآن ، ويوفر ESC و Arduino و STM والعديد من المجموعات الأخرى التي لا تنتهي من المنصات المقترحة فرصًا لحل أي مشكلة تقنية تقريبًا. منذ وقت ليس ببعيد ، انتقلت إلى شقة جديدة في ضواحي المدينة ، وقاعة تطل على مساحة شاغرة وموقع بناء مهجور يسير فيه الدراجون في الشتاء ، ويتغير كل شيء بسرعة ويتم بناؤه ، وقد نما منزل خارج النافذة ، ونافذة عبر النافذة.



حفز عدم الرغبة في أن يصبح موضوع اهتمام شخص آخر على قطع الستائر الأوتوماتيكية. لذا ، ما أردت من الستائر ، الأول ، رفع وخفض حسب الوقت المحدد ، التحكم ، بما في ذلك عبر الإنترنت ، على الرغم من أن الأخير كان ضروريًا لتنفيذ التحكم الصوتي. ونتيجة لذلك ، هناك الكثير من الأشياء المثيرة للاهتمام على الإنترنت ، ولكن بما أنني ضعيفة في البرمجة ، لم أتمكن من فهم العديد من الحلول ، ولم تلبي جميع المتطلبات. جاء قرار القيام بذلك بمفردي تدريجياً ، وهنا قمت بالتدريج على جميع المكابس ولكن ما زلت أتوصل إلى النتائج. تم شراء الستائر الدوارة ، وتم تفكيك كاميرا CCTV الدوارة القديمة المأخوذة من الكائن ، واستخرجت منها محركي سائر صينيين من Nooname لم أتمكن من العثور على خصائصهما على الإنترنت.



بعد التعامل مع المحركات ، استخدمت nodemcu للتحكم فيها ، والذي يرسل إشارات للتحكم في وحدة الطاقة إلى السائق ln298n ، ويعمل رسم بسيط على منصة Blynk ، ويتم حساب الوضع الأولي للستارة من الإشارة من مفتاح القصب ، ويتم اتخاذ عدد معين من الخطوات إلى الموضع السفلي. يختلف وقت الرفع والخفض في بضع ثوانٍ وهو دقيقة ونصف ، ببطء إلى حد ما ، ولكن بدون صوت! تحتوي اللوحة على وحدة wifi مدمجة ، وسمحت منصة الوميض بالتزامن مع الوقت ، اعتمادًا على المنطقة الزمنية ، ونتيجة لذلك ، جعلت أداة واحدة من الممكن تبسيط الدائرة قدر الإمكان. يتم تنفيذ التحكم الصوتي على مساعد Dusya ، بينما أستخدم الهاتف كمنصة ، هناك تنبيهات كاذبة دورية ، ليست حرجة ، في المستقبل سيكون من الممكن استبدال النظام الأساسي (إذا اكتشفته) واستبدال الميكروفون ، هناك أفكار.





لقد مرت شهرين من العملية ، كل شيء يعمل ، لا يتخطى الخطوات ، لم أعد أهتم بالستائر ، التي لا يمكنك أن تقولها عن قطتي ، فهي تسبب له اهتمامًا مستقرًا. ما هي العيوب ، الستائر لا تعمل في غياب الإنترنت (الدفع مقابل التنفيذ الميسور) ، لا توجد ردود فعل ، حتى أدركت ذلك ، ليس من الواضح ما هو وضع الستائر المفتوحة أو المغلقة. على الرغم من أنه ليس قاتلاً إذا كانت الستائر مفتوحة أو مغلقة وإعادة تقديم الأمر لن يحدث شيء. على أي حال ، فإن التنفيذ مبرر على أساس سعر السوق السائد. حسنا ، كما يقولون ، كل شيء جيد!



أدناه هو رمز esp:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h> //OTA   OTA-

#include <AccelStepper.h>
#define motor1 D1
#define motor2 D2
#define motor3 D3
#define motor4 D4
AccelStepper Stepper1(4, D1, D2, D3, D4); 

static int buttonPin = D5;  //     
//unsigned long runTime1; //     Arduino, 
unsigned long runTime2;
int current = 20800;// -    
static bool newZeroPoint = true; //  ,      ,    .

char auth[] = "";
char ssid[] = "";
char pass[] = "";
   

void setup() {
 Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  
  pinMode(buttonPin, INPUT);
  pinMode(motor1, OUTPUT);
  pinMode(motor2, OUTPUT);
  pinMode(motor3, OUTPUT);
  pinMode(motor4, OUTPUT);
  

  ArduinoOTA.setHostname("ESP8266-00002"); //OTA    
  //ArduinoOTA.setPassword((const char *)"0000"); //OTA      
  ArduinoOTA.begin(); //OTA  OTA
        
 Stepper1.setMaxSpeed(200);     //      (/)
Stepper1.setAcceleration(180); //  (/^2)
  
}
void ZeroPoint(){
  if (newZeroPoint)
  //   .
        if (digitalRead(buttonPin)) 
      {
          //   ,       .
          Stepper1.setCurrentPosition(0);
          newZeroPoint = false;
          //Serial.println("true");
      } else
      {
        //     ,       .
        if (Stepper1.distanceToGo() == 0) {Stepper1.moveTo(Stepper1.currentPosition() + 1000);}
        Stepper1.run();
        //Serial.println("false");
      }
  }
 BLYNK_WRITE(V0)
{
  int button = param.asInt(); // read button  
  if (button == 1){ Stepper1.move(-Stepper1.currentPosition());}  
}   
      
BLYNK_WRITE(V1)
{
  int button = param.asInt(); // read button  
  if (button == 1){
    
 Stepper1.moveTo(-current);
 Stepper1.run();
 } 
}
BLYNK_WRITE(V2)
{
  int button = param.asInt(); // read button  
  if (button == 1){
  Stepper1.stop();}
 } 
     
 void Out()//             
 {
  if (Stepper1.run())
  runTime2 = millis(); 
  if (millis() - runTime2 > 5000) 
  {runTime2 = millis();
  digitalWrite (5, LOW);
  digitalWrite (4, LOW);
  digitalWrite (0, LOW);
  digitalWrite (2, LOW);
    }
}
 void loop()
{
  Blynk.run();
 Stepper1.run();
    ZeroPoint(); 
    Out();
    ArduinoOTA.handle();       
   
}

All Articles