Четырёхканальный термометр на ARDUINO UNO
- Подробности
- Категория: Схемы на Arduino
- Опубликовано: 21.03.2018 10:15
- Просмотров: 3165
Каравкин В.
В некоторых случаях необходимо измерять температуру одновременно в нескольких местах. Например, в четырех -дома, на улице, на входе котла отопления, на выходе котла отопления. Такой прибор очень просто и недорого можно сделать используя универсальный микроконтроллерный модуль ARDUINO UNO и двухстрочный ЖК-дисплей типа 1602А (на основе контроллера HD44780), а так же, четыре недорогих аналоговых термодатчика LM235. Все это автор приобрел на сайте «Aliexpress» за сумму ниже 600 рублей с учетом доставки. Но, прежде всего, хочу напомнить, что ARDUINO UNO это относительно недорогой готовый модуль, - небольшая печатная плата, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания.
Тем, кто незнаком с ARDUINO UNO, советую сначала ознакомиться со статьями Л.1 и Л.2.
Схема четырехканального термометра показана на рис. 1. Он предназначен для измерения температуры от -40°С до +120°С (согласно параметрам используемых датчиков). Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А. Питается ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате стабилизатора напряжения 5V.
Термодатчки LM235 представляют собой физически, термозависимые стабилитроны. Напряжение на них численно равно температуре по шкале Кельвина, при
расчете 0,01V на один градус. То есть, при 0°С (273К) на них 2,73V. Поэтому, фактически, остальная схема представляет собой четырехканальный вольтметр постоянного напряжения, с вычислителем, переводящим данные об измеренном напряжении в данные о температуре в градусах Цельсия. Измеряемые напряжения от термодатчиков Т1,Т2, ТЗ и Т4 поступают на четыре аналоговых входа А1, А2, A3 и А4. Всего аналоговых входов шесть, - А0-А5, можно было выбрать любые четыре из них. В данном случае, выбраны А1, А2, A3, А4.
Напряжение на аналоговых портах может быть только положительным и только в пределах от нуля до напряжения питания микроконтроллера, то есть, номинально, до 5V. Выход аналогового порта преобразуется АЦП микроконтроллера в цифровую форму. Для получения результата в единицах вольт, нужно его умножить на 5 (на опорное напряжение, то есть, на напряжение питания микроконтроллера) и разделить на 1024. Но, нам, во-первых, нужно получить результат не в единицах вольт, а в единицах равных 0,01V, а во-вторых, перевести его в градусы Цельсия. Поэтому результат умножается на 5 и делится на 10,24, а затем из него вычитают 273.
Программа на языке C++ приведена в таблице 1.
Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти.
Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления. Такие подпрограммы называются «библиотеками», и в программном комплекте для ARDUINO UNO есть много разных «библиотек». Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal. Поэтому программа (таблица 1) начинается с загрузки этой библиотеки:
#include <LiquidCrystal. h>
Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-индикатором. Я выбрал порты с D2 по D7. Можно выбрать другие. Эти порты назначены строкой:
LiquidCrystal lcd(2, 3, 4, 5, б, 7);
После чего, программа переходит собственно к работе термометра.
Для измерения температуры решено было использовать аналоговые входы А1, А2, A3 и А4. Эти входы заданы в строках:
int anaLogInput=l;
int anaLogInputl=2;
int anaLogInput2=3;
int anaLogInput3=4;
Для чтения данных с аналоговых портов используется функция analogRead
Чтение данных с аналоговых портов происходит в строках:
vout=analogRead(analogInput);
vout1=analogRead(analogInput1);
vout2=analogRead(analogInput2);
vout3=analogRead(analogInput3);
Затем, производится вычисление значения температуры, выраженной в градусах Цельсия:
temp=vout*5.0/10.24-273.0;
temp1=vout1*5.0/10.24-273.0;
temp2=vout2*5.0/10.24-273.0;
temp3=vout3*5.0/10.24-273.0;
В этих строках число 5.0 - это напряжение на выходе стабилизатора платы ARDUINO UNO. В идеале должно быть 5V, но для точной работы вольтметра это напряжение нужно предварительно измерить. Подключите источник питания и измерьте достаточно точным вольтметром напряжение +5V на разъеме POWER платы. Что будет, то и вводите в эти строки вместо 5.0, например, если будет 4.85V, строки будут выглядеть так:
temp=vout*4.85/10.24-273.0;
temp1=vout1*4.85/10.24-273.0;
temp2=vout2*4.85/10.24-273.0;
temp3=vout3*4.85/10.24-273.0;
Таким образом, в текст программы нужно внести изменения соответственно фактическому напряжению на выходе 5-вольтового стабилизатора платы ARDUINO UNO.
После этого прибор будет работать точно, и никакого налаживания или калибровки не потребует.
Литература:
1. Каравкин В. «Ёлочная мигалка на ARDUINO как средство от боязни микроконтроллеров», ж. Радиоконструктор, №11, 2016 г. стр. 25-30.
2. Каравкин В. «Частотомер на ARDUINO». ж. Радиоконструктор, №12, 2016г., стр. 12-15.
РАдиоконструктор 06-2017