কোড অনুসন্ধান

পাঠ ২০/৩১: LCD স্ক্রিনে DHT11 থেকে তাপমাত্রা এবং আর্দ্রতা প্রদর্শন

পাঠ ২০/৩১: LCD স্ক্রিনে DHT11 থেকে তাপমাত্রা এবং আর্দ্রতা প্রদর্শন

এই টিউটোরিয়ালটি দেখায় কিভাবে একটি 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
  • Data (পিন 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.setCursor() এবং lcd.print() ফাংশন ব্যবহার করে LCD-তে তাপমাত্রা এবং আর্দ্রতা প্রিন্ট করে যাতে স্ক্রিনে মানগুলি কোথায় প্রদর্শিত হবে তা নিয়ন্ত্রণ করা যায়।

ডিগ্রি প্রতীক প্রদর্শন

স্ট্যান্ডার্ড HD44780 LCD অক্ষর সেটে একটি ডেডিকেটেড ডিগ্রি প্রতীক (°) অন্তর্ভুক্ত নয়। এটি প্রদর্শন করতে, আপনাকে LCD-এর ROM থেকে অক্ষরের দশমিক মান সহ lcd.write() ফাংশন ব্যবহার করতে হবে। ডিগ্রি প্রতীকের জন্য, এই মানটি 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; 
  }
  
}

আপনাকে যা প্রয়োজন হতে পারে

সম্পদ ও রেফারেন্সসমূহ

ফাইলসমূহ📁

আর্ডুইনো লাইব্রেরি (জিপ)

ব্যবহারকারীর ম্যানুয়াল