El método de automatización de cortinas más asequible.



No hay forma de mantenerse al día con el desarrollo de sistemas modernos de automatización del hogar de marcas eminentes, pero el precio y una cierta funcionalidad hacen que aplique sus habilidades a los electrodomésticos hechos en casa. No fui la excepción, la técnica y el trabajo con el software ahora son más accesibles, ESC, Arduino, STM y otras infinitas plataformas propuestas brindan oportunidades para resolver casi cualquier problema técnico. No hace mucho tiempo, me mudé a un nuevo apartamento en las afueras de la ciudad, un pasillo con vista a un lote baldío y un sitio de construcción abandonado en el que caminaban los faisanes en invierno, todo cambia rápidamente y se está construyendo, una casa ha crecido fuera de la ventana, una ventana a través de la ventana.



La falta de deseo de convertirse en el tema de la atención de otra persona estimuló a cortar cortinas automáticas. Entonces, lo que quería de las cortinas, el primero, subir y bajar de acuerdo con el tiempo establecido, el control, incluso a través de Internet, aunque este último era necesario para la implementación del control de voz. Como resultado, hay muchas cosas interesantes en Internet, pero como soy débil en la programación, no pude entender muchas soluciones y no todas cumplieron con los requisitos. La decisión de hacerlo por mi cuenta llegó gradualmente, aquí gradualmente pisé todos los rastrillos pero aún así llegué a los resultados. Se compraron persianas enrollables, se desmanteló la vieja cámara rotativa de CCTV tomada del objeto, de ella extraje dos motores paso a paso chinos Nooname cuyas características no pude encontrar en Internet.



Después de tratar con los motores, utilicé nodemcu para controlarlos, que envía señales para controlar la unidad de potencia al conductor ln298n, un boceto simple funciona en la plataforma Blynk, la posición inicial de la cortina se cuenta a partir de la señal del interruptor de láminas, un cierto número de pasos se llevan a la posición inferior. El tiempo de subida y bajada difiere en un par de segundos y es de un minuto y medio, ¡bastante lento, pero sin sonido! La placa tiene un módulo wifi incorporado, y la plataforma de parpadeo permitió la sincronización con el tiempo, dependiendo de la zona horaria, como resultado, un widget hizo posible simplificar el circuito lo más posible. El control de voz se realiza en el asistente de Dusya, mientras uso el teléfono como plataforma, hay falsas alarmas periódicas, no críticas, en el futuro será posible reemplazar la plataforma (si lo descubro) y reemplazar el micrófono, hay ideas.





Han pasado un par de meses de operación, todo funciona, no se saltan los pasos, ya no presto atención a las cortinas, eso no se puede decir sobre mi gato, le causan un interés estable. Cuáles son las desventajas, las cortinas no funcionan en ausencia de Internet (pago para una implementación asequible), no hay comentarios, hasta que me di cuenta, no está claro en qué posición están abiertas o cerradas las cortinas. Aunque no es fatal si las cortinas están abiertas o cerradas y se vuelve a ordenar nada sucederá. En cualquier caso, la implementación se justifica en función del precio de mercado vigente. Bueno, como dicen, todo bien!



A continuación se muestra el código para 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