کوډ ولټوئ

د آردوینو کوډ او ویډیو د Aosong AM2320 ډیجیټل تودوخې او رطوبت سینسر لپاره د LCD1602 او I2C ماډل سره

د آردوینو کوډ او ویډیو د Aosong 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
منطق/IO ولتاژ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 پاک کړئ ترڅو د پوښښ څخه مخنیوی وشي.

د تارونو لارښوونې

Arduino wiring for AM2320 sensor with LCD
Arduino wiring for AM2320 sensor with 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);
}

دا کوډ نندارې ته د ۳ ثانیو لپاره د ښه راغلاست پیغام ښودلو لپاره تنظیموي، چې کاروونکي ته اجازه ورکوي چې وګوري چې سیسټم پیل کیږي.

د 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("ر.ر. :");
    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 تېروتنه وي، نندارې به اړوند تېروتنې پیغامونه وښیې. دا مهمه ده چې ټولې اړیکې خوندي وي ترڅو کومې ستونزې مخنیوی وشي (په ویډیو کې په ۰۲:۴۵ کې).

د ویډیو وختونه

  • ۰۰:۰۰ - د پروژې پیژندنه
  • ۰۱:۳۰ - د تارونو لارښوونې
  • ۰۳:۱۵ - د کوډ تشریح
  • ۰۴:۴۵ - د فعالیت ښودنه

انځورونه

AM2320-sensor-1
AM2320-sensor-1
AM2320-sensor-2
AM2320-sensor-2
AM2320-sensor-3
AM2320-sensor-3
AM2320-sensor-4
AM2320-sensor-4
Arduino wiring for AM2320 sensor with LCD
Arduino wiring for AM2320 sensor with LCD
85-This is the Arduino code for an Aosong AM2320 temperature and humidity sensor with an LCD1602 and I2C module.
ژبه: C++
++
/**
 * 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  
}
86-This is the Arduino code for the Aosong AM2320 temperature and humidity sensor with an LCD1602 and I2C module.
ژبه: C++
/*********************************************************************
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
}

هغه شیان چې تاسو ورته اړتیا لرئ

سرچینې او حوالې

فایلونه📁

ډیټاشیټ (pdf)

Fritzing فایل