Как стать автором
Поиск
Написать публикацию
Обновить

Самый доступный метод автоматизации штор

Время на прочтение4 мин
Количество просмотров39K


За развитием современных систем домашней автоматизации от именитых брендов не угнаться, но цена и определенный функционал заставляет применять свои навыки на практике домашних самоделкиных. Я не стал исключением, техника и работа с программным обеспечением в настоящее время стала доступнее, есп, ардуино, стм и прочее бесконечное множество предлагаемых платформ дает возможности для решения практически любых технических задач. Не так давно переехал в новую квартиру на окраине города, зал с видом на пустырь и заброшенную стройку, на которой зимой гуляли фазаны, все быстро меняется и строится, за окном вырос дом, окно в окно.



Отсутствие желания стать предметом чужого внимания сподвигло запилить автоматические шторы. Итак, что я хотел от штор, первое, подъем и опускание по выставленному времени, управление в том числе через интернет, хотя последние нужно было для реализации голосового управления. Что в итоге, в интернете много интересного, но так как я слаб в программировании, понять многие решения не смог, да и не все соответствовало требованиям. Решение делать самостоятельно пришло постепенно, здесь я постепенно наступил на все грабли но все же пришел к результатам. Были куплены рулонные шторы, разобрана старая поворотная камера видеонаблюдения снятая с объекта, из нее я добыл два ноунейма-китайские шаговые двигатели чьи характеристики не смог найти в интернете.



Разобравшись с движками, для их управления использовал nodemcu, которая посылает сигналы для управления силовой части на драйвер ln298n, простенький скетч работает на платформе Blynk, начальное положение шторы отсчитывается от сигнала с геркона, до нижнего положения проходит определенное количество шагов. Время подъема и опускания отличается в пару секунд и составляет полторы минуты, достаточно медленно, зато без звука! Плата имеет встроенный wifi модуль, а платформа блинк позволила синхронизироваться со временем в зависимости от часового пояса, как результат один виджет позволил максимум упростить схему. Голосовое управление выполнено на ассистенте Дуся, в качестве платформы пока использую телефон, есть периодические ложные сработки, не критично, в будущем возможно заменю платформу (если разберусь с расбери) и заменю микрофон, есть задумки.





Прошло пару месяцев эксплуатации, все работает, шаги не пропускает, на шторы уже не обращаю внимание, что не скажешь о моем коте, у него они вызывают стабильный интерес. Какие минусы, шторы не работают в отсутствии интернета (плата за доступную реализацию) нет обратной связи, пока не реализовал, не понятно в каком положении шторы, открыты или закрыты. Хотя это не смертельно если шторы открыты или закрыты и подать повторно команду ничего не произойдет. В любом случае реализация оправдана исходя из сложившейся цены на рынке. Ну что, как говорится, всем добра!



Ниже приведен код для есп:

#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();       
   
}
Теги:
Хабы:
Всего голосов 20: ↑18 и ↓2+25
Комментарии31

Публикации

Ближайшие события