Somo la 27: Kutumia Sensor ya Joto ya DHT11 na Skrini ya LCD | Kozi ya Arduino Hatua kwa Hatua
Mwongozo huu unakupeleka katika kujenga mfumo wa kufuatilia joto na unyevu kwa kutumia sensa ya DHT11 na skrini ya LCD ya I2C, kulingana na Somo la 27 la Kozi ya Hatua kwa Hatua ya Arduino ya Robojax. Ingawa nakala ya video inarejelea sensa ya HTU21DF, msimbo na kanuni zilizowasilishwa hapa zinatumika moja kwa moja kwa moduli ya DHT11 inayojulikana zaidi na yenye gharama nafuu, ambayo ni muhimu kwa miradi ya kuhisi mazingira. Mradi huu ni bora kwa wanaoanza wanaotaka kuendelea zaidi ya kupepesa LED na kuanza kusoma data halisi ya ulimwengu.

Thamani halisi ya mradi huu ni kubwa sana. Unaweza kutumia mpangilio huu kwa matumizi mbalimbali ya vitendo, ikijumuisha:
- Kujenga thermometer rahisi ya dijiti na hygrometer kwa nyumba yako au ofisi.
- Kuunda kifuatiliaji cha hali ya hewa kwa terrarium ya wanyama watambaao au chafu ya mimea.
- Kuendeleza kituo cha msingi cha hali ya hewa kinachorekodi data kwenye kompyuta yako kupitia serial monitor.
- Kuongeza uendeshaji wa kiotomatiki unaotegemea joto, kama vile kuwasha feni au hita wakati kiwango fulani kinapozidiwa.
Mafunzo haya yatakuongoza kupitia uunganishaji wa nyaya, maktaba muhimu, na msimbo, kukupa uwezo wa kujenga mfumo wako mwenyewe wa kufuatilia mazingira.
Vifaa na Vipengele
Ili kujenga mradi huu, utahitaji vipengele vifuatavyo:
- Bodi ya Arduino (k.m., Uno, Nano).
- Moduli ya sensa ya joto na unyevu ya DHT11.
- Kionyeshi cha LCD1602 chenye moduli ya kiolesura cha I2C.
- Nyaya za kurukia (jumper wires).
- Breadboard (si lazima, lakini inapendekezwa kwa uunganishaji rahisi).
Mwongozo wa Uunganishaji wa Nyaya
Uunganishaji wa nyaya kwa mradi huu ni rahisi, kutokana na kiolesura cha I2C kwenye LCD na pato rahisi la dijiti la DHT11. LCD ya I2C inahitaji nyaya mbili tu za data (SDA na SCL) na nyaya mbili za umeme, jambo linalorahisisha uunganishaji kwa kiasi kikubwa. Sensa ya DHT11 pia ina kiolesura rahisi cha pini tatu.
Huu hapa ni mchoro wa uunganishaji wa mradi:
Unganisha vipengele kama ifuatavyo:
- Sensa ya DHT11: Unganisha pini ya VCC (au +) kwenye pini ya 5V ya Arduino, pini ya GND (-) kwenye GND ya Arduino, na pini ya DATA (au OUT) kwenye pini ya dijiti 2 ya Arduino.
- LCD ya I2C (LCD1602): Unganisha pini ya VCC kwenye pini ya 5V ya Arduino, pini ya GND kwenye GND ya Arduino, pini ya SDA kwenye pini ya analog A4 ya Arduino, na pini ya SCL kwenye pini ya analog A5 ya Arduino.
Uunganishaji huu ndio unachohitaji ili kuwasha sensa na kionyeshi na kuwezesha mawasiliano kati ya vipengele.
Maelezo ya Msimbo
Msimbo umeundwa kusoma joto na unyevu kutoka kwa sensa ya DHT11 na kuonyesha thamani kwenye skrini ya LCD ya I2C. Pia unachapisha data kwenye Serial Monitor kwa urahisi wa kuiona kwenye kompyuta yako.
Hebu tuchambue sehemu za msimbo zinazoweza kubadilishwa na mtumiaji ambazo unaweza kutaka kurekebisha kwa miradi yako mwenyewe.
// faili ya kichwa kutoka GitHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // tengeneza kitu cha DHT11
#define dhtpin 2 // weka pini ya kuunganisha kwenye DHT11
// mwanzo wa mipangilio ya LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Weka anwani ya LCD kuwa 0x3F kwa kionyeshi cha herufi 16 na mistari 2
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// mwisho wa mipangilio ya LCD1602-I2C
- #define dhtpin 2: Hii inafafanua pini ya dijiti ya Arduino ambayo imeunganishwa kwenye pini ya DATA ya sensa ya DHT11. Ikiwa utaiunganisha kwenye pini tofauti, lazima ubadilishe nambari hii.
- LiquidCrystal_I2C lcd(0x3F, 16, 2): Mstari huu unaanzisha LCD. Kigezo cha kwanza,
0x3F, ni anwani ya I2C ya moduli yako maalum ya LCD. Anwani hii wakati mwingine inaweza kuwa0x27kulingana na mtengenezaji. Vigezo vingine viwili,16na2, vinafafanua idadi ya safu na mistari kwenye skrini yako ya LCD.
Katika loop(), msimbo unatumia kazi maalum inayoitwa getTemp() kusoma na kubadilisha joto. Kazi hii ni mfano mzuri wa jinsi ya kufanya msimbo wako kuwa safi na unaoweza kutumika tena.
float getTemp(char type) {
float temp = (float)DHT11.temperature;// pata joto
if(type =='F')
{
return temp * 1.8 + 32;// badilisha kuwa Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// badilisha kuwa Kelvin
}else{
return temp;
}
}
Ili kutumia kazi hii, unaiita tu na kupitisha herufi moja kubainisha kitengo unachotaka. Kwa mfano, getTemp('C') itarudisha joto kwa Selsiasi, getTemp('F') kwa Fahrenheit, na getTemp('K') kwa Kelvin. Hii inafanya iwe rahisi sana kuonyesha joto katika mizani nyingi, kama inavyoonyeshwa katika onyesho la video.
Onyesho la Moja kwa Moja la Mradi
Mara tu utakapokusanya mzunguko na kupakia msimbo, utaona skrini ya LCD ikionyesha "DHT11 Sensor" kwa sekunde mbili, ikifuatiwa na usomaji wa moja kwa moja wa joto na unyevu. Skrini itaonyesha joto kwa Selsiasi na Fahrenheit. Unaweza pia kufungua Serial Monitor (iliyowekwa kwa 9600 baud) kuona data, ambayo itajumuisha joto kwa Kelvin na asilimia ya unyevu wa jamaa.
Katika video, mwasilishaji anaonyesha mwitikio wa sensa kwa kutumia joto kutoka kwa bunduki ya joto. Utaona usomaji wa joto kwenye LCD ukiongezeka haraka wakati usomaji wa unyevu unapungua, ikionyesha uwezo wa sensa wa wakati halisi. Hii ni njia nzuri ya kujaribu mpangilio wako na kuthibitisha kwamba kila kitu kinafanya kazi vizuri.
Sura
- [00:00] Utangulizi wa Sensorer za Joto za DHT11 na HTU21DF
- [01:38] Maelezo ya Sensorer na Muhtasari wa Datasheet
- [02:28] Mwongozo wa Kina wa Uunganishaji wa Sensorer
- [03:03] Kusakinisha Maktaba za Arduino Zinazohitajika
- [04:05] Kuelezea Mfano wa Msimbo wa Awali
- [07:34] Kuonyesha Sensorer Ikifanya Kazi
- [08:33] Kuanzisha Msimbo Uliobadilishwa na Kazi Maalum
- [10:22] Jinsi Kazi ya getTemp() Inavyofanya Kazi
- [12:19] Onyesho la Moja kwa Moja: Kuonyesha Joto kwa Selsiasi, Fahrenheit, na Kelvin
- [13:01] Kupima Kikomo cha Joto cha Juu cha Sensorer
/*
* 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;
}
}
Tänker att du kanske behöver
-
AmazonBuy LCD1602-I2C from Amazonamzn.to
-
AmazonPurchase 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
Resurser och referenser
-
Extern.DHT11 library on GitHubgithub.com
-
Extern.DHT11 Manual (PDF)robojax.com
-
Extern.LCD library from Robojax.com (ZIP)robojax.com
Filer📁
Fritzing-fil
-
Temperature Sensor DHT11
Temperature Sensor DHT11.fzpz0.01 MB -
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Användarhandbok
-
DHT11 Användarmanual
robojax-DHT11_manual.pdf0.82 MB
Andra filer
-
DHT11 Simple Arduino Library
robojax-DHT11-simple_library.zip