آردوینو کوڈ اور ویڈیو ایک اوسونگ AM2320 ڈیجیٹل درجہ حرارت اور نمی سینسر کے لیے LCD1602 اور I2C ماجیول کے ساتھ
اس ٹیوٹوریل میں، ہم دریافت کریں گے کہ Aosong AM2320 ڈیجیٹل درجہ حرارت اور نمی سینسر کو LCD1602 ڈسپلے کے ساتھ کیسے استعمال کیا جائے جو I2C ماجیول استعمال کرتا ہے۔ مقصد درجہ حرارت کی ریڈنگز کو فارن ہائیٹ اور سیلسیس دونوں میں، نیز نسبتاً نمی کو ظاہر کرنا ہے۔ یہ سیٹ اپ مختلف پروجیکٹس میں ماحولیاتی حالات کی نگرانی کے لیے مثالی ہے، جو آپ کے 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 ایڈریس چیک کریں (زیادہ تر LCDs کے لیے ڈیفالٹ 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 سینسر؛
#include
LiquidCrystal_I2C lcd(0x27، 16، 2)؛
یہاں، سینسر آبجیکٹ 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 ڈیمو");
delay(3000);
}
یہ کوڈ ڈسپلے کو 3 سیکنڈ کے لیے خوش آمدید کا پیغام دکھانے کے لیے ترتیب دیتا ہے، جس سے صارف کو یہ دیکھنے کا وقت ملتا ہے کہ سسٹم ابتدائی ہو رہا ہے۔
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("خرابی: سینسر آف لائن"); break;
case 2: lcd.print("خرابی: CRC ناکام۔"); break;
}
}
delay(500);
}
یہ اقتباس ظاہر کرتا ہے کہ پروگرام سینسر کا ڈیٹا کیسے حاصل کرتا ہے اور ڈسپلے کرتا ہے جبکہ errorCode کی جانچ کر کے ممکنہ خرابیوں کو سنبھالتا ہے۔
مظاہرہ / کیا توقع کریں
جب سیٹ اپ مکمل ہو جائے، تو توقع کریں کہ LCD درجہ حرارت فارن ہائیٹ اور سیلسیس دونوں میں، نیز نسبتاً نمی کا فیصد دکھائے گا۔ اگر سینسر آف لائن ہو یا CRC خرابی ہو، تو ڈسپلے متعلقہ خرابی کے پیغامات دکھائے گا۔ کسی بھی مسئلے سے بچنے کے لیے تمام کنکشنز کو محفوظ رکھنا ضروری ہے (ویڈیو میں 02:45 پر)۔
ویڈیو ٹائم اسٹیمپس
- 00:00 - پروجیکٹ کا تعارف
- 01:30 - وائرنگ کی ہدایات
- 03:15 - کوڈ کی وضاحت
- 04:45 - فعالیت کا مظاہرہ
++
/**
* 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