Индикатор температуры и влажности воздуха на Arduino UNO и датчике DHT11


Схема и описание самодельного индикатора температуры и влажности воздуха, построен на основе модуля ARDUINO UNO и цифрового датчика влажности воздуха и температуры DHT11.

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

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

А входной сигнал от датчика F1 поступает на порт D8. Питается датчик и ЖК-индикатор от стабилизатора напряжения 5V, имеющегося на плате ARDUINO UNO.

Принципиальная схема термометра и влагомера на Arduino UNO и датчике DHT11

Рис. 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.

Исходный код программы для термометра и влагомера на Arduino UNO

Рис. 2. Исходный код программы для термометра и влагомера на Arduino UNO.

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

Каравкин В. РК-09-17.


1 3852 На микроконтроллерах
arduino термометр влага микроконтроллер индикатор температуры
Оставить комментарий: