Tafuta Msimbo

Somo la 20 kati ya 31: Kuonyesha Joto na unyevu kutoka kwa DHT11 kwenye skrini ya LCD

Somo la 20 kati ya 31: Kuonyesha Joto na unyevu kutoka kwa DHT11 kwenye skrini ya LCD

Mafunzo haya yanaonyesha jinsi ya kuchanganya kihisi cha joto na unyevu cha DHT11 na onyesho la LCD1602 lenye I2C ili kuunda kituo cha ufuatiliaji wa mazingira kilicho bora. Badala ya kusoma data ghafi kutoka kwa mfuatiliaji wa serial, utajifunza kuonyesha usomaji wa moja kwa moja wa joto na unyevu kwenye skrini ya herufi 16x2. Mradi huu unafaa kwa kujenga kituo cha hali ya hewa cha mezani, kifuatiliaji cha chumba kidogo cha kuhifadhia mimea, au kuongeza usomaji wa ndani kwenye mradi wowote wa otomatiki wa nyumbani. Kiolesura cha I2C hurahisisha wiring, na kufanya mradi huu kuwa rahisi kwa wanaoanza na nyongeza ya haraka kwa wataalamu wenye uzoefu.

LCD_sunFounder

Hapa kuna mawazo machache ya vitendo kuhusu kile unachoweza kujenga kwa ujuzi huu:

  • Kituo cha hali ya hewa cha mezani kinachoonyesha hali ya sasa ya chumba.
  • Onyesho dogo kwa terrarium ya wanyama watambaao au mimea.
  • Usomaji wa ndani kwa chumba cha seva au mazingira ya warsha.
  • Moduli ya msingi kwa mfumo tata zaidi wa otomatiki wa nyumbani.

Vifaa na Vipengele

Ili kujenga mradi huu, utahitaji vipengele vifuatavyo:

  • Arduino Uno (au bodi inayooana)
  • Onyesho la LCD1602 na moduli ya kiolesura cha I2C
  • Kihisi cha joto na unyevu cha DHT11
  • Kipinga cha 4.7kΩ au 10kΩ cha pull-up (kama unatumia kihisi cha DHT11 pekee)
  • Waya za jumper
  • Breadboard (hiari, kwa urahisi wa kuunganisha)

Kuelewa LCD1602 ya I2C

LCD1602 ni onyesho la kawaida la herufi lenye safu 16 na mistari 2. Moduli ya "I2C" iliyounganishwa nyuma ya onyesho ndiyo ufunguo wa urahisi wake. Moduli hii inabadilisha kiolesura sambamba cha LCD kuwa kiolesura cha mfululizo cha I2C, ambacho kinahitaji waya mbili tu za data (SDA na SCL) na mbili za umeme (VCC na GND). Hii inapunguza sana idadi ya pini zinazohitajika kwenye Arduino yako, na kuacha zaidi kwa sensor na actuators nyingine. Moduli pia inajumuisha potentiometer ndogo ya kurekebisha utofauti wa onyesho, ambayo ni muhimu kuhakikisha maandishi yanaonekana. Anwani ya I2C ya moduli inaweza kubadilishwa kwa kutumia jumpers ndogo za solder (A0, A1, A2) kwenye bodi, ikiruhusu vifaa vingi vya I2C kufanya kazi pamoja kwenye basi moja.

Mwongozo wa Wiring

LCD1602_wiring_DHT11_nopcb_bb

Unganisha vipengele kama inavyoonyeshwa kwenye mchoro hapa chini. LCD ya I2C inatumia pini za I2C za Arduino, wakati kihisi cha DHT11 kinatumia pini ya dijiti.

Kwa LCD1602-I2C:

  • VCC kwa Arduino 5V
  • GND kwa Arduino GND
  • SDA kwa Arduino A4
  • SCL kwa Arduino A5

Kwa kihisi cha DHT11:

  • VCC (Pin 1) kwa Arduino 5V
  • Data (Pin 2) kwa Arduino Digital Pin 2 (na kipinga cha 10kΩ cha pull-up kwa 5V)
  • NC (Pin 3) - Haijaunganishwa
  • GND (Pin 4) kwa Arduino GND

(katika video saa 25:16)

Kusanidi Maktaba

Mradi huu unahitaji maktaba mbili. Maktaba ya Wire.h ni sehemu ya usakinishaji wa kawaida wa Arduino. Utahitaji kusakinisha maktaba ya LiquidCrystal_I2C na maktaba ya dht11. Video inaonyesha jinsi ya kuzisakinisha. Unaweza kupakua maktaba kutoka kwa viungo vilivyotolewa kwenye maelezo ya video au kutoka kwa tovuti ya Robojax. Mara baada ya kupakua, unaweza kuzisakinisha kupitia Arduino IDE kwa kwenda kwenye Sketch > Include Library > Add .ZIP Library... na kuchagua faili zilizopakuliwa. (katika video saa 06:16)

Kutafuta Anwani ya I2C ya LCD Yako

Kabla ya kutumia onyesho, lazima ubaini anwani yake ya I2C. Anwani ya kawaida ni 0x27 au 0x3F, lakini inaweza kutofautiana. Ili kuipata, unaweza kutumia sketch ya skana ya I2C. Hii ni programu rahisi inayochanganua basi ya I2C na kuripoti anwani zozote inazopata kwenye Mfuatiliaji wa Serial. Pakia msimbo wa skana, fungua Mfuatiliaji wa Serial kwa baud 9600, na itaonyesha anwani ya LCD yako. (katika video saa 08:11)

Maelezo ya Msimbo

Sehemu hii inaelezea sehemu muhimu, zinazoweza kusanidiwa na mtumiaji, za msimbo. Programu kamili inapatikana kwa kupakuliwa chini ya makala.

Msimbo unaanza kwa kujumuisha maktaba muhimu na kufafanua pini na vitu vinavyotumika.

// 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

Hizi ndizo mistari muhimu zaidi ya kusanidi kwa usanidi wako:

  • #define dhtpin 2: Hii inafafanua pini ya Arduino iliyounganishwa na pini ya data ya kihisi cha DHT11. Badilisha namba 2 kama unatumia pini tofauti.
  • LiquidCrystal_I2C lcd(0x3F, 16, 2);: Mstari huu unaunda kitu cha LCD. Kigezo cha kwanza, 0x3F, ni anwani ya I2C uliyoipata katika hatua iliyopita. 16 na 2 zinafafanua idadi ya safu na mistari ya onyesho lako. Sasisha anwani kama skana yako ilipata tofauti (kwa mfano, 0x27).

Msimbo unatumia kazi maalum, getTemp(), kusoma halijoto na kuibadilisha kuwa vitengo tofauti. Hii ni sifa yenye nguvu inayofanya msimbo utumike tena kwa programu tofauti.

float getTemp(char type) {
    float temp = (float)DHT11.temperature;//pata halijoto
  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 kwa hoja ya herufi moja inayowakilisha kitengo unachotaka. Kwa mfano, getTemp('C') inarudisha halijoto kwa Selsiasi, getTemp('F') inarudisha kwa Fahrenheit, na getTemp('K') inarudisha kwa Kelvin. Kazi inasoma halijoto ghafi kutoka kwa sensa ya DHT11 na kutumia fomula muhimu ya ubadilishaji. Hii inakuruhusu kubadilisha kitengo kinachoonyeshwa kwa urahisi katika loop() kuu bila kuandika upya mantiki ya usomaji wa sensa. Kitanzi kikuu kinachapisha halijoto na unyevu kwenye LCD kwa kutumia kazi za lcd.setCursor() na lcd.print() kudhibiti mahali maadili yanapoonekana kwenye skrini.

Kuonyesha Alama ya Shahada

Seti ya kawaida ya herufi za LCD HD44780 haijumuishi alama maalum ya shahada (°). Ili kuionyesha, lazima utumie kazi ya lcd.write() na thamani ya desimali ya herufi kutoka kwenye ROM ya LCD. Kwa alama ya shahada, thamani hii ni 223. Msimbo unaonyesha hili kwa kutumia lcd.print((char)223); kuchapisha alama baada ya thamani ya halijoto. (katika video saa 30:16)

Maonyesho ya Mradi wa Moja kwa Moja

Mara tu msimbo unapopakiwa, onyesho litaonyesha ujumbe wa kuanza kabla ya kufuta na kuonyesha halijoto na unyevu wa sasa. Mstari wa kwanza wa onyesho unaonyesha maandishi "LCD1602 DHT11", wakati mstari wa pili unaonyesha halijoto kwa Selsiasi, ikifuatiwa na alama ya shahada na "C", na kisha halijoto kwa Fahrenheit, ikifuatiwa na alama ya shahada na "F". Thamani ya unyevu inachapishwa kwenye mfuatiliaji wa serial. Maonyesho katika video yanaonyesha onyesho likisasisha kila nusu sekunde sensa inaposhikiliwa, ikionyesha kwa usahihi hali ya mazingira. (katika video saa 29:42)

Kuonyesha voltage kutoka kwa potentiometer kwenye LCD kunashughulikiwa katika Somo la 20/31: Kuonyesha voltage kwenye LCD1602.

Kutumia LCD hiyo hiyo kuonyesha umbali kutoka kwa sensa ya ultrasonic kunashughulikiwa katika Somo la 20/31: Kutumia LCD1602 na Arduino kuonyesha halijoto, voltage na umbali | Robojax.

Miradi inayohusiana kutoka kwenye video hii

Sura

  • [00:00] Utangulizi wa LCD1602 na muhtasari wa mradi
  • [01:30] Maelezo ya vifaa vya LCD1602 na moduli ya I2C
  • [02:47] Kurekebisha utofauti wa LCD
  • [03:14] Mpangilio wa pini za LCD na usanidi wa anwani ya I2C
  • [05:28] Mchoro wa wiring kwa LCD1602
  • [06:16] Kusakinisha maktaba ya LiquidCrystal_I2C
  • [08:11] Kupata anwani ya I2C kwa skana
  • [09:28] Msimbo wa msingi wa kuchapisha maandishi kwenye LCD
  • [11:10] Mifano: mshale unaomweka na herufi maalum
  • [13:46] Kuunda na kutumia herufi maalum
  • [18:51] Mfano wa onyesho la serial
  • [23:16] Kusogeza maandishi kwenye LCD
  • [24:36] Kuchanganya msimbo wa sensa ya DHT11 na LCD
  • [30:16] Kuonyesha alama ya shahada
  • [32:03] Kuondoa pointi za desimali kutoka kwa halijoto
  • [33:00] Kuonyesha voltage kutoka kwa potentiometer kwenye LCD
  • [35:56] Kuonyesha umbali kutoka kwa sensa ya ultrasonic

Bilder

LCD1602_wiring_DHT11_nopcb_bb
LCD1602_wiring_DHT11_nopcb_bb
LCD_sunFounder
LCD_sunFounder
911-Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Språk: C++
/*
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; 
  }
  
}

Resurser och referenser

Filer📁

Arduino-bibliotek (zip)

Användarhandbok