Термометр на датчиках LM35 и Arduino UNO

Принципиальная схема и описание самодельного двойного электронного термометра на датчиках LM35 и платформе Arduino UNO. Жизнь в частном доме имеет свои прелести и недостатки.

Например, изнедостатков, это самодельный водопровод, который, даже при условии хорошей теплоизоляции, может замерзнуть при температуре ниже минус 15-20 градусов.

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

Принцип работы

Здесь приводится описание двойного термометра с функцией термостата, построенного на основе готового микро-контроллерного модуля ARDUINO UNO. Прибор работает с двумя недорогими аналоговыми термодатчиками LM35, измеряя температуру в доме, и за его пределами.

Индикация - на двухстрочном ЖК-индикаторе, причем, в верхней строке индицируется температура за пределами дома (обозначена как «t1»), а в нижней строке - температура в доме (обозначена как «t2»).

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

Как уже сказано, используются относительно дешевые аналоговые термодатчики LM35, которые представляют собой термозависимые стабилизаторы напряжения, выходное напряжение которых линейно зависит от температуры из расчета 10 mV на градус Цельсия.

Датчик может измерять от минус 55 до плюс 150 градусов, но проблема в том, что для измерения отрицательной температуры на его выход через резистор нужно подать отрицательное напряжение.

Но, на плате ARDUINO UNO есть только положительное напряжение, поэтому было решено сместить отрицательный вывод питания LM35 вверх на 0,7V (прямое напряжение на диоде КД522), как это показано на схеме на рисунке 1.

Теперь для вычисления температуры нужно будет из выходного напряжения датчика программным способом вычитать 0,7V (или другое напряжение, которое будет получено в результате измерения прямого напряжения на диоде VD1 в этой схеме).

Например, при температуре плюс 20 градусов на выходе будет 0,7+0,2=0,9V. А при минус 20 градусов на выходе будет 0,7+(-0,2)=0,5V.

Вычитая 0,7V получаем, в первом случае 0,9 - 0,7 = 0,2V. Во втором 0,5-0,7 = (-0.2V). Остается, перевести в градусы, умножив на 100, то есть получаем: 0,2x100=20, (-0,2)х100=(-20).

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

Принципиальная схема

Схема двойного термометра показана на рис. 2. Он предназначен для измерения двух температур, по входу t1 от минус 30 до плюс 150 градусов по Цельсию, и по входу t2 от 0 до 150 градусов по Цельсию.

Схема подключения датчика LM35

Рис. 1. Схема подключения датчика LM35.

Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. Питается ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате стабилизатора напряжения 5V.

Напряжения с термодатчиков АТ1 и АТ2 поступают на два аналоговых входа А1 и А2. Всего аналоговых входов шесть, - А0-А5, можно было выбрать любые два из них. В данном случае, выбраны А1 и А2. Для управления греющим кабелем используется цифровой выход D12.

С него управляющее напряжение поступает на транзисторный ключ на VT1, в коллекторной цепи которого включена обмотка реле К1. Контакты этого реле (на схеме не показаны) включают греющий кабель, когда на выходе D12 платы ARDUINO UNO логическая единица.

Напряжение на аналоговых входах может быть только положительным и только в пределах от нуля до напряжения питания микроконтроллера, то есть, номинально, до 5V. Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024.

Схема самодельного электронного термометра на датчиках LM35 и платформе Arduino UNO

Рис. 2. Схема самодельного электронного термометра на датчиках LM35 и платформе Arduino UNO.

Но нам нужно значение не в единицах вольт, а в градусах по Цельсию. Принимая, что одному градусу соответствует 0,01 V, берем деление не на 1024, а на 10,24. То есть, 5x10,24 для входа t2 (датчик АТ2) и 5x10,24-70 для входа t1 (датчик АТ 1). Где число «70», это напряжение на диоде VD1, равное 0,7V и умноженное так же, на 100.

Программа

Программа на языке C++ приведена в таблице 1. Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты.

Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления. Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal. Поэтому программа (таблица 1) начинается с загрузки этой библиотеки:

#include <LiquidCrystal.h>

Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку.

Термометр на датчиках LM35 и Arduino UNO

Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-инди-катором. Я выбрал порты с D2 по D7. Можно выбрать другие. Эти порты назначены строкой:

LiquidCrystal lcd(2, 3, 4, 5, б, 7);

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

int analogInput=l; int analogInputl=2;

Для чтения данных с аналоговых портов используется функция analogRead. Чтение данных с аналоговых портов происходит в строках:

vout=analogRead(analogInput); voutl=analogRead(analoglnputl);

Затем, производится вычисление фактического значения температуры:

temp=vout*5.0/10.24-70; templ=voutl*5.0/10.24;

В этих строках число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы термометра это напряжение нужно предварительно измерить. Подключите источник питания и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы. Что будет, то и вводите в эти строки вместо 5.0, например, если будет 4.85V, строки будут выглядеть так:

temp=vout*4.85/10.24-70; temp1=voutl*4.85/10.24;

В строке temp=vout*4.85/10.24-70; происходит определение температуры с датчика АТ1, который расположен за пределами дома и измеряет как положительную, так и отрицательную температуру.

В данной сроке цифра «70» это умноженное на 100 прямое напряжение на диоде VD1. Нужно предварительно измерить фактическое прямое напряжение на VD1 и внести его в эту строку. Например, если фактическое напряжение на VD1 будет равно 0,68V, то в эту строку записываем «68» :

temp=vout*4.85/10.24-68;

Таким образом, в текст программы нужно внести изменения соответственно фактическому напряжению на выходе 5-воль-тового стабилизатора платы ARDUINO UNO и фактическому напряжению на диоде VD1.

После этого прибор будет работать точно и никакого налаживания или калибровки не потребует. Для управления греющим кабелем используется компараторная функция if.

В строке:

if(temp < -15)digitalWrite(12, HIGH);

указывается, что при температуре ниже минус 15 градусов по Цельсию на порт 12 пишется логическая единица.

А строке:

if(temp > -15)digitalWrite(12, LOW);

указывается, что при температуре выше минус 15 градусов по Цельсию на порт 12 пишется логический ноль.

Соответственно, можно задать любое другое значение температуры, при которой включается реле, например, минус 10 градусов, при этом данные строки будут выглядеть так:

if(temp < -10)digitalWrite(12, HIGH);

if(temp > -10)digitalWrite(12, LOW) ;

Далее в программе идет вывод данных на дисплей и задержка в 1 секунду на время индикации.

Датчики АТ1 и АТ2 подключаются к схеме через разъемы Х2 и Х3. Они выполнены на кабелях. Датчик АТ1 располагается за пределами дома и поэтому подвержен воздействиям окружающей среды.

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

Датчик АТ2 располагается внутри помещения, и для его защиты достаточно на его выводы натянуть термоусадочные трубки. Электромагнитное реле К1 типа RAS-1215 с обмоткой на напряжение 12V и максимальный ток через контакты 15А при переменном напряжении 240V.

Каравкин В. РК-2017-02.

Литература:

  1. Каравкин В. - Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров. РК-2016-11.
  2. Каравкин В. - Частотомер на ARDUINO. РК-2016-12.
  3. Каравкин В. - Двойной вольтметр на ARDUINO. РК-2017-01.
0 305 На микроконтроллерах
термометр arduino avr микроконтроллер
cashback