Сабақ 20/31: DHT11 температурасы мен ылғалдылығын LCD экранда көрсету
Бұл оқу құралы DHT11 температура мен ылғалдылық сенсорын I2C қолдайтын LCD1602 дисплейімен біріктіріп, ықшам қоршаған ортаны бақылау станциясын жасауды көрсетеді. Шикі сенсор деректерін сериялық монитордан оқудың орнына, сіз тірі температура мен ылғалдылық көрсеткіштерін 16x2 таңбалы экранда көрсетуді үйренесіз. Бұл жоба үстел үсті ауа райы станциясын, шағын жылыжай мониторын жасауға немесе кез келген үй автоматтандыру жобасына жергілікті көрсеткіш қосуға өте ыңғайлы. I2C интерфейсі сымдарды жеңілдетеді, бұл жобаны жаңадан бастаушылар үшін қолжетімді және тәжірибелі шеберлер үшін жылдам қосымша етеді.
Міне, осы біліммен не жасауға болатыны туралы бірнеше практикалық идеялар:
- Бөлмедегі ағымдағы жағдайды көрсететін үстел үсті ауа райы станциясы.
- Бауырымен жорғалаушылар немесе өсімдіктер террариумына арналған ықшам дисплей.
- Сервер бөлмесі немесе шеберхана ортасына арналған жергілікті көрсеткіш.
- Күрделірек үй автоматтандыру жүйесіне арналған негізгі модуль.
Аппараттық құралдар мен компоненттер
Бұл жобаны жасау үшін сізге келесі компоненттер қажет:
- Arduino Uno (немесе үйлесімді плата)
- I2C интерфейс модулі бар LCD1602 дисплейі
- DHT11 температура мен ылғалдылық сенсоры
- 4.7кОм немесе 10кОм тарту резисторы (жалаңаш DHT11 сенсорын қолдансаңыз)
- Жалғағыш сымдар
- Макет тақтасы (қосымша, оңай қосылу үшін)
I2C LCD1602 түсіну
LCD1602 - 16 баған мен 2 жолдан тұратын кең таралған таңбалы дисплей. Дисплейдің артына дәнекерленген "I2C" модулі оның қарапайымдылығының кілті болып табылады. Бұл модуль LCD-тің параллель интерфейсін сериялық I2C интерфейсіне түрлендіреді, ол деректер үшін тек екі сымды (SDA және SCL) және қуат үшін екі сымды (VCC және GND) қажет етеді. Бұл Arduino-дағы қажетті түйреуіштер санын айтарлықтай азайтады, басқа сенсорлар мен жетектерге көбірек орын қалдырады. Модуль сонымен қатар дисплей контрастын реттеуге арналған шағын потенциометрді қамтиды, бұл мәтіннің көрінуін қамтамасыз ету үшін өте маңызды. Модульдің I2C мекенжайын платадағы шағын дәнекерлеу секіргіштері (A0, A1, A2) арқылы өзгертуге болады, бұл бірнеше I2C құрылғыларының бір шинада қатар өмір сүруіне мүмкіндік береді.
Сымдарды жалғау нұсқаулығы
Төмендегі диаграммада көрсетілгендей компоненттерді қосыңыз. I2C LCD Arduino-ның I2C түйреуіштерін пайдаланады, ал DHT11 сенсоры цифрлық түйреуішті пайдаланады.
LCD1602-I2C үшін:
- VCC Arduino 5V түйреуішіне
- GND Arduino GND түйреуішіне
- SDA Arduino A4 түйреуішіне
- SCL Arduino A5 түйреуішіне
DHT11 сенсоры үшін:
- VCC (1-түйреуіш) Arduino 5V түйреуішіне
- Data (2-түйреуіш) Arduino 2-цифрлық түйреуішіне (5V-қа 10кОм тарту резисторымен)
- NC (3-түйреуіш) - Қосылмаған
- GND (4-түйреуіш) Arduino GND түйреуішіне
(бейнеде 25:16-да)
Кітапханаларды орнату
Бұл жоба екі кітапхананы қажет етеді. Wire.h кітапханасы стандартты Arduino орнатуының бөлігі болып табылады. Сізге LiquidCrystal_I2C кітапханасын және dht11 кітапханасын орнату қажет. Бейне оларды қалай орнату керектігін көрсетеді. Кітапханаларды бейне сипаттамасындағы сілтемелерден немесе Robojax веб-сайтынан жүктеп алуға болады. Жүктеп алғаннан кейін, оларды Arduino IDE арқылы Sketch > Include Library > Add .ZIP Library... бөліміне өтіп, жүктеп алынған файлдарды таңдау арқылы орнатуға болады. (бейнеде 06:16-да)
LCD-дің I2C мекенжайын табу
Дисплейді қолданар алдында оның I2C мекенжайын анықтау керек. Ең көп таралған мекенжай 0x27 немесе 0x3F, бірақ ол әртүрлі болуы мүмкін. Оны табу үшін I2C сканер эскизін қолдануға болады. Бұл I2C шинасын сканерлейтін және табылған кез келген мекенжайларды сериялық мониторға хабарлайтын қарапайым бағдарлама. Сканер кодын жүктеп, сериялық мониторды 9600 бод жылдамдығында ашыңыз, ол LCD-дің мекенжайын көрсетеді. (бейнеде 08:11-де)
Кодты түсіндіру
Бұл бөлім кодтың негізгі, пайдаланушы конфигурациялайтын бөліктерін түсіндіреді. Толық бағдарламаны мақаланың төменгі жағында жүктеп алуға болады.
Код қажетті кітапханаларды қосудан және қолданылатын түйреуіштер мен объектілерді анықтаудан басталады.
// GetHub сайтынан алынған тақырып файлы: 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 сенсорының деректер түйреуішіне қосылған Arduino түйреуішін анықтайды. Басқа түйреуішті қолдансаңыз,2санын өзгертіңіз.LiquidCrystal_I2C lcd(0x3F, 16, 2);: Бұл жол LCD объектісін жасайды. Бірінші параметр,0x3F, алдыңғы қадамда тапқан I2C мекенжайыңыз.16және2дисплейіңіздің бағандар мен жолдар санын анықтайды. Сканер басқа мекенжайды тапса, мекенжайды жаңартыңыз (мысалы,0x27).
Код арнайы 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') Кельвин бойынша қайтарады. Функция DHT11 сенсорынан шикі температураны оқып, қажетті түрлендіру формуласын қолданады. Бұл негізгі loop() функциясында сенсорды оқу логикасын қайта жазбай-ақ, дисплейдегі өлшем бірлігін оңай өзгертуге мүмкіндік береді. Негізгі цикл температура мен ылғалдылықты LCD-ге lcd.setCursor() және lcd.print() функцияларын қолданып басып шығарады, бұл мәндердің экранда қай жерде пайда болатынын бақылайды.
Градус белгісін көрсету
Стандартты HD44780 LCD таңбалар жиынтығы арнайы градус белгісін (°) қамтымайды. Оны көрсету үшін LCD ROM-ындағы таңбаның ондық мәнімен lcd.write() функциясын қолдану керек. Градус белгісі үшін бұл мән 223 болып табылады. Код мұны температура мәнінен кейін белгіні басып шығару үшін lcd.print((char)223); қолдану арқылы көрсетеді. (бейнеде 30:16)
Тірі жоба демонстрациясы
Код жүктелгеннен кейін дисплей алдымен іске қосу хабарын көрсетеді, содан кейін тазартылып, ағымдағы температура мен ылғалдылықты көрсетеді. Дисплейдің бірінші жолы "LCD1602 DHT11" мәтінін көрсетеді, ал екінші жолы Цельсий бойынша температураны, содан кейін градус белгісі мен "C" әрпін, содан кейін Фаренгейт бойынша температураны, градус белгісі мен "F" әрпін көрсетеді. Ылғалдылық мәні сериялық мониторға басып шығарылады. Бейнедегі демонстрация сенсор ұсталған кезде дисплейдің әр жарты секунд сайын жаңарып, қоршаған орта жағдайларын дәл көрсететінін көрсетеді. (бейнеде 29:42)
Потенциометрден кернеуді LCD-де көрсету 20/31-сабақ: LCD1602-де кернеуді көрсету тақырыбында қарастырылған.
Сол LCD-ді ультрадыбыстық сенсордан қашықтықты көрсету үшін пайдалану 20/31-сабақ: Arduino-мен LCD1602 қолдану арқылы температураны, кернеуді және қашықтықты көрсету | Robojax тақырыбында қарастырылған.
Осы бейнеге қатысты жобалар
- 20/31-сабақ: Arduino-мен LCD1602 қолдану арқылы температураны, кернеуді және қашықтықты көрсету | Robojax
- 20/31-сабақ: LCD1602-де кернеуді көрсету
Тараулар
- [00:00] LCD1602-ге кіріспе және жобаға шолу
- [01:30] LCD1602 аппараттық құралы және I2C модулінің түсіндірмесі
- [02:47] LCD контрастын реттеу
- [03:14] LCD қосқыштары және I2C мекенжайын конфигурациялау
- [05:28] LCD1602 үшін қосылу схемасы
- [06:16] LiquidCrystal_I2C кітапханасын орнату
- [08:11] Сканермен I2C мекенжайын табу
- [09:28] LCD-ге мәтін басып шығаруға арналған негізгі код
- [11:10] Мысалдар: жыпылықтайтын курсор және арнайы таңбалар
- [13:46] Арнайы таңбаларды жасау және пайдалану
- [18:51] Сериялық дисплей мысалы
- [23:16] LCD-де мәтінді айналдыру
- [24:36] DHT11 сенсор кодын LCD-мен біріктіру
- [30:16] Градус белгісін көрсету
- [32:03] Температурадан ондық нүктелерді алып тастау
- [33:00] Потенциометрден кернеуді LCD-де көрсету
- [35:56] Ультрадыбыстық сенсордан қашықтықты көрсету
/*
Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
* This is the Arduino code for 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 Jan 04, 2018
* Robojax.com
Please watch video instruction 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 download 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 GetHub: 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 blacklight 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;
}
}
Сізге қажет болуы мүмкін нәрселер
-
АмазонкаSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Амазонка
-
Амазонка
-
Амазонка
-
Амазонка
Ресурстар мен сілтемелер
-
ҚұжаттамаDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
СыртқыPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Файлдар📁
Arduino кітапханалары (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
Пайдаланушының нұсқаулығы
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB