Arduino কোড এবং একটি Aosong AM2320 ডিজিটাল তাপমাত্রা ও আর্দ্রতা সেন্সরের জন্য ভিডিও, LCD1602 এবং I2C মডিউল সহ
এই টিউটোরিয়ালে, আমরা Aosong AM2320 ডিজিটাল তাপমাত্রা এবং আর্দ্রতা সেন্সর এবং একটি I2C মডিউল ব্যবহার করে এমন একটি LCD1602 ডিসপ্লে কীভাবে ব্যবহার করতে হয় তা অন্বেষণ করব। লক্ষ্য হল ফারেনহাইট এবং সেলসিয়াস উভয় ক্ষেত্রেই তাপমাত্রা রিডিং এবং আপেক্ষিক আর্দ্রতা প্রদর্শন করা। এই সেটআপটি বিভিন্ন প্রকল্পে পরিবেশগত অবস্থা পর্যবেক্ষণের জন্য আদর্শ, যা আপনার Arduino টুলকিটে একটি বহুমুখী সংযোজন করে তোলে।

আমরা তাপমাত্রা এবং আর্দ্রতার ডেটা সংগ্রহ করতে AM2320 সেন্সর ব্যবহার করব, যা পরে LCD1602-এ প্রদর্শিত হবে। I2C মডিউলটি ওয়্যারিং প্রক্রিয়াটি সহজ করে, যার জন্য শুধুমাত্র চারটি সংযোগ প্রয়োজন: VCC, GND, SDA এবং SCL। ওয়্যারিং এবং প্রোগ্রামিং সম্পর্কে স্পষ্ট ধারণার জন্য, আমি সংশ্লিষ্ট ভিডিওটি (ভিডিওতে 00:00 সময়ে) দেখার পরামর্শ দিচ্ছি।
হার্ডওয়্যার ব্যাখ্যা
এই প্রকল্পের মূল উপাদানগুলির মধ্যে রয়েছে AM2320 সেন্সর, LCD1602 ডিসপ্লে এবং I2C মডিউল। AM2320 একটি ডিজিটাল সেন্সর যা I2C ইন্টারফেসের মাধ্যমে তাপমাত্রা এবং আর্দ্রতার সঠিক রিডিং প্রদান করে। এটি 3.3V থেকে 5.5V ভোল্টেজে কাজ করে এবং তাপমাত্রার জন্য -40°C থেকে +80°C এবং আর্দ্রতার জন্য 0% থেকে 100% পরিমাপের পরিসীমা রয়েছে।
LCD1602 ডিসপ্লে সেন্সর রিডিংগুলির ভিজ্যুয়ালাইজেশন সক্ষম করে। এটি একটি 16x2 ক্যারেক্টার ডিসপ্লে যা I2C প্রোটোকলের মাধ্যমে যোগাযোগ করে, যা প্রয়োজনীয় সংযোগের সংখ্যা মাত্র চারটিতে কমিয়ে দেয়। I2C মডিউলটি LCD থেকে সমান্তরাল ডেটাকে সিরিয়াল ফরম্যাটে রূপান্তর করে, যা Arduino-এর সাথে সংযোগ করা সহজ করে তোলে।
ডেটাশিটের বিবরণ
| প্রস্তুতকারক | Aosong |
|---|---|
| পার্ট নম্বর | AM2320 |
| লজিক/আইও ভোল্টেজ | 3.3 V - 5.5 V |
| সাপ্লাই ভোল্টেজ | 3.3 V - 5.5 V |
| আউটপুট কারেন্ট | ≤ 1.5 mA |
| পরিমাপের পরিসীমা (তাপমাত্রা) | -40°C থেকে +80°C |
| পরিমাপের পরিসীমা (আর্দ্রতা) | 0% থেকে 100% |
| প্রতিক্রিয়া সময় | ≤ 2s |
| প্যাকেজ | DIP-4 |
| নোট / ভেরিয়েন্ট | I2C সংযোগের জন্য রেজিস্টর পুল-আপ সুপারিশ করা হয়। |
- নির্দিষ্ট ভোল্টেজ সীমার মধ্যে সঠিক পাওয়ার সাপ্লাই নিশ্চিত করুন।
- SDA এবং SCL লাইনের জন্য পুল-আপ রেজিস্টর (4.7kΩ সুপারিশকৃত) ব্যবহার করুন।
- সঠিক I2C ঠিকানা পরীক্ষা করুন (বেশিরভাগ LCD-এর জন্য ডিফল্ট 0x27)।
- সেন্সরের এরর কোড পরীক্ষা করে সম্ভাব্য ত্রুটিগুলি পরিচালনা করুন।
- ওভারল্যাপ এড়াতে নতুন রিডিং প্রদর্শনের আগে LCD পরিষ্কার করুন।
ওয়্যারিং নির্দেশাবলী

AM2320 সেন্সর ওয়্যার করতে, বাম পিন (VCC) Arduino-এর 5V-এর সাথে সংযুক্ত করুন। দ্বিতীয় পিন (SDA) একটি Arduino Uno-এর A4 পিনে যায় (বা Mega-এর পিন 20)। তৃতীয় পিন (GND) গ্রাউন্ডের সাথে সংযুক্ত করা উচিত, এবং চতুর্থ পিন (SCL) একটি Arduino Uno-এর A5 পিনে সংযুক্ত হয় (বা Mega-এর পিন 21)। অতিরিক্তভাবে, সঠিক সিগন্যাল স্তর নিশ্চিত করতে SDA পিন এবং 5V-এর মধ্যে একটি 4.7kΩ রেজিস্টর এবং SCL পিন এবং 5V-এর মধ্যে আরেকটি 4.7kΩ রেজিস্টর সংযুক্ত করুন।
I2C সহ LCD1602 ডিসপ্লের জন্য, VCC পিনটি 5V-এর সাথে এবং GND পিনটি গ্রাউন্ডের সাথে সংযুক্ত করুন। LCD থেকে SDA পিনটি সেন্সরের জন্য ব্যবহৃত একই SDA পিনে (A4) সংযুক্ত করুন। একইভাবে, LCD থেকে SCL পিনটি সেন্সরের জন্য ব্যবহৃত একই SCL পিনে (A5) সংযুক্ত করুন। এই ভাগ করা ওয়্যারিং উভয় ডিভাইসকে একই I2C বাসে যোগাযোগ করতে দেয়।
কোড উদাহরণ ও ওয়াকথ্রু
নিম্নলিখিত কোডটি AM2320 সেন্সর এবং LCD1602 ডিসপ্লে শুরু করে। এটি প্রয়োজনীয় লাইব্রেরিগুলি অন্তর্ভুক্ত করে এবং সেন্সরের একটি ইনস্ট্যান্স তৈরি করে শুরু হয়।
#include
AM2320 sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
এখানে, sensor অবজেক্টটি AM2320 লাইব্রেরি থেকে তৈরি করা হয়েছে, এবং lcd অবজেক্টটি ডিসপ্লের I2C ঠিকানা দিয়ে আরম্ভ করা হয়েছে।
setup() ফাংশনে, আমরা সেন্সর এবং LCD উভয়ই আরম্ভ করি। এর মধ্যে রয়েছে ব্যাকলাইট চালু করা এবং একটি প্রাথমিক বার্তা মুদ্রণ করা।
void setup() {
sensor.begin();
lcd.begin();
lcd.backlight();
lcd.print("Robojax AM2320 ");
lcd.setCursor (0,1);
lcd.print("LCD1602 I2C Demo");
delay(3000);
}
এই কোডটি ডিসপ্লেকে ৩ সেকেন্ডের জন্য একটি স্বাগত বার্তা দেখানোর জন্য সেট আপ করে, যা ব্যবহারকারীকে দেখার সময় দেয় যে সিস্টেমটি আরম্ভ হচ্ছে।
loop() ফাংশনটি ক্রমাগত সেন্সর পরিমাপ পরীক্ষা করে এবং সেই অনুযায়ী ডিসপ্লে আপডেট করে। যদি একটি পরিমাপ উপলব্ধ থাকে, তবে এটি স্ক্রিন পরিষ্কার করে এবং ফারেনহাইট এবং সেলসিয়াস উভয়েই তাপমাত্রা, সাথে আপেক্ষিক আর্দ্রতা মুদ্রণ করে।
void loop() {
if (sensor.measure()) {
lcd.clear();
lcd.print("T:");
lcd.print(temp('F'));
lcd.print("F/");
lcd.print(temp('C'));
lcd.print("C");
lcd.setCursor (0,1);
lcd.print("R.H. :");
lcd.print(sensor.getHumidity());
lcd.print("%");
}
else {
int errorCode = sensor.getErrorCode();
switch (errorCode) {
case 1: lcd.print("ERR: Sensor offline"); break;
case 2: lcd.print("ERR: CRC failed."); break;
}
}
delay(500);
}
এই অংশটি দেখায় যে প্রোগ্রামটি কীভাবে সেন্সর ডেটা পুনরুদ্ধার এবং প্রদর্শন করে, সাথে errorCode পরীক্ষা করে সম্ভাব্য ত্রুটিগুলি পরিচালনা করে।
প্রদর্শন / কী আশা করবেন
সেটআপ সম্পূর্ণ হলে, LCD-তে ফারেনহাইট এবং সেলসিয়াস উভয়েই তাপমাত্রা, সাথে আপেক্ষিক আর্দ্রতার শতাংশ প্রদর্শিত হবে বলে আশা করুন। যদি সেন্সরটি অফলাইনে থাকে বা একটি CRC ত্রুটি থাকে, তবে ডিসপ্লেতে সংশ্লিষ্ট ত্রুটি বার্তা দেখাবে। কোনো সমস্যা এড়াতে সমস্ত সংযোগ সুরক্ষিত আছে তা নিশ্চিত করা গুরুত্বপূর্ণ (ভিডিওতে ০২:৪৫ এ)।
ভিডিও টাইমস্ট্যাম্প
- ০০:০০ - প্রকল্পের ভূমিকা
- ০১:৩০ - তারের সংযোগ নির্দেশাবলী
- ০৩:১৫ - কোড ব্যাখ্যা
- ০৪:৪৫ - কার্যকারিতার প্রদর্শন
++
/**
* This is Arduino code for AM2320 Temperature and Humidity Sensor with LCD1602 and I2C Module
* which displays the temperature and RH (relative humidity)
* on an LCD1602 with an I2C module. The code was combined by Robojax.
*
Original Code For AM2320 :https://github.com/hibikiledo/AM2320
Copyright 2016 Ratthanan Nalintasnai
Modified for Robojax.com video by
Ahmad S. on March 22, 2018 at 23:55 in Ajax, Ontario, Canada
This code, with library and other codes, is available at
https://robojax.com
Watch the video instruction for this code: https://youtu.be/ym567hneDpE
**/
// Include library for AM2320
#include <AM2320.h>
// Create an instance of the sensor
AM2320 sensor;
#include <Wire.h>
// Include the LiquidCrystal library for display
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Call sensor.begin() to initialize the library
sensor.begin();
// Robojax code for LCD with I2C
// Initialize the LCD,
lcd.begin();
// Turn on the backlight and print a message.
lcd.backlight();
lcd.print("Robojax AM2320 ");
lcd.setCursor (0,1);
lcd.print("LCD1602 I2C Demo");
delay(3000);
}
void loop() {
if (sensor.measure()) {
lcd.clear();
lcd.print("T:");
lcd.print(temp('F'));
lcd.print("F/");
lcd.print(temp('C'));
lcd.print("C");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("R.H. :");
lcd.print(sensor.getHumidity());
lcd.print("%");
}
else { // An error has occurred
int errorCode = sensor.getErrorCode();
switch (errorCode) {
case 1: lcd.print("ERR: Sensor offline"); break;
case 2: lcd.print("ERR: CRC failed."); break;
}
}
delay(500);
}
/*
* temp()
* Returns the temperature based on the input character T.
* If T == 'F', converts Celsius to Fahrenheit.
* Otherwise, returns Celsius.
* How to use:
* To get Fahrenheit, use temp('F').
* To get Celsius, use temp('C') or temp('').
* temp('') uses an empty single quote.
*
*/
float temp(char T)
{
if (sensor.measure()) {
if(T =='F')
{
// Convert to FAHRENHEIT and return
// Robojax video tutorial
return sensor.getTemperature()* 1.8 + 32;
}else{
return sensor.getTemperature();// Return CELSIUS
}
}// if sensor.measure
}
/*********************************************************************
Original source: http://playground.arduino.cc/Main/I2cScanner
This program will find the I2C address on the I2C device. Just upload the code into your Arduino
and open the serial monitor and wait. It will display the I2C address as 0x3C or similar.
* Please view other RoboJax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The I2C scanner uses the return value of
// the Wire.endTransmission to see if
// a device did acknowledge the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
আপনাকে যা প্রয়োজন হতে পারে
-
অ্যামাজন
-
অলি এক্সপ্রেসPurchase AM2302, DHT11, or DHT22 sensor from AliExpresss.click.aliexpress.com
সম্পদ ও রেফারেন্সসমূহ
-
বাহ্যিকAM2320 Library (from GitHub)github.com
-
বাহ্যিকArduino ওয়্যার ডকুমেন্টেশন পৃষ্ঠাarduino.cc
ফাইলসমূহ📁
ডেটাশিট (পিডিএফ)
-
Adafruit-am2320-temperature-humidity-i2c-sensor user's manual
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
ফ্রিটজিং ফাইল
-
AM2320 Humidity and Temperature Sensor
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB