Пользователь
0,0
рейтинг
2 октября 2013 в 16:49

Разработка → Продвинутый термостат для дома

C*
Пролог
С появлением дома газового котла с электронным управлением, жить, как бы сказать, становится приятнее. Улучшив этот момент простым термостатом с двумя кнопочками и семисегментником, показалось что совсем все хорошо. Но было решено развить эту идею.


Однозначно, лидером в области контроля температуры дома является проект NEST.
Вот и решено было создать подобное устройство, но добавив нужное, и убрав то, что редко когда пригождается.

Решение
Наше устройство должно уметь:
1) Показывать температуру дома и на улице
2) Включать отопление, когда температура дома упадет ниже заданной
3) Соответственно задавать температуру мы будем графиком(например в 6 утра нам надо 22 градуса, когда все ушли на работу можно и 18 и т.д.)
Из плюшек
4) График температуры на улице за сутки
5) Часы(получились попутно)

Железо
Для большей наглядности решено использовать дисплей LCD TFT на контроллере ILI9320. Этот дисплей выпускается с разными диагоналями(2.2 -3.2 дюйма). Разрешение 240х320. Есть резистивный сенсорный тачскрин. В принципе можно применить практически любой дисплей с таким же разрешением. Потребуется поменять только процедуру инициализации. В прикреплении есть список поддерживаемых контроллеров, для которых есть примеры инициализации, спасибо Noi.


Текст изначально был только 8x8, и для мелких надписей его хватало, так же сделана возможность выводить этот шрифт с удвоенным масштабом. Шрифт генерился программой LCD Font Generator и хранился во flash. Но для больших цифр этого было явно мало. Был создан еще шрифт 128x128 в той же программе. Можно выбрать любой шрифт. Но 10 цифр и 3 символа занимали 200кБ памяти. Мне лень было придумывать формат для сжатия и я добавил внешнюю память eeprom 24c256. В ней хранятся большие цифры и пара пиктограмм.

Схема


Попытка уместить все устройство в тесном корпусе привела к двум платам, соединённые проводом МГТФ.



Первая плата служит для распаивания достаточно мелкого шага дисплея, на второй разместились Atmega32(код занимает 47% flash, поэтому подойдет Atmega16), EEPROM и линейный стабилизатор на 3.3В.


Дисплей питается от 3.3 вольт, да и входа не толерантны к 5 вольтам, поэтому я запитал МК от 3.3В, что бы не добавилось согласование уровней. В качестве датчиков температуры применил DS18B20


Что бы котел понимал что пора включится надо подать 220В на специальный вход. Для коммутации добавлено реле, которое разместилось внутри котла на отдельной плате вместе с блоком питания на 12В и стабилизатором на 5В. Также добавил еще одно реле, его обмотка подключена к 220 напрямую. А общий контакт идет на землю, а нормально замкнутый на вход МК. Теперь для чего нужно. При пропадании электричества, в первую очередь отваливается это реле, тем самым на определенном входе МК появляется ноль. Сразу отключается дисплей. Теперь Atmega работает только за счет заряженных конденсаторов в блоке питания и потребляет 7ma. Этого хватит на 2-3 секунды работы, за это время переписывается вся нужная информация(график задания температуры дома, настройки) в энергонезависимую память.


Для того что бы часы продолжали идти в то время пока нет электричества добавлена микросхема часов реального времени DS1307. Так как идея с этой микросхемой пришла после того как был изготовлен прототип, то я добавил ее на отдельной платке, купленной у китайцев за 2$.


Первое включение

Прототип готов


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

Температура дома

(Можете заметить много служебной информации, которая выводится на дисплей. Она нужна была для отладки, но уже удалена из прошивки)

Температура на улице


График температуры за сутки(реализовано авто масштабирование графика)


График задания температуры дома

В этом режиме видим предыдущий график задания(желтый) и новый, который я только что задал(зеленый).

Через 10 секунд старый удалится и зеленый перерисуется желтым.

Часы. Тут и говорить нечего


Настройки, пока минималистично.


В верхней части дисплея можно заметить рисунок огонька, нарисован он все в той же программе LFG. С генерацией шрифтов, рисунков и прочих символов нет ни каких проблем. Большие цифры были немного широковаты, когда они выводили время, поэтому они сжимались программно на 75%. Пиктограмки домика и улицы переводились в массив с помощью программы LCD Assistant.


Ну вот и все, для кого то может эта статья всподвигнет для создания подобного, а может, поможет создать устройство на похожем дисплее.

Исходник на github.com
Как вам девайс?

Проголосовал 1181 человек. Воздержалось 289 человек.

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

Владимир @Atxmega
карма
43,5
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (31)

  • +15
    Вариант бы добавить «Никогда бы так не делал»
  • +1
    На радиокоте было, да?
    • +1
      Угу Угу. Серьезная там конкуренция была=)
  • 0
    проект NEST
    Этот nest.com/living-with-nest/? Если да, то стоит добавить ссылку в пост.
    • +1
      Добавил
  • 0
    Как вариант «поэкспериментировать что получится» прикольно.
    Как вариант для постоянного использования лучше взять готовый комнатный термостат программатор за 50 долларов и получить удобное управление и хорошие настройки.
  • 0
    А «ресет» на предпоследнем фото — это значит «reset»? Почему не просто «сброс», раз уж другие элементы на русском?
    • +1
      Так как программа писалась «для себя», то мне казалось что сброс это обнуление всех настроек, а reset перезапуск. Хотя это неверно. P.S. Уже переправлено именно на Сброс.
  • +2
    Попытка уместить все устройство в тесном корпусе привела к двум платам, соединённые проводом МГТФ.

    Есть специальные меж. платные разъемы, используй их, чтоб такой паутины вызывающей отвращение не было.

    Теперь Atmega работает только за счет заряженных конденсаторов в блоке питания и потребляет 7ma.

    Почитай про ионистры, с ними я думаю пару дней в энергосберегающем режиме — без блока питания, выдержишь.

    Этого хватит на 2-3 секунды работы, за это время переписывается вся нужная информация(график задания температуры дома, настройки) в энергонезависимую память.

    А почему нельзя вносить сразу после изменения? и дальше все настройки читать уже от туда?

    p.s. Рекомендую переводить датчики температуры на беспроводную передачу данных.
    p.s. p.s. Не будь таким самовлюбленным, сделай опрос адекватным.
    • +2
      меж. платные разъемы
      знаем, практикуем. Не поместились.
      Ионисторы
      закончились, пришлось выкручиваться.
      А почему нельзя вносить сразу после изменения?
      Достаточно малое количество циклов запись/стирание, посчитал что хватит на 2 года. Маловато.
      датчики температуры на беспроводную передачу данных
      Не бюджетно, да и 3 метра провода пока проще.
      Про опрос — для всех остальных вариантов есть кнопка Воздержаться
  • 0
    спасибо автору огромное, давно хотел попробовать что-нибудь сделать с дисплеем )) кстати а можете выложить картинки шрифтов?
    • 0
      точнее микрокод наверное нужен, с флешпамятью ни разу не работал
  • 0
    Не желаете оценить характеристики инерционности системы в соответствии с законами ТАУ и
    запрограммировать «упреждающее» управление температурой?
    • 0
      А где можно почитать про такое, кстати? Хочу себе собрать термостат, управляющий перекрывным краном на батарее отопления.
      • 0
        Вот неплохой учебник — kurs.ido.tpu.ru/courses/tay/content.html
        Для Вашей задачи можно считать комнату (по температуре) инерционным звеном первого порядка.
    • +1
      Изначально задумывалось реализовать ПИ регулятор. Но даже без него температура дома поддерживается очень точно. В термостате дельта ±0.3°, дома температура поддерживается в пределах ±0.8°
  • +3
    А все увидели смайлик на печатной плате? =)
    • 0
      Заметил на второй картинке, он там прям светится =)
  • 0
    По опыту скажу: Не стоит трогать котел на включение-выключение — он должен работать всегда в штатном режиме ( то есть в котле температура теплоносителя плавает в диапазоне 10 градусов, а каждый запуск «холодного» котла это работа на износ) — нормальная работа котла сильно увеличивает его ресурс. Нужно регулировать циркуляционные насосы и (или) краны.
    • 0
      Что это за бред? Производитель сам предусмотрел возможность такого управления. Вы же не «девятку» в -40 заводите=)
      • +1
        Я лишь могу дать совет, принять к сведению или нет — дело каждого.

        Отключаемый до остывания котел с большой долей вероятности через 5 лет под замену (опыт соседей показывает, что это так — не менял котел только тот сосед, что изначально купил павильный), так как радиатор со временем протечет, и холодные старты приближают этот момент (менять нет смысла, так как износ идет по всем трубкам внутри). Все серьезные котлы смотрят только на температуру теплоносителя внутри себя и поддерживают ее (плюс иногда есть датчик температуры на улице, который позволяет котлу самому менять температуру внутри себя на уровне +-10 градусов, но он это делает очень постепенно), а вся регулировка температуры помещений осуществляется периферией. Просто если греть не нужно, то котел будет греть только себя, то есть включаться будет очень редко и на расход газа это не сильно влияет на общем уровне «боевой» работы котла.

        Еще совет от знающих людей: в идеале котел должен включаться более чем на 10 минут и за это время повышать температуру теплоносителя на 10 градусов, потом 10 мин простоя и снова старт. если это не так, то система спроектирована неверно и котел включается-выключается чаще, то износ котла тоже повышается.
        • 0
          Лично у моего котла вообще нет режима регулирования по управлению клапана газа и скорости циркнасоса. Только дискретный.
          • 0
            Наверное я не достаточно подробно написал. У котла есть выставленная температура теплоносителя (которая в каких-то пределах регулируется вручную) при достижении этой температуры котел либо гаснет, либо остается гореть только запальник (зависит от системы горелки). Вроде эта система обязана быть на любом котле по госту любой страны, иначе он просто взорвется при недосмотре, так как будет бесконечно греться. На этом с котлом все — нет никаких дополнительных регулировок клапаном или подсоединения насоса к «мозгам» котла.

            Дальше у Вас теплоноситель должен как-то течь — либо стоит циркуляционный насос, либо самоциркуляция (что бывает крайне редко, так как это нужно проектировать специально). Теперь что будет если выключить насос — в котле теплоноситель будет оставаться, то есть котел нагревает свои 20 литров, что внутри и сам переходит в спячку, потом он медленно остывает до отсечки и греет снова. То есть не нужно подвязываться к котлу — он сам себя регулирует, а вы управляете только насосом (или кранами, если контуров несколько, главное следить, чтобы не перекрыть все контуры при работающем насосе, а то он сломается быстро).

            Даже со стремным механическим котлом (где не было ни одной электронной части) эта система нормально работает. Почитайте документацию — я уверен, что и в Вашем котле есть ограничитель температуры теплоносителя.
            • 0
              Так кто говорит, что нужно отключать насос? У меня после «отключения» горелка гаснет, и насос около минуты продолжает гонять теплоноситель. И только после этого отключается. А включение наоборот: сначала контроль температуры теплоносителя, затем включение горелки.

              Как в таком случае контроллер уменьшает срок службы котла?
            • 0
              Да и тому же, сам производитель котла предлагает контроллеры (за невменяемую цену). Но в итоге вся их работа заключается в замыкании 220В (для чего подходят любые контроллеры за $50-$80). Неужели производитель котла предлагает контроллеры во вред?
              • 0
                Так, запутался. У моего есть ручка на котле, которой задается максимальная температура теплоносителя. Задано 60°. Но до этой температуры ни когда не поднимается. Дом нагревается раньше и котел штатно востанавливается.
                P.s. ответ для rusevgen
                • 0
                  *останавливается
  • +1
    люто завидую таким рукастым людям
  • +1
    Ничего себе у Вас там перепады! 4 — 32!
    • 0
      Этот график сфотографирован в момент, когда устройство отлаживалось. Датчик был на солнечной стороне(с 9.00 до 13.00) А так максимум где то градусов 20.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.