» » Термометр + термостат на микроконтроллере PIC16F876 и датчиках DS18B20

 
 
 

Термометр + термостат на микроконтроллере PIC16F876 и датчиках DS18B20

Разместил dedmazay 28 апреля 2014. Просмотров: 10 704

8
Термометр

История этого термометра началась в далёком 2011 году. Мне понадобилось в подвале частного дома, в холодные русские зимы, включать обогреватель для того чтобы не замерзала вода в трубе. А так как труба идёт через весь подвал, измерять температуру требовалось в нескольких точках.
Также включать и выключать обогреватель надо было исходя из какой-то логики, опираясь на данные нескольких датчиков. И мной был разработан термометр с возможностью работы с несколькими датчиками (от 1 до 4) и развитой логикой управления обогревателем (охладителем). За основу был взят микроконтроллер Microchip PIC16C73B, датчики DS18B20.

Для читателей сайта datagor.ru данная конструкция была доработана под более распространенный микроконтроллер PIC16F876(A), убрана микросхема памяти AT24C16, добавлено сохранение минимальной и максимальной температуры в EEPROM.
Вкусные подробности далее.

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

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

Светодиоды LED2-LED5 показывают, данные какого датчика в данный момент отображаются на индикаторе, светодиоды LED6 и LED7 отображают включение силового ключа и установленный режим (нагреватель или охладитель).

Описание работы программы

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


Режим общих настроек термометра

Начнём с самого простого, с общих настроек. Чтобы войти в этот режим, надо в течении 3 секунд удерживать нажатой кнопку S1. Первый пункт меню, режим работы силового устройства, нагреватель или охладитель. Пункт меню отображается "out", режим нагревателя "H" от слова HOT (жара), режим охладителя "C" от слова COLD (холод).
Разница между ними в том, что в режиме нагревателя силовое устройство включается при снижение температуры до нижнего уровня (величина уровня и логика управления устанавливается в меню датчика) и выключается при достижении верхнего, а в режиме охладителя наоборот, при достижении верхнего уровня силовое устройство включается, а при достижении нижнего выключается.

При включении силового устройство режим индицируется соответствующим светодиодом. Режим нагревателя у меня индицирует красный светодиод, режим охладителя - синий. Режим переключается кнопками S3 и S1, переход в следующий пункт меню - кнопка S2.

Следующий пункт меню - время переключения на следующий датчик при отображении температуры. Пункт меню отображается "dt", время переключения меняется кнопками S3 и S1. Всего существует четыре значения: 1,2,3,4 секунды. Мне удобнее 1секунда (значение по умолчанию), остальные сделал на всякий случай. Чтобы выйти из настроек с сохранением параметром, надо нажать и удерживать в течении 3 секунд кнопку S2, выхода без сохранения параметров не существует.

Режим настроек датчика

Здесь будет посложнее. Чтобы перейти в раздел настроек датчика нужно в режиме отображения температуры сначала нажать кнопку S2, затем кнопками S1 и S3 выбрать нужный датчик, затем нажать и удерживать в течении 3 секунд кнопку S2, и вы войдёте в режим настроек данного датчика.

При определённом навыке, можно сразу нажать и удерживать в течении 3 секунд кнопку S3, поймав тот момент, когда отображается нужный датчик.
При входе в этот режим цифровой индикатор гаснет, остаётся гореть только светодиод указывающий номер датчика, двигая кнопками S3 (влево) и S1 (вправо), мы можем выбрать номер отображения данного датчика.
Так как при регистрации датчиков в термометре они сортируются по встроенному коду ROM, а мне хотелось бы чтобы они отображались в определённой последовательности, например в моём случае от ближнего конца подвала к дальнему.
Данная настройка позволяет отображать температуру в том порядке, в котором удобно, а не в порядке следования ROM датчиков.
Чтобы перейти в следующий пункт меню, надо нажать кнопку S2.

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

Аналогично устанавливается логика выключения силового устройства в следующем пункте меню, в которое мы попадаем нажав кнопку S2. На индикаторе отображается "OFF".

Нажав кнопку S2, мы попадаем в следующий пункт меню, это установка верхнего уровня управления силовым устройством. Он отображается буквой "H" (от HIGH - высокий) в крайнем левом сегменте индикатора. Кнопками S1 (уменьшает) и S1(увеличивает) выставляем температуру уровня, если кнопку S1 или S3 удерживать более 3 секунд, то к значению температуры начинает прибавляться (вычитаться) не 1, а 10.

Также выставляем температуру нижнего уровня в следующем пункте меню, в который попадаем нажав кнопку S2, он отображается "L" (от LOW нижний). По нажатию кнопки S2 мы попадаем в следующий пункт меню по кругу, чтобы выйти из меню настроек датчика с сохранением параметров, надо нажать и удерживать кнопку S2 в течении 3 секунд.

Чтобы понять логику управления силовым устройством, разберём пример. Предположим, что у нас подключено четыре датчика. Два из них (1 и 2) включены в режим И и два (3 и 4) в режим ИЛИ на включение, и все в режим ИЛИ на выключение. Термометр включен в режим охладителя.

Установлены следующие пороги (верхний, нижний) д1(70,50), д2(65,53), д3(30,20), д4(80,70). Установилась следующая температура: д1(75), д2(60), д3(28), д4(75). В данном состоянии охладитель включён не будет, несмотря на то что на д1 превышен порог, так как он включён в режим "И", а на д2 верхний порог не достигнут. И на датчиках д3, д4 верхний порог тоже не достигнут. Чтобы включился охладитель, необходимо, чтобы верхний порог был достигнут или на одном из датчиков д3, д4, или на обоих датчиках д1, д2.

При температуре д1(76), д2(65), д3(29), д4(79) охладитель включится. Теперь, чтобы он выключился, необходимо, чтобы на одном из датчиков (включен режим "ИЛИ" для всех датчиков на выключение) температура достигла нижнего порога. При температуре д1(66), д2(57), д3(20), д4(73) охладитель выключится. Если возникнет конфликт, часть датчиков будет включать охладитель, часть выключать, то охладитель останется включенным, так как включение имеет приоритет перед выключением. Например при температуре д1(66), д2(57), д3(20), д4(80) охладитель выключен не будет до тех пор пока температура на датчике д4 не опуститься ниже верхнего порога.

Коды ошибок, которые может выдавать термометр:
Err 1 - Не подключено ни одного датчика, термометр постоянно пытается найти подключенные датчики, как только находит, термометр переходит в режим отображения температуры. После того, как термометр перешёл в режим отображения температуры, поиск датчиков больше не производится, чтобы найти вновь подключенные датчики, надо выключить затем снова включить питание термометра.
Err 2 - Сбой оперативной памяти микроконтроллера одновременно со сбоем чтения EEPROM. Может случиться при плохом питании микроконтроллера.
Err 3 - Подключено больше чем 4 датчика.
Err 4 - Ошибка записи EEPROM.
Err 6 - Ошибка датчика. Т.е. Датчик при включении был найден, а затем при работе не отвечает. Причин может быть несколько, плохая проводка, длинный кабель, помехи, плохое питание.
Err 8 - Рестарт сторожевого таймера. Глюк программы, У меня такого не случалось.
Err 5, 7, 9 - Случаться тоже не должны, объяснить сложно, что они значат, если вдруг случаться, пишите, будем разбираться.

Конструкция

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

Разработанная печатная плата рассчитана на установку такого телефонного четырёх контактного разъёма, обратите внимание, что существуют разъёмы у которых 6 мест под контакты, а установлено только четыре. Так вот они к данной плате не подойдут, они шире. Плата односторонняя, без перемычек, разрабатывалась под корпус ProsKit 203-125A.
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.

Термометр сверху Термометр сбоку


Схема и печатная плата датчика:

Схема датчика Плата датчика

Если кабель длинный, на крайнем датчике необходимо установить дополнительный резистор (терминатор) между питанием и выводом данных, 4.7кОм (при длине шлейфа более 15 метров и нестабильной работе можно попробовать уменьшить сопротивление этого резистора).
Корпус для датчика фирмы GAINTA G401325B, крышка G401325L.
Датчик


Силовое устройство

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

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

Файлы

Во вложении файлы прошивки для микроконтроллера PIC16F876 и PIC16F876A.
Termometr_hex.zip | Файл 18,26 Kb загружен 46 раз.

Биты конфигурации включены в HEX файл, на всякий случай, дублирую:
#FUSES WDT
#FUSES HS
#FUSES PUT
#FUSES NOPROTECT
#FUSES BROWNOUT
#FUSES NOLVP
#FUSES NOCPD
#FUSES NOWRT
#FUSES NODEBUG


Файлы Eagle схем и печатных плат:
Termometr_Eagle.zip | Файл 167,34 Kb загружен 51 раз.
Алексей Ермаков (dedmazay)
Нижний Новгород
Профиль dedmazay
С паяльником с 5 класса.
Спаял много, две конструкции опубликованы в журнале Радио:
прибор IR-master для анализа сигналов пультов ИК диапазона
опубликован в Радио №8 за 2008 год и экономичный таймер №5 за 2004 год.
Пришёл пообщаться.
 

Понравилось? Палец вверх!

  • всего лайков: 33

Поделись с друзьями!

Связанные материалы:


Автомат управления бойлером Ariston. Экономим электроэнергию и ресурс котла

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

Термостат для отопления дачи инфракрасными обогревателями Иколайн. Дежурный режим,

Как говорит мой коллега, что бы Гаврилов ни делал — все равно термометр получается… Новая статья...

PIC16F876: таймер вытяжного вентилятора в ванной и электронный термометр

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

Таймер от 1 секунды до 100 часов на микроконтроллере ATMEL AT89C2051

Картинка от Novelty Kitchen Timers В радиолюбительской практике частенько необходим таймер:...

Немного про шину 1-Wire и цифровой термометр DS18b20

Фотка от www.150cc.ru Здравствуйте, друзья. Хочу предложить вашему вниманию несколько простых...

USB адаптер для чтения и программирования цифровых термостатов MAXIM/DALLAS DS1821

В статье описано, как за час сделать простой USB-адаптер для чтения/записи цифровых термометров...

Простой цифровой термометр на ATmega8535 + DS18B20

Доброго времени суток! Представляю простой, цифровой термометр на индикаторе ИЖЦ21-4/7,...

Цифровой измеритель остатка топлива и напряжения АКБ для автомобиля (ATMega8 и

Не знаю кому как, а мне лично не нравится точность, вернее ее полное отсутствие у автомобильного...

Счётчик витков для намоточного станка на ATtiny13

Случилось так, что припекло мне трансформатор мотать, всё бы хорошо, да станка только не хватает -...

Регулятор громкости на TDA7313 и PIC 16F876A.

Для новой конструкции мне понадобился блок управления громкостью и тембрами. Я выбрал...

Датчик угла поворота. Сельсин-датчик и приёмник на микроконтроллере.

Схема сельсин-датчика и программа микроконтроллера практически полностью взяты из журнала Радио №4...

Радиолюбительские конструкции на PIC микроконтроллерах, Кн.2, Н.И. Заец

Радиолюбительские конструкции на PIC микроконтроллерах, Кн.2, Солон-Пресс, 2005г. Автор: Н.И.Заец ...
<
  • Гражданин
28 апреля 2014 15:25

Павел / tarip

  • С нами с 22.02.2010
  • Ушёл в реал Пользователь offline
  • 30 комментариев
  • 4 публикации
 
  • 0
Привет! На корпусе пленка? Принтер струйник или типография? smile

<
  • Гражданин
28 апреля 2014 15:46

Алексей Ермаков / dedmazay

  • С нами с 8.10.2009
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 5 публикаций
 
  • 0
Да, на корпусе пленка, самоклейка. Распечатал у знакомых, на цветном лазерном принтере. Так как кнопки выступают, за три года эксплуатации рисунок не пострадал.

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

<
  • Гражданин
28 апреля 2014 22:21

Павел / honder

  • С нами с 10.11.2009
  • Ушёл в реал Пользователь offline
  • 7 комментариев
  • 0 публикаций
 
  • 0
А солнце с орлом с флага Казахстана!

<
  • Гражданин
28 апреля 2014 23:26

Алексей Ермаков / dedmazay

  • С нами с 8.10.2009
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 5 публикаций
 
  • 0
Не знал, что это с флага Казахстана, просто символ понравился. Сейчас посмотрел в Google, один в один. Приношу свои извинения братьям Казахам, разместил просто по незнанию. Если это кого-то оскорбляет, то попросим Игоря за ретушировать этот прекрасный символ.

Там внизу, ещё медведь, его просто плохо видно ))))

<
  • Главный редактор
29 апреля 2014 01:08

Игорь Петрович Котов / Datagor

  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 604 комментария
  • 257 публикаций
 
  • 0
Алексей, я думаю граждан Казахстана никак не может обидеть ваше полезное устройство. smile
Патриоты Америки носят трусы звёздно-полосатые и ничего.

<
  • Гражданин
30 апреля 2014 17:06

Олег / logvoleg

  • С нами с 4.12.2009
  • Ушёл в реал Пользователь offline
  • 85 комментариев
  • 2 публикации
 
  • 0
Алексей, устройство хорошее, нужное и продуманное. Значит братьям Казахам не в чем Вас упрекнуть! smile

<
  • Гражданин
30 апреля 2014 20:09

Алексей Ермаков / dedmazay

  • С нами с 8.10.2009
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 5 публикаций
 
  • 0
Олег, спасибо smile

<
  • Кандидат
7 января 2016 22:25

Николай / P32L

  • С нами с 7.01.2016
  • Ушёл в реал Пользователь offline
  • 2 комментария
  • 0 публикаций
 
  • 0
Исходника не будет?

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.