Temperature and Humidity পরিমাপ শিখতে আরডুইনোর ব্যবহার
ইলেকট্রনিক্স নিয়ে যাদের হাতে-কলমে কাজ করার পূর্ব অভিজ্ঞতা রয়েছে তাদের জন্য আজকের এক্সপেরিমেন্ট খুবই সহজ হবে। কিন্তু যাদের আগ্রহ রয়েছে কিন্তু পূর্বে কখনো এই ধরণের কম্পোনেন্ট নিয়ে কাজ করা হয়ে উঠেনি তাদেরকে বলবো আজকের সম্পূর্ণ লেখাটি পড়ে এক্সপেরিমেন্ট শুরু করতে। অনেকেই আমরা নিজে নিজে টেম্পারেচার পরিমাপক যন্ত্র বানাতে চাই। তাদের জন্যই আজকের টিউটোরিয়াল। রুমের ভিতর কিংবা বাহিরের Temperature and Humidity মেজার করে তার ডাটা LCD তে প্রদর্শন করার জন্য নিচের প্রতিটি ধাপ অনুসরণ করতে হবে হবে। এই এক্সপেরিমেন্ট করার জন্য মাইক্রোকন্ট্রোলার বোর্ড হিসেবে ব্যবহার করা হয়েছে আরডুইনো উনো।
একটি মাইক্রোকন্ট্রোলার ভিত্তিক প্রোজেক্টে ডিসপ্লে অনেক বড় ভূমিকা পালন করে থাকে। কারণ ডিসপ্লেতে বিভিন্ন মেসেজ প্রদর্শন করার ব্যবস্থা থাকে। যেমন ক্যারেক্টার, নাম্বার এবং কাস্টমাইজড ক্যারেক্টার। এর ফলে প্রোজেক্টের যাবতীয় মেসেজগুলো ডিসপ্লের দিকে লক্ষ্য করলেই বুঝতে পারি। এই দিকটি বিবেচনায় বর্তমানে সবচেয়ে বেশি ব্যবহৃত হচ্ছে 16×2 Alphanumeric Display.
ডিসপ্লেটিকে 16×2 বলার কারণ হয়তো অনেকেরই জানা নেই। এর অর্থ হলো, ১৬টি Column এবং ২টা Row। প্রতিটা Row তে ১৬টা করে ক্যারেক্টার লিখা যাবে। ২ Row তে মোট ৩২টা ক্যারেক্টার লিখা যাবে। ডিসপ্লেটিতে রয়েছে মোট ১৬ টি পিন। আগেই বলে রাখি, এই ১৬টি পিনের সাথে ১৬টি কলামের কোন সম্পর্ক নেই।
ডিসপ্লেতে কিছু প্রদর্শন করার জন্য ৫ ভোল্ট সাপ্লাই দরকার হবে। এর জন্য জানতে হবে ডিসপ্লের কোন পিনের কি কাজ। কানেকশন দেওয়ার পূর্বে অবশ্যই পিনের লেভেল ভালো করে দেখে নিতে হবে। অন্যথা ভুল কানেকশনের জন্য নস্ট হয়ে যেতে পারে ডিসপ্লেটি।
ডিসপ্লে ড্রাইভারঃ
যেহেতু LCD 16×2 ডট মেট্রিক্সের তাই এর মধ্যে রয়েছে (16*2=32) 32টি অক্ষর এবং প্রতিটি অক্ষর 5*8 পিক্সেল ডট দিয়ে তৈরি। সুতরাং, প্রতিটি অক্ষরের জন্য (5*8=40) 40 পিক্সেল আছে এবং 32টি অক্ষরের জন্য (32*40) 1280 পিক্সেল। মাইক্রোকন্ট্রোলার থেকে কমান্ড এবং ডাটা নিয়ে তাকে প্রসেসিং করে LCD স্ক্রিনে অর্থপূর্ণ তথ্য প্রদর্শন করার কাজটি করেন HD44780 ডিসপ্লে ড্রাইভার আইসি। যা এলসিডি ডিসপ্লের বিপরীত পাশে মাউন্ট করা রয়েছে।
পিন ডায়াগ্রামঃ
1। GND: এই পিনের সাথে গ্রাউন্ড কানেকশন দিতে হবে।
2। VCC: এটিই ডিসপ্লের অপারেটিং ভোল্টেজ সাপ্লাই পিন। এখানে ৫ ভোল্ট সাপ্লাই দিতে হবে।
3। V0: কনট্রাস্ট পিন। এই পিন খুবই গুরুত্বপূর্ণ। এই পিন উন্মুক্ত রেখে সকল কানেকশন দিলেও ডিসপ্লেতে কিছুই প্রদর্শন করবে না। এই পিনের সাথে একটি ভ্যারিএবল রেজিস্টর সংযোগ করতে হবে। তারপর সেটি ঘুড়িয়ে ডিসপ্লের কনট্রাস্ট এডজাস্ট করে নিতে হবে।
4. RS: রেজিস্টার সিলেক্ট। এটি LCD এর কনট্রোল পিন। এই পিনটি সরাসরি Arduino পিনের সাথে কানেকশন হবে।
5. RW: Read/Write এই পিনের নাম শুনেই হয়তো বুঝা যাচ্ছে এর কাজ সম্পর্কে। তারপরও আরেকটু বিস্তারিত বলছি। এই পিন কনট্রাস্ট পিনের মতই গুরুত্বপূর্ণ। ডিসপ্লেতে কোন কিছু প্রদর্শন করার অর্থ হলো, ডিসপ্লে সেটিকে Write করতেছে। তখন RW পিনের অবস্থা অবশ্যই Low (0V) থাকতে হবে। অর্থাৎ সরাসরি GND এর সাথে কানেকশন করে রাখবো। যদি কখনো ডিসপ্লেতে প্রদর্শিত হওয়া ডাটা রিড করার দরকার হয়, তখন RW পিনকে High (5V) করে নিতে হবে। সাধারণত এই পিনকে High করার দরকার হয়না।
6. E: Enable. LCD এর কন্ট্রোল পিন। LCD Data লাইনে কিছু পাঠালেই LCD তা প্রদর্শন করবে না। যতক্ষণ পর্যন্ত Enable পিনকে LOW থেকে High করা না হবে। এই পিনের কানেকশন সরাসরি Arduino পিনের সাথে হবে।
7-14. D0-D7: এইগুলো সব ডাটা পিন।
15. A: ডিসপ্লের ব্যাকলাইট LED এর Anode প্রান্ত। এখানে সরাসরি ৫ ভোল্ট সাপ্লাই দিতে হবে।
16. K: ডিসপ্লের ব্যাকলাইট LED এর Cathode প্রান্ত। GND এর সাথে কানেকশন হবে। ।
LCD ইন্টারফেসঃ
LCD কে মূলত দুইটা পদ্ধতিতে কাজ করানো হয়ে থাকে। এই কাজ করানোর পদ্ধতিকে মুড বলা হয়। এই দুইটা মুড হলো, ৪ বিট মুড এবং ৮ বিট মুড। ৪ বিট মুডে এলসিডির Data পিনের D4-D7 ব্যবহার করা হয়েছে। কিন্তু ৮ বিট মুডের জন্য D0-D7 সবগুলো পিনের ব্যবহার হয়ে থাকে। এখানে ৪ বিট মুডের চেয়ে ৮ বিট মুড দ্রুত ডাটা পাঠাতে পারে। কিন্তু তারপরও সকলে ৪ বিট মুড বেশি ব্যবহার করে থাকে।
এখন প্রশ্ন হলো ৮ বিট মুডের চেয়ে ৪ বিট মুডের ব্যবহার বেশি কেনো? উত্তর হলো, ৮ বিট মুডে LCD চালাতে মাইক্রোকন্ট্রোলারের পিন ব্যবহার হয় ১০টি যেখানে ৪ বিট মুডে ব্যবহার হয় মাত্র ৬টি। LCD এর (RS, E, D4, D5, D6, D7) ছয়টি পিন আরডুইনোর যে কোন I/O পিনের সাথে কানেকশন দেওয়া যাবে। এই কানেকশন প্রক্রিয়াকেই বলে ৪ বিট মুড। এখানে ডাটা পিনের চারটি বিট (D4-D7) ব্যবহার করা হয়েছে।
প্রয়োজনীয় কম্পোনেন্টঃ
মাত্র ৬টি কম্পোনেন্ট ব্যবহার করেই Temperature and Humidity এই প্রোজেক্ট বা এক্সপেরিমেন্টি করা সম্ভব।
- DHT11 Temperature and Humidity Sensor
- LCD Display (16X2)
- Breadboard Jumpers 30Pcs/pack
- Arduino Uno R3 SMD with USB Cable
- 10K Potentiometer
- Breadboard (830 Point)
কম্পোনেন্টগুলো একসাথে পেয়ে যাবেন, যদি আপনার কাছে থাকে Arduino Advance Learning Kit বক্স। অন্যথা টেকশপবিডির ওয়েবসাইটেও সার্চ করলে পেয়ে যাবেন।
আর্দ্রতা এবং তাপমাত্রা সেন্সর (DHT11):
কানেকশন দেওয়ার পূর্বে পিনের লেভেল অনুসরণ করতে হবে।
সার্কিট ডায়াগ্রামঃ
সার্কিট কানেকশনে বেশি জটিলতা নেই। সম্পূর্ণ সার্কিটে রয়েছে, LCD এর জন্য ৬টা ডিজিটাল পিন, DHT11 সেন্সরের জন্য ১টি ডিজিটাল পিন।
ডেমো প্রোগ্রামঃ
LCD কানেকশন সঠিকভাবে সম্পন্ন হলে নিচের কোড আপলোড করলে, LCD তে একটি লেখা প্রিন্ট হবে। প্রথম লাইনে “Arduino Advanced” এবং দ্বিতীয় লাইনে “Learning Kit” এইটুকু ঠিকভাবে দেখা গেলে, নিশ্চিত ভাবে বলা যাবে LCD কানেকশন সঠিক আছে। এখানে মূলত দুইটা Row এর সম্পূর্ণটা ব্যবহার করে নিশ্চিত করা হয়েছে ডিসপ্লেটির Column এবং Row ঠিক আছে।
// include the library code: #include <LiquidCrystal.h> // initialize the library by associating any needed LCD interface pin // with the arduino pin number it is connected to const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.setCursor(0, 0); lcd.print("Arduino Advanced"); lcd.setCursor(0, 1); lcd.print(" Learning Kit "); delay (10000); } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis() / 1000); }
আর্দ্রতা এবং তাপমাত্রা পরিমাপ
এটিই ফাইনাল প্রোগ্রাম Temperature and Humidity ডিসপ্লেতে দেখানোর জন্য। এখানে দুইটা লাইব্রেরী Adafruit_Sensor.h এবং DHT.h রয়েছে যা, অতিরিক্ত যুক্ত করে নিতে হবে যদি, পূর্বে থেকে ইন্সটল না থাকে।
#include <Adafruit_Sensor.h> #include <DHT.h> #include <LiquidCrystal.h> const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); #define DHTPIN 2 #define DHTTYPE DHT11 // DHT 11 DHT dht = DHT(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); lcd.begin(16,2); dht.begin(); } void loop() { // Wait a few seconds between measurements: delay(200); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) // Read the humidity in %: float h = dht.readHumidity(); // Read the temperature as Celsius: float t = dht.readTemperature(); // Read the temperature as Fahrenheit: float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again): if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } // Compute heat index in Fahrenheit (default): float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius: float hic = dht.computeHeatIndex(t, h, false); lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print("C"); lcd.setCursor(0,1); lcd.print("Humidity: "); lcd.print(h); lcd.print("%"); }
আরডুইনোর সাথে সার্ভো মোটরের ব্যবহার দেখতে এই পেজটি দেখতে পারেন।
ভিডিওঃ
সাবধানতাঃ
১। ৫ ভোল্টের বেশি কোন কম্পোনেন্টে ভোল্টেজ দেওয়া যাবে না।
২। LCD এবং সেন্সরের লেভেল নিশ্চিত না হয়ে কানেকশন দেওয়া যাবে না।
৩। LCD এর GND, RW, K পিনকে গ্রাউন্ড অবশ্যই করতে হবে।
৪। কনট্রাস্ট পিনে Potentiometer ব্যাতিত LCD তে পাওয়ার দেওয়া যাবে না।
৫। সকল কানেকশন দেওয়ার পর পুনরায় চেক করে নিতে হবে।