Мой первый проект. Автоматическое открывание-закрывание вертикальных штор.
- Войдите на сайт для отправки комментариев
Приветствую всех ардуинщиков!
Этой мой первый пробный проект, поэтому прошу не "пинать ногам".
Суть проекта заключается в автоматическом открывании-закрывании вертикальных штор в зависимости от освещения.
В проекте были задействованы:
- 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")). Удобно переводить прототип в физическую модель, создавать модели печатных плат и.т.д. Удобней чем рисовать на бумаге. Порадовало наличие многих микросхем, которых в аналогах или симуляторах к сожалению нет.
Вы не правильно описания в автомате. Кроме Закрыто, Полуоткрыто и Открыто должно быть еще четыре дополнительных состояния Открывать до полуоткрытия, Открывать до открытия, Закрывать до полуоткрытия, Закрывать до закрытия.