Сабақ 27: DHT11 температура сенсорын LCD экранмен қолдану | Arduino қадамдық курс
Бұл нұсқаулық сізді DHT11 сенсорын және I2C LCD экранын пайдаланып температура мен ылғалдылықты бақылау жүйесін құру арқылы өткізеді, Robojax Arduino Қадамдық Курсының 27-сабағына негізделген. Бейне транскрипті HTU21DF сенсорына сілтеме жасағанымен, мұнда ұсынылған код пен принциптер қоршаған ортаны сезу жобалары үшін кең таралған және бюджеттік DHT11 модуліне тікелей қолданылады. Бұл жоба жаңып тұрған жарықдиодтардан асып, нақты әлем деректерін оқуды бастағысы келетін жаңадан бастаушыларға өте қолайлы.

Бұл жобаның нақты әлемдегі құндылығы зор. Сіз бұл қондырғыны кең ауқымды практикалық қолданыстар үшін пайдалана аласыз, соның ішінде:
- Үйіңіз немесе кеңсеңіз үшін қарапайым цифрлық термометр мен гигрометр құру.
- Бауырымен жорғалаушылар террариумы немесе өсімдік жылыжайы үшін климат мониторын жасау.
- Сериалды монитор арқылы деректерді компьютеріңізге жазатын қарапайым ауа райы станциясын әзірлеу.
- Температураға негізделген автоматтандыруды қосу, мысалы, белгілі бір шектен асқанда желдеткішті немесе жылытқышты қосу.
Бұл оқулық сізді сымдарды қосу, қажетті кітапханалар және код арқылы бағыттайды, бұл сізге өзіңіздің қоршаған ортаны бақылау жүйеңізді құруға мүмкіндік береді.
Аппараттық құралдар мен компоненттер
Бұл жобаны құру үшін сізге келесі компоненттер қажет:
- Arduino тақтасы (мысалы, Uno, Nano).
- DHT11 температура мен ылғалдылық сенсор модулі.
- I2C интерфейс модулі бар LCD1602 дисплейі.
- Жалғағыш сымдар.
- Макет тақтасы (міндетті емес, бірақ оңай қосылымдар үшін ұсынылады).
Сымдарды қосу нұсқаулығы
Бұл жобаның сымдарын қосу LCD-дегі I2C интерфейсі мен DHT11-дің қарапайым цифрлық шығысының арқасында түсінікті. I2C LCD тек екі деректер сымын (SDA және SCL) және екі қуат сымын қажет етеді, бұл қосылымдарды айтарлықтай жеңілдетеді. DHT11 сенсорында да қарапайым үш істікшелі интерфейс бар.
Міне, жобаның қосылым диаграммасы:
Компоненттерді келесідей қосыңыз:
- DHT11 сенсоры: VCC (немесе +) істікшесін Arduino-ның 5V істікшесіне, GND (-) істікшесін Arduino-ның GND-іне және DATA (немесе OUT) істікшесін Arduino-дағы цифрлық 2 істікшесіне қосыңыз.
- I2C LCD (LCD1602): VCC істікшесін Arduino-ның 5V істікшесіне, GND істікшесін Arduino-ның GND-іне, SDA істікшесін Arduino-ның аналогтық A4 істікшесіне және SCL істікшесін Arduino-ның аналогтық A5 істікшесіне қосыңыз.
Бұл қосылымдар сенсор мен дисплейді қуаттандыру және компоненттер арасындағы байланысты қамтамасыз ету үшін қажет нәрсенің бәрі.
Кодты түсіндіру
Код DHT11 сенсорынан температура мен ылғалдылықты оқуға және мәндерді I2C LCD экранында көрсетуге арналған. Ол сондай-ақ компьютеріңізде оңай қарау үшін деректерді Сериалды Мониторға басып шығарады.
Өз жобаларыңыз үшін реттегіңіз келетін кодтың пайдаланушы конфигурациялайтын бөліктерін қарастырайық.
// GitHub-тағы тақырып файлы: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // DHT11 нысанын жасау
#define dhtpin 2 // DHT11-ге қосу үшін істікшені орнату
// LCD1602-I2C параметрлерінің басы
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// 16 таңба және 2 жол дисплей үшін LCD мекенжайын 0x3F етіп орнату
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// LCD1602-I2C параметрлерінің соңы
- #define dhtpin 2: Бұл DHT11 сенсорының DATA істікшесіне қосылған Arduino цифрлық істікшесін анықтайды. Егер оны басқа істікшеге қоссаңыз, бұл санды өзгертуіңіз керек.
- LiquidCrystal_I2C lcd(0x3F, 16, 2): Бұл жол LCD-ді инициализациялайды. Бірінші параметр,
0x3F, сіздің нақты LCD модуліңіздің I2C мекенжайы. Бұл мекенжай өндірушіге байланысты кейде0x27болуы мүмкін. Қалған екі параметр,16және2, LCD экраныңыздағы бағандар мен жолдар санын анықтайды.
loop() ішінде код температураны оқу және түрлендіру үшін getTemp() деп аталатын арнайы функцияны пайдаланады. Бұл функция кодыңызды тазарту және қайта пайдалануға болатын етудің тамаша мысалы.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//температураны алу
if(type =='F')
{
return temp * 1.8 + 32;// фаренгейтке түрлендіру
}else if(type =='K')
{
return temp + 274.15;// кельвинге түрлендіру
}else{
return temp;
}
}
Бұл функцияны пайдалану үшін оны шақырып, қажетті бірлікті көрсету үшін бір таңбаны беру керек. Мысалы, getTemp('C') температураны Цельсий бойынша, getTemp('F') Фаренгейт бойынша, ал getTemp('K') Кельвин бойынша қайтарады. Бұл бейнедегі демонстрацияда көрсетілгендей, температураны бірнеше шкалада көрсетуді өте оңай етеді.
Тірі жоба демонстрациясы
Схеманы құрастырып, кодты жүктегеннен кейін LCD экранында екі секунд бойы "DHT11 Sensor" көрсетіледі, содан кейін тірі температура мен ылғалдылық көрсеткіштері пайда болады. Экран температураны Цельсий және Фаренгейт бойынша көрсетеді. Сондай-ақ деректерді көру үшін Сериалды Мониторды (9600 бодқа орнатылған) ашуға болады, ол Кельвин бойынша температураны және салыстырмалы ылғалдылық пайызын қамтиды.
Бейнеде жүргізуші жылу пистолетінен жылу қолдану арқылы сенсордың жауабын көрсетеді. LCD экранындағы температура көрсеткішінің тез жоғарылағанын, ал ылғалдылық көрсеткішінің төмендегенін көресіз, бұл сенсордың нақты уақыттағы мүмкіндіктерін көрсетеді. Бұл қондырғыңызды тексеру және бәрінің дұрыс жұмыс істеп тұрғанын растаудың тамаша тәсілі.
Тараулар
- [00:00] DHT11 және HTU21DF температура сенсорларына кіріспе
- [01:38] Сенсор сипаттамалары және деректер парағына шолу
- [02:28] Сенсор үшін егжей-тегжейлі қосылу нұсқаулығы
- [03:03] Қажетті Arduino кітапханаларын орнату
- [04:05] Түпнұсқа мысал кодын түсіндіру
- [07:34] Сенсордың жұмысын көрсету
- [08:33] Арнайы функциясы бар өзгертілген кодпен таныстыру
- [10:22] getTemp() функциясының жұмыс істеу тәсілі
- [12:19] Тікелей демонстрация: температураны Цельсий, Фаренгейт және Кельвин бойынша көрсету
- [13:01] Сенсордың максималды температура шегін тексеру
/*
* Robojax Arduino Step-by-Step Course
* Lesson 26 DHT11 with LCD1602-I2C display
* This is the Arduino code for the DHT11 module to read temperature and humidity.
* This code can display temperature in:
* C is used to get Celsius.
* F is used to get Fahrenheit.
* K is used for Kelvin.
* *
* Written by Ahmad Shamshiri for Robojax
* on January 4, 2018
* Robojax.com
Please watch video instructions here: https://youtu.be/0XMLnCYkvbE
This code is available at: http://robojax.com/course1/?vid=lecture11
with over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// header file from GitHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C
void setup() {
Serial.begin(9600);// setting up serial monitor
// initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("DHT11 Sensor");
delay(2000);
}
void loop() {
//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
lcd.clear();// clear previous values from screen
lcd.setCursor (0,0); //character zero, line 1
lcd.print("LCD1602 DHT11"); // print text
// print distance in degrees C
lcd.setCursor (0,1); //character 0, line 2
lcd.print(getTemp('C'));// print Temperature Celsius
lcd.setCursor (4,1); //character 5, line 2
lcd.print((char)223);// print degree
lcd.setCursor (5,1); //character 6, line 2
lcd.print("C");// print C
// print distance degrees F
lcd.setCursor (7,1); //character 8, line 2
lcd.print(getTemp('F'));// print distance in cm
lcd.setCursor (13,1); //character 14, line 2
lcd.print((char)223);// print degree
lcd.setCursor (14,1); //character 16, line 2
lcd.print("F");// print F
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
}
/*
* getTemp(char type)
* type: character of upper case
* C is used to get Celsius.
* F is used to get Fahrenheit.
* K is used for Kelvin.
*/
float getTemp(char type) {
//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
float temp = (float)DHT11.temperature;//get temp
if(type =='F')
{
return temp * 1.8 + 32;// convert to fahrenheit
}else if(type =='K')
{
return temp + 274.15;// convert to Kelvin
}else{
return temp;
}
}
Сізге қажет болуы мүмкін нәрселер
-
АмазонкаBuy LCD1602-I2C from Amazonamzn.to
-
АмазонкаPurchase DHT11 from Amazonamzn.to
-
eBayPurchase LCD1602-I2C from eBayebay.us
-
AliExpressDHT11 and DHT22 from AliExpressamzn.to
-
AliExpressPurchase 10pcs LCD1602-I2C from AliExpresss.click.aliexpress.com
-
AliExpressPurchase LCD1602-I2C from AliExpresss.click.aliexpress.com
-
BanggoodPurchase DHT11 module from Banggoodbanggood.com
Ресурстар мен сілтемелер
-
СыртқыDHT11 library on GitHubgithub.com
-
СыртқыDHT11 Manual (PDF)robojax.com
-
СыртқыLCD library from Robojax.com (ZIP)robojax.com
Файлдар📁
Fritzing файлы
-
Температура сенсоры DHT11
Temperature Sensor DHT11.fzpz0.01 MB -
DHT11 ылғалдылық және температура датчигі (3 түйреуіш)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Пайдаланушының нұсқаулығы
-
DHT11 пайдаланушы нұсқаулығы
robojax-DHT11_manual.pdf0.82 MB
Басқа файлдар
-
DHT11 қарапайым Arduino кітапханасы
robojax-DHT11-simple_library.zip