کوڈ تلاش کریں

سبق 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) درکار ہوتے ہیں۔ یہ آپ کے Arduino پر درکار پنوں کی تعداد کو بہت کم کر دیتا ہے، جس سے دوسرے سینسرز اور ایکچیوٹرز کے لیے مزید دستیاب رہتے ہیں۔ ماجیول میں ڈسپلے کے کنٹراسٹ کو ایڈجسٹ کرنے کے لیے ایک چھوٹا پوٹینشیومیٹر بھی شامل ہے، جو متن کی مرئیت کو یقینی بنانے کے لیے اہم ہے۔ ماجیول کا I2C ایڈریس بورڈ پر چھوٹے سولڈر جمپرز (A0, A1, A2) کا استعمال کرکے تبدیل کیا جا سکتا ہے، جس سے ایک ہی بس پر متعدد I2C آلات ایک ساتھ رہ سکتے ہیں۔

وائرنگ گائیڈ

LCD1602_wiring_DHT11_nopcb_bb

اجزاء کو نیچے دیے گئے ڈایاگرام کے مطابق جوڑیں۔ I2C LCD Arduino کے I2C پن استعمال کرتا ہے، جبکہ DHT11 سینسر ایک ڈیجیٹل پن استعمال کرتا ہے۔

LCD1602-I2C کے لیے:

  • VCC کو Arduino 5V سے
  • GND کو Arduino GND سے
  • SDA کو Arduino A4 سے
  • SCL کو Arduino A5 سے

DHT11 سینسر کے لیے:

  • VCC (پن 1) کو Arduino 5V سے
  • ڈیٹا (پن 2) کو Arduino ڈیجیٹل پن 2 سے (5V کے لیے 10kΩ پل-اپ ریزسٹر کے ساتھ)
  • 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 پر)

اپنے 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 سینسر کے ڈیٹا پن سے منسلک Arduino پن کی وضاحت کرتا ہے۔ اگر آپ مختلف پن استعمال کرتے ہیں تو نمبر 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() فنکشن استعمال کرنا ہوگا جس میں LCD کے ROM سے کریکٹر کی اعشاریہ قدر ہو۔ ڈگری علامت کے لیے، یہ قدر 223 ہے۔ کوڈ اسے lcd.print((char)223); استعمال کرکے ظاہر کرتا ہے تاکہ درجہ حرارت کی قدر کے بعد علامت پرنٹ ہو۔ (ویڈیو میں 30:16 پر)

لائیو پروجیکٹ کا مظاہرہ

کوڈ اپ لوڈ ہونے کے بعد، ڈسپلے ایک ابتدائی پیغام دکھائے گا، پھر صاف ہو کر موجودہ درجہ حرارت اور نمی دکھائے گا۔ ڈسپلے کی پہلی لائن "LCD1602 DHT11" کا متن دکھاتی ہے، جبکہ دوسری لائن سیلسیس میں درجہ حرارت دکھاتی ہے، اس کے بعد ڈگری علامت اور "C"، اور پھر فارن ہائیٹ میں درجہ حرارت، اس کے بعد ڈگری علامت اور "F"۔ نمی کی قدر سیریل مانیٹر پر پرنٹ ہوتی ہے۔ ویڈیو میں مظاہرہ دکھاتا ہے کہ ڈسپلے ہر آدھے سیکنڈ میں اپ ڈیٹ ہوتا ہے جب سینسر کو پکڑا جاتا ہے، جو ماحولیاتی حالات کو درست طریقے سے ظاہر کرتا ہے۔ (ویڈیو میں 29:42 پر)

پوٹینشیومیٹر سے وولٹیج کو LCD پر دکھانا سبق 20/31: LCD1602 پر وولٹیج دکھانا میں شامل ہے۔

اسی LCD کو الٹراسونک سینسر سے فاصلہ دکھانے کے لیے استعمال کرنا سبق 20/31: Arduino کے ساتھ 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; 
  }
  
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

آرڈوینو لائبریریاں (زپ)

صارف کا دستی کتاب