Cerca codice

Codice Arduino e video per un sensore digitale di temperatura e umidità Aosong AM2320

Codice Arduino e video per un sensore digitale di temperatura e umidità Aosong AM2320

In questo tutorial esploreremo come utilizzare il sensore digitale di temperatura e umidità Aosong AM2320 con Arduino. Questo sensore comunica tramite I2C e ci consente di leggere la temperatura in Celsius o Fahrenheit e l'umidità in percentuale. Alla fine di questo tutorial sarai in grado di realizzare un semplice progetto che visualizza queste letture sul monitor seriale.

Il sensore AM2320 è compatto e fornisce dati affidabili sia per la temperatura che per l'umidità. Ha una risoluzione di 0.1°C per la temperatura e un intervallo di umidità di 0-99%. Il processo di configurazione prevede il collegamento del sensore all'Arduino e la scrittura di poche righe di codice per leggere e visualizzare i valori del sensore. Questo tutorial video fornisce una guida passo a passo, inclusi esempi di cablaggio e di codice (nel video a 00:00).

Hardware spiegato

Il componente principale di questo progetto è il sensore Aosong AM2320. Funziona utilizzando la comunicazione I2C, che semplifica il processo di collegamento in quanto richiede solo due linee dati (SDA e SCL) oltre all'alimentazione e alla massa. Il sensore misura la temperatura nell'intervallo da -40 °C a +80 °C con una precisione di ±0,5 °C e l'umidità dal 0% al 99% con una precisione simile. Il sensore è progettato per consumare pochissima energia, rendendolo adatto a dispositivi alimentati a batteria.

Inoltre, il modulo AM2320 include resistenze di pull-up necessarie per la comunicazione I2C, che aiutano a stabilizzare i segnali sulle linee SDA e SCL. Questa caratteristica semplifica il cablaggio, poiché non sarà necessario aggiungere resistenze di pull-up esterne.

Dettagli della scheda tecnica

ProduttoreAosong
Numero di parteAM2320
Tensione logica/I/Oda 3.1 a 5.5 V
Tensione di alimentazione3.1 a 5.5 V
Intervallo di temperaturada -40 a +80 °C
Intervallo di umiditàda 0 a 99 %
Risoluzione (Temperatura)0.1 °C
Risoluzione (Umidità)0,1%
Accuratezza (Temperatura)±0,5 °C
Accuratezza (Umidità)±3 %
PacchettoModulo

  • Assicurarsi che l'alimentazione abbia la tensione corretta (3,1 a 5,5 V).
  • Usare resistenze di pull-up (tipicamente 4,7 kΩ) per le linee SDA e SCL.
  • Mantenere l'intervallo di temperatura compreso tra -40°C e +80°C per evitare danni.
  • Le letture di umidità sono accurate nell'intervallo dallo 0% al 99%.
  • Monitorare la presenza di codici di errore durante le letture (ad es., sensore offline).

Istruzioni di cablaggio

Arduino wiring for AM2320 sensor
Arduino wiring for AM2320 sensor

Per collegare il sensore AM2320 all'Arduino, seguire attentamente questi passaggi. Per prima cosa, collegare i pin di alimentazione: il pin più a sinistra dell'AM2320 si collega al 5V dell'Arduino (o VCC), mentre il pin di massa si collega al GND dell'Arduino. Il secondo pin da sinistra (SDA) si collega al pin analogico A4 per un Arduino Uno o A20 per un Arduino Mega. Il terzo pin (SCL) va su A5 per un Arduino Uno o A21 per un Arduino Mega.

Inoltre, dovrai collegare una resistenza da 4.7 kΩ dal pin SDA alla linea a 5V e un'altra resistenza da 4.7 kΩ dal pin SCL alla linea a 5V. Questo garantisce una corretta comunicazione I2C. Se stai usando altri modelli di Arduino come il Leonardo, i pin SDA e SCL saranno rispettivamente A4 e A5.

Esempi di codice e guida passo-passo

Diamo un'occhiata ad alcune parti chiave del codice Arduino usato in questo progetto. Per prima cosa, inizializziamo il sensore e configuriamo la comunicazione seriale:

#include 
AM2320 sensor;

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

In questo frammento, includiamo la libreria necessaria con#include <AM2320.h>e creare un'istanza del sensore. Ilsetup()La funzione inizializza la comunicazione seriale a 9600 baud e avvia il sensore.

Successivamente, abbiamo il ciclo principale che legge la temperatura e l'umidità:

if (sensor.measure()) {
    Serial.print("Temperature: ");
    Serial.print(temp('C'));
    Serial.print(" C, Humidity: ");
    Serial.print(sensor.getHumidity());
    Serial.println("%");
}

Questo codice verifica se la misurazione del sensore è riuscita. Se sì, stampa la temperatura in gradi Celsius e la percentuale di umidità sul monitor seriale. Iltemp('C')La funzione viene chiamata per recuperare la temperatura in gradi Celsius. Se vuoi i gradi Fahrenheit, puoi chiamaretemp('F').

Dimostrazione / Cosa aspettarsi

Quando esegui il programma, dovresti vedere le letture di temperatura e umidità aggiornarsi ogni mezzo secondo nel monitor seriale. Ad esempio, l'output potrebbe mostrare Temperatura: 23.5 C, Umidità: 50%. Se applichi calore al sensore, dovresti osservare l'aumento della temperatura e la diminuzione dell'umidità, dimostrando la sua reattività (nel video a 11:15).

Marcatori temporali del video

  • 00:00- Introduzione al sensore AM2320
  • 01:30- Istruzioni di cablaggio
  • 03:45- Revisione del codice
  • 05:15- Dimostrazione delle letture

Immagini

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

Risorse e riferimenti

Nessuna risorsa ancora.

File📁

Scheda tecnica (pdf)

File Fritzing