Advertisement
Guest User

oroszaluu

a guest
May 21st, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* АВТОМАТИЧЕСКОЕ УПРАВЛЕНИЕ ЭЛЕКТРОПРИВОДОМ РУЛОННОЙ ШТОРЫ (версия 1.0)
  2.  
  3.   ИСТОРИЯ ОБНОВЛЕНИЙ:
  4.   18 ИЮНЯ 2016 - УВЕЛИЧЕНА СКОРОСТЬ ДВИГАТЕЛЯ
  5.   АВГУСТ 2016 - ДОБАВЛЕНА ЗАДЕРЖКА ПО ВРЕМЕНИ
  6.  
  7.   ПРИНЦИП РАБОТЫ:
  8.   ЕСЛИ НА УЛИЦЕ СВЕТЛО, ТО ДВИГАТЕЛЬ ПОВОРАЧИВАЕТСЯ В ОПРЕДЕЛЁННУЮ СТОРОНУ НА 130000 ШАГОВ (70000 ШАГОВ ДЛЯ МАЛОГО ОКНА).
  9.   ЕСЛИ НА УЛИЦЕ ТЕМНО, ТО ДВИГАТЕЛЬ ПОВОРАЧИВАЕТСЯ В ПРОТИВОПОЛОЖНУЮ СТОРОНУ НА 130000 ШАГОВ (70000 ШАГОВ ДЛЯ МАЛОГО ОКНА).
  10.   ИМЕННО СТОЛЬКО ШАГОВ НЕОБХОДИМО В МОЁМ СЛУЧАЕ, ЧТОБЫ ПОДНЯТЬ ИЛИ ОПУСТИТЬ ШТОРУ.
  11.  
  12.   НЕДОСТАТКИ И НЕРЕАЛИЗОВАННЫЕ ФУНКЦИИ:
  13.   1) НЕТ РУЧНОГО РЕЖИМА. НЕОБХОДИМО ДОБАВИТЬ 3 КНОПКИ. (оператор switch?)
  14.   ПЕРВАЯ БУДЕТ ПЕРЕКЛЮЧАТЬ РЕЖИМ (АВТОМАТИЧЕСКИЙ ИЛИ РУЧНОЙ).
  15.   ВТОРАЯ БУДЕТ ПОДНИМАТЬ ШТОРУ НА ЗАДАННОЕ КОЛИЧЕСТВО ШАГОВ.
  16.   ТРЕТЬЯ БУДЕТ ОПУСКАТЬ ШТОРУ НА ЗАДАННОЕ КОЛИЧЕСТВО ШАГОВ.
  17.   ПРОГРАММА ДОЛЖНА ЗАПОМИНАТЬ, В КАКОМ СОСТОЯНИИ НАХОДИТСЯ ШТОРА.
  18.   НАПРИМЕР, ЕСЛИ ШТОРА ОПУЩЕНА, ТО В РУЧНОМ РЕЖИМАЕ КНОПКА "ВНИЗ" СРАБАТЫВАТЬ НЕ ДОЛЖНА.
  19.   МОЖНО РЕАЛИЗОВАТЬ ОТКРЫТИЕ/ЗАКРЫТИЕ ПО ХЛОПКУ ИЛИ С ПУЛЬТА ДУ.
  20.   А В АВТОМАТИЧЕСКОМ РЕЖИМЕ ДВИГАТЕЛЬ НЕ БУДЕТ ОПУСКАТЬ ШТОРУ НЕЗАВИСИМО ОТ ПОКАЗАНИЙ ДАТЧИКА.
  21.   2) НЕ УЧИТЫВАЕТСЯ ПОЛОЖЕНИЕ ШТОРЫ ПРИ ОТКЛЮЧЕНИИ ПИТАНИЯ (ПРИ УСЛОВИИ РАБОТЫ ОТ СЕТИ 220В).
  22.   РЕШАЕТСЯ ПОДКЛЮЧЕНИЕМ БЛОКА БАТАРЕЙ.
  23.   3) НЕ УЧИТЫВАЕТСЯ ПОЛОЖЕНИЕ ШТОРЫ ПРИ ПОДКЛЮЧЕНИИ ПИТАНИЯ.
  24.   ЕСЛИ ТЕМНО - ШТОРА БУДЕТ ОПУСКАТЬСЯ, ДАЖЕ ЕСЛИ УЖЕ ОПУЩЕНА. (до подключения нужно поднять!)
  25.   ЕСЛИ СВЕТЛО - ШТОРА БУДЕТ ПОДНИМАТЬСЯ. (до подключения нужно опустить!)
  26.   4) НЕ РЕАЛИЗОВАНА ФУНКЦИЯ: ЕСЛИ ЯРКО (ТЕМНО) В ТЕЧЕНИИ 10 МИНУТ, ТО ПОДНЯТЬ (ОПУСТИТЬ) ШТОРУ.
  27.   5) АКТИВАЦИЯ АВТОМАТИЧЕСКОГО РЕЖИМА ПРИ ПОМОЩИ КНОПОК.
  28.   ЕСЛИ ПИТАНИЕ ОТКЛЮЧИТСЯ, ТО СИСТЕМА РАБОТАТЬ НЕ БУДЕТ, ПОКА НЕ НАЖАТА КНОПКА
  29.   6) ...
  30.  
  31.   АВТОР: АЛЕКСАНДР ДИКОВИННЫЙ
  32.   ///////////////////////////////////////////////////////////////////////////////
  33.   https://goo.gl/GLJ2hf - АЛЕКСАНДР ДИКОВИННЫЙ (Alexander Dikovinniy) |
  34.   https://goo.gl/Tp0aX9 - DIAL                                        |
  35.   https://goo.gl/LWSVj3 - LIVE LAUGH (Живой Смех)                     | - YOUTUBE
  36.   https://goo.gl/IlJ8ZE - DIKOVINNIY WORLD (Диковинный Мир)           |
  37.   https://goo.gl/2mqicP - ЖИВОТНЫЕ И ПРИКОЛЫ (Animals and Fun)        |
  38.  
  39.   http://goo.gl/AXZDev - FACEBOOK
  40.   http://goo.gl/6781j9 - BK
  41.   http://goo.gl/yl0igF - INSTAGRAM
  42.  
  43.   Dikovinniy@gmail.com - E-Mail
  44.   ////////////////////////////////////////////////////////////////////////////////
  45. */
  46.  
  47. #define DISTANCE 70000 // 1 оборот = 1600 шагов, 130000 шагов = 136 см (расстояние, которое проходит штора)
  48.  
  49. long StepCounter = 0; // СЧЁТЧИК ШАГОВ
  50. int Stepping = false; // ДВИГАТЕЛЬ ОСТАНОВЛЕН
  51. int ldr = 0; // ФОТОРЕЗИСТОР ПОДКЛЮЧЁН К ВЫХОДУ A0
  52.  
  53. void setup() {
  54.   pinMode(8, OUTPUT);
  55.   pinMode(9, OUTPUT);
  56.   digitalWrite(8, LOW);
  57.   digitalWrite(9, LOW);
  58. }
  59.  
  60. void loop() {
  61.  
  62.   if (analogRead(ldr) <= 500) // ЕСЛИ ПОКАЗАНИЯ ФОТОРЕЗИСТОРА (ЯРКОСТЬ) <= 500
  63.   {
  64.     long i = StepCounter;
  65.     for (i = 0; i <= DISTANCE; i++) {
  66.  
  67.       digitalWrite(8, HIGH); // ВРАЩЕНИЕ ПРОТИВ ЧАСОВОЙ СТРЕЛКИ, ШТОРА ОПУСКАЕТСЯ ВНИЗ (ДВИГАТЕЛЬ СЛЕВА ОТ ОКНА)
  68.       Stepping = true;      // (РАЗРЕШЕНИЕ НА) ЗАПУСК МОТОРА
  69.  
  70.       if (Stepping == true)
  71.       {
  72.         digitalWrite(9, HIGH);
  73.         delayMicroseconds(200);
  74.         digitalWrite(9, LOW);
  75.         delayMicroseconds(200);
  76.  
  77.         StepCounter = StepCounter + 1;
  78.         if (StepCounter == DISTANCE)
  79.         {
  80.           Stepping = false;
  81.         }
  82.       }
  83.     }
  84.   }
  85.  
  86.   delay(60000); // ПАУЗА 60 СЕКУНД
  87.  
  88.   /* ЦИКЛ while ПРОДОЛЖИТСЯ ПОКА НЕ СТАНЕТ СВЕТЛО.
  89.     ЕСЛИ УСЛОВИЕ В СКОБКАХ ВЫПОЛНЯЕТСЯ (СВЕТЛО), ТО ЦИКЛ ПРОДОЛЖАЕТСЯ,
  90.     ИНАЧЕ ВЫХОД ИЗ ЦИКЛА while И ПРОГРАММА ПРОДОЛЖИТСЯ
  91.   */
  92.   while (analogRead(ldr) <= 500) {
  93.     delay(60000); // ЗАЖЕРКА 60 СЕКУНД
  94.   }
  95.  
  96.   if (analogRead(ldr) > 500) // ЕСЛИ ЗНАЧЕНИЯ НА ФОТОРЕЗИСТОРЕ (ЯРКОСТЬ) > 500
  97.   {
  98.     long i = StepCounter;
  99.     for (i = 0; i <= DISTANCE; i++) {
  100.  
  101.       digitalWrite(8, LOW); // ВРАЩЕНИЕ ПО ЧАСОВОЙ СТРЕЛКЕ, ШТОРА ПОДНИМАЕТСЯ ВВЕРХ (ДВИГАТЕЛЬ СЛЕВА ОТ ОКНА)
  102.       Stepping = true;      // ЗАПУСК МОТОРА
  103.  
  104.       if (Stepping == true)
  105.       {
  106.         digitalWrite(9, HIGH);
  107.         delayMicroseconds(400);
  108.         digitalWrite(9, LOW);
  109.         delayMicroseconds(400);
  110.  
  111.         StepCounter = StepCounter + 1;
  112.         if (StepCounter == DISTANCE)
  113.         {
  114.           Stepping = false;
  115.         }
  116.       }
  117.     }
  118.   }
  119.  
  120.   delay(60000); // ОЖИДАНИЕ 60 СЕКУНД
  121.  
  122.   /* ЦИКЛ while ПРОДОЛЖИТСЯ ПОКА НЕ СТАНЕТ ТЕМНО.
  123.     ЕСЛИ УСЛОВИЕ В СКОБКАХ ВЫПОЛНЯЕТСЯ (СВЕТЛО), ТО ЦИКЛ ПРОДОЛЖАЕТСЯ,
  124.     ИНАЧЕ ВЫХОД ИЗ ЦИКЛА while И ПРОГРАММА ЗАПУСТИТСЯ ЗАНОВО
  125.   */
  126.   while (analogRead(ldr) > 500) {
  127.     delay(60000); // ОЖИДАНИЕ 60 СЕКУНД
  128.   }
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement