ኮድ ይፈልጉ

ትምህርት 20/31፡ የሙቀት መጠን እና እርጥበትን ከDHT11 በLCD ስክሪን ላይ ማሳየት

ትምህርት 20/31፡ የሙቀት መጠን እና እርጥበትን ከDHT11 በLCD ስክሪን ላይ ማሳየት

ይህ መማሪያ የDHT11 የሙቀት እና የእርጥበት ዳሳሽ ከI2C-የነቃ LCD1602 ማሳያ ጋር እንዴት እንደሚጣመር ያሳያል፣ ይህም የታመቀ የአካባቢ ክትትል ጣቢያ ለመፍጠር ነው። ጥሬ የዳሳሽ መረጃን ከተከታታይ መቆጣጠሪያ ከማንበብ ይልቅ፣ የቀጥታ የሙቀት እና የእርጥበት ንባቦችን በ16x2 ቁምፊ ስክሪን ላይ ማሳየት ይማራሉ። ይህ ፕሮጀክት የዴስክቶፕ የአየር ሁኔታ ጣቢያ፣ ትንሽ የግሪንሀውስ መቆጣጠሪያ ለመገንባት ወይም ለማንኛውም የቤት አውቶሜሽን ፕሮጀክት የአካባቢ ንባብ ለመጨመር ተስማሚ ነው። የI2C በይነገጽ ሽቦን ቀላል ያደርገዋል፣ ይህም ለጀማሪዎች ተደራሽ እና ለልምድ ላላቸው ሰሪዎች ፈጣን ጭማሪ ያደርገዋል።

LCD_sunFounder

በዚህ እውቀት ሊገነቡ የሚችሉ ጥቂት ተግባራዊ ሀሳቦች እነዚህ ናቸው፦

  • የአሁኑን የክፍል ሁኔታዎች የሚያሳይ የዴስክቶፕ የአየር ሁኔታ ጣቢያ።
  • ለዝርፊያ ወይም ለተክል ቴራሪየም የታመቀ ማሳያ።
  • ለሰርቨር ክፍል ወይም ወርክሾፕ አካባቢ የአካባቢ ንባብ።
  • ለተጨማሪ ውስብስብ የቤት አውቶሜሽን ስርዓት መሰረታዊ ሞጁል።

ሃርድዌር እና ክፍሎች

ይህን ፕሮጀክት ለመገንባት የሚከተሉትን ክፍሎች ያስፈልግዎታል፦

  • Arduino Uno (ወይም ተኳሃኝ ቦርድ)
  • ከI2C በይነገጽ ሞጁል ጋር LCD1602 ማሳያ
  • DHT11 የሙቀት እና የእርጥበት ዳሳሽ
  • 4.7kΩ ወይም 10kΩ የመጎተት-ወደላይ ተቃዋሚ (ባዶ DHT11 ዳሳሽ ከተጠቀሙ)
  • ጃምፐር ሽቦዎች
  • ብሬድቦርድ (አማራጭ፣ ለቀላል ግንኙነቶች)

I2C LCD1602ን መረዳት

LCD1602 በ16 አምዶች እና 2 ረድፎች ያለው የተለመደ የቁምፊ ማሳያ ነው። በማሳያው ጀርባ ላይ የተሸጠው "I2C" ሞጁል የቀላልነቱ ቁልፍ ነው። ይህ ሞጁል የLCDን ትይዩ በይነገጽ ወደ ተከታታይ I2C በይነገጽ ይቀይረዋል፣ ይህም ለውሂብ (SDA እና SCL) ሁለት ሽቦዎች እና ለኃይል (VCC እና GND) ሁለት ብቻ ይፈልጋል። ይህ በአርዱኖዎ ላይ የሚያስፈልጉትን ፒኖች ቁጥር በእጅጉ ይቀንሳል፣ ለሌሎች ዳሳሾች እና አንቀሳቃሾች የበለጠ ያስቀራል። ሞጁሉ የማሳያውን ንፅፅር ለማስተካከል ትንሽ ፖቴንሽዮሜትር ያካትታል፣ ይህም ጽሑፍ እንዲታይ ለማድረግ ወሳኝ ነው። የሞጁሉ I2C አድራሻ በቦርዱ ላይ ባሉት ትናንሽ የሽያጭ ጃምፐሮች (A0፣ A1፣ A2) ሊቀየር ይችላል፣ ይህም ብዙ I2C መሳሪያዎች በተመሳሳይ አውቶቡስ ላይ እንዲቀራመዱ ያስችላል።

የሽቦ መመሪያ

LCD1602_wiring_DHT11_nopcb_bb

ክፍሎቹን ከታች ባለው ስእል እንደሚታየው ያገናኙ። I2C LCD የአርዱኖውን I2C ፒኖች ይጠቀማል፣ DHT11 ዳሳሽ ደግሞ ዲጂታል ፒን ይጠቀማል።

ለLCD1602-I2C፦

  • VCC ወደ አርዱኖ 5V
  • GND ወደ አርዱኖ GND
  • SDA ወደ አርዱኖ A4
  • SCL ወደ አርዱኖ A5

ለDHT11 ዳሳሽ፦

  • VCC (ፒን 1) ወደ አርዱኖ 5V
  • ውሂብ (ፒን 2) ወደ አርዱኖ ዲጂታል ፒን 2 (ከ10kΩ የመጎተት-ወደላይ ተቃዋሚ ወደ 5V ጋር)
  • NC (ፒን 3) - ያልተገናኘ
  • GND (ፒን 4) ወደ አርዱኖ GND

(በቪዲዮ በ25፡16)

ቤተ-መጻሕፍትን ማዋቀር

ይህ ፕሮጀክት ሁለት ቤተ-መጻሕፍት ይፈልጋል። Wire.h ቤተ-መጻሕፍት የመደበኛ አርዱኖ ጭነት አካል ነው። LiquidCrystal_I2C ቤተ-መጻሕፍት እና dht11 ቤተ-መጻሕፍት መጫን ያስፈልግዎታል። ቪዲዮው እንዴት እንደሚጭኗቸው ያሳያል። ቤተ-መጻሕፍቱን በቪዲዮ መግለጫው ውስጥ ከተሰጡት አገናኞች ወይም ከRobojax ድህረ ገጽ ማውረድ ይችላሉ። አንዴ ካወረዱ በኋላ፣ በአርዱኖ 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 ዳሳሽ የውሂብ ፒን ጋር የተገናኘውን የአርዱኖ ፒን ይገልጻል። የተለየ ፒን ከተጠቀሙ ቁጥሩን 2 ይቀይሩ።
  • LiquidCrystal_I2C lcd(0x3F, 16, 2);፦ ይህ መስመር የLCD ነገርን ይፈጥራል። የመጀመሪያው መለኪያ፣ 0x3F፣ በቀዳሚው ደረጃ ያገኙት I2C አድራሻ ነው። 16 እና 2 የማሳያዎን የአምዶች እና የረድፎች ብዛት ይገልጻሉ። ስካነርዎ የተለየ አድራሻ ካገኘ (ለምሳሌ 0x27) አድራሻውን ያዘምኑ።

ኮዱ የሙቀት መጠንን ለማንበብ እና ወደ ተለያዩ አሃዶች ለመቀየር getTemp() የተባለ ብጁ ተግባር ይጠቀማል። ይህ ኮዱን ለተለያዩ አፕሊኬሽኖች እንደገና ጥቅም ላይ ሊውል የሚችል ኃይለኛ ባህሪ ነው።

float getTemp(char type) {
    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; 
  }  
}

ይህን ተግባር ለመጠቀም፣ የሚፈለገውን አሃድ የሚወክል ነጠላ ቁምፊ ክርክር ይዘው ይጠሩታል። ለምሳሌ፣ getTemp('C') የሙቀት መጠኑን በሴልሺየስ ይመልሳል፣ getTemp('F') በፋረንሃይት ይመልሳል፣ እና getTemp('K') በኬልቪን ይመልሳል። ተግባሩ ጥሬውን የሙቀት መጠን ከDHT11 ዳሳሽ ያነባል እና አስፈላጊውን የመቀየሪያ ቀመር ይተገብራል። ይህ የማሳያ አሃዱን በዋናው loop() ውስጥ የዳሳሽ ንባብ አመክንዮውን ሳይጽፉ በቀላሉ እንዲቀይሩ ያስችልዎታል። ዋናው loop የሙቀት መጠኑን እና እርጥበቱን በLCD ላይ ያትማል፣ እሴቶቹ በስክሪኑ ላይ የት እንደሚታዩ ለመቆጣጠር lcd.setCursor() እና lcd.print() ተግባራትን ይጠቀማል።

የዲግሪ ምልክትን ማሳየት

መደበኛው HD44780 LCD የቁምፊ ስብስብ የተወሰነ የዲግሪ ምልክት (°) አያካትትም። እሱን ለማሳየት፣ ከLCD ሮም የቁምፊውን አስርዮሽ እሴት በመጠቀም lcd.write() ተግባርን መጠቀም አለብዎት። ለዲግሪ ምልክቱ፣ ይህ እሴት 223 ነው። ኮዱ ይህን የሚያሳየው ከሙቀት መጠን እሴቱ በኋላ ምልክቱን ለማተም lcd.print((char)223); በመጠቀም ነው። (በቪዲዮው በ30:16)

የቀጥታ ፕሮጀክት ማሳያ

ኮዱ ከተጫነ በኋላ፣ ማሳያው የመነሻ መልእክት ያሳያል ከዚያም ያጸዳል እና የአሁኑን የሙቀት መጠን እና እርጥበት ያሳያል። የማሳያው የመጀመሪያ መስመር "LCD1602 DHT11" የሚለውን ጽሑፍ ያሳያል፣ ሁለተኛው መስመር ደግሞ የሙቀት መጠኑን በሴልሺየስ ያሳያል፣ ከዚያም የዲግሪ ምልክቱ እና "C"፣ ከዚያም የሙቀት መጠኑን በፋረንሃይት ያሳያል፣ ከዚያም የዲግሪ ምልክቱ እና "F"። የእርጥበት እሴቱ በተከታታይ መቆጣጠሪያ ላይ ይታተማል። በቪዲዮው ላይ ያለው ማሳያ ዳሳሹ ሲያዝ በየግማሽ ሰከንዱ እየተሻሻለ የአካባቢውን ሁኔታ በትክክል የሚያንጸባርቅ መሆኑን ያሳያል። (በቪዲዮው በ29:42)

ከፖቴንሺዮሜትር የሚገኘውን ቮልቴጅ በLCD ላይ ማሳየት በትምህርት 20/31፡ ቮልቴጅን በLCD1602 ላይ ማሳየት ውስጥ ተካቷል።

የአልትራሳውንድ ዳሳሽ ርቀት ለማሳየት ተመሳሳይ LCD መጠቀም በትምህርት 20/31፡ LCD1602 ከአርዱኖ ጋር በመጠቀም የሙቀት መጠን፣ ቮልቴጅ እና ርቀት ማሳየት | Robojax ውስጥ ተካቷል።

ከዚህ ቪዲዮ ጋር የተያያዙ ፕሮጀክቶች

ምዕራፎች

  • [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] ከአልትራሳውንድ ዳሳሽ ርቀትን ማሳየት

ምስሎች

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
ቋንቋ: 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; 
  }
  
}

እንደሚያስፈልግዎት ይችላል

ምንጮች እና ምንጮች

ፋይሎች📁

Arduino ቤተ መዝገቦች (zip)

ተጠቃሚ መመሪያ