Die kostengünstigste Methode zur Automatisierung von Vorhängen



Es gibt keine Möglichkeit, mit der Entwicklung moderner Hausautomationssysteme namhafter Marken Schritt zu halten, aber der Preis und eine bestimmte Funktionalität lassen Sie Ihre Fähigkeiten auf hausgemachte Haushaltsgeräte anwenden. Ich war keine Ausnahme, die Technik und die Arbeit mit Software sind jetzt zugänglicher, ESC, Arduino, STM und andere endlose Vielzahl der vorgeschlagenen Plattformen bieten Möglichkeiten zur Lösung fast aller technischen Probleme. Vor nicht allzu langer Zeit bin ich in eine neue Wohnung am Rande der Stadt gezogen, eine Halle mit Blick auf ein leeres Grundstück und eine verlassene Baustelle, auf der Fasane im Winter spazieren gingen, alles ändert sich schnell und wird gebaut, ein Haus ist vor dem Fenster gewachsen, ein Fenster durch das Fenster.



Das Fehlen des Wunsches, Gegenstand der Aufmerksamkeit eines anderen zu werden, spornte an, automatische Vorhänge zu schneiden. Also, was ich von den Vorhängen wollte, das erste, das Heben und Senken entsprechend der eingestellten Zeit, die Steuerung, auch über das Internet, obwohl das letztere für die Implementierung der Sprachsteuerung notwendig war. Infolgedessen gibt es im Internet viele interessante Dinge, aber da ich schwach in der Programmierung bin, konnte ich nicht viele Lösungen verstehen und nicht alle erfüllten die Anforderungen. Die Entscheidung, es alleine zu machen, kam nach und nach, hier trat ich nach und nach auf alle Rechen, kam aber trotzdem zu den Ergebnissen. Rollläden wurden gekauft, eine alte CCTV-Drehkamera aus dem Objekt zerlegt, daraus zwei noone-chinesische Schrittmotoren extrahiert, deren Eigenschaften ich im Internet nicht finden konnte.



Nachdem ich mich mit den Motoren befasst hatte, steuerte ich sie mit nodemcu, der Signale zur Steuerung des Aggregats an den ln298n-Treiber sendet. Eine einfache Skizze funktioniert auf der Blynk-Plattform. Die Anfangsposition des Vorhangs wird anhand des Signals vom Reed-Schalter gezählt. Eine bestimmte Anzahl von Schritten wird in die untere Position ausgeführt. Die Zeit zum Anheben und Absenken variiert in wenigen Sekunden und beträgt eineinhalb Minuten, ziemlich langsam, aber ohne Ton! Die Karte verfügt über ein eingebautes WLAN-Modul, und die Blinkplattform ermöglichte je nach Zeitzone eine zeitliche Synchronisation. Ein Widget ermöglichte es daher, die Schaltung so weit wie möglich zu vereinfachen. Die Sprachsteuerung erfolgt über Dusyas Assistenten. Während ich das Telefon als Plattform verwende, gibt es regelmäßig Fehlalarme, die nicht kritisch sind. In Zukunft wird es möglich sein, die Plattform zu ersetzen (wenn ich es herausfinde) und das Mikrofon auszutauschen. Es gibt Ideen.





Ein paar Monate Betrieb sind vergangen, alles funktioniert, keine Schritte überspringen, ich achte nicht mehr auf die Vorhänge, die man nicht über meine Katze sagen kann, sie verursachen ihm stabiles Interesse. Was sind die Nachteile, Vorhänge funktionieren nicht ohne Internet (Bezahlung für erschwingliche Implementierung), es gibt keine Rückmeldung, bis ich es merkte, ist nicht klar, in welcher Position die Vorhänge geöffnet oder geschlossen sind. Obwohl es nicht tödlich ist, wenn die Vorhänge geöffnet oder geschlossen sind und erneut befohlen werden, passiert nichts. In jedem Fall ist die Umsetzung auf der Grundlage des geltenden Marktpreises gerechtfertigt. Nun, wie sie sagen, alles gut!



Unten ist der Code für 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