Tafuta Msimbo

Msimbo wa Arduino na Video kwa Kihisi cha Joto na Unyevu cha Dijiti cha Aosong AM2320 chenye LCD1602 na Moduli ya I2C

Msimbo wa Arduino na Video kwa Kihisi cha Joto na Unyevu cha Dijiti cha Aosong AM2320 chenye LCD1602 na Moduli ya I2C

Katika mafunzo haya, tutachunguza jinsi ya kutumia kihisi cha dijitali cha joto na unyevu cha Aosong AM2320 pamoja na onyesho la LCD1602 linalotumia moduli ya I2C. Lengo ni kuonyesha usomaji wa joto katika Fahrenheit na Celsius, pamoja na unyevu wa jamaa. Mpangilio huu ni bora kwa ufuatiliaji wa hali ya mazingira katika miradi mbalimbali, na kuifanya kuwa nyongeza yenye matumizi mengi kwenye zana yako ya Arduino.

Tutatumia kihisi cha AM2320 kukusanya data ya joto na unyevu, ambayo itaonyeshwa kwenye LCD1602. Moduli ya I2C hurahisisha mchakato wa wiring, ikihitaji miunganisho minne tu: VCC, GND, SDA, na SCL. Kwa uelewa wazi wa wiring na programu, ninapendekeza kutazama video inayohusiana (katika video saa 00:00).

Vifaa Vimeelezwa

Vipengele muhimu katika mradi huu ni pamoja na kihisi cha AM2320, onyesho la LCD1602, na moduli ya I2C. AM2320 ni kihisi cha dijitali kinachotoa usomaji sahihi wa joto na unyevu kupitia kiolesura cha I2C. Hufanya kazi kwa voltage ya 3.3V hadi 5.5V na kina kipimo cha -40°C hadi +80°C kwa joto na 0% hadi 100% kwa unyevu.

Onyesho la LCD1602 huruhusu taswira ya usomaji wa kihisi. Ni onyesho la herufi 16x2 linalowasiliana kupitia itifaki ya I2C, ambayo hupunguza idadi ya miunganisho inayohitajika hadi minne tu. Moduli ya I2C hubadilisha data sambamba kutoka kwenye LCD hadi muundo wa mfululizo, na kurahisisha kuunganisha kwenye Arduino.

Maelezo ya Datasheet

MtengenezajiAosong
Nambari ya sehemuAM2320
Voltage ya Logic/IO3.3 V - 5.5 V
Voltage ya usambazaji3.3 V - 5.5 V
Mkondo wa pato≤ 1.5 mA
Kipimo (Joto)-40°C hadi +80°C
Kipimo (Unyevu)0% hadi 100%
Muda wa kujibu≤ 2s
KifurushiDIP-4
Vidokezo / lahajaResistor pull-up zinapendekezwa kwa miunganisho ya I2C.

  • Hakikisha usambazaji sahihi wa umeme ndani ya kiwango cha voltage kilichobainishwa.
  • Tumia resistor pull-up (4.7kΩ inapendekezwa) kwa mistari ya SDA na SCL.
  • Angalia anwani sahihi ya I2C (default ni 0x27 kwa LCD nyingi).
  • Shughulikia makosa yanayoweza kutokea kwa kuangalia msimbo wa makosa wa kihisi.
  • Safisha LCD kabla ya kuonyesha usomaji mpya ili kuepuka mwingiliano.

Maagizo ya Wiring

Arduino wiring for AM2320 sensor with LCD
Arduino wiring for AM2320 sensor with LCD

Ili kuunganisha kihisi cha AM2320, unganisha pini ya kushoto (VCC) kwa 5V kwenye Arduino. Pini ya pili (SDA) inakwenda kwenye pini A4 kwenye Arduino Uno (au pini 20 kwenye Mega). Pini ya tatu (GND) inapaswa kuunganishwa kwenye ardhi, na pini ya nne (SCL) inaunganisha kwenye pini A5 kwenye Arduino Uno (au pini 21 kwenye Mega). Zaidi ya hayo, unganisha resistor ya 4.7kΩ kati ya pini ya SDA na 5V, na resistor nyingine ya 4.7kΩ kati ya pini ya SCL na 5V ili kuhakikisha viwango sahihi vya mawimbi.

Kwa onyesho la LCD1602 na I2C, unganisha pini ya VCC kwa 5V na pini ya GND kwenye ardhi. Unganisha pini ya SDA kutoka kwenye LCD kwenye pini hiyo hiyo ya SDA (A4) inayotumiwa na kihisi. Vivyo hivyo, unganisha pini ya SCL kutoka kwenye LCD kwenye pini hiyo hiyo ya SCL (A5) inayotumiwa na kihisi. Wiring hii ya pamoja inaruhusu vifaa vyote viwili kuwasiliana kupitia basi moja ya I2C.

Mifano ya Msimbo na Maelekezo

Msimbo ufuatao huanzisha kihisi cha AM2320 na onyesho la LCD1602. Huanza kwa kujumuisha maktaba muhimu na kuunda mfano wa kihisi.

#include 
AM2320 sensor;
#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

Hapa, kitu cha sensor kimeundwa kutoka kwenye maktaba ya AM2320, na kitu cha lcd kimeanzishwa na anwani ya I2C ya skrini.

Katika kazi ya setup(), tunaanzisha sensor na LCD. Hii inajumuisha kuwasha mwanga wa nyuma na kuchapisha ujumbe wa mwanzo.

void setup() {
  sensor.begin();
  lcd.begin();
  lcd.backlight();
  lcd.print("Robojax AM2320 ");
  lcd.setCursor (0,1);
  lcd.print("LCD1602 I2C Demo");
  delay(3000);
}

Msimbo huu unasanidi skrini kuonyesha ujumbe wa kukaribisha kwa sekunde 3, kuruhusu muda kwa mtumiaji kuona kwamba mfumo unaanzishwa.

Kazi ya loop() inaendelea kuangalia vipimo vya sensor na kusasisha skrini ipasavyo. Ikiwa kipimo kinapatikana, inafuta skrini na kuchapisha joto katika Fahrenheit na Celsius, pamoja na unyevu wa hewa.

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);
}

Sehemu hii inaonyesha jinsi programu inavyopata na kuonyesha data ya sensor huku ikishughulikia makosa yoyote kwa kuangalia errorCode.

Maonyesho / Nini cha Kutarajia

Wakati usanidi ukikamilika, tarajia LCD kuonyesha joto katika Fahrenheit na Celsius, pamoja na asilimia ya unyevu wa hewa. Ikiwa sensor haipo mtandaoni au kuna kosa la CRC, skrini itaonyesha ujumbe wa makosa unaolingana. Ni muhimu kuhakikisha miunganisho yote ni salama ili kuepuka matatizo yoyote (katika video saa 02:45).

Vidokezo vya Muda wa Video

  • 00:00 - Utangulizi wa mradi
  • 01:30 - Maelekezo ya wiring
  • 03:15 - Maelezo ya msimbo
  • 04:45 - Maonyesho ya utendaji

Bilder

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.
Språk: 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.
Språk: 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
}

Tänker att du kanske behöver

Resurser och referenser

Filer📁

Datablad (pdf)

Fritzing-fil