084-Двуканальный термометр-термостат на ATmega8.

Автор: | 19.04.2012

25.11.2012 Внимание! Программа термостата обновлена до версии v2b_1.

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

В качестве датчиков использовал DS18B20. Микроконтроллер (ATmega8) работает от внутреннего задающего генератора на 4 мГц (дополнительно, на плате предусмотрена возможность установки кварца).  Из-за артефактов динамической индикации (заметно было подмигивания в момент опроса датчика) пришлось отказаться от чтения ROM датчика и подсчёта CRC. Тем не менее, в устройстве используются два датчика, которые подключены к разным выводам МК. Один измеряет температуру наружного воздуха, другой в ящике. Термостатирование организовано только для датчика №2 (ящик).


Термометр-термостат разделён по двум корпусам. В одном управляющая часть и дисплей, в другом блок питания и реле управления нагрузкой. На плате управления предусмотрена установка стабилизатора питания с конденсаторами для питания микроконтроллера, но так как питание приходит и так 5 v он не впаян (в случае питания от блоков питания с выходным напряжением больше 5 v, его необходимо впаять).  Корпус управления снабжён кронштейном который позволяет устанавливать его как на DIN-рейку или просто саморезами к стене.


Разъёмы устройства:
— по USB разъёму передаются управляющие сигналя для включения реле;
— через аудио разъёмы подключены датчики температуры.

Так как программа занимает 66 % памяти, решено было сделать ещё и второй канал управления, на всякий случай, от РВ5. В данной программе второго канала нет, и понадобится ли вообще, пока не знаю, но на ПП второй канал организован в полном объёме, только не установлено реле.



Описание работы термостата.
Устройство имеет три кнопки для управления. Кнопка (ОК), (Up), (Dn). При включении питания на индикаторе высвечивается температура датчика №1 (наружный воздух).



Для просмотра температуры в ящике необходимо нажать кнопку (ОК). При этом загорается светодиод синий HL1  (см. схему), указывающий, что на дисплей выведена температура датчика №2.



При повторном нажатии кнопки (ОК), на дисплей выводится температура датчика №1, а светодиод HL1 гаснет.

Для входа в режим установки верхнего порога отключения и нижнего порога включения обогрева. Необходимо нажать обе кнопки (Up), (Dn) и удерживать их нажатыми не менее 5 сек. По истечении этого времени устройство перейдёт в режим просмотра верхнего порога выключения обогрева. Теперь кнопки нужно отпустить. На дисплее будет высвечиваться значение порога и у четвёртого разряда засветится верхний сегмент, указывающий, что это верхний порог.



Для изменения уставки порога, необходимо нажать кнопку (ОК). Значение на дисплее начнёт мигать, сигнализирующее о готовности к изменению уставки. Уставку можно менять в пределах от +1 до +10 градусов, с дискретностью 1 градус. Увеличение значения происходит с помощью кнопки (Up), а уменьшение с помощью кнопки (Dn). Для сохранения уставки или просто для перехода на следующий порог, необходимо нажать кнопку (ОК). На дисплее высветится нижний порог и у четвёртого разряда засветится нижний сегмент, указывающий, что это нижний порог.



Для изменения уставки порога, необходимо опять нажать кнопку (ОК). Значение на дисплее начнёт мигать, сигнализирующее о готовности к изменению уставки. После установки порога включения, нажимаем кнопку (ОК) для сохранения и выхода из режима установки порогов термостатирования. Уставки сохраняются в энергонезависимой памяти МК и при исчезновении питания не сбрасываются.

Рекомендую для качественного хранения картошки, уставку включения (нижний порог) обогрева установить +2, уставку выключения (верхний порог) +4.

Для удобства контроля состояния температуры в ящике, был введён дополнительный алгоритм сигнализации о низкой температуре в ящике. Что он из себя представляет? Когда на дисплее отображается температура датчика №1, а температура в ящике снижается (допустим, из-за неисправности нагревателя) и достигает значения ниже +1 градуса, светодиод  HL1 начинает мигать, сигнализируя о низкой температуре в ящике. Если температура в ящике поднимется выше + 2 градусов, светодиод перестанет мигать.

Алгоритм неисправности датчиков. При неисправности датчика да дисплее выводится надпись Err №. Номер обозначает код неисправности от 1 до 3. Цифра 1 обозначает – нет высокого уровня, 2 – нет датчика, 3 – высокий уровень не восстановлен.



Когда на дисплее отображается температура датчика №1, и произошла неисправность датчика №2,то светодиод HL1 начинает мигать, сигнализируя о неисправности. Таким образом, при выведенной на дисплей температуре датчика №1 Вы не пропустите возникшую неисправность термостата. Естественно при неисправности датчика №2, обогрев отключается.

Ещё несколько моментов. Термостат отключен если уставка нижнего порога равна уставке верхнего порога, или уставка нижнего порога выше уставки верхнего порога. Если неисправны датчик №1 или №2, то в меню уставок, значение уставки Вы не увидите, хотя уставку изменить можно, но вслепую. Это сделано для того, что бы пользователь не лез изменять уставки при неисправных датчиках.


Файлы для сборки устройства.

Termostat_PCB_ATtmega8_OK - Рисунки печатных плат термостата
7_seg_term_OK_v2b_ATtmega8 - Исходник термостата на Билдере v2b_1
Termostat_7_LED.hex - Прошивка термостата для ATmega8 v2b_1
FuseBits - Фьюзы для прошивки термостата
Для Algorithm Builder и UniProf галочки ставятся как на картинке.
Для PonyProg, AVR Studio, SinaProg галочки ставяться инверсно.
Как правильно прошить AVR фьюзы

(Visited 8 721 times, 5 visits today)

084-Двуканальный термометр-термостат на ATmega8.: 83 комментария

  1. GetChiper

    Не могу не сказать пару слов о достоинствах устройства автора статьи SVN.

    Устройство просто в изготовлении (минимум компонентов) и не требует наладки – это раз. Но главное, в устройстве заложена возможность развития, модернизации под свои нужды – это два. Данный термостат может применяться для большого числа задач (ящик с картошкой – это хорошее, но частное применение). Еще можно поддерживать температуру в помещении, в аквариуме, в теплице. Контролировать и отображать температуру в различных точках различных процессов. В общем достойное устройство – советую!

    И еще, если Вы сделали модификацию устройства под свои нужды (или ищите такую модификацию) – заходите на форум в раздел модификаций и делитесь своими наработками.
    http://www.forum.getchip.net/viewforum.php?f=24&sid=d7c4671f2cfeeb72f76b6dd28d9e6821

  2. Zver666

    Делали диплом с похожем устройством на тиньки 2313 (схему брали с хардлока). Потом повторял на заказ, выплыли такие баги:
    1) красные цыфры плохо видны — заменил на зеленые более различимы, ставился индикатор в гнездо от микросхемы.
    2) запарился подключать релюхи — одни включены другие выключены, а тетка которая продавала их понятие неимеет какие они :(. Плюс к этому нет развязки между нагрузкой и термостатом + работа от постоянного напряжения.
    Уже потом понял что можно было ставить вместо релюх МОС3043 и транзистор ВТА140 (кажется до 2 ампер держит) + работа нагрузки от 220В переменного напряжения.
    Но это чисто мое мнение.
    А за этот проэкт респект и уважуха 🙂

  3. Mihail 2

    максимальная температура измерения у этого датчика который применяется в проекте составляет +125 градусов. а сам термометр какой минимальный и максимальный порог измерения имеет? если смотреть характеристику датчика у него измеряемая температура составляет от — 55 до + 125 градусов по цельсию

  4. SVN Автор записи

    Mihail 2 :
    максимальная температура измерения у этого датчика который применяется в проекте составляет +125 градусов. а сам термометр какой минимальный и максимальный порог измерения имеет?

    Диапазон измерения температуры девайсом составляет диапазон измерения температуры датчиком минус 55_+125.
    А индикатор позволяет отобразить то минус 199,9 до + 999,9, но датчик такого кода не выдаст.

  5. W@TT

    А какая максимальная длина проводов к датчикам? И нужно ли их экранировать?

  6. SVN Автор записи

    W@TT :
    А какая максимальная длина проводов к датчикам? И нужно ли их экранировать?

    Вообще то шина 1-Wire, не любит различных наводок. Если не прокладывать провод датчиков рядом с силовым кабелем то прекрасно всё работает на значительных расстояниях без экранов. У меня длинна провода не превышает 5 метров и ни какого экрана нет. Если Вам необходимо более 10 метров, то можно поэкспериментировать с витой парой 5 категории.

  7. SVN Автор записи

    Если кому интересно, корпус использовал G1908.

  8. AnkeX

    А из чего и каким образом делалась лицевая панель на пульте управления?

  9. mallsa

    Часы бы ещё добавить. Ценная вещь. Какое время обновление показания?

  10. SVN Автор записи

    AnkeX :
    А из чего и каким образом делалась лицевая панель на пульте управления?

    Распечатывал на самоклейке лазерным принтером.

  11. SVN Автор записи

    mallsa :
    Часы бы ещё добавить. Ценная вещь. Какое время обновление показания?

    На часы заказа от родственников не было. Если уж сильно необходимо, будет время, займусь. Обновление температуры 1 раз в 4 сек.

  12. GetChiper

    Я считаю, именно для этого устройства, часы абсолютно не нужны.
    Они функционально там ни к чему (разве что для красоты).
    Никто-же не станет выходить в холод на балкон посмотреть время 🙂

    Или может подразумевается какой-то дополнительный функционал на базе часов?

  13. SVN Автор записи

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

  14. vist

    можно ли данный девайс ипользовать в инкубаторе может ли он поддерживать <1 градуса?

  15. SVN Автор записи

    vist :
    можно ли данный девайс ипользовать в инкубаторе может ли он поддерживать <1 градуса?

    Меньше 1 градуса? Наверное, Вы имеете ввиду десятые градуса. Если так, то в данном варианте в инкубаторе использовать нельзя, а вот если доработать программу, то возможно. Для инкубатора лучше, когда в алгоритме использовать ПИД регулятор и нагревателем управлять с помощью ШИМ.

  16. vist

    будем ждать может РОДСТВЕННИКУ это понадобится!!!!!

  17. SVN Автор записи

    vist :
    будем ждать может РОДСТВЕННИКУ это понадобится!!!!!

    Навряд ли такая мысль прейдёт в голову, из балкона сделать птицеферму 🙂

  18. Mihail 2

    я не пойму такой момент. общий катод тоже вместе соеденен всех 4-х индикаторов

  19. SVN Автор записи

    Mihail 2 :
    я не пойму такой момент. общий катод тоже вместе соеденен всех 4-х индикаторов

    А схема Вам ни о чём не говорит? Вы как в схематехнике? На ты или …? 🙂

  20. Mihail 2

    я со схемами на ты.

  21. SVN Автор записи

    Mihail 2 :
    я со схемами на ты.

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

  22. mallsa

    GetChiper :
    Я считаю, именно для этого устройства, часы абсолютно не нужны.
    Они функционально там ни к чему (разве что для красоты).
    Никто-же не станет выходить в холод на балкон посмотреть время
    Или может подразумевается какой-то дополнительный функционал на базе часов?

    Часы как доп функция. НЕ ДЛЯ БАЛКОНА! А для других возможностей установке устройств (на тролейбусе на тепловозе, машине) Вопрос к автору, время обновления нельзя уменьшить до микросекунд? ну скажем хотяб до 0.5 сек. НЕ ДЛЯ БАЛКОНСКОГО для других целей.

  23. SVN Автор записи

    Вопрос к автору, время обновления нельзя уменьшить до микросекунд? ну скажем хотяб до 0.5 сек. НЕ ДЛЯ БАЛКОНСКОГО для других целей.

    Датчик затрачивает на конвертацию температуры при разрешении 9 бит, 93 миллисекунды, при 10 бит – 188, при 11 бит – 375, при максимальном разрешении 12 бит – 750 миллисекунд (в данном варианте используется 12 бит). Чем меньше разрешение и частый опрос датчика, тем больше погрешность. Но есть ещё и режим динамической индикации, который ломать нельзя, а необходимо к нему подстраиваться. Теоретически при погрешности +- 1,5…2 градуса и использовании ЖКИ индикатора можно значительно чаще опрашивать датчик.

  24. comandor

    Спаял сие чудо техники.Показания на индикаторе появились сразу, но не те что хотелось бы увидеть.Пришлось поменять выходы контроллера 23 с 26 и 24 с 25 — на этом танцы с бубном закончились, в общем доволен.В ближайшее время буду ставить в погреб в гараже.И есть просьба сместиь и увеличить диапазон выставляемой температуры , хотя бы от +5(10)градусов до +25(30), так как я сам в этом не рублю ( хотя смотрел исходники но так и не понял где менять). Зараннее спасибо

  25. SVN Автор записи

    comandor :
    Спаял сие чудо техники.Показания на индикаторе появились сразу, но не те что хотелось бы увидеть.Пришлось поменять выходы контроллера 23 с 26 и 24 с 25 – на этом танцы с бубном закончились, в общем доволен.В ближайшее время буду ставить в погреб в гараже.И есть просьба сместиь и увеличить диапазон выставляемой температуры , хотя бы от +5(10)градусов до +25(30), так как я сам в этом не рублю ( хотя смотрел исходники но так и не понял где менять). Зараннее спасибо

    Не понял, почему показания у Вас были не правильные, и почему Вы меняли выхода, ведь они строго привязаны в программе. Если Вы его ставите в погреб, зачем Вам температура в погребе +30*С? Но если всё же необходимо изменить границы уставок: на странице «Termostat» находятся две подпрограммы — верхняя уставка (Hi-Ustavka) и нижняя уставка (Lo-Ustavka). В нижней части каждой подпрограммы есть переменная «DS-Ustavka=10» (нижняя граница уставок) и «DS-Ustavka=100» (верхняя граница уставок), 10 – это соответствует одному градусу, 100 — это соответствует десяти градусам. Вам необходимо изменить значение 10 на 100 и 100 на 300, что будет соответствовать нижней границе — 10 градусам и верхней границе – 30 градусам. Если всё же не сможете разобраться, создайте тему на форуме и я Вам скину туда программу с изменениями.

  26. comandor

    SVN большое спасибо за помощь, просто одно изделие будет стоять в погребе , а второе я приспособлю в старый совдеповский кондиционер ( наверное помните БК-2).А по поводу индикации-подключил выводы согласно схеме, а отображалось все зеркально.Отметки порогов были с правой стороны , а не как на фотках с левой — вот и пришлось поменять .А так все отлично

  27. SVN Автор записи

    Да помню 🙂 такой стоит в мастерской на даче. А по поводу индикации, я похоже понял почему у Вас получилось зеркально. На схеме счёт индикаторов с лево на право. А Вы похоже посчитали на оборот, 1_й у Вас это младшая цифра, а на схеме старшая. Вот ещё лучше сразу поставьте кварц и поменяйте соответственно фьюзы. Я заметил что иногда индикация «подрагивается», это от ухода частоты внутреннего генератора. С кварцем такого не наблюдается.

  28. comandor

    Я не стал заморачиваться и сразу впаял кварц, но если отвести взгляд в сторону — то боковым зрением все равно заметно слабенькое мерцание

  29. SVN Автор записи

    Если кварц 4 мГц, то можно при желании поэкспериментировать. Поднять частоту динамической индикации. После TIMSK и в прерывании по переполнению таймера 0, есть значение (150 -> TCNT0) которое задаёт частоту динамической индикации. Это число можете менять смело в приделах от 150 до 165. Но только в обоих случаях значение должно быть одинаковым. И оставить на том значении которое больше понравится. Я мерцание у себя не вижу.

  30. comandor

    спасибо , поэкспериментирую

  31. asdfgh

    To vist
    Точность даного термометра гдето 0,1 градуса(сверял с медицинским,ртутным — мерял себе температуру 🙂 ), так что на инкубатор самое то. Я тоже сварганил себе подобное на макетке. Тока никакого пафоса — 4х разрядный дисплейчик да 4ре резистора(никаких там тебе транзисторов итп.). Никак ету тварючку немогу отладить, датчик шлет какой-то треш(или я так думаю); не могу найти откуда роги в етой баги ростут. С содраным с нета исходника — все прекрасно пляшет.

  32. SVN Автор записи

    В программе есть корректировка температуры датчика для увеличения точности показаний, начиная от +30 и ниже. Но ориентир ставился только на датчики, которые были в наличии. Показания датчиков из других партий могут немного отличатся. Измерять температуру в инкубаторе этим девайсом можно, а вот рулить этой температурой без доработки программы, не получится. Не для этих целей был сделан 🙂

  33. Alex-63

    Уважаемый автор!Остался очень доволен Вашим термостатом.Но хочется,чтобы устройство стабилизировало температуру в более широком интервале(можно даже от-55 до +125).Пробовали менять границы уставок,почему-то не получилось скомпиллировать программу(в программировании-новичок),также поменяли фьюзы под внешний кварц 4 МГц,всё равно индикация мерцает.Если есть возможность,скиньте программу с изменениями на мой imail,буду очень признателен.

  34. SVN Автор записи

    Alex-63 :
    Уважаемый автор!Остался очень доволен Вашим термостатом.Но хочется,чтобы устройство стабилизировало температуру в более широком интервале(можно даже от-55 до +125).Пробовали менять границы уставок,почему-то не получилось скомпиллировать программу(в программировании-новичок),также поменяли фьюзы под внешний кварц 4 МГц,всё равно индикация мерцает.Если есть возможность,скиньте программу с изменениями на мой imail,буду очень признателен.

    Спасибо, рад, что Вам понравился девайс. А почему Вы себя определяете во множественное число, «пробовали менять границы уставок», «также поменяли фьюзы», или Вы переделывали программу не один?
    Давайте сделаем проще. Раз Вы новичок (кстати, я тоже новичок), 🙂 Вы зарегистрируетесь на форуме и в теме «Модификации устройства блога» создадите тему по модификации этого устройства и напишите более подробно, какой интервал уставок Вас интересует, таким образом этим модам сможет воспользоваться кто-то ещё, а не только Вы один.

  35. Alex-63

    Да , мне помогал более продвинутый товарищ , я всего-то раза три собирал устройства на микроконтроллерах . Идея по поводу «создать тему по модификации» понравилась . Интервал уставок — чем шире ,тем лучше . Жизнь длинная , мало ли , где пригодится столь прекрасное устройство . Кстати , проблема с изготовлением корпуса решается очень просто :спаиваеш из фольгированного текстолита ,обрабатываеш углы и грани , красиш баллончиком . Лёгкий , прочный , красивый ,кто не знает , никогда не угадает , из чего сделан .

  36. SVN Автор записи

    Alex-63 :
    Идея по поводу «создать тему по модификации» понравилась . Интервал уставок – чем шире ,тем лучше .

    Раз уж Вы согласны, в теме модификации выложите Ваш изменённый вариант, а я посмотрю, что Вы сделали не так.

  37. comandor

    Уважаемый автор!Cделал как вы сказали:»на странице «Termostat» находятся две подпрограммы – верхняя уставка (Hi-Ustavka) и нижняя уставка (Lo-Ustavka). В нижней части каждой подпрограммы есть переменная «DS-Ustavka=10» (нижняя граница уставок) и «DS-Ustavka=100» (верхняя граница уставок), 10 – это соответствует одному градусу, 100 – это соответствует десяти градусам. Вам необходимо изменить значение 10 на 100 и 100 на 300″, но вот появилась проблема — верхняя граница( значения меняются до 30) но не сохраняются, нижняя граница выше 10 не поднимается.Подскажите где ещё поменять значения или отправте на почту программку » bestvera@ukr.net «.Заранее спасибо.

  38. SVN Автор записи

    comandor :
    Уважаемый автор!Cделал как вы сказали:»на странице «Termostat» находятся две подпрограммы – верхняя уставка (Hi-Ustavka) и нижняя уставка (Lo-Ustavka). В нижней части каждой подпрограммы есть переменная «DS-Ustavka=10» (нижняя граница уставок) и «DS-Ustavka=100» (верхняя граница уставок), 10 – это соответствует одному градусу, 100 – это соответствует десяти градусам. Вам необходимо изменить значение 10 на 100 и 100 на 300″, но вот появилась проблема – верхняя граница( значения меняются до 30) но не сохраняются, нижняя граница выше 10 не поднимается.Подскажите где ещё поменять значения или отправте на почту программку » bestvera@ukr.net «.Заранее спасибо.

    Да вспомнил, есть ещё одна функция которая при входе в уставки сбрасывает их до значения 10 при больше 10. Программу поправил и выложил на форуме. http://www.forum.getchip.net/viewtopic.php?f=24&t=241

  39. comandor

    Настоящий , до ума доведённый проэкт – спасибо

  40. SVN Автор записи

    Просьба к тем кто уже использует мод в своих устройствах, протестировать работу термостата и отписать на форуме, так как мод не проверялся на «железе».

  41. Ter

    Уважаемый автор термостата, не силен в электротехнике, готов купить Ваше изделие С уважением, Валерий

  42. SVN Автор записи

    Ter :
    Уважаемый автор термостата, не силен в электротехнике, готов купить Ваше изделие С уважением, Валерий

    Не знаю даже как Вам помочь. Так как со свободным временем у меня большие проблемы. Уже несколько проектов лежат «мёртвым грузом», дожидаясь очереди. По сути, этот девайс не сложный в изготовлении. Главное чтобы руки были на месте. Напишите на форуме мне в личку или здесь оставьте свой E-mail. Может совместно что-то придумаем.

  43. comandor

    Приделал сей девайс к кондиционеру, половину лета проработал — полёт нормальный.На термоконтроллере выставлял границы 12(нижний)и 13(верхний)- в комнате тогда получалось 19-20 градусов.В качестве обогрева стоял кулер от компа (140мм)для забора теплого воздуха с улицы.Хотел исключить появления насморка, так как охлажденный воздух сухой и пересыхает носоглотка.Ещё раз спасибо автору.

  44. SVN Автор записи

    comandor :
    Приделал сей девайс к кондиционеру, половину лета проработал – полёт нормальный.На термоконтроллере выставлял границы 12(нижний)и 13(верхний)- в комнате тогда получалось 19-20 градусов.В качестве обогрева стоял кулер от компа (140мм)для забора теплого воздуха с улицы.Хотел исключить появления насморка, так как охлажденный воздух сухой и пересыхает носоглотка.Ещё раз спасибо автору.

    То есть Вы проверили МОД1 на работоспособность? Уставки выставляются от 1 до 120 *С?

  45. urfin

    Подскажите — первое самостоятельно собранное устройство при включении сразу загорается Err1, кнопка OK — 18r1 через 2с опять Err1, если чуть подержать — загорается светодиод Er48 и через 2с опять Err1. Где накосячил? Питаю от китайского бп 5в — 0,15А

  46. GetChiper

    Если у первого самостоятельно собранного устройства вообще что-то высвечивается — это уже здорово :)!
    Для начала пересмотреть печатку, промерять питание датчиков, заменить датчик…

  47. urfin

    @GetChiper
    с выводами датчика накосячил — в datasheet bottom view на распиновке не увидел.

  48. SVN Автор записи

    urfin :
    Подскажите – первое самостоятельно собранное устройство при включении сразу загорается Err1, кнопка OK – 18r1 через 2с опять Err1, если чуть подержать – загорается светодиод Er48 и через 2с опять Err1. Где накосячил? Питаю от китайского бп 5в – 0,15А

    Пересмотрел программу, да, действительно при такой ошибке, могут появляться «левые» цифры на индикаторе, при переключении показаний с датчика на датчик. Я Вас поздравляю, Вы единственный который указал на скрытую ошибку в программе, 🙂 постараюсь поправить по свободе.

  49. SVN Автор записи

    Программа исправлена.

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