В данной статье представлен проект электронного сигнализатора температуры/термостата с использованием микроконтроллера PIC16C84 и 2-хстрочного LCD-дисплея. На дисплее возможно отображение температуры в градусах Цельсия и Фаренгейта, а также возможна установка низкой и высокой точек температуры для срабатывания сигнализатора или термостата. Также, в контроллер записываются достигнутые температурные минимум и максимум.
В настройках устройства можно изменить то, в каком режиме будет работать прибор, либо как сигнализатор, либо как термостат. Отличие в том, что в режиме сигнализатора при превышении заданного лимита температуры, бипер прерывисто пищит.
Устройство постоянно получает данные о температуре и отображает ее на LCD экранчике в градусах Цельсия и Фаренгейта. Также, LCD может отображать текущую конфигурацию и параметры. К пользовательским параметрам относятся нижний и верхний пределы температуры, режим сигнализации (вкл./выкл. бипер). Ещё на LCD могут отображаться абсолютные достигнутые min и max температуры.
Пользователю предоставлена возможность устанавливать нижний и верхний пределы температуры при помощи 2-х кнопок UP (+) и DOWN (-). Также, пользователь может стереть сохраненные значения достигнутых мин. и макс. значений и установить режим сигнализатора (включить или отключить бипер). Вне зависимости от настроек бипера, в устройстве присутствует красный светодиод, который загорается при превышении значения температуры.
Все пользовательские параметры сохраняются в энергонезависимой памяти МК и не стираются после отключения питания или перезагрузки устройства.
Устройство состоит из микроконтроллера PIC16C84, 2-хстрочного 16-символьного LCD-экранчика, 4 кнопок и АЦП ADC0831. LCD может отображать ASCII символы. Он может работать в 8-ми битном режиме, что требует наличия 10 линий связи с микроконтроллером. Был выбран 4-битный режим с 6 линиями связи. Эти же линии были задействованы и для кнопок управления.
Микросхема ADC0831 использует 3 линии и работает по интерфейсу SPI/Microwire.
В качестве датчика температуры используется Philips 2322-640-63103 NTC с R/r ratio 9.0 и сопротивлением 10кОм при 25°. Можно использовать другие датчики с подходящими характеристиками. Если будет использоваться датчик PT100 или с др. характеристикой, то необходимо будет поменять настройки в программе и сопротивление в делителе напряжения. Термистор включен в делитель напряжения, сопротивление второго резистора 10 кОм. Напряжение с выхода делителя пропорционально окружающей температуре (но не прямо пропорционально, что создает некоторые проблемы конвертации напряжения в градусы, в программе)
К контроллеру также подключен светодиод «Alarm». Для использования термостата, данный светодиод заменяется на оптопару.
Программа
Одной из основных задач в ПО является чтение значений с ADC0831. В данной АЦП используется стандартный протокол 3-wire SPI/Microwire. После получения от АЦП двоичных данных температуры, происходит конвертация. Т.к. зависимость сопротивления термистора и температуры не линейная, то для более точного преобразования используется таблица значений, содержащая 248 записей для диапазона температур от -50C до +125C.
Для отображения температуры в фаренгейтах используется формула преобразования, для того, чтобы не хранить вторую таблицу преобразования:
Degrees_F = 9/5 * Degrees_C + 32
Чтобы было проще работать в двоичном коде с операциями с плавающей запятой, немного преобразуем формулу:
Degrees_F = 29/16 * Degrees_C + 32
В остальной части кода, содержится код для взаимодействия пользователя с меню и др.
В первой версии устройства было отображение температуры лишь в градусах Цельсия. Проработало оно больше года. Затем устройство подверглось небольшой доработке и корректировке параметров.
В обычном состоянии, на верхней строчке экранчика отображается текущая температура, например: «TEMP = 20C/68F». На нижней строчке LCD каждые 2 секунды по кругу отображаются: достигнутая минимальная температура «Min T = 0C/32F», максимальная «Max T = 28C/82F», заданный пользователем макс. предел срабатывания «Hi Lim = 1C/33F», минимальный предел «Lo Lim = 30C/86F». И если оповещение бипером отключено, то пятой строчкой появляется сообщение «Alarm Disabled».
Если пользователь хочет поменять настройки, то для этого необходимо нажать кнопку «SET», после чего он попадает в режим настроек. Первой настройкой выставляется верхний предел температуры, на первой строчке дисплея отображается надпись «Set High Limit», на нижней — установка температуры. Путем нажатий кнопок «UP» и «DOWN» можно менять значение. Когда настройка данного параметра закончена, необходимо нажать кнопку «SET» для сохранения значения. Повторное нажатие кнопки «SET» переведет пользователя к установке следующего параметра — нижний предел температуры. Настройка происходит подобным образом как и установка верхнего предела. Третьей опцией можно очистить достигнутые min и max температуры, на дисплее отобразится надпись «Press + To Clr», соответственно необходимо нажать «UP/+», а далее «SET». Последним параметром является включение или отключение бипера, нажимая «UP/+» можно включать/выключать выход на бипер. После того, как все настройки сделаны, необходимо нажать «SET», после чего контроллер сохранит все изменения в EEPROM и устройство вернется в обычный режим отображения текущей температуры.
Когда устройство используется в режиме термостата, режим оповещения через бипер можно отключить. Красный светодиод (который заменяется оптопарой), загорается при превышении заданного лимита. Для коммутирования нагрузки, питающейся переменным током можно использовать твердотельные реле (SSR).
На фото выше показана финальная версия устройства с источником питания и твердотельным реле.
Прикрепленные файлы:
- tempalm4.rar (10 Кб)