Pretraži kod

Arduino kod i video za Aosong AM2320 digitalni senzor temperature i vlažnosti

Arduino kod i video za Aosong AM2320 digitalni senzor temperature i vlažnosti

U ovom tutorijalu ćemo istražiti kako koristiti Aosong AM2320 digitalni senzor temperature i vlažnosti sa Arduinom. Ovaj senzor komunicira preko I2C i omogućava nam da čitamo temperaturu u Celzijusima ili Farenhajtima, i vlažnost u procentima. Do kraja ovog tutorijala, moći ćete da napravite jednostavan projekat koji prikazuje ova očitanja na serijskom monitoru.

AM2320 senzor je kompaktan i pruža pouzdane podatke i za temperaturu i za vlažnost. Ima rezoluciju od 0,1°C za temperaturu i opseg vlažnosti od 0-99%. Proces podešavanja uključuje povezivanje senzora na Arduino i pisanje nekoliko linija koda za čitanje i prikaz vrijednosti senzora. Ovaj video tutorijal pruža vodič korak po korak, uključujući primjere povezivanja i kodiranja (u videu na 00:00).

Objašnjenje hardvera

Glavna komponenta ovog projekta je Aosong AM2320 senzor. Radi koristeći I2C komunikaciju, što pojednostavljuje proces povezivanja jer zahtijeva samo dvije podatkovne linije (SDA i SCL) zajedno sa napajanjem i uzemljenjem. Senzor mjeri temperaturu u opsegu od -40°C do +80°C sa tačnošću od ±0,5°C i vlažnost od 0% do 99% sa sličnom tačnošću. Senzor je dizajniran da bude vrlo niske potrošnje, što ga čini pogodnim za uređaje na baterije.

Dodatno, AM2320 modul uključuje pull-up otpornike koji su neophodni za I2C komunikaciju, što pomaže u stabilizaciji signala na SDA i SCL linijama. Ova karakteristika pojednostavljuje proces povezivanja, jer nećete morati dodavati vanjske pull-up otpornike.

Detalji iz tehničke specifikacije

ProizvođačAosong
Oznaka dijelaAM2320
Logički/IO napon3,1 do 5,5 V
Napon napajanja3,1 do 5,5 V
Opseg temperature-40 do +80 °C
Opseg vlažnosti0 do 99 %
Rezolucija (temperatura)0,1 °C
Rezolucija (vlažnost)0,1 %
Tačnost (temperatura)±0,5 °C
Tačnost (vlažnost)±3 %
PakovanjeModul

  • Osigurajte ispravan napon napajanja (3,1 do 5,5 V).
  • Koristite pull-up otpornike (obično 4,7 kΩ) za SDA i SCL linije.
  • Držite temperaturni opseg unutar -40°C do +80°C kako biste izbjegli oštećenja.
  • Očitanja vlažnosti su tačna unutar opsega od 0% do 99%.
  • Pratite kodove grešaka tokom očitavanja (npr. senzor van mreže).

Upute za povezivanje

Arduino wiring for AM2320 sensor
Arduino wiring for AM2320 sensor

Da biste povezali AM2320 senzor na Arduino, pažljivo slijedite ove korake. Prvo, spojite pinove napajanja: krajnji lijevi pin AM2320 povezuje se na Arduino 5V (ili VCC), dok se pin uzemljenja povezuje na Arduino GND. Drugi pin s lijeva (SDA) povezuje se na analogni pin A4 na Arduinu Uno ili A20 na Arduinu Mega. Treći pin (SCL) ide na A5 za Arduino Uno ili A21 za Arduino Mega.

Dodatno, morat ćete spojiti otpornik od 4,7 kΩ sa SDA pina na 5V liniju i još jedan otpornik od 4,7 kΩ sa SCL pina na 5V liniju. Ovo osigurava ispravnu I2C komunikaciju. Ako koristite druge Arduino modele poput Leonarda, SDA i SCL pinovi će također biti A4 i A5, respektivno.

Primjeri koda i objašnjenje

Pogledajmo neke ključne dijelove Arduino koda korištenog u ovom projektu. Prvo, inicijaliziramo senzor i postavljamo serijsku komunikaciju:

#include 
AM2320 sensor;

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

U ovom isječku, uključujemo potrebnu biblioteku sa #include <AM2320.h> i kreiramo instancu senzora. Funkcija setup() inicijalizira serijsku komunikaciju pri brzini od 9600 bauda i pokreće senzor.

Zatim, imamo glavnu petlju koja čita temperaturu i vlažnost:

if (sensor.measure()) {
    Serial.print("Temperatura: ");
    Serial.print(temp('C'));
    Serial.print(" C, Vlažnost: ");
    Serial.print(sensor.getHumidity());
    Serial.println("%");
}

Ovaj kod provjerava da li je mjerenje senzora bilo uspješno. Ako jeste, ispisuje temperaturu u Celzijusima i procenat vlažnosti na serijski monitor. Funkcija temp('C') se poziva da bi se dobila temperatura u Celzijusima. Ako želite Farenhajte, možete pozvati temp('F').

Demonstracija / Šta očekivati

Kada pokrenete program, trebali biste vidjeti očitanja temperature i vlažnosti kako se ažuriraju svake pola sekunde na serijskom monitoru. Na primjer, izlaz bi mogao pokazati "Temperatura: 23.5 C, Vlažnost: 50%". Ako primijenite toplotu na senzor, trebali biste primijetiti povećanje temperature i smanjenje vlažnosti, što pokazuje njegovu osjetljivost (u videu na 11:15).

Vremenske oznake videa

  • 00:00 - Uvod u AM2320 senzor
  • 01:30 - Upute za povezivanje
  • 03:45 - Objašnjenje koda
  • 05:15 - Demonstracija očitanja

Slike

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

Resursi i reference

Još nema resursa.

Datoteke📁

Tehnički list (pdf)

Fritzing datoteka