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
| Produsen | Aosong |
|---|---|
| Nomor bagian | AM2320 |
| Tegangan Logika/IO | 3,3 V - 5,5 V |
| Tegangan suplai | 3,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 |
| Kemasan | DIP-4 |
| Catatan / varian | Resistor 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

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
++
/**
* 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
}
Hal-hal yang mungkin Anda butuhkan
-
Amazon
-
AliExpressPurchase AM2302 or DHT11 or DHT22 sensor from AliExpresss.click.aliexpress.com
Sumber daya & referensi
-
EksternalAM2320 Library (from GitHub)github.com
-
EksternalHalaman Dokumentasi Arduino Wirearduino.cc
Berkas📁
Lembar Data (pdf)
-
Adafruit-am2320-temperature-humidity-i2c-sensor user's manual
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
File Fritzing
-
AM2320 Humidity and Temperature Sensor
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB