НОВОСТИ Самый доступный метод автоматизации штор

BDFpromo
Оффлайн

BDFpromo

.
.
Регистрация
23.09.18
Сообщения
12.347
Реакции
176
Репутация
0
p6ipwzm2sefywfiutbglbhcxm5k.jpeg

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

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

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

ikcdokcux-_kcqnqufapdwiwbfo.jpeg

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


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

#define BLYNK_PRINT Serial
#include
#include

#include
#include
#include //OTA Библиотека для OTA-прошивки

#include
#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();

}
 
Сверху Снизу