Search Code

Kode Arduino dan Video untuk Sensor Suhu dan Kelembapan Digital Aosong AM2320 dengan LCD1602 dan Modul I2C

Kode Arduino dan Video untuk Sensor Suhu dan Kelembapan Digital Aosong AM2320 dengan LCD1602 dan Modul I2C

Dalam tutorial ini, kita akan mempelajari cara menggunakan sensor suhu dan kelembapan digital Aosong AM2320 bersama dengan layar LCD1602 yang menggunakan modul I2C. Tujuannya adalah untuk menampilkan pembacaan suhu dalam Fahrenheit dan Celsius, serta kelembapan relatif. Pengaturan ini ideal untuk memantau kondisi lingkungan dalam berbagai proyek, menjadikannya tambahan yang serbaguna untuk perangkat Arduino Anda.

Kita akan menggunakan sensor AM2320 untuk mengumpulkan data suhu dan kelembapan, yang kemudian akan ditampilkan pada LCD1602. Modul I2C menyederhanakan proses pengkabelan, hanya memerlukan empat koneksi: VCC, GND, SDA, dan SCL. Untuk pemahaman yang jelas tentang pengkabelan dan pemrograman, saya sarankan menonton video terkait (di video pada 00:00).

Penjelasan Perangkat Keras

Komponen utama dalam proyek ini termasuk sensor AM2320, layar LCD1602, dan modul I2C. AM2320 adalah sensor digital yang memberikan pembacaan akurat suhu dan kelembapan melalui antarmuka I2C. Sensor ini beroperasi pada tegangan 3,3V hingga 5,5V dan memiliki rentang pengukuran -40°C hingga +80°C untuk suhu dan 0% hingga 100% untuk kelembapan.

Layar LCD1602 memungkinkan visualisasi pembacaan sensor. Ini adalah layar karakter 16x2 yang berkomunikasi melalui protokol I2C, yang mengurangi jumlah koneksi yang diperlukan menjadi hanya empat. Modul I2C mengubah data paralel dari LCD menjadi format serial, membuatnya lebih mudah untuk dihubungkan ke Arduino.

Detail Datasheet

ProdusenAosong
Nomor bagianAM2320
Tegangan Logika/IO3,3 V - 5,5 V
Tegangan suplai3,3 V - 5,5 V
Arus keluaran≤ 1,5 mA
Rentang pengukuran (Suhu)-40°C hingga +80°C
Rentang pengukuran (Kelembapan)0% hingga 100%
Waktu respons≤ 2 detik
KemasanDIP-4
Catatan / varianResistor pull-up direkomendasikan untuk koneksi I2C.

  • Pastikan suplai daya yang tepat dalam rentang tegangan yang ditentukan.
  • Gunakan resistor pull-up (disarankan 4,7kΩ) untuk jalur SDA dan SCL.
  • Periksa alamat I2C yang benar (default adalah 0x27 untuk sebagian besar LCD).
  • Tangani potensi kesalahan dengan memeriksa kode kesalahan sensor.
  • Bersihkan LCD sebelum menampilkan pembacaan baru untuk menghindari tumpang tindih.

Instruksi Pengkabelan

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

Untuk menghubungkan sensor AM2320, sambungkan pin kiri (VCC) ke 5V pada Arduino. Pin kedua (SDA) menuju ke pin A4 pada Arduino Uno (atau pin 20 pada Mega). Pin ketiga (GND) harus dihubungkan ke ground, dan pin keempat (SCL) terhubung ke pin A5 pada Arduino Uno (atau pin 21 pada Mega). Selain itu, sambungkan resistor 4,7kΩ antara pin SDA dan 5V, dan resistor 4,7kΩ lainnya antara pin SCL dan 5V untuk memastikan level sinyal yang tepat.

Untuk layar LCD1602 dengan I2C, sambungkan pin VCC ke 5V dan pin GND ke ground. Hubungkan pin SDA dari LCD ke pin SDA yang sama (A4) yang digunakan untuk sensor. Demikian pula, sambungkan pin SCL dari LCD ke pin SCL yang sama (A5) yang digunakan untuk sensor. Pengkabelan bersama ini memungkinkan kedua perangkat berkomunikasi melalui bus I2C yang sama.

Contoh Kode & Penjelasan

Kode berikut menginisialisasi sensor AM2320 dan layar LCD1602. Kode ini dimulai dengan menyertakan pustaka yang diperlukan dan membuat instance dari sensor.

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

Di sini, objek sensor dibuat dari pustaka AM2320, dan objek lcd diinisialisasi dengan alamat I2C dari layar.

Dalam fungsi setup(), kita menginisialisasi sensor dan LCD. Ini termasuk menyalakan lampu latar dan mencetak pesan awal.

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

Kode ini mengatur layar untuk menampilkan pesan sambutan selama 3 detik, memberikan waktu bagi pengguna untuk melihat bahwa sistem sedang melakukan inisialisasi.

Fungsi loop() secara terus-menerus memeriksa pengukuran sensor dan memperbarui layar sesuai. Jika pengukuran tersedia, ia membersihkan layar dan mencetak suhu dalam Fahrenheit dan Celsius, beserta kelembapan relatif.

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

Kutipan ini menunjukkan bagaimana program mengambil dan menampilkan data sensor sambil menangani potensi kesalahan dengan memeriksa errorCode.

Demonstrasi / Apa yang Diharapkan

Ketika pengaturan selesai, harapkan LCD menampilkan suhu dalam Fahrenheit dan Celsius, serta persentase kelembapan relatif. Jika sensor offline atau ada kesalahan CRC, layar akan menampilkan pesan kesalahan yang sesuai. Penting untuk memastikan semua koneksi aman untuk menghindari masalah apa pun (di video pada 02:45).

Stempel Waktu Video

  • 00:00 - Pengenalan proyek
  • 01:30 - Instruksi pengkabelan
  • 03:15 - Penjelasan kode
  • 04:45 - Demonstrasi fungsionalitas

Gambar

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

Hal-hal yang mungkin Anda butuhkan

Sumber daya & referensi

Berkas📁

Lembar Data (pdf)

File Fritzing