Электронный термостат на основе мк

Термостат на DS18B20 и ATmega8

В схеме, можно применять светодиодные семисегментные индикаторы с общим катодом или анодом (2 прошивки). Датчик температуры DS18B20. Микроконтроллер ATmega8. Внутренний RC генератор 4 Meg. Желательно запрограммировать бит BODEN. В термостате, два порога, нижний, верхний.Алгоритм простой. Пороги это числа со знаком.

Р1-первый порог Р2-второй порог Сравниваются с измеренной температурой Тизм Если ( Тизм = Р2 ) то вывод=1; Главное помнить, что первый порог сбрасывает вывод. Второй устанавливает. Так например:при достижении 5гр. включить вывод, при снижении температуры до 3гр. выключить вывод. Р1=3Р2=5Для отрицательных температур: при температуре выше или равной -3гр.

включить вывод, при снижении температуры до –5гр. выключить вывод. Р1=-5

Р2=-3

(Все переключатели желательно замыкать на общий через резистор 1-2к).Для сохранения параметров в EEPROM, нужно их подтверждать нажатием SET. 

Первая версия.

Управляется 3 кнопками set плюс и минус. При нажатии Set на экране:1 02 – первый параметр (при его достижении вывод уст в 0). следующее нажатие Set 2 05 – второй параметр (при его достижении вывод уст в 1).Датчик настроен на разрешение 12 бит. Время оцифровки температуры – 1 секунда. Датчик подключается 3 проводами.

Исходник, прошивки, схема для протеуса. v1.rar

Вторая версия (3 цифры).

Удалены десятые градуса, используется 3 цифры (ZN0..2), при нажатии SET на 0,7 сек. появляется надпись P.oF – первый порог, при достижении этой температуры вывод PD5 сбрасывается.P.

on – второй порог, при достижении этой температуры вывод PD5 устанавливается.Добавлено: если температура ниже 2 (верхнего) порога вывод PD6 установлен, иначе сброшен до снижения температуры до 1 (нижнего) порога.

Датчик настроен на разрешение 9 бит. Время оцифровки температуры – 0,2 секунды. Скачать.

Третья версия.Добавлен таймер. Через время Ттайм: выключение вывода термостата, включение вывода таймера на время Ттайм_вкл. При достижении времени Ттайм_вкл: выключение вывода таймера, разрешение работы термостата. Нажатие Set, появляется надпись на 1сек:Р1 – нижний порог, Р2 – верхний порог, t1 Ч. – уст. часов Ттайм (затем на экране 1 00), t1 n. – уст.

минут Ттайм (затем на экране 2 00), t2 Ч. – уст. часов Ттайм_вкл (затем на экране 3 00),t2 n. – уст. минут Ттайм_вкл (затем на экране 4 00);Включить десятые градуса – замкнуть PD4 на землю. Включить таймер – замкнуть PD3 на землю. Выход таймера – PD6. Датчик настроен на разрешение 10 бит. Время оцифровки температуры – 0,23 секунды. Датчик подключается 3 проводами.

Исходник, прошивки, схема для протеуса. v3.rar

Версия 3.1.

Добавлен второй датчик, изменен таймер.Через установленное время вывод таймера включается, термостат запрещается. Термостат снова включается при достижении температуры второго датчика выше или равной порога P tA.

 Р1 – нижний порог 1 датчика, Р2 – верхний порог 1 датчика, P tA – порог 2 датчика. t1 Ч. – уст. часов, t1 n. – уст. минут.Датчик настроен на разрешение 12 бит. Время оцифровки температуры – 1 секунда. Датчик подключается 3 проводами.

Прошивки, схема. v3.1.rar

Четвертая версия.

Новая версия, все добавления относительно 1 версии.Разрешение порогов увеличено до десятых градуса.Добавлено еще два порога. Управляют выводом PD6(12). Алгоритм работы первых порогов:Если температура ниже 2 (верхнего) порога вывод (PD5) установлен, иначе сброшен до снижения температуры до 1 (нижнего) порога.

Алгоритм работы вторых порогов:Такой же как в предыдущих версиях (инвертирован по отношению к первыми порогам). При достижение второго порога вывод устанавливается, при снижении температуры до первого порога сбрасывается.При нажатие Set появляется надпись Р1(2,3,4), далее значение порога (25,7). Датчик настроен на разрешение 12 бит.

Время оцифровки температуры – 1 секунда.

Скачать, исходник, прошивки. v4.rar

Схема, монтажная плата (Sprint-Layout 5.0), схема для протеуса. Прислал Анатолий Николаевич.

Версия 4.1.В этой версии можно программировать работу термостата по разности температур между датчиками, для управления насосом отопления. Тоесть, например, если разница между обраткой и подачей воды с котла, станет 20гр., то насос включить, а если уменьшится до 5гр., то насос выключить.

 Нажатие SET, на экране: Пороги термостатаЕсли температура ниже 2 (верхнего) порога вывод (PD5) установлен, иначе сброшен до снижения температуры до 1 (нижнего) порога.tr.oF – нижний порог.tr.On – верхний порог.Пороги по разности температуры между 1 и 2 датчиком P. On – разница между обраткой и подачей воды с котла станет, например 20гр.

, то насос включить.P.OF – а если уменьшится, например до 5гр., то насос выключить. Настройки времени для трех режимов. П ВР. – Время, которое отображается температура подачи воды.о ВР. – отображается температура обратки.Р ВР. – отображается реальная разница между подачей и обраткой.

END При включении, если контрольная сумма параметров не совпадает, то на экран выводится надпись EEP. 

Исходник, схема, прошивки, схема для протеуса v4.1.rar

Версия 4.2.Управление только одним насом. Удалена 4 цифра, удален термостат. Осталось только 2 порога:Нажатие SET, на экране: P. On P.OFF END Время для 3 режимов установлено 5 секундам. 

Скачать прошивку.

Пятая версия.А здесь ничего не проинвертировано, и такое можно:). Алгоритм для всех порогов: Если температура ниже 2 (верхнего) порога вывод установлен, иначе сброшен до снижения температуры до 1 (нижнего) порога.

Скачать прошивку. 

Шестая версия.

Отличия такие: для вторых порогов свой датчик, тоесть два термостата. Второй датчик DS18B20, подключается аналогично первому, на ножку РС5(28).При замыкании PD3 на землю, показывается температура второго датчика.

Выход второго термостата ножка PD6(12).Датчики настроены на разрешение 12 бит. Время оцифровки температуры – 1 секунда.

Скачать прошивку. Исходник для 4,5 и 6 версий имеет различия только в сравнении порогов.

Седьмая версия.Добавлен таймер. Для управления введены 2 кнопки и переключатель.

Для автоматической работы таймера, следует замкнуть вывод PD4 на землю.
Выход таймера PD7.
Таймер по типу 3 версии, только не оказывает влияния на выхода термостата, и может быть включен постоянно или на одно срабатывание. Для индикации работы таймера в первой цифре горит запятая.
Кнопка СТАРТ ТАЙМЕРА, для одноразового запуска (на PD4 лог. 1). При включенном таймере ее нажатие отключает таймер. В автоматической работе таймера, ее нажатие, переинициализирует таймер. Если время на которое включается вывод установлено нулю (3 00; 4 00) , вывод останется включенным постоянно, таймер можно запустить заново нажав СТАРТ ТАЙМЕРА. 
Принцип настройки времени таймера такой же как в 3 версии. Только вместо кнопки SET следует нажимать УСТАНОВКА ТАЙМЕРА.
Датчик настроен на разрешение 12 бит. Время оцифровки температуры – 0,87 секунды.
Исходник, прошивки, схема для протеуса. v7.rar

Версия 7.1.

Все выхода перенесены на микросхему 74НС595.
При включенном таймере вывод ТАЙМЕР ВКЛЮЧЕН, мигает с периодом 0,5сек.
Если соблюдается условие измеренная температура больше Р1 и меньше Р2, 
то включен вывод – ТЕМПЕРАТУРА ДАТЧИКА 1 В НОРМЕ. Тоже для второго датчика.

Вывод ОХОЛОЖДЕНИЕ ДАТЧИК 1 включается при значении температуры Р2 + 0,2 гр. и выключится при Р2 – 0,2 гр.
Добавлена возможность устанавливать время показа каждого датчика. При отображении первого датчика вывод ПОКАЗ. ДТ. 1 включен.

Время отображения датчиков, устанавливается в установках таймера соответственно параметры t d1 и t d2 .
Следующий за ними седьмой параметр dPE устанавливает задержку на включениевыкл.

выводов Q5-Q7, по принципу через сколько считанных значений температуры (время оцифровки температуры – 0,87 секунды), можно менять состояние выводов.

Исходник, прошивки, схема для протеуса v7.1.rar.

Восьмая версия.Удален второй датчик (РС5). Пороги 3, 4 привязаны к первому датчику и инвертирован выход.

Скачать прошивку.

Автор Дмитрий Мосин. Сайт автора.

Обсудить статью на форуме

Источник: http://cxema.my1.ru/publ/skhemy_ustrojstv_na_mikrokontrollerakh/ustrojstva_na_mk/termostat_na_ds18b20_i_atmega8/29-1-0-2903

Термостат на Attiny2313 и DS18B20

В этой статье расскажу о сборке цифрового термостата, который бы измерял температуру и поддерживал ее на определенном, заранее установленном уровне. Как то мне на работе подкинули задачу собрать термостат для контроля и удержания в заданных пределах температуры горячей воды, которая подается в бытовые помещения. Тогда будем решать! Сразу было решено собирать цифровой прибор.

Теперь возник вопрос какой тип термодатчика применить? Так как температура будет контролироваться в баке, в котором находится ТЭН и особой точности тут не нужно, да и температуры не большие, то сразу отказался от термопар и термосопротивлений, во-первых достаточно дороги они и требуют сложной входной части прибора (для термопар – компенсация термо — Э.Д.

С холодных концов, для термосопротивлений – компенсация сопротивления соединительной линии). Тут вспомнил про цифровые датчики температуры фирмы Dallas (ныне MAXIM). Одно время я долго работал с датчиком DS1821. Микросхема DS1821 может работать в режиме термометра или в режиме термостата. В первом из этих режимов DS1821 обеспечивает измерение температуры в диапазоне -55..

+125°C с дискретностью 1°C. Самым привлекательным является то, что такой термометр уже откалиброван на заводе, гарантированная точность составляет +1°C в диапазоне 0..+85°C и +2°C во всем диапазоне рабочих температур. На ней я делал простые термостаты с верхним и нижним пределом срабатывания.

Но, в данной ситуации мне нужен легко перестраиваемый прибор на другое значение интервалов температуры. А этот датчик нужно перепрограммировать на другой диапазон. Как – ни будь напишу статью про этот датчик, он довольно интересный! Этот датчик так же можно заставить работать как термометр, но выбор мой пал на более новый из этого семейства DS18B20.

DS18B20 – цифровой термометр с программируемым разрешением, от 9 до 12–bit, которое может сохраняться в EEPROM памяти прибора.DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии, так и работать в группе. Все процессы на шине управляются центральным микропроцессором. Диапазон измерений от –55°C до +125°C и точностью 0.

5°C в диапазоне от –10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite power”), при отсутствии внешнего источника напряжения. Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20установленных на одной шине.

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

Это низкоскоростной двунаправленный полудуплексный последовательный протокол обмена данными использующий всего один сигнальный провод. Естественно требуется еще и возвратный (земляной) провод. Имеется несколько типов сигналов, определенных 1-Wire протоколом — импульс сброса, импульс присутствия, запись 0, запись 1, чтение 0 и чтение 1.

Все эти сигналы, за исключением импульса присутствия, формируются на шине главным устройством — MASTERом. В нашем случае это микроконтроллер. Принцип формирования сигналов во всех случаях одинаковый. В начальном состоянии 1-Wire шина с помощью резистора подтянута к плюсу питания.

Главное устройство «проваливает» на определенное время 1-Wire шину в ноль, затем «отпускает» ее и, если нужно, «слушает» ответ подчиненного (SLAVE) устройства. В нашем случае подчиненное устройство — термометр DS18B20. Блок — схема DS18B20 (DS18S20, DS1820)Схема подключения с внешним питанием датчиковМожно подключать несколько датчиков параллельно.

Схема подключения датчика DS18B20 в режиме паразитного питанияВывод Vdd соединяется с GND, а 1-Wire шина дополнительно подключается к источнику питания через полевой транзистор. Когда датчик DS18B20 выполняет преобразование температуры или копирует данные из ОЗУ в EEPROM память, он потребляет ток до 1,5 мА. Этот ток может вызывать недопустимое снижение напряжения на 1-Wire шине.

Чтобы этого не происходило, 1-Wire шину на время выполнения этих операций подключают к источнику питания. Для этого и нужен полевой транзистор. Можно обойтись и без транзистора, но например когда соединительный кабель длинный, могут происходить сбои и работа будет не устойчива. Датчик выбрали, теперь можно подумать и о схеме устройства сбора данных с датчика, индикации и управления нагрузкой.

Схем термостатов в интернете много, поэтому изобретать велосипед не стал, а взял схему вот отсюда

Вот покрупнее Схема довольно простая, ничего лишнего, удобная индикация и управление. Схему немного доработал. Вместо реле, которое коммутирует нагрузку, поставил опторазвязку на сборке MOC3041 и симистор Т122-25, который будет включать ТЭН. Кнопками “+” и “-” выставляется нижний порог температуры. В режиме изменения перед температурой отображается знак «t».При одновременном нажатии обеих кнопок термостат входит в режим установки dt (дельта температуры). По умолчанию он равен 1, т.е. если мы кнопками “+” и “-” выставили температуру 30 градусов, то температура будет поддерживаться в пределах от 30 до 31 градуса. Если dt установить 2, то температура будет поддерживаться в пределах от 30 до 32 градусов.Если нет нажатий кнопок в течении 5 секунд индикация возвращается к отображению измеренной температуры. В режиме измерения температуры индикатор отображает текущую измеренную температуру, и в первом сегменте символ «L» обозначает включенную нагрузку. Например: — установленная температура 30 градусов, дельта 1 градус, измеренная температура 27,0 градуса. На индикаторе будет— установленная температура 30 градусов, дельта 1 градус, измеренная температура 32,0 градуса. На индикаторе будетТак же данный термостат можно использовать для холодильника, только выход на исполнительное устройство нужно брать с вывода 6 микроконтроллера. Так как термостат позволяет выставлять температуру до +125 градусов, а мне этого не нужно, да и кто может кнопочки поклацать захочет ради интиреса и наклацает температуру воды в 90 градусов, то было решено ограничить диапазон от 0 до 60 градусов. Для этого на том же сайте есть проект в CodeVisionAVR, открываем его, в файле kbd.c находим следующий код

if (T_LoadOn > 450) { T_LoadOn –; RefreshDisplay();

}

Это нижний предел выставляемой температуры. В файле termostat_led.

c есть пояснения по форме представления температуры

//температура для удобства представлена так: // — до 1000 = отрицательная // — 1000 = 0 // — больше 1000 = положительная // — 0,1°С = 1 //——————————— //-55°C = 450 //-25°C = 750 //-10.1°C = 899 //0°C = 1000 //10.1°C = 1101 //25°C = 1250 //85°C = 1850

//125°C = 2250

Т.е 450 это -55 градусов (1000-550=450), а мне нужен 0 градусов. Тогда 0 градусов будет 1000. Изменяю код

if (T_LoadOn > 1000) { T_LoadOn –; RefreshDisplay();

}

Теперь разберемся с верхним пределом

if (T_LoadOn

}

Тут число 2250 означает верхний предел температуры в 125 градусов ( 1000+1250=2250), а мне нужно 60 градусов, тогда 1000+600=1600 Меняем код и получаем

if (T_LoadOn

}

Далее нажимаем в CodeVisionAVR кнопочку make the projekt и забираем готовый файл для прошивки. Вот так все просто. Термостат собран на печатной плате. Индикаторов для динамической индикации на тот момент не нашлось, были в наличии только сдвоенные для статики.

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

Вот и вся конструкция. В работе показала себя надежно, сбоев замечено не было. Файлы

Прошивка для индикаторов с общим анодом

Прошивка для индикаторов с общим катодом
Исходники
Даташит на DS18B20Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Источник: http://electronics-lab.ru/blog/mcu/60.html

Электронный термостат на микроконтроллере Attiny2313. Схема и описание

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

Этот электронный термостат на микроконтроллере достаточно прост и не требует много радиокомпонентов.

Основа его – микроконтроллер Attiny2313, функция которого – опрос датчика температуры DS18B20, управление исполнительным устройством и вывод информации на экран трехразрядного светодиодного индикатора с общим анодом. Диапазон поддерживаемой температуры термостата можно уставить в диапазоне от 0 до 99,9 градуса.

Переключатель SA4 предназначен для переключения режима управления исполнительным устройством.

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

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

В дежурном режиме на светодиодном индикаторе отображается фактическая температура. Шаг отображения температуры составляет 0,1 градуса, а при температурах ниже минус 9,9 градуса с шагом в 1 градус, так как первый разряд индикатора отображает знак минус.

Порядок управления электронным термостатом

Как уже было сказано выше, кнопка SA4 предназначена для выбора типа режима управления исполнительным устройством (режим нагрева или охлаждения) Для того чтобы узнать текущую поддерживаемую температуру, необходимо нажать кнопку SA3. Кнопки SA1 и SA2 предназначены для изменения температуры и ее записи в память микроконтроллера Attiny2313.

Для изменения значения порога термостата нужно нажать и удерживать кнопку SA3 и одновременно при помощи кнопок SA1 и SA2 увеличивать или уменьшать значение температуры. Теперь чтобы микроконтроллер записал в память данное значение нужно отпустить кнопку SA3, а затем одновременно нажать на SA1 и SA2.

Блок коммутации нагрузкой собран на оптопаре VD1 и симисторе VS1. Питание схемы осуществляется от маломощного трансформатора (ток вторичной обмотки около 0,15А), напряжение, с вторичной обмотки которого выпрямляется диодами VD1 и VD2 и стабилизируется микросхемы 78L05.

При программировании микроконтроллера Attiny2313 программатором необходимо выставить фьюзы следующим образом:

  • CKSEL0=0
  • CKSEL2=0
  • CKSEL3=0
  • SUT0=0
  • SUT1=0

Скачать прошивку (1,1 Mb, скачано: 2 957)

Источник: Радиоконструктор, 7/2012

Источник: http://www.joyta.ru/6132-elektronnyj-termostat-na-mikrokontrollere-attiny2313/

Источник: http://cxema21.ru/publ/mikrokontrollery/zashhita_i_kontrol/termostat_na_atmega8_i_lcd1602_bascom_avr/22-1-0-275

Термомостат на микроконтроллере

Источник: http://elwo.ru/publ/skhemy_na_mikrokontrollerakh/termomostat_na_mikrokontrollere/9-1-0-264

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

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

Схема термостата:

Устройство сделано на базе микроконтроллера ATmega8. Индикатор применен символьный двухстрочный 1602 компании Winstar (или аналог), температурный датчик DS18B20.

 Этот термометр–терморегулятор позволяет измерять и поддерживать температуру от -55 °C до +125 °C, с точностью 0.1 °C.

 Изначально он разрабатывался для управления инкубатором, но после небольшого изменения программы микроконтроллера, диапазон поддерживаемых температур был существенно расширен.

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

В этом режиме, кнопка SB1 увеличивает значение поддерживаемой температуры, а SB2 – уменьшает. Длительное нажатие на одну из этих кнопок, приведет к быстрому изменению значения температуры.

Читайте также:  Реле контроля фаз

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

Нажатие на кнопку SB1, отобразит поддерживаемую терморегулятором температуру в нижней строке индикатора. Температура отображается все то время пока нажата и удерживается кнопка, сразу после отпускания кнопки информация с экрана исчезает.

Терморегулятор может работать как на нагревание (например, в инкубаторе), так и на охлаждение (скажем, в холодильнике).

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

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

Видео работы:

Микроконтроллер работает от внутреннего задающего генератора на 4 мГц. В устройстве используются один датчик, который подключен к порту PC2 микроконтроллера..Печатная плата не разрабатывалась, на фотографиях использована макетная плата которая описывалась в  статье.

прошивку (~5кб.)

Термомостат на микроконтроллере

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

Учитывая возможную необходимость измерять температуру с точностью до десятых долей градуса, здесь так-же реализована эту возможность, совместив диапазон термометра от ?55°С до +125°С с трехразрядным семисегментным индикатором.

Десятые доли градусов индицируются только в диапазоне ?10…+100°С, другие температуры отображаются уже без десятых долей.

Имеется режим двухпорогового термостата, то есть работа с гистерезисом, с противофазными выходами, что позволяет использовать устройство для поддержания температуры от ?50°С до +99°С как путем управления нагревателем, так и охладителем.  Схема термостата представляет собой не полностью завершенное устройство, а лишь его основу: источник питания и выходные каскады можно подключить любые. 

     Микроконтроллер типа Atiny26, датчик – DS18S20 (DS1820), его следует вынести на проводах в нужное место подальше от нагревающихся компонентов, способных исказить показания. Питание 5В можно получить от любого источника – на схеме показан стабилизатор типа 7805. Индикатор – трехразрядный 7-сегментный «динамический» (с общими анодами или катодами – все равно).

В моем случае это был дисплей, который стоит в отечественных телефонах с АОН Русь. так что если есть нерабочий телефон, (да и рабочий тоже, для полезного дела не жалко!), то можно выковырять из него. Кнопка SB1 – любая.

В прошивке реализована посегментная динамическая индикация, поэтому число токоограничительных резисторов сведено к трем, их сопротивление должно ограничивать ток через сегмент индикатора на уровне не более 30 мА.

 
     Выходы out1 и out2 способны работать с током до 40 мА, поэтому оконечный каскад может быть любым – от маломощного пятивольтового реле до мощного транзисторного ключа. Эти выходы работают всегда в противофазе. 
     В устройстве имеется пять функциональных режимов: 
– Индикация температуры.
– Индикация верхнего порога термостата.

– Индикация нижнего порога термостата.
– Коррекция верхнего порога.
– Коррекция нижнего порога.
     Термостатирование ведется постоянно в любом из рассмотренных режимов. Переключение уровня при повышении температуры на выходах происходит, когда температура превышает верхний порог, а при понижении температуры – когда опускается ниже нижнего.

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

     Переключение первой тройки режимов осуществляется кратковременным нажатием на кнопку, причем только режим 1 стабильный – остальные автоматически переходят к нему, если кнопка не нажимается более 2,5 секунд.

 Из режимов индикации порогов можно перейти к режимам изменения соответствующего порога, если нажать и удерживать кнопку более 2,5 секунд.

Как только включается режим изменения значения порога, сразу начинает мерцать соответствующий сегмент А или D на первом индикаторе (признак коррекции порога), и одновременно, пока нажата кнопка, происходит быстрое изменение значения.

Дождавшись, когда порог «проскочит» желаемое значение, нужно отпустить кнопку. После этого можно кратковременными нажатиями скорректировать значение в противоположном быстрому изменению направлении. Если при удержании кнопки происходит изменение не в том направлении – надо отпустить ее и снова нажать надолго.

     Например, установлены пороги -5 и +15 градусов, нужно сделать их -2 и +2. Включаем режим коррекции верхнего порога, нажав и удерживая кнопку во втором режиме. Спустя 2,5 секунды значение начинает быстро меняться в сторону увеличения. Дождавшись, когда появится на индикаторе 15, отпускаем кнопку.

Если на индикаторе появилось 16 – нажимаем кнопку кратко и значение уменьшается на 1, то есть становится 15, что и было нужно. Не трогаем кнопку 2,5 секунды – мерцание сегмента А прекращается – снова включен режим 2. Нажимаем кнопку кратко, включая тем самым режим 3. Теперь нажимаем кнопку надолго и ждем, пока включится режим коррекции нижнего порога.

Как только замерцал сегмент D, значение начинает быстро уменьшаться – ждем, пока оно не достигнет значения -2 и отпускаем кнопку.

Кратковременным нажатием кнопки возвращаем по одному проскоченному градусу… Далее – как и ранее: не трогаем кнопку 2,5 секунды, по и после выключения режима коррекции не трогаем кнопку – в момент автоматического включения режима 1 произойдет запоминание новых значений порогов.

     Стоимость всего термометра с программатором выходит на сумму до 10 уе. самые дорогие элементы – это микросхема программатора, микроконтроллер и датчик температуры. Файл прошивки качаем на .

   Схемы на микроконтроллерах