Мой первый проект. Автоматическое открывание-закрывание вертикальных штор.
- Войдите на сайт для отправки комментариев
Приветствую всех ардуинщиков!
Этой мой первый пробный проект, поэтому прошу не "пинать ногам".
Суть проекта заключается в автоматическом открывании-закрывании вертикальных штор в зависимости от освещения.
В проекте были задействованы:
- Arduino Uno
- два шаговых мотора 28BYJ-48
- два драйвера ULN2003
- датчик освещения
- резистор на 10kOm
Ниже схема и скетч.

#include <Stepper.h>
int SPMU = 32;
Stepper myStepper1(SPMU, 6,8,7,9);
Stepper myStepper2(SPMU, 10,12,11,13);
const int sensorInput = A0;
enum states { LIGHT, DARK, SUN };
int oldState;
void setup()
{
Serial.begin(9600);
myStepper1.setSpeed(500);
myStepper2.setSpeed(500);
int sensor = sensorInput;
if (sensor < 200) //DARK//Темно
{
oldState = DARK;
}
else if (sensor > 750) // SUN//СОЛНЦЕ
{
oldState = SUN;
}
else //LIGHT//СВЕТЛО
{
oldState = LIGHT;
}
}
void loop()
{
int sensor = analogRead(sensorInput);
static unsigned long previousMillis;
if(millis() - previousMillis > 1000)
{
previousMillis = millis();
Serial.print("Sensorwert = ");
Serial.println(sensor);
}
int currentState = getCurrentState();
if (oldState == LIGHT && currentState == DARK)
{
oldState = DARK;
myStepper1.step(-1228);
myStepper2.step(-1228);
}
else if (oldState == LIGHT && currentState == SUN)
{
oldState = SUN;
myStepper1.step(819);
myStepper2.step(819);
}
else if (oldState == DARK && currentState == SUN)
{
oldState = SUN;
myStepper1.step(2048);
myStepper2.step(2048);
}
else if (oldState == DARK && currentState == LIGHT)
{
oldState = LIGHT;
myStepper1.step(1228);
myStepper2.step(1228);
}
else if (oldState == SUN && currentState == LIGHT)
{
oldState = LIGHT;
myStepper1.step(-819);
myStepper2.step(-819);
}
else if (oldState == SUN && currentState == DARK)
{
oldState = DARK;
myStepper1.step(-1228);
myStepper2.step(-1228);
}
}
int getCurrentState()
{
int sensor = analogRead(sensorInput);
if (sensor < 200) //нижний порог
return DARK;
else if (300 < sensor && sensor < 750) //средний порог
return LIGHT;
else if (sensor > 850) // верхний порог
return SUN;
else
return oldState;
}
Схема работает, но возникло несколько вопросов:
1. Большой расход энергии (2,2Вт =>5,14В х 0,42А) в "режиме ожидания". Это нормально? Или есть возможность снизить расход до "0"?
2. Оба мотора крутятся в нужном направлении, но друг за другом. Первый стартует, делает YYYY шагов, останавливается, потом второй стартует, делает YYYY шагов, останавливается. Есть возможность крутить их оба одновременно.
3. Можно как-то оптимизировать процесс, заменив библиотеку <Stepper.h> на <AccelStepper.h>?
Буду благодарен за ответы, советы и критику.
1) Нормально, если цель в удержании вала.
2)
3) Как-то можно. Когда цель будет обозначена.
Мой первый проект на ардуино был (не смотря на почти 20 лет говнокода на php) - это помигать НЕ встроенным светодиодов (на 13 лапе) ардуино нано. Как-то с места и в карьер получается. Что-то я в этой жизни пропустил...
Ниже схема и скетч.
Это не схема, это рисунок. Детский рисунок.
Приди с подобным рисунком к врачу (хирургу, например), узнаешь много интересного о себе и жизни в целом.
Спасибо.
1. Цели в удержании нет. Просто открыть-закрыть.
2. Забыл знак вопроса поставить в конце)))
3. Вник немного в суть вопроса по библиотеке <AccelStepper.h> В принципе нет надобности на одном обороте +-360°
1) Следует снять напряжение со входов драйвера, что приведёт к обесточиванию обмоток;
2) С библиотекой Stepper напрямую не выйдет. Или "вручную" крутить или альтернативной библиотекой. Аксельстеппером, например. В нем и пример есть для двух моторов.
Мой первый проект на ардуино был (не смотря на почти 20 лет говнокода на php) - это помигать НЕ встроенным светодиодов (на 13 лапе) ардуино нано. Как-то с места и в карьер получается. Что-то я в этой жизни пропустил...
Я лет 5 назад светодиодами мигал, потом забросил это занятие. Теперь вот появилось немного свободного времени - решил немного мозги занять.
По схеме подключения: "рисовал" во "Fritzing")). Удобно переводить прототип в физическую модель, создавать модели печатных плат и.т.д. Удобней чем рисовать на бумаге. Порадовало наличие многих микросхем, которых в аналогах или симуляторах к сожалению нет.
Вы не правильно описания в автомате. Кроме Закрыто, Полуоткрыто и Открыто должно быть еще четыре дополнительных состояния Открывать до полуоткрытия, Открывать до открытия, Закрывать до полуоткрытия, Закрывать до закрытия.