Skip to Content

Tutorial Arduino per il sensore digitale di temperatura e umidità AM2320

Tutorial Arduino per il sensore digitale di temperatura e umidità AM2320

In questo tutorial imparerai come utilizzare il sensore digitale di temperatura e umidità AM2320 con Arduino. Ho incluso schemi di collegamento e due esempi di codice per iniziare!

Per questo tutorial useremo la libreria Adafruit AM2320. Questa libreria rende la comunicazione con il sensore tramite I2C molto semplice. La useremo nel primo esempio per leggere i dati di temperatura e umidità dal sensore AM2320 e mostrarli nel Serial Monitor.

Nel secondo esempio estendiamo il progetto aggiungendo un display LCD 16×2 caratteri. Anche questo sarà collegato tramite il bus I2C e ci permetterà di visualizzare le letture sul display. Il progetto completo sarà così:

Project to display AM2320 data on LCD
Progetto per visualizzare i dati AM2320 su LCD

Se vuoi saperne di più su altri sensori di temperatura, dai un’occhiata ai nostri altri tutorial qui sotto:

Iniziamo!

Componenti necessari

Qui sotto trovi i componenti necessari per questo progetto. Oltre a un Arduino, ti serviranno una breadboard, alcuni fili e ovviamente il sensore AM2320. Per questo tutorial userò il classico Arduino Uno (REV3), ma va bene anche qualsiasi altro Arduino (o ESP32/ESP8266).

Ho incluso anche un display LCD 16×2 nella lista dei componenti necessari, che ti servirà per il secondo esempio di applicazione di questo tutorial. Se vuoi visualizzare solo temperatura e umidità sul Serial Monitor, non ti servirà.

Arduino Uno

Dupont wire set

Set di fili Dupont

Half_breadboard56a

Breadboard

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Sensore di temperatura AM2320

LCD 16×2 caratteri I2C

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Informazioni sull’AM2320

L’AM2320 è un sensore digitale di temperatura e umidità a basso costo prodotto da ASAIR. Questo sensore è simile ai popolari DHT11/DHT22 ma dispone di un’interfaccia I2C invece del protocollo di comunicazione a bus singolo usato da molti altri sensori DHTxx. Puoi trovare il nostro tutorial su DHT11 e DHT22 qui:

Il sensore è composto da un elemento capacitivo per la misurazione dell’umidità e da un elemento integrato ad alta precisione per la temperatura, collegati a un microprocessore. L’intervallo di misura della temperatura va da -40 a 80 gradi Celsius, con una precisione dichiarata di ± 0,5 °C. 

Umidità relativa

Nel datasheet del sensore vedrai che misura l’umidità relativa (RH) dell’aria e non l’umidità assoluta. Ma qual è la differenza? L’umidità assoluta è la quantità di vapore acqueo nell’aria (espressa in g/m³), indipendentemente dalla temperatura. L’umidità relativa  è  invece influenzata dalla temperatura.

L’umidità relativa è il rapporto tra la quantità effettiva di vapore acqueo presente nell’aria e la quantità massima di vapore che l’aria può contenere a una data temperatura.

L’aria calda può contenere più acqua di quella fredda. Questo significa che per la stessa quantità di vapore acqueo, l’umidità relativa nell’aria fredda sarà più alta che in aria calda. Al 100% di umidità relativa, l’aria è satura ed è al punto di rugiada.

Pinout dell’AM2320

Il pinout del sensore AM2320 è il seguente:

Pinout of AM2320 (source)
Pinout dell’AM2320 (source)
Pin Nome Descrizione
1 VDD Pin di alimentazione positiva (3.1 – 5.5 V)
2 SDA Dati seriali, porta bidirezionale
3 GND Massa
4 SCL Ingresso clock seriale (bus singolo a massa)

Nota che l’indirizzo I2C predefinito del sensore è 0x5C e non può essere modificato.

La tabella seguente riporta le caratteristiche principali dell’AM2320:

Specifiche AM2320

Tensione di alimentazione 3.1 – 5.5 V
Consumo energetico Sleep: 10 μA
Misura: 950 μA
Intervallo umidità 0 – 99.9 % RH ± 3 % RH
Intervallo temperatura -40 – 80 °C ± 0.5 °C
Interfaccia I2C
1-Wire
Periodo di campionamento 2.0 s
Dimensioni corpo 15 x 12.1 x 4.5 mm
Costo Check price

Per maggiori informazioni, puoi consultare il datasheet qui:

Collegare l’AM2320 ad Arduino

Collegare l’AM2320 ad Arduino è molto semplice come mostrato nel diagramma qui sotto.

Wiring of the AM2320 with the Arduino
Collegamento dell’AM2320 con Arduino

Collega semplicemente il 5V (o 3.3V) di Arduino al Pin 1 (VDD) dell’AM2320 e allo stesso modo la massa (GND) al GND. A4 va al Pin 2 (SDA) e A5 è collegato al Pin 4 (SCL) dell’AM2320. I collegamenti sono anche riportati nella tabella qui sotto

Collegamenti AM2320

AM2320 Filo Arduino
Pin 1 (VDD) rosso 5 V
Pin 2 (SDA) giallo A4
Pin 3 (GND) nero GND
Pin 4 (SCL) verde A5

Se non usi un Arduino Uno, i pin SDA e SCL potrebbero trovarsi in posizioni diverse. Controlla la tabella qui sotto per maggiori dettagli.

Scheda SDA SCL
Arduino Uno A4 A5
Arduino Nano A4 A5
Arduino Micro 2 3
Arduino Mega 2560 20 21
Arduino Leonardo 2 3
Arduino Due 20 21
Posizioni dei pin SDA e SCL su diverse schede Arduino.

Un Arduino Uno con layout R3 (pinout 1.0) ha anche i pin SDA (linea dati) e SCL (linea clock) vicino al pin AREF. Il diagramma seguente mostra un circuito alternativo che collega l’AM2320 a questi pin SDA e SCL:

Alternative Circuit with Pullup Resistors and alternative SDA/SCL pins
Circuito alternativo con resistori di pullup e pin SDA/SCL alternativi

Noterai che ci sono anche due resistori di pullup da 4.7KΩ sulle linee SDA e SCL. In molti casi non sono necessari, poiché l’Arduino UNO ha resistori di pullup interni spesso sufficienti. Tuttavia, essi hanno un valore abbastanza alto e se riscontri problemi di comunicazione con un dispositivo I2C dovresti aggiungerli. Soprattutto se usi cavi più lunghi.

Installazione delle librerie Arduino necessarie

Per questo tutorial useremo la libreria Adafruit AM2320. Per installarla, vai su Tools > Manage Libraries nell’Arduino IDE. Si aprirà il Library Manager.

Library Manager to install Libraries
Installa la libreria tramite Library Manager

Nel LIBRARY MANAGER cerca ‘Adafruit AM2320’ e clicca INSTALL.

Install Adafruit AM2320 library
Installa la libreria Adafruit AM2320

A seconda delle altre librerie già installate, potresti vedere o meno questo messaggio. Ti informa che devi installare altre librerie necessarie per la libreria AM2320. Va benissimo così. Clicca semplicemente su INSTALL ALL.

Install dependent libraries
Installa librerie dipendenti

Ora hai tutte le librerie necessarie per eseguire il codice fornito nella sezione successiva.

Codice per leggere temperatura e umidità con AM2320

Il codice di esempio seguente mostra come leggere temperatura e umidità dal sensore AM2320 e visualizzare i dati nel Serial Monitor e nel Serial Plotter. Dai un’occhiata veloce e poi discuteremo i dettagli del codice.

// Read Temperature and Humidity with AM2320

#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Adafruit_AM2320 sensor = Adafruit_AM2320();

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

void loop() {
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();

  Serial.print("Temperatur:");
  Serial.println(tempF);
  Serial.print("Humidity:");
  Serial.println(humidity);  

  delay(2000);
}

Inclusione delle librerie

Per prima cosa includiamo le librerie Adafruit_AM2320 e Adafruit_Sensor.

#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Creazione dell’istanza del sensore

Successivamente creiamo una nuova istanza della classe Adafruit_AM2320. In questo caso l’ho chiamata “sensor” ma puoi scegliere qualsiasi altro nome, purché modifichi il codice di conseguenza.

Adafruit_AM2320 sensor = Adafruit_AM2320();

Funzione setup

Nella funzione  setup() avviamo la comunicazione seriale a 9600 baud. Assicurati che anche il Serial Monitor sia impostato a 9600. Inizializziamo inoltre il sensore AM2320 con sensor.begin().

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

Funzione loop

Nella sezione loop del codice leggiamo i dati di temperatura e umidità dal sensore AM2320 con le funzioni readTemperature() e readHumidity().

Nota che readTemperature() restituisce la temperatura in gradi Celsius. Possiamo facilmente convertirla in Fahrenheit usando la formula tempF = tempC * 1.8 + 32.

  // Read the temperature and the humidity:
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();

Infine stampiamo i risultati nel Serial Monitor e aggiungiamo un ritardo tra le letture. L’intervallo minimo tra le letture è di 2 secondi (vedi Datasheet), quindi usiamo un delay di 2000 ms (=2 sec) tra le letture.

  Serial.print("Temperatur:");
  Serial.println(tempF);
  Serial.print("Humidity:");
  Serial.println(humidity);  

  delay(2000);

E questo è tutto! Abbiamo un lettore di temperatura e umidità. Proviamolo.

Output nel Serial Monitor

Se esegui questo codice e apri il Serial Monitor dovresti vedere letture di temperatura e umidità simili a quelle qui sotto. Assicurati che la velocità di trasmissione sia impostata a 9600 baud.

Temperature and Humidity readings on Serial Monitor
Letture di temperatura e umidità nel Serial Monitor

Output nel Serial Plotter

Se ora apri il Serial Plotter e soffii sul sensore AM2320 dovresti vedere un picco nell’umidità e un leggero aumento della temperatura, simile al grafico qui sotto:

Temperature and Humidity data on Serial Plotter
Dati di temperatura e umidità nel Serial Plotter

Aggiungere un LCD per visualizzare i dati

In questa parte ti mostro come aggiungere un LCD 16×2 caratteri per visualizzare i dati. Fortunatamente è molto semplice.

Collegamento dell’LCD

Il diagramma seguente mostra il collegamento completo. L’AM2320 è collegato esattamente come prima. Aggiungiamo l’LCD collegando la sua alimentazione (VCC, GND) alla linea di alimentazione e i suoi pin SDA e SCL alle stesse linee SDA e SCL a cui è collegato l’AM2320.

Wiring of the AM2320 and LCD with the Arduino
Collegamento di AM2320 e LCD con Arduino

Quindi, sia l’LCD che l’AM2320 sono collegati tramite I2C ad Arduino. I2C è un bus seriale che può gestire fino a 128 dispositivi in comunicazione.

I2C bus with Arduino, AM2320 and LCD
Bus I2C con Arduino, AM2320 e LCD

I dispositivi sul bus sono distinti dal loro indirizzo I2C. L’indirizzo I2C dell’AM2320 è fisso a 0x5C. L’indirizzo I2C del tuo LCD può variare, però. Gli indirizzi tipici sono 0x27 o 0x3F, spesso stampati sul retro. Se non sei sicuro puoi eseguire uno scanner I2C per scoprirlo. Dai un’occhiata al nostro tutorial Character I2C LCD with Arduino Tutorial.

Visualizzare le letture AM2320 su LCD

Il codice per mostrare i dati sul LCD è piuttosto semplice. Useremo la libreria LiquidCrystal di Frank de Brabander per controllare l’LCD.

Se non l’hai ancora installata, devi farlo nello stesso modo in cui hai installato la libreria AM2302. Se ti serve aiuto, dai un’occhiata al nostro tutorial su How to use the MQ-7 Gas Sensor with an LCD display and Arduino, dove spieghiamo tutto passo passo.

Dai un’occhiata veloce al codice prima di spiegarne i dettagli

// Display temperature and humidity readings from AM2320 sensor
// on 16x2 LCD display at I2C address 0x3F

#include "LiquidCrystal_I2C.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Adafruit_AM2320 sensor = Adafruit_AM2320();
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x3F, 20, 2);

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

void loop() {
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();
  
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Temperatur"); 
  lcd.setCursor(11, 0);
  lcd.print(tempF);     

  lcd.setCursor(0, 1);
  lcd.print("Humidity"); 
  lcd.setCursor(11, 1);
  lcd.print(humidity);   

  delay(2000);
}

Iniziamo includendo le librerie necessarie.

Librerie

Per usare il sensore AM2320 e il display LCD, dobbiamo includere le librerie necessarie. Includiamo la libreria “LiquidCrystal_I2C.h” per l’LCD, la libreria “Adafruit_Sensor.h” per il sensore e la libreria “Adafruit_AM2320.h” per il sensore AM2320.

#include "LiquidCrystal_I2C.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"

Oggetti

Creiamo prima due oggetti: uno per il sensore AM2320 e uno per il display LCD. Inizializziamo l’oggetto sensore come “sensor” e l’oggetto LCD come “lcd”. Per creare l’oggetto lcd dobbiamo passare l’indirizzo I2C del display LCD (0x3F) e le dimensioni del display (20 colonne e 2 righe) al costruttore “LiquidCrystal_I2C”.

Adafruit_AM2320 sensor = Adafruit_AM2320();
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x3F, 20, 2);

Funzione setup

Nella funzione “setup()” inizializziamo la comunicazione seriale a 9600 baud. Chiamiamo anche la funzione “begin()” sull’oggetto sensore per inizializzare l’AM2320. Poi chiamiamo la funzione “init()” sull’oggetto lcd per inizializzare il display LCD. Infine accendiamo la retroilluminazione del display LCD usando la funzione “backlight()”.

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

Funzione loop

Nella funzione “loop()” leggiamo i valori di temperatura e umidità dal sensore usando rispettivamente le funzioni “readTemperature()” e “readHumidity()”.

Come prima, memorizziamo la temperatura in Celsius nella variabile “tempC” e la convertiamo in Fahrenheit moltiplicandola per 1.8 e aggiungendo 32, memorizzando il risultato nella variabile “tempF”. Analogamente, memorizziamo il valore di umidità nella variabile “humidity”.

Puliamo il display LCD usando la funzione “clear()”. Poi impostiamo la posizione del cursore alla prima colonna della prima riga con “setCursor()” e stampiamo “Temperature”. Impostiamo il cursore alla dodicesima colonna della prima riga e stampiamo la temperatura in Fahrenheit.

Successivamente impostiamo il cursore alla prima colonna della seconda riga e stampiamo “Humidity”. Impostiamo il cursore alla dodicesima colonna della seconda riga e stampiamo il valore di umidità.

Infine aggiungiamo un ritardo di 2000 millisecondi (2 secondi) usando la funzione “delay()” per lasciare il tempo di visualizzare le letture prima di ripetere il loop.

void loop() {
  float tempC = sensor.readTemperature();
  float tempF = tempC * 1.8 + 32;
  float humidity = sensor.readHumidity();

  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("Temperature"); 
  lcd.setCursor(11, 0);
  lcd.print(tempF);     

  lcd.setCursor(0, 1);
  lcd.print("Humidity"); 
  lcd.setCursor(11, 1);
  lcd.print(humidity);   

  delay(2000);
}

E questo è tutto. Ora hai un sistema completamente funzionante per visualizzare i dati di temperatura e umidità su un LCD.

Domande frequenti

Ecco alcune domande frequenti sull’uso del sensore AM2320 per leggere temperatura e umidità e visualizzare i dati su un LCD 16×2 con Arduino.

D: Cos’è il sensore AM2320?

R: L’AM2320 è un sensore digitale di temperatura e umidità che usa il bus seriale I2C per comunicare con microcontrollori come Arduino. Fornisce letture accurate di temperatura e umidità, ideale per applicazioni come monitoraggio meteo, domotica e controllo serre.

D: Cos’è I2C e come funziona?

R: I2C (Inter-Integrated Circuit) è un protocollo di comunicazione seriale che permette a più dispositivi di comunicare tra loro usando solo due fili – SDA (linea dati) e SCL (linea clock). Consente una comunicazione efficiente tra microcontrollori e sensori, riducendo il numero di pin necessari per il collegamento.

Assicurati di usare gli indirizzi I2C corretti dei dispositivi collegati nel tuo codice. Verifica anche che le linee SDA e SCL non siano invertite.

D: Come collego AM2320 e LCD ad Arduino tramite I2C?

R: Per collegare AM2320 e LCD ad Arduino tramite I2C, devi fare i seguenti collegamenti:

  • Collega il pin SDA del sensore AM2320 al pin SDA di Arduino.
  • Collega il pin SCL del sensore AM2320 al pin SCL di Arduino.
  • Collega il pin SDA dell’LCD al pin SDA di Arduino.
  • Collega il pin SCL dell’LCD al pin SCL di Arduino.

D: Come leggo temperatura e umidità tramite il sensore AM2320?

R: Per leggere temperatura e umidità tramite il sensore AM2320 devi inizializzare il sensore e poi usare le funzioni appropriate per ottenere i valori di temperatura e umidità. La libreria AM2320 fornisce funzioni come begin() per inizializzare il sensore e readTemperature() e readHumidity() per ottenere rispettivamente le letture di temperatura e umidità.

D: Come visualizzo i dati su un LCD 16×2?

R: Per visualizzare i dati di temperatura e umidità su un LCD 16×2 devi inizializzare l’LCD e poi usare le funzioni della libreria LCD per scrivere i dati sullo schermo. La libreria LiquidCrystal fornisce funzioni come begin() per inizializzare l’LCD e print() per visualizzare i dati sull’LCD.

D: Ci sono consigli per risolvere problemi con il sensore AM2320 e l’LCD?

R: Se incontri problemi usando il sensore AM2320 e l’LCD, ecco alcuni consigli:

  • Controlla bene i collegamenti per assicurarti che siano corretti.
  • Verifica di aver installato le librerie necessarie per il sensore AM2320 e l’LCD.
  • Assicurati di avere gli indirizzi I2C corretti sia per il sensore che per l’LCD.
  • Controlla che non ci siano conflitti con altri dispositivi sul bus I2C.
  • Testa il codice passo passo per individuare eventuali errori.

Conclusione

In questo tutorial ti ho mostrato come usare il sensore di temperatura e umidità AM2320 con Arduino. Spero ti sia stato utile e informativo.

Se hai domande, sentiti libero di lasciare un commento.