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ı
| Üretici | Aosong |
|---|---|
| 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 |
| Paket | DIP-4 |
| Notlar / varyantlar | I2C 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ı

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
++
/**
* 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
}
İhtiyacın olabileceğini düşünüyor
-
Amazon
-
AliExpressPurchase AM2302, DHT11, or DHT22 sensor from AliExpresss.click.aliexpress.com
Kaynaklar ve referanslar
-
DışAM2320 Library (from GitHub)github.com
-
DışArduino Tel Belgeleri sayfasıarduino.cc
Dosyalar📁
Veri Sayfası (pdf)
-
Adafruit-am2320-temperature-humidity-i2c-sensor user's manual
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
Fritzing Dosyası
-
AM2320 Humidity and Temperature Sensor
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB