Kod Ara

Arduino Kodu ve Aosong AM2320 Dijital Sıcaklık ve Nem Sensörü ile LCD1602 ve I2C Modülü için Video

Arduino Kodu ve Aosong AM2320 Dijital Sıcaklık ve Nem Sensörü ile LCD1602 ve I2C Modülü için Video

Bu eğitimde, Aosong AM2320 dijital sıcaklık ve nem sensörünü, I2C modülü kullanan bir LCD1602 ekranla birlikte nasıl kullanacağımızı keşfedeceğiz. Amaç, sıcaklık okumalarını hem Fahrenheit hem de Celsius cinsinden ve bağıl nemi görüntülemektir. Bu kurulum, çeşitli projelerde çevresel koşulları izlemek için idealdir ve Arduino araç setinize çok yönlü bir katkı sağlar.

AM2320 sensörünü, sıcaklık ve nem verilerini toplamak için kullanacağız ve bu veriler LCD1602 üzerinde görüntülenecek. I2C modülü, yalnızca dört bağlantı gerektirerek kablolama sürecini basitleştirir: VCC, GND, SDA ve SCL. Kablolama ve programlamayı net bir şekilde anlamak için ilgili videoyu izlemenizi öneririm (videoda 00:00'da).

Donanım Açıklaması

Bu projedeki temel bileşenler AM2320 sensörü, LCD1602 ekranı ve I2C modülüdür. AM2320, I2C arayüzü aracılığıyla sıcaklık ve nemin doğru okumalarını sağlayan dijital bir sensördür. 3.3V ile 5.5V arasında bir voltajla çalışır ve sıcaklık için -40°C ile +80°C, nem için %0 ile %100 arasında bir ölçüm aralığına sahiptir.

LCD1602 ekran, sensör okumalarının görselleştirilmesini sağlar. I2C protokolü üzerinden iletişim kuran 16x2 karakterli bir ekrandır ve bu, gereken bağlantı sayısını yalnızca dörde düşürür. I2C modülü, LCD'den gelen paralel veriyi seri formata dönüştürerek Arduino'ya bağlanmayı kolaylaştırır.

Veri Sayfası Detayları

ÜreticiAosong
Parça numarasıAM2320
Mantık/G/Ç voltajı3.3 V - 5.5 V
Besleme voltajı3.3 V - 5.5 V
Çıkış akımı≤ 1.5 mA
Ölçüm aralığı (Sıcaklık)-40°C ile +80°C
Ölçüm aralığı (Nem)%0 ile %100
Tepki süresi≤ 2s
PaketDIP-4
Notlar / varyantlarI2C bağlantıları için dirençli pull-up'lar önerilir.

  • Belirtilen voltaj aralığında doğru güç kaynağı sağlayın.
  • SDA ve SCL hatları için pull-up dirençleri (4.7kΩ önerilir) kullanın.
  • Doğru I2C adresini kontrol edin (çoğu LCD için varsayılan 0x27'dir).
  • Sensörün hata kodunu kontrol ederek olası hataları ele alın.
  • Çakışmayı önlemek için yeni okumaları görüntülemeden önce LCD'yi temizleyin.

Kablolama Talimatları

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

AM2320 sensörünü bağlamak için sol pini (VCC) Arduino'daki 5V'a bağlayın. İkinci pin (SDA), bir Arduino Uno'daki A4 pinine (veya Mega'daki 20. pine) gider. Üçüncü pin (GND) toprağa bağlanmalıdır ve dördüncü pin (SCL), bir Arduino Uno'daki A5 pinine (veya Mega'daki 21. pine) bağlanır. Ayrıca, doğru sinyal seviyelerini sağlamak için SDA pini ile 5V arasına bir 4.7kΩ direnç ve SCL pini ile 5V arasına başka bir 4.7kΩ direnç bağlayın.

I2C'li LCD1602 ekranı için VCC pinini 5V'a ve GND pinini toprağa bağlayın. LCD'deki SDA pinini, sensör için kullanılan aynı SDA pinine (A4) bağlayın. Benzer şekilde, LCD'deki SCL pinini, sensör için kullanılan aynı SCL pinine (A5) bağlayın. Bu paylaşılan kablolama, her iki cihazın da aynı I2C veri yolu üzerinden iletişim kurmasını sağlar.

Kod Örnekleri ve Açıklaması

Aşağıdaki kod, AM2320 sensörünü ve LCD1602 ekranını başlatır. Gerekli kütüphaneleri dahil ederek başlar ve sensörün bir örneğini oluşturur.

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

Burada, sensor nesnesi AM2320 kütüphanesinden oluşturulur ve lcd nesnesi, ekranın I2C adresiyle başlatılır.

setup() fonksiyonunda, hem sensörü hem de LCD'yi başlatırız. Bu, arka ışığın açılmasını ve bir başlangıç mesajının yazdırılmasını içerir.

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

Bu kod, ekranın 3 saniye boyunca bir karşılama mesajı göstermesini sağlar ve kullanıcının sistemin başlatıldığını görmesi için zaman tanır.

loop() fonksiyonu sürekli olarak sensör ölçümlerini kontrol eder ve ekranı buna göre günceller. Bir ölçüm mevcutsa, ekranı temizler ve sıcaklığı hem Fahrenheit hem Celsius cinsinden, ayrıca bağıl nemi yazdırır.

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

Bu alıntı, programın sensör verilerini nasıl alıp görüntülediğini ve errorCode kontrol ederek olası hataları nasıl ele aldığını gösterir.

Gösterim / Beklentiler

Kurulum tamamlandığında, LCD'nin sıcaklığı hem Fahrenheit hem Celsius cinsinden ve bağıl nem yüzdesini göstermesini bekleyin. Sensör çevrimdışıysa veya bir CRC hatası varsa, ekran ilgili hata mesajlarını gösterecektir. Herhangi bir sorunu önlemek için tüm bağlantıların güvenli olduğundan emin olmak önemlidir (videoda 02:45'te).

Video Zaman Damgaları

  • 00:00 - Projeye giriş
  • 01:30 - Bağlantı talimatları
  • 03:15 - Kod açıklaması
  • 04:45 - İşlevselliğin gösterimi

Görseller

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.
Dil: 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.
Dil: 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
}

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Dosyalar📁

Veri Sayfası (pdf)

Fritzing Dosyası