За развитием современных систем домашней автоматизации от именитых брендов не угнаться, но цена и определенный функционал заставляет применять свои навыки на практике домашних самоделкиных. Я не стал исключением, техника и работа с программным обеспечением в настоящее время стала доступнее, есп, ардуино, стм и прочее бесконечное множество предлагаемых платформ дает возможности для решения практически любых технических задач. Не так давно переехал в новую квартиру на окраине города, зал с видом на пустырь и заброшенную стройку, на которой зимой гуляли фазаны, все быстро меняется и строится, за окном вырос дом, окно в окно.
Отсутствие желания стать предметом чужого внимания сподвигло запилить автоматические шторы. Итак, что я хотел от штор, первое, подъем и опускание по выставленному времени, управление в том числе через интернет, хотя последние нужно было для реализации голосового управления. Что в итоге, в интернете много интересного, но так как я слаб в программировании, понять многие решения не смог, да и не все соответствовало требованиям. Решение делать самостоятельно пришло постепенно, здесь я постепенно наступил на все грабли но все же пришел к результатам. Были куплены рулонные шторы, разобрана старая поворотная камера видеонаблюдения снятая с объекта, из нее я добыл два ноунейма-китайские шаговые двигатели чьи характеристики не смог найти в интернете.
Разобравшись с движками, для их управления использовал 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();
}
empenoso
А почему когда интернета нет штора не работает?
andrushai Автор
Потому что для управления используется сервис который работает через интернет, виртуальные кнопки управления, голосовой сервис, виджет который срабатывает по времени, как я писал, это плата за доступную реализацию. Однако при желании можно сделать проект автономным, без потери функцианальности, провда это его усложнит
PendalFF
Локально поставить блинксервер это задачка на полчаса и одну малинку. Усложнит очень так себе) в качестве псевдообратной связи предложу считать шаги от 0 на герконе. Как минимум до перезапуска в не нулевом положении будет показывать корректно
andrushai Автор
Спасибо за информацию
azatfr
Зачем вообще кнопки? Умные шторы должны открываться и закрываться автоматически согласно показаниям датчиков освещенности, положения солнца, местонахождения владельца, погодных условий и времени суток.
DGN
Еще нейросеть должна натренироваться, в каком состоянии вы закрываете шторы, а в каком не закрываете.
Phil_itch
это 5 =)
andrushai Автор
Из автоматики пока только открытие и закрытие по времени