Tafuta Msimbo

Somo la 27: Kutumia Sensor ya Joto ya DHT11 na Skrini ya LCD | Kozi ya Arduino Hatua kwa Hatua

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.

DHT11 Module

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 moduli ya DHT11 na LCD1602

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 kuwa 0x27 kulingana na mtengenezaji. Vigezo vingine viwili, 16 na 2, 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

Bilder

DHT11 Module
DHT11 Module
DHT11 module LCD1602 wiring
DHT11 module LCD1602 wiring
521-Lesson 27: Using a DHT11 Temperature Sensor with an LCD Screen | Arduino Step-by-Step Course
Språk: C++
/*
 * 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

Resurser och referenser

Filer📁

Fritzing-fil

Användarhandbok

Andra filer