
Интернет-магазин «Неглупый Дом»
28BYJ-48 с ULN2003 через тонкий шнур или карниз-рейку сматывает или разматывает штору на фиксированное число шагов по нажатию одной из двух кнопок.
Шаговый двигатель 28BYJ-48, в отличие от обычного DC-моторчика, вращается не произвольно, а строго определёнными дискретными шагами — зная количество шагов на один полный оборот (2048 в полушаговом режиме через библиотеку Stepper), можно точно рассчитать, на сколько шагов нужно повернуть вал, чтобы смотать или размотать штору на известную длину шнура.
Драйвер ULN2003 нужен потому, что сам Arduino не может напрямую подать достаточный ток на обмотки шагового двигателя — драйвер содержит транзисторные ключи, которые Arduino включает и выключает в определённой последовательности через 4 управляющих пина (IN1-IN4), а драйвер коммутирует реальный ток на обмотки двигателя.
Логика в этом проекте предельно простая: двигатель не знает текущее положение шторы в абсолютных величинах, он просто крутится заданное число шагов в одну сторону по нажатию кнопки «открыть» и столько же шагов в обратную сторону по кнопке «закрыть» — если штора изначально была в полностью закрытом положении, этого достаточно, чтобы она доходила ровно до полностью открытого и обратно.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <Stepper.h>
const int stepsPerRevolution = 2048; // стандартное значение для 28BYJ-48 в полушаговом режиме
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); // порядок IN1/IN3/IN2/IN4 важен для направления
const int openPin = 2;
const int closePin = 3;
const int travelSteps = 2048 * 3; // подберите под длину карниза и диаметр вала намотки
void setup() {
Serial.begin(9600);
pinMode(openPin, INPUT);
pinMode(closePin, INPUT);
myStepper.setSpeed(12); // оборотов в минуту — медленнее для штор, чтобы не дёргались резко
}
void loop() {
if (digitalRead(openPin) == HIGH) {
Serial.println("Открываю штору");
myStepper.step(travelSteps);
}
if (digitalRead(closePin) == HIGH) {
Serial.println("Закрываю штору");
myStepper.step(-travelSteps);
}
}
`travelSteps` подбирается опытным путём под длину карниза и диаметр вала намотки — начните с малого значения и увеличивайте, замеряя фактический ход шторы.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 272 ₽ 245 ₽ (экономия 27 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.