Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* АВТОМАТИЧЕСКОЕ УПРАВЛЕНИЕ ЭЛЕКТРОПРИВОДОМ РУЛОННОЙ ШТОРЫ (версия 1.0)
- ИСТОРИЯ ОБНОВЛЕНИЙ:
- 18 ИЮНЯ 2016 - УВЕЛИЧЕНА СКОРОСТЬ ДВИГАТЕЛЯ
- АВГУСТ 2016 - ДОБАВЛЕНА ЗАДЕРЖКА ПО ВРЕМЕНИ
- ПРИНЦИП РАБОТЫ:
- ЕСЛИ НА УЛИЦЕ СВЕТЛО, ТО ДВИГАТЕЛЬ ПОВОРАЧИВАЕТСЯ В ОПРЕДЕЛЁННУЮ СТОРОНУ НА 130000 ШАГОВ (70000 ШАГОВ ДЛЯ МАЛОГО ОКНА).
- ЕСЛИ НА УЛИЦЕ ТЕМНО, ТО ДВИГАТЕЛЬ ПОВОРАЧИВАЕТСЯ В ПРОТИВОПОЛОЖНУЮ СТОРОНУ НА 130000 ШАГОВ (70000 ШАГОВ ДЛЯ МАЛОГО ОКНА).
- ИМЕННО СТОЛЬКО ШАГОВ НЕОБХОДИМО В МОЁМ СЛУЧАЕ, ЧТОБЫ ПОДНЯТЬ ИЛИ ОПУСТИТЬ ШТОРУ.
- НЕДОСТАТКИ И НЕРЕАЛИЗОВАННЫЕ ФУНКЦИИ:
- 1) НЕТ РУЧНОГО РЕЖИМА. НЕОБХОДИМО ДОБАВИТЬ 3 КНОПКИ. (оператор switch?)
- ПЕРВАЯ БУДЕТ ПЕРЕКЛЮЧАТЬ РЕЖИМ (АВТОМАТИЧЕСКИЙ ИЛИ РУЧНОЙ).
- ВТОРАЯ БУДЕТ ПОДНИМАТЬ ШТОРУ НА ЗАДАННОЕ КОЛИЧЕСТВО ШАГОВ.
- ТРЕТЬЯ БУДЕТ ОПУСКАТЬ ШТОРУ НА ЗАДАННОЕ КОЛИЧЕСТВО ШАГОВ.
- ПРОГРАММА ДОЛЖНА ЗАПОМИНАТЬ, В КАКОМ СОСТОЯНИИ НАХОДИТСЯ ШТОРА.
- НАПРИМЕР, ЕСЛИ ШТОРА ОПУЩЕНА, ТО В РУЧНОМ РЕЖИМАЕ КНОПКА "ВНИЗ" СРАБАТЫВАТЬ НЕ ДОЛЖНА.
- МОЖНО РЕАЛИЗОВАТЬ ОТКРЫТИЕ/ЗАКРЫТИЕ ПО ХЛОПКУ ИЛИ С ПУЛЬТА ДУ.
- А В АВТОМАТИЧЕСКОМ РЕЖИМЕ ДВИГАТЕЛЬ НЕ БУДЕТ ОПУСКАТЬ ШТОРУ НЕЗАВИСИМО ОТ ПОКАЗАНИЙ ДАТЧИКА.
- 2) НЕ УЧИТЫВАЕТСЯ ПОЛОЖЕНИЕ ШТОРЫ ПРИ ОТКЛЮЧЕНИИ ПИТАНИЯ (ПРИ УСЛОВИИ РАБОТЫ ОТ СЕТИ 220В).
- РЕШАЕТСЯ ПОДКЛЮЧЕНИЕМ БЛОКА БАТАРЕЙ.
- 3) НЕ УЧИТЫВАЕТСЯ ПОЛОЖЕНИЕ ШТОРЫ ПРИ ПОДКЛЮЧЕНИИ ПИТАНИЯ.
- ЕСЛИ ТЕМНО - ШТОРА БУДЕТ ОПУСКАТЬСЯ, ДАЖЕ ЕСЛИ УЖЕ ОПУЩЕНА. (до подключения нужно поднять!)
- ЕСЛИ СВЕТЛО - ШТОРА БУДЕТ ПОДНИМАТЬСЯ. (до подключения нужно опустить!)
- 4) НЕ РЕАЛИЗОВАНА ФУНКЦИЯ: ЕСЛИ ЯРКО (ТЕМНО) В ТЕЧЕНИИ 10 МИНУТ, ТО ПОДНЯТЬ (ОПУСТИТЬ) ШТОРУ.
- 5) АКТИВАЦИЯ АВТОМАТИЧЕСКОГО РЕЖИМА ПРИ ПОМОЩИ КНОПОК.
- ЕСЛИ ПИТАНИЕ ОТКЛЮЧИТСЯ, ТО СИСТЕМА РАБОТАТЬ НЕ БУДЕТ, ПОКА НЕ НАЖАТА КНОПКА
- 6) ...
- АВТОР: АЛЕКСАНДР ДИКОВИННЫЙ
- ///////////////////////////////////////////////////////////////////////////////
- https://goo.gl/GLJ2hf - АЛЕКСАНДР ДИКОВИННЫЙ (Alexander Dikovinniy) |
- https://goo.gl/Tp0aX9 - DIAL |
- https://goo.gl/LWSVj3 - LIVE LAUGH (Живой Смех) | - YOUTUBE
- https://goo.gl/IlJ8ZE - DIKOVINNIY WORLD (Диковинный Мир) |
- https://goo.gl/2mqicP - ЖИВОТНЫЕ И ПРИКОЛЫ (Animals and Fun) |
- http://goo.gl/AXZDev - FACEBOOK
- http://goo.gl/6781j9 - BK
- http://goo.gl/yl0igF - INSTAGRAM
- Dikovinniy@gmail.com - E-Mail
- ////////////////////////////////////////////////////////////////////////////////
- */
- #define DISTANCE 70000 // 1 оборот = 1600 шагов, 130000 шагов = 136 см (расстояние, которое проходит штора)
- long StepCounter = 0; // СЧЁТЧИК ШАГОВ
- int Stepping = false; // ДВИГАТЕЛЬ ОСТАНОВЛЕН
- int ldr = 0; // ФОТОРЕЗИСТОР ПОДКЛЮЧЁН К ВЫХОДУ A0
- void setup() {
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- digitalWrite(8, LOW);
- digitalWrite(9, LOW);
- }
- void loop() {
- if (analogRead(ldr) <= 500) // ЕСЛИ ПОКАЗАНИЯ ФОТОРЕЗИСТОРА (ЯРКОСТЬ) <= 500
- {
- long i = StepCounter;
- for (i = 0; i <= DISTANCE; i++) {
- digitalWrite(8, HIGH); // ВРАЩЕНИЕ ПРОТИВ ЧАСОВОЙ СТРЕЛКИ, ШТОРА ОПУСКАЕТСЯ ВНИЗ (ДВИГАТЕЛЬ СЛЕВА ОТ ОКНА)
- Stepping = true; // (РАЗРЕШЕНИЕ НА) ЗАПУСК МОТОРА
- if (Stepping == true)
- {
- digitalWrite(9, HIGH);
- delayMicroseconds(200);
- digitalWrite(9, LOW);
- delayMicroseconds(200);
- StepCounter = StepCounter + 1;
- if (StepCounter == DISTANCE)
- {
- Stepping = false;
- }
- }
- }
- }
- delay(60000); // ПАУЗА 60 СЕКУНД
- /* ЦИКЛ while ПРОДОЛЖИТСЯ ПОКА НЕ СТАНЕТ СВЕТЛО.
- ЕСЛИ УСЛОВИЕ В СКОБКАХ ВЫПОЛНЯЕТСЯ (СВЕТЛО), ТО ЦИКЛ ПРОДОЛЖАЕТСЯ,
- ИНАЧЕ ВЫХОД ИЗ ЦИКЛА while И ПРОГРАММА ПРОДОЛЖИТСЯ
- */
- while (analogRead(ldr) <= 500) {
- delay(60000); // ЗАЖЕРКА 60 СЕКУНД
- }
- if (analogRead(ldr) > 500) // ЕСЛИ ЗНАЧЕНИЯ НА ФОТОРЕЗИСТОРЕ (ЯРКОСТЬ) > 500
- {
- long i = StepCounter;
- for (i = 0; i <= DISTANCE; i++) {
- digitalWrite(8, LOW); // ВРАЩЕНИЕ ПО ЧАСОВОЙ СТРЕЛКЕ, ШТОРА ПОДНИМАЕТСЯ ВВЕРХ (ДВИГАТЕЛЬ СЛЕВА ОТ ОКНА)
- Stepping = true; // ЗАПУСК МОТОРА
- if (Stepping == true)
- {
- digitalWrite(9, HIGH);
- delayMicroseconds(400);
- digitalWrite(9, LOW);
- delayMicroseconds(400);
- StepCounter = StepCounter + 1;
- if (StepCounter == DISTANCE)
- {
- Stepping = false;
- }
- }
- }
- }
- delay(60000); // ОЖИДАНИЕ 60 СЕКУНД
- /* ЦИКЛ while ПРОДОЛЖИТСЯ ПОКА НЕ СТАНЕТ ТЕМНО.
- ЕСЛИ УСЛОВИЕ В СКОБКАХ ВЫПОЛНЯЕТСЯ (СВЕТЛО), ТО ЦИКЛ ПРОДОЛЖАЕТСЯ,
- ИНАЧЕ ВЫХОД ИЗ ЦИКЛА while И ПРОГРАММА ЗАПУСТИТСЯ ЗАНОВО
- */
- while (analogRead(ldr) > 500) {
- delay(60000); // ОЖИДАНИЕ 60 СЕКУНД
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement