7 — Умный дом на Ардуино. Глава I — Теплый пол. Часть 3 — Управление по времени.

Мы подошли к этапу проектирования нашего теплого пола, когда настало время сделать его «Умным».

«Умный» должен обладать функциями экономии и обеспечения комфорта в во всей системе

Концепция

  • Теплый пол должен отключаться в тот момент, когда продолжительное время по нему никто не ходит.
    Нас нет дома или мы спим, теплый пол работает! Зачем нам тратить электроэнергию впустую?
  • Температура теплого пола должна меняться автоматически и зависеть, от температуры окружающей среды, места его расположения и температуры покрытия граничащего с ним.
    В ванной комнате температура должна зависеть от температуры воздуха.
    Если ваш теплый пол граничит с покрытием без обогрева, то температуру необходимо подбирать с учетом температуры этого покрытия, дабы не было сильной разницы температур, при переходе с теплого на холодный будем чествовать дискомфорт.
  • В данной статье мы рассмотрим исполнение первой части концепции, а точнее малой её части!

    Сделаем так, чтобы наш теплый пол отключался на какое-то время и потом опять включался, причем делал он так каждый день.(Например, выключаем в 23:00 и включаем в 05:00, пока мы спим)

    Для реализации данной функции необходим счетчик времени, функция синхронизации времени, параметры выключения и включения, а также функция определения текущего состояния теплого пола с учетом текущего времени и настроенных параметров.

    Т.к. точность времени нам подойдет в пределах одной минуты, то будем использовать программные часы.

    Недостатки данных часов заключаются в обнулении при перезапуске контроллера!

    Для задания начального времени отсчета необходима синхронизация, мы это будем делать через веб интерфейс.

    Ниже краткое описание изменений в скетчах и скриптах

    Slave-контроллер
    Добавим функцию определения, наступило ли время выключить теплый пол или нет.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    boolean time_in_interval(int t, int tb, int te)//принадлежность интервалу времени в диапазоне 24 часов, с переходом через полночь, все параметры в минутах, t-текущее время, tb-te начальный и конечный момент времени
    {
      if (
           t<0 or t>1440 or 
           tb<0 or tb>1440 or
           te<0 or te>1440
          ) return false;
          else
      if (
           (tb<te and t>tb and t<te) or
           (tb>te and (t>tb or t<te))
          )
        return true;
      else return false;
    }[/code]
    Функция возвратит <strong>true</strong>, если текущее время находится в диапазоне при котором теплый пол должен отключиться.
     
    Добавим <a href="http://bigbarrel.ru/%d0%b2%d1%80%d0%b5%d0%bc%d1%8f-%d0%bd%d0%b0-%d0%b0%d1%80%d0%b4%d1%83%d0%b8%d0%bd%d0%be/" title="Простой счетчик времени на Ардуино. ">счетчик времени</a>
    [code]unsigned long _millis;//значение millis() для текущего времени 
    int watch(int watch_t)//расчет текущего времени в минутах
    {
     unsigned long time_;
     int watch_delta;
     
     time_ = millis();
      
     watch_delta = int((time_ - watch_millis)/60000); // изменение в минутах
     if (watch_delta>0)
     {
       watch_millis = time_;
       
     }
     if (watch_t + watch_delta > 1439) return 0;
       else return watch_t + watch_delta;
    }
    boolean time_in_interval(int t, int tb, int te)//принадлежность интервалу времени в диапазоне 24 часов, с переходом через полночь, все параметры в минутах, t-текущее время, tb-te начальный и конечный момент времени
    {
      if (
           t<0 or t>1440 or 
           tb<0 or tb>1440 or
           te<0 or te>1440
          ) return false;
          else
      if (
           (tb<te and t>tb and t<te) or
           (tb>te and (t>tb or t<te))
          )
        return true;
      else return false;
    }[/code]
    Функция возвратит <strong>true</strong>, если текущее время находится в диапазоне при котором теплый пол должен отключиться.
    
    Добавим <a href="http://bigbarrel.ru/%d0%b2%d1%80%d0%b5%d0%bc%d1%8f-%d0%bd%d0%b0-%d0%b0%d1%80%d0%b4%d1%83%d0%b8%d0%bd%d0%be/" title="Простой счетчик времени на Ардуино. Скетч">счетчик времени</a>
    [code]unsigned long watch_millis;//значение millis() для текущего времени 
    int watch(int watch_t)//расчет текущего времени в минутах
    {
     unsigned long time_;
     int watch_delta;
    
     time_ = millis();
      
     watch_delta = int((time_ - watch_millis)/60000); // изменение в минутах
     if (watch_delta>0)
     {
       watch_millis = time_;
       
     }
     if (watch_t + watch_delta > 1439) return 0;
       else return watch_t + watch_delta;
    }

    Все файлы проекта

    Добавить комментарий