Лекција 20/31: Прикажување температура и влажност од DHT11 на LCD екран
Овој туторијал покажува како да се комбинира DHT11 сензор за температура и влажност со LCD1602 дисплеј со I2C поддршка за да се создаде компактна станица за следење на околината. Наместо да читате сурови податоци од сензорот од серискиот монитор, ќе научите да прикажувате живи отчитувања на температурата и влажноста на екран од 16x2 карактери. Овој проект е идеален за изградба на десктоп временска станица, мал монитор за стаклена градина или додавање на локален дисплеј на било кој проект за домашна автоматизација. I2C интерфејсот ја поедноставува жичаната врска, што го прави овој проект достапен за почетници и брз додаток за искусни творци.
Еве неколку практични идеи за тоа што можете да изградите со ова знаење:
- Десктоп временска станица што ги прикажува моменталните услови во просторијата.
- Компактен дисплеј за терариум со влекачи или растенија.
- Локален дисплеј за серверска просторија или работна средина.
- Основен модул за покомплексен систем за домашна автоматизација.
Хардвер и компоненти
За да го изградите овој проект, ќе ви требаат следниве компоненти:
- Arduino Uno (или компатибилна плоча)
- LCD1602 дисплеј со I2C интерфејс модул
- DHT11 сензор за температура и влажност
- Отпорник од 4.7kΩ или 10kΩ за повлекување (ако користите гол DHT11 сензор)
- Жици за поврзување
- Прототипна плоча (опционално, за полесно поврзување)
Разбирање на I2C LCD1602
LCD1602 е вообичаен дисплеј за карактери со 16 колони и 2 реда. „I2C“ модулот заварен на задниот дел на дисплејот е клучот за неговата едноставност. Овој модул го претвора паралелниот интерфејс на LCD-то во сериски I2C интерфејс, кој бара само две жици за податоци (SDA и SCL) и две за напојување (VCC и GND). Ова драстично го намалува бројот на пинови потребни на вашиот Arduino, оставајќи повеќе достапни за други сензори и актуатори. Модулот исто така вклучува мал потенциометар за прилагодување на контрастот на дисплејот, што е клучно за да се обезбеди видливост на текстот. I2C адресата на модулот може да се промени со помош на малите лемени мостови (A0, A1, A2) на плочата, овозможувајќи повеќе I2C уреди да коегзистираат на истата магистрала.
Водич за жичано поврзување
Поврзете ги компонентите како што е прикажано на дијаграмот подолу. I2C LCD-то ги користи I2C пиновите на Arduino, додека DHT11 сензорот користи дигитален пин.
За LCD1602-I2C:
- VCC на Arduino 5V
- GND на Arduino GND
- SDA на Arduino A4
- SCL на Arduino A5
За DHT11 сензорот:
- VCC (Пин 1) на Arduino 5V
- Податоци (Пин 2) на Arduino Дигитален пин 2 (со отпорник од 10kΩ за повлекување до 5V)
- 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)
Пронаоѓање на I2C адресата на вашиот LCD
Пред да можете да го користите дисплејот, мора да ја одредите неговата 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>
// Постави ја LCD адресата на 0x3F за дисплеј со 16 карактери и 2 реда
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// крај на поставки за LCD1602-I2C
Овие се најважните линии за конфигурирање за вашата поставка:
#define dhtpin 2: Ова го дефинира пинот на Arduino поврзан со пин за податоци на DHT11 сензорот. Променете го бројот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.write() со децималната вредност на знакот од ROM-от на LCD-екранот. За симболот за степени, оваа вредност е 223. Кодот го демонстрира ова со користење на lcd.print((char)223); за да го испечати симболот по вредноста на температурата. (во видеото на 30:16)
Демонстрација на проектот во живо
Откако кодот ќе се постави, екранот ќе прикаже порака за стартување пред да се исчисти и да ја прикаже моменталната температура и влажност. Првата линија на екранот го прикажува текстот „LCD1602 DHT11", додека втората линија ја прикажува температурата во Целзиусови степени, проследена со симболот за степени и „C", а потоа температурата во Фаренхајтови, проследена со симболот за степени и „F". Вредноста на влажноста се печати на серискиот монитор. Демонстрацијата во видеото покажува како екранот се ажурира на секоја половина секунда додека сензорот се држи, точно одразувајќи ги амбиенталните услови. (во видеото на 29:42)
Прикажувањето на напонот од потенциометар на LCD-екранот е покриено во Лекција 20/31: Прикажување напон на LCD1602.
Користењето на истиот LCD за прикажување растојание од ултразвучен сензор е покриено во Лекција 20/31: Користење LCD1602 со Arduino за прикажување температура, напон и растојание | Robojax.
Поврзани проекти од ова видео
- Лекција 20/31: Користење LCD1602 со Arduino за прикажување температура, напон и растојание | 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;
}
}
Работи што можеби ќе ви требаат
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Ресурси и референци
-
Документација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