Рулонные шторы на электроприводе (двигатель 28BYJ-48)

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 13 мая 2019, 20:15

Приобрел в магазине рулонную штору Inspire Blackout 140х175. И решил доработать её, а именно установить электромотор для подъема / опускания шторы. В общем то таких переделок в интернете не мало, но эту статью я пишу в основном для себя - дабы не забыть что как делал. :grin: По мере продвижения работ будет добавляться описание проведённых переделок.
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#2 Дим » 16 мая 2019, 20:24

Сделал пробный пуск - не удача. Оказалось что моторчик слабоват для мои штор. Видимо сказался большой вес, шторы плотные (Blackout) да и широкие. Так что пока заканчиваю данную разработку и оставлю тут код, который наваял. Может потом займусь переделкой вертикальных жалюзи или ещё для чего нибудь. Код - при нажатии кнопки двигатель включается. Мотор 28BYJ-48 и драйвер ULN2003

Код: Выделить всё

#include <AccelStepper.h>
#define HALFSTEP 8
// Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4 
// для использования AccelStepper с 28BYJ-48
AccelStepper stepper1(HALFSTEP, 8, 10, 9, 11);

#define PIN_BUTTON1 6   // пин кнопки 1
bool     button_state1      = false; // статус кнопки 1
uint32_t ms_button         = 0;
uint32_t ms_auto_click     = 0;
uint8_t mig = 0;

void setup() {
     Serial.begin(9600);
   Serial.println("Test button ...");
   pinMode(PIN_BUTTON1, INPUT_PULLUP);
   
  stepper1
.setMaxSpeed(900);
  stepper1.setSpeed(900);
}

void loop() {  
    Func_buttons_control
();
 //  stepper1.runSpeed();
} 

void Func_buttons_control
()
{
  uint32_t ms    = millis();
  bool pin_state1 = digitalRead(PIN_BUTTON1); // 1 кнопка
  
// Фиксируем нажатие кнопки   1
  if(mig == 0 &&  pin_state1  == LOW && !button_state1 && ( ms - ms_button ) > 50 ){
    button_state1      = true;
    ms_button         = ms;
    Serial.println("Press key"); //короткое нажатие
    mig = 1;
   }
// После 2000 мс нажатия кнопки каждые 500 мс фиксируем событие нажатия  кнопки 1
   if( pin_state1  == LOW && ( ms - ms_button ) > 2000 && ( ms - ms_auto_click )>500 ){
      ms_auto_click     = ms;
      Serial.println("Auto press key");   //длительное нажатие
      mig = 2;
   }
// Фиксируем отпускание кнопки   1
   if(mig == 2 &&   pin_state1 == HIGH && button_state1 && ( ms - ms_button ) > 50  ){
      button_state1      = false;   
      ms_button         
= ms;
      Serial.println("No Press"); //действие после отпуска длительного нажатия
      mig = 0;
      stepper1.stop();
   }
   if(mig == 1 ){stepper1.runSpeed();}
}
 
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Прочая электроника»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя