Kod Ara

Arduino Kodu ve Aosong AM2320 Dijital Sıcaklık ve Nem Sensörü için Video

Arduino Kodu ve Aosong AM2320 Dijital Sıcaklık ve Nem Sensörü için Video

Bu eğitimde, Aosong AM2320 dijital sıcaklık ve nem sensörünü Arduino ile nasıl kullanacağımızı keşfedeceğiz. Bu sensör I2C üzerinden iletişim kurar ve sıcaklığı Celsius veya Fahrenheit cinsinden, nemi ise yüzde olarak okumamızı sağlar. Bu eğitimin sonunda, bu okumaları seri monitörde görüntüleyen basit bir proje oluşturabileceksiniz.

AM2320 sensörü kompakttır ve hem sıcaklık hem de nem için güvenilir veriler sağlar. Sıcaklık için 0,1°C çözünürlüğe ve %0-99 nem aralığına sahiptir. Kurulum süreci, sensörü Arduino'ya bağlamayı ve sensör değerlerini okumak ve görüntülemek için birkaç satır kod yazmayı içerir. Bu video eğitimi, bağlantı ve kodlama örnekleri dahil olmak üzere adım adım bir kılavuz sağlar (videoda 00:00'da).

Donanım Açıklaması

Bu projenin ana bileşeni Aosong AM2320 sensörüdür. I2C iletişimi kullanarak çalışır; bu, yalnızca iki veri hattı (SDA ve SCL) ile güç ve toprak gerektirdiğinden bağlantı sürecini basitleştirir. Sensör, sıcaklığı -40°C ile +80°C aralığında ±0,5°C doğrulukla ve nemi %0 ile %99 aralığında benzer bir doğrulukla ölçer. Sensör çok düşük güç tüketecek şekilde tasarlanmıştır ve bu da onu pille çalışan cihazlar için uygun hale getirir.

Ayrıca AM2320 modülü, I2C iletişimi için gerekli olan ve SDA ile SCL hatlarındaki sinyallerin stabilize edilmesine yardımcı olan pull-up dirençlerini içerir. Bu özellik, harici pull-up dirençleri eklemeniz gerekmediğinden bağlantı sürecini basitleştirir.

Veri Sayfası Detayları

ÜreticiAosong
Parça numarasıAM2320
Mantık/G/Ç voltajı3,1 ila 5,5 V
Besleme voltajı3,1 ila 5,5 V
Sıcaklık aralığı-40 ila +80 °C
Nem aralığı0 ila %99
Çözünürlük (Sıcaklık)0,1 °C
Çözünürlük (Nem)%0,1
Doğruluk (Sıcaklık)±0,5 °C
Doğruluk (Nem)±%3
PaketModül

  • Doğru voltaj beslemesini sağlayın (3,1 ila 5,5 V).
  • SDA ve SCL hatları için pull-up dirençleri kullanın (genellikle 4,7 kΩ).
  • Hasardan kaçınmak için sıcaklık aralığını -40°C ile +80°C arasında tutun.
  • Nem okumaları %0 ile %99 aralığında doğrudur.
  • Okumalar sırasında hata kodlarını izleyin (ör. sensör çevrimdışı).

Bağlantı Talimatları

Arduino wiring for AM2320 sensor
Arduino wiring for AM2320 sensor

AM2320 sensörünü Arduino'ya bağlamak için şu adımları dikkatlice izleyin. Önce güç pinlerini bağlayın: AM2320'nin en soldaki pini Arduino'nun 5V (veya VCC) pinine, toprak pini ise Arduino'nun GND pinine bağlanır. Soldan ikinci pin (SDA), Arduino Uno için Arduino'nun analog pini A4'e veya Arduino Mega için A20'ye bağlanır. Üçüncü pin (SCL), Arduino Uno için A5'e veya Arduino Mega için A21'e gider.

Ayrıca, SDA pininden 5V hattına bir 4,7 kΩ direnç ve SCL pininden 5V hattına başka bir 4,7 kΩ direnç bağlamanız gerekecektir. Bu, doğru I2C iletişimini sağlar. Leonardo gibi diğer Arduino modellerini kullanıyorsanız, SDA ve SCL pinleri de sırasıyla A4 ve A5 olacaktır.

Kod Örnekleri ve Açıklaması

Bu projede kullanılan Arduino kodunun bazı önemli kısımlarına bakalım. Önce sensörü başlatıyor ve seri iletişimi kuruyoruz:

#include 
AM2320 sensor;

void setup() {
  Serial.begin(9600);
  sensor.begin();
}

Bu kod parçacığında, gerekli kütüphaneyi #include <AM2320.h> ile dahil ediyor ve sensörün bir örneğini oluşturuyoruz. setup() işlevi, seri iletişimi 9600 baud hızında başlatır ve sensörü çalıştırır.

Ardından, sıcaklığı ve nemi okuyan ana döngüye sahibiz:

if (sensor.measure()) {
    Serial.print("Sıcaklık: ");
    Serial.print(temp('C'));
    Serial.print(" C, Nem: ");
    Serial.print(sensor.getHumidity());
    Serial.println("%");
}

Bu kod, sensör ölçümünün başarılı olup olmadığını kontrol eder. Başarılıysa, sıcaklığı Celsius cinsinden ve nem yüzdesini seri monitöre yazdırır. Sıcaklığı Celsius cinsinden almak için temp('C') işlevi çağrılır. Fahrenheit istiyorsanız, temp('F') çağrısını yapabilirsiniz.

Gösterim / Beklentiler

Programı çalıştırdığınızda, seri monitörde sıcaklık ve nem okumalarının her yarım saniyede bir güncellendiğini görmelisiniz. Örneğin, çıktı "Sıcaklık: 23.5 C, Nem: %50" şeklinde görünebilir. Sensöre ısı uygularsanız, sıcaklığın arttığını ve nemin azaldığını gözlemlemelisiniz; bu da tepkiselliğini gösterir (videoda 11:15'te).

Video Zaman Damgaları

  • 00:00 - AM2320 sensörüne giriş
  • 01:30 - Bağlantı talimatları
  • 03:45 - Kod açıklaması
  • 05:15 - Okumaların 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
Arduino wiring for AM2320 sensor
84-This is the Arduino code for the Aosong AM2320 digital temperature and humidity sensor.
Dil: C++
++
/**
    This is Arduino code for Aosong Digital Temperature and Humidity Sensor.
	This code is presented as part of a Robojax tutorial.
	
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

    Copyright 2016 Ratthanan Nalintasnai
    Modified for Robojax.com video by
    Ahmad S. on March 22, 2018 at 22:45 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/3ifN0FhLB5E
**/

// Include library into the sketch
#include <AM2320.h>

// Create an instance of sensor
AM2320 sensor;

void setup() {
  // enable serial communication
  Serial.begin(9600);
  Serial.print("Robojax AM2320 Demo ");
  // call sensor.begin() to initialize the library
  sensor.begin();
}

void loop() {

  // sensor.measure() returns a boolean value
  // - true indicates measurement is completed successfully
  // - false indicates that either the sensor is not ready or CRC validation failed
  //   use getErrorCode() to check for the cause of the error.
  if (sensor.measure()) {
    Serial.print("Temperature: ");
    Serial.print(temp('C'));
    Serial.print(" C, Humidity: ");
    Serial.print(sensor.getHumidity());
    Serial.println("%");
  }
  else {  // error has occurred
    int errorCode = sensor.getErrorCode();
    switch (errorCode) {
      case 1: Serial.println("ERR: Sensor is offline"); break;
      case 2: Serial.println("ERR: CRC validation failed."); break;
    }    
  }

  delay(500);
}

/*
 * temp()
 * returns temperature based on the parameter T
 * if T == 'F', will convert Celsius to Fahrenheit
 * if T is anything else or empty, will return Celsius
 * how to use:
 *  to get Fahrenheit, use temp('F')
 *  to get Celsius, use temp('C') or temp('')
 *  the 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  
}

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Veri Sayfası (pdf)

Fritzing Dosyası