Домашняя страничка Стефурак П.Б. Промзона. Часы, таймер, термостат, управление различными устройствами на AVR ATmega8.
 
     Домашняя Промзона Спальный район  

Промзона \ Часы, таймер, термостат, управление различными устройствами на AVR ATmega8.
Устройство, реализующее управление различными нагрузками по заданому алгоритму

 

Постановка задачи
Ни для кого не секрет текущее состояние ЖКХ в современной России.
Периодические отключения горячей воды, в городской квартире + гарантированное отключение ее на месяц-два летом не вызывают приятных чувств.
Для коррекции этого положения вещей был установлен электрический водонагреватель накопительного типа. Кроме того, в том месте где он установлен, есть вентилятор вытяжной вентиляции.
Приемлемым алгоритмом включения этих приборов стал следующий:
  • вентилятор неплохо было бы включать пару раз в течении часа на 5-10 мин, например в период между 9 и 21 часами (ночью лучше не шуметь)
  • нагреватель включать в 05:00 утра, чтобы к 07:00 вода успела нагреться и отключать в 21:00 - запаса горячей воды хватит на пару часов, если она понадобится, а ночью воду греть не для кого. Нагреватель оснащен собственным термостатом и заботится о температуре воды в его баке не нужно. 2 часа подключения электричества гарантированно дают горячую воду.
  • как развитие идеи автоматизации - включать нагрев воды при падении температуры горячей воды основного водопровода ниже заданного порога.
  • защита от перегрева/пожара - отключение всех нагрузок при превышении заданного порога температуры.
     
    Решение
    Понятно, что под такую задачу готовое решение найти не просто.
    Есть наборы для сборки подобных устройств компании МастерКит, но при изучении их характеристик стало ясно, что функционал некоторых сложен и избыточен, а других - недостаточен. 2й фактор - цена сравнительно высока.
    Сложного в изготовлении такого устройства ничего нет, по этому решил проектировать и делать его самостоятельно.
    Основной критерий - простота hardware.

    За основу был взят проект Clock Controller V1.1 Wichit Sirichote, kswichit@kmitl.ac.th.
  • Контроллер : AVR ATmega8 компании ATMEL
  • Дисплей : 4 индикатора АЛС324 с общим анодом
  • Датчик температуры: DS18b(s)20
  • Кнопки, транзисторы, резисторы, конденсаторы, реле и т.д.
    Бюджет проекта:
  • Контроллер ~80 руб
  • Дисплей 4 индикатора АЛС324 ~80 руб
  • Датчик температуры: DS18b(s)20 ~70 руб
  • Кнопки, транзисторы, резисторы, конденсаторы, реле и т.д. ~200 руб
    Итого:~400-500 руб

    Схема устройства:
    Подключение ds1820: вывод 10.
    В качестве генератора используется внутренний RC генератор кристалла.
    Сигналы управления нагрузками: ноги 14,15,16 МК (сигналы управления нагрузками можно объединить диодами по лог. ИЛИ).
    Управление нагрузками: обычные транзисторные ключи+ реле+ диод.
    Питание - трансформатор + диодный мост + 7805+ конденсаторы.

    Программное обеспечение создано в IDE CodeVisionAVR.
    Характеристики кода:
  • Строк исходного текста программы 750 (1136 включая библиотеки)
  • Program size: 1973 words (48,2% of FLASH)
  • EEPROM usage: 12 byte(s) (2,3% of EEPROM)
  • Global variables size: 102 byte(s)
    Исходный текст программы: b_unit.c, прошивка контроллера: b_unit.hex
    При прошивке PonyProg"ом установите следующие опции фьюзов: CKOPT, BOOTSZ1, BOOTSZ0, SUT0, SKSEL2, SKSEL3.

    Функции, реализованные в устройстве:
  • вентилятор включатся пару раз в течении часа на 5-10 мин между 9 и 21 часами + ручное управление
  • нагреватель включается и выключается по заданным значениям времени+ ручное управление
  • нагрузка термостата включается и выключается по заданной температуре+ ручное управление
  • защита от перегрева/пожара - отключение всех нагрузок при превышении заданного порога температуры.
  • часы
  • измерение температуры воздуха или иной среды
  • настройка режима дисплея.

    Управление:
    Кнопки управления
    Номер Кнопка Функция в обычном режиме Функция в режиме меню
    1 Меню Вход в меню 1го уровня Перемещение между элементами меню 1го уровня
    2 Подменю Быстрый переход в меню режима термостата Перемещение между элементами меню 2го уровня
    3 + Быстрый переход в меню режима нагревателя Изменение параметра в большую сторону (если параметр был изменен, но не был записан, отображается точка на первом индикаторе)
    4 - Быстрый переход в меню режима вентилятора Изменение параметра в меньшую сторону (если параметр был изменен, но не был записан, отображается точка на первом индикаторе)
    5 Сохранить Быстрый переход в меню режима дисплея Сохранение параметра (при этом значение параметра записывается так же в энергонезависимую память МК)
    При нажатии кнопки "Меню", Вы попадаете в меню 1го уровня. В любой момент Вы можете перемещаться по пунктам меню 1го уровня при помощи кнопки "Меню".
    Находясь в любом меню 1го уровня, Вы можете циклично перемещаться между пунктами меню 2го уровня, текущего 1го уровня, при помощи кнопки "Подменю".
    Изменять значения переменных, Вы можете при помощи кнопок "+" и "-". Если переменная достигает своего крайнего значения, изменение продолжается с корректных значений переменной.
    Если переменная была изменена, но не была записана, отображается точка на первом индикаторе.
    Сохранить значение переменной можно при помощи кнопки "Сохранить", при этом значение параметра записывается так же в энергонезависимую память МК, и будет восстановлено при подаче питания.
    Если никакие кнопки не нажимались в течении 20 сек, система возвращается в исходное состояние.

    Описание меню:
    Картинка на дисплее Название Описание
    Меню термостата Переход к подпунктам меню управления термостатом
    Установка температуры аварийного отключения всех нагрузок Если значение температуры, полученное от температурного сенсора, достигнет значения указанного в этой переменной, все нагрузки будут отключены их режимы будут изменены на "постоянное отключение". Эти данные записываются в EEPROM и и при следующем старте будут восстановлены, т.е. все нагрузки останутся отключенными.
    Установка температуры включения нагрузки термостата Если значение температуры, полученное от температурного сенсора, достигнет значения указанного в этой переменной, нагрузка термостата будет включена. Эти данные записываются в EEPROM и и при следующем старте будут восстановлены.
    Установка температуры выключения нагрузки термостата Если значение температуры, полученное от температурного сенсора, достигнет значения указанного в этой переменной, нагрузка термостата будет выключена. Эти данные записываются в EEPROM и и при следующем старте будут восстановлены. Значение этой переменной всегда больше температуры включения нагрузки термостата и контролируется программой.
    Установка режима управления нагрузкой термостата (вывод 14 МК) Выбор режима управления нагрузкой термостата из 3х вариантов:
  • автоматический режим по температурам указанным выше
  • всегда включена
  • всегда выключена
    Значение записываются в EEPROM.
  • Меню нагревателя Переход к подпунктам меню управления нагревателя
    Установка часов времени включения нагревателя Время включения нагревателя.
    Значение записываются в EEPROM.
    Установка минут времени включения нагревателем Время включения нагревателя.
    Значение записываются в EEPROM.
    Установка минут времени выключения нагревателя Время выключения нагревателя.
    Значение записываются в EEPROM.
    Установка минут времени выключения нагревателя Время выключения нагревателя.
    Значение записываются в EEPROM.
    Установка режима управления нагревателем (вывод 15 МК) Выбор режима управления из 3х вариантов:
  • автоматический режим по времени, указанному выше
  • всегда включена
  • всегда выключена
    Значение записываются в EEPROM.
  • Меню вентилятора Переход к подпунктам меню управления вентилятором
    Установка режима управления вентилятором (вывод 16 МК) Выбор режима управления из 3х вариантов:
  • автоматический режим по времени, вентилятор включается 2 раза в течении часа: с 15 до 20 минут и с 45 до 50 минут.
  • всегда включен
  • всегда выключен
    Значение записываются в EEPROM.
  • Меню дисплея Переход к подпунктам меню настроек дисплея
    Установка режима отображения Выбор режима управления из 4х вариантов:
  • Только текущее время
  • Текущее время + каждые 10 сек текущая температура
  • Текущее время + каждые 10 сек состояние управления нагрузками
  • Текущее время + каждые 10 сек текущая температура + каждые 10 сек состояние управления нагрузками
    Значение записываются в EEPROM.
  • Меню установки часов Переход к подпунктам меню установки часов
    Установка текущего времени Установка часов текущего времени
    Установка текущего времени Установка минут текущего времени
    Установка коэффициента коррекции хода часов Подстройка хода. Значение от 0 до 99. Нулевой коррекции соответствует значение 50.
    Значение записываются в EEPROM.
    Все переменные контролируются на предмет корректности ввода.
    Если индикация температуры отключена - температура не измеряется и соответственно все связанные с ней функции не работают!
    Если датчик температуры не подключен, измеряемая температура равна 25с.

    Дисплей в основном режиме:
    Картинка на дисплее Что означает
    Текущее время
    Температура
      Температура достигла значения "температуры аварийного отключения всех нагрузок"
      Нагрузка термостата включена
      Нагрузка нагревателя включена
      Вентилятор включен

    Фото различных этапов реализации проекта:
                   
                   
    Крупные желтые точки - кнопки, остальное я думаю и так понятно.
    В моем варианте управление термостатом не задействовано - используется только управление нагревателем и вентилятором. Управление нагревателем - через промежуточное мощное реле.
    Желающим повторить проект, рекомендовал бы использовать не отдельные индикаторы, а готовую индикаторную сборку, например CA56-12EWA - тогда вместо 40 паек нужно будет сделать только 12.

    Новая прошивка контроллера с дополнительными функциями: b_unit_new.hex
    Добавлен следующий функционал:
  • В меню термостата, нагревателя, вентилятора - дополнительный пункт - включить соответствующую нагрузку на 1-99 мин независимо от режима и других настроек - кроме аварийного отключения по T.
    В меню этот пункт отображается соответственно:
       
  • В меню вентилятора - дополнительный пункт - установка времени работы вентилятора от 5 до 15 мин.
  • В меню нагревателя - дополнительный пункт - установка дней недели работы нагревателя - варианты: П-ВТ-СР-ЧТ-ПТ-СБ-ВС, ПН-ВТ-СР-ЧТ-ПТ, ПН-СР-ПТ, ВТ-ЧТ-СБ, СБ-ВС, ВТ-ПТ. Кодировку дней недели смотрите ниже.
  • В меню установки времени - дополнительный пункт - установка дня недели - кодировка дней недели:
    ПН-ВТ-СР-ЧТ-ПТ-СБ-ВС соответственно:
  • В меню установки времени - дополнительный пункт - установка ежесуточной коррекции хода часов от -15 до +15 сек в сутки (нулевой коррекцией считается значение 15).

    Схема   исходный текст программы: b_unit.c   прошивка контроллера: b_unit.hex   прошивка контроллера с дополнительными функциями: b_unit_new.hex
     
    Проект основан на Clock Controller V1.1 Wichit Sirichote, kswichit@kmitl.ac.th.

     
  •