Хабрахабр

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


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

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

Разобравшись с движками, для их управления использовал 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 D4AccelStepper 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(); }
Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»