Индикатор температуры и влажности воздуха на Arduino UNO и датчике DHT11
Схема и описание самодельного индикатора температуры и влажности воздуха, построен на основе модуля ARDUINO UNO и цифрового датчика влажности воздуха и температуры DHT11.
Принципиальная схема
Схема измерителя показана на рис. 1. Как видно из схемы, к цифровым портам D2-D7 платы ARDUINO UNO подключен модуль жидкокристаллического индикатора Н1 типа 1602А.
А входной сигнал от датчика F1 поступает на порт D8. Питается датчик и ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате ARDUINO UNO.
Рис. 1. Принципиальная схема термометра и влагомера на Arduino UNO и датчике DHT11.
Питание +5V на ЖК-индикатор поступает через вывод 2 его платы. Общий минус на выводы 3 и 1. Поскольку в индикатор планируется только передавать информацию от контроллера, а не наоборот, вывод 5 (RW) соединен с нулем. Данные на ЖК-индикатор будут поступать через его выводы 11-14 (выводы 7-10 не используются).
Выводы 15 и 16 служат для подключения подсветки ЖК-индикатора. На них подается напряжение 5V. Для управления ЖК-индикатором решено было использовать порты с D2 по D7 платы ARDUINO UNO. В принципе, можно и другие порты, но я вот так, решил использовать именно эти.
Программа для микроконтроллера
Для того чтобы индикатор взаимодействовал с ARDUINO UNO нужно в программу загрузить подпрограмму для его управления - «библиотеку», и в программном комплекте для ARDUINO UNO есть много разных «библиотек».
Для работы с ЖК-индикатором на основе HD44780 нужна библиотека LiquidCrystal. Поэтому программа для нашего измерителя (таблица 1) начинается с загрузки этой библиотеки:
#include
Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порты ARDUINO UNO, которые будут работать с ЖК-инди-катором. Как я уже сказал, я выбрал порты с D2 по D7. Эти порты назначены строкой:
LiquidCrystal led(2, 3, 4, 5, б, 7);
Для работы цифрового датчика DHT11 тоже нужна «библиотека», но в программном комплекте ARDUINO UNO такой «библиотеки» нет, поэтому её нужно скачать на сайте: github.com/amperka/dht или здесь - Скачать.
Её необходимо распаковать и добавить в папку "libraries" в папке с Arduino IDE. В это время сама программа "ARDUINO" должна быть закрыта.
Затем идет загрузка библиотеки для датчика DHD11:
#include
Эта строка дает команду загрузить в ARDUINO UNO данную библиотеку. Затем, нужно назначить порт ARDUINO UNO, который будет работать с датчиком. В данном случае выбран цифровой порт D8, который назначен этой строкой: #define DHT11_PIN 8
Далее, в установках указывается тип дисплея:
led.begin(16,2) ;
И вводится задержка в одну секунду, которая нужна для подготовки датчика к работе:
delay(1000);
После чего программа переходит к считыванию данных с датчика и их индикации на дисплее. Сначала производится очистка памяти дисплея (от предыдущего измерения):
led.clear() ;
Затем, указывается строка ЖК-индика-тора (верхняя строка, это строка 0), в которую записывается результат измерения влажности:
led.setCursor(0,0) ;
Но сначала в эту строку записывается наименование показателя влажности как
«Н =»:
led.print("Н = ");
Затем результат измерения влажности записывается в ЖК-индикатор:
led.print (DHT.humidity, 1);
Далее указывается единица измерения:
led.print("%");
Затем, указывается строка ЖК-индика-тора (нижняя строка, это строка 1), в которую записывается результат измерения температуры:
led.setCursor(0,1) ;
Но сначала в эту строку записывается наименование показателя влажности как «Т =»:
led.print("Т = ");
Затем результат измерения влажности записывается в ЖК-индикатор:
led.print(DHT.temperature, 1);
Далее указывается единица измерения:
led.print("С");
На следующем этапе производится проверка правильности считывания данных с датчика, это происходит в блоке:
int chk;
chk = DHT.read(DHT11_PIN);
switch (chk) {
case DHTLIB_OK:
break;
case DHTLIB_ERROR_CHECKSUM:
led.clear();
led.print("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
led.clear();
led.print("Time out error");
break;
default:
led.clear();
led.print("Unknovn error");
break;
}
В зависимости от выявленной ошибки в дисплей записывается информация о ней.
Таблица 1.
Рис. 2. Исходный код программы для термометра и влагомера на Arduino UNO.
В принципе, этот программный блок для проверки, можно и исключить из программы. Измеритель работает и без него, но может иногда давать ошибочные показания.
Каравкин В. РК-09-17.