Codice Arduino e video per un sensore digitale di temperatura e umidità Aosong AM2320 con LCD1602 e modulo I2C
In questo tutorial esploreremo come utilizzare il sensore digitale di temperatura e umidità Aosong AM2320 insieme a un display LCD1602 che impiega un modulo I2C. L'obiettivo è visualizzare le letture della temperatura sia in Fahrenheit che in Celsius, oltre all'umidità relativa. Questa configurazione è ideale per monitorare le condizioni ambientali in vari progetti, rendendola un'aggiunta versatile al tuo kit Arduino.

Utilizzeremo il sensore AM2320 per raccogliere i dati di temperatura e umidità, che verranno poi visualizzati sul LCD1602. Il modulo I2C semplifica il cablaggio, richiedendo solo quattro collegamenti: VCC, GND, SDA e SCL. Per comprendere chiaramente il collegamento e la programmazione, consiglio di guardare il video associato (nel video a 00:00).
L'hardware spiegato
I componenti chiave di questo progetto includono il sensore AM2320, il display LCD1602 e il modulo I2C. L'AM2320 è un sensore digitale che fornisce letture accurate di temperatura e umidità tramite un'interfaccia I2C. Funziona a una tensione da 3,3V a 5,5V e ha un intervallo di misurazione della temperatura da -40°C a +80°C e dell'umidità dal 0% al 100%.
Il display LCD1602 permette la visualizzazione delle letture del sensore. È un display a 16x2 caratteri che comunica tramite il protocollo I2C, il quale riduce il numero di collegamenti necessari a soli quattro. Il modulo I2C converte i dati paralleli dal display LCD in un formato seriale, rendendo più semplice il collegamento all'Arduino.
Dettagli della scheda tecnica
| Produttore | Aosong |
|---|---|
| Numero di parte | AM2320 |
| Tensione logica/I/O | 3.3 V - 5.5 V |
| Tensione di alimentazione | 3.3 V - 5.5 V |
| Corrente di uscita | ≤ 1.5 mA |
| Intervallo di misura (Temperatura) | da -40 °C a +80 °C |
| Campo di misura (Umidità) | da 0% a 100% |
| Tempo di risposta | ≤ 2 s |
| Pacchetto | DIP-4 |
| Note / varianti | Si raccomandano resistori pull-up per le connessioni I2C. |
- Garantire un'alimentazione adeguata all'interno dell'intervallo di tensione specificato.
- Usare resistori di pull-up (4,7 kΩ consigliati) per le linee SDA e SCL.
- Controllare che l'indirizzo I2C sia corretto (il valore predefinito è 0x27 per la maggior parte degli LCD).
- Gestire eventuali errori controllando il codice di errore del sensore.
- Cancella il display LCD prima di visualizzare nuove letture per evitare sovrapposizioni.
Istruzioni di cablaggio

Per cablare il sensore AM2320, collegare il pin sinistro (VCC) a 5V sull'Arduino. Il secondo pin (SDA) va al pin A4 su un Arduino Uno (o al pin 20 su un Mega). Il terzo pin (GND) deve essere collegato alla massa, e il quarto pin (SCL) si collega al pin A5 su un Arduino Uno (o al pin 21 su un Mega). Inoltre, collegare una resistenza da 4.7kΩ tra il pin SDA e 5V, e un'altra resistenza da 4.7kΩ tra il pin SCL e 5V per garantire livelli di segnale corretti.
Per il display LCD1602 con I2C, collegare il pin VCC a 5V e il pin GND a massa. Collegare il pin SDA del LCD allo stesso pin SDA (A4) utilizzato dal sensore. Analogamente, collegare il pin SCL del LCD allo stesso pin SCL (A5) utilizzato dal sensore. Questa cablatura condivisa permette ad entrambi i dispositivi di comunicare sullo stesso bus I2C.
Esempi di codice e guida passo passo
Il seguente codice inizializza il sensore AM2320 e il display LCD1602. Inizia includendo le librerie necessarie e creando un'istanza del sensore.
#include
AM2320 sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2); Qui, ilsensorUn oggetto viene creato dalla libreria AM2320, e illcdL'oggetto viene inizializzato con l'indirizzo I2C del display.
Nelsetup()All'interno della funzione inizializziamo sia il sensore che l'LCD. Questo include l'accensione della retroilluminazione e la visualizzazione di un messaggio iniziale.
void setup() {
sensor.begin();
lcd.begin();
lcd.backlight();
lcd.print("Robojax AM2320 ");
lcd.setCursor (0,1);
lcd.print("LCD1602 I2C Demo");
delay(3000);
}Questo codice configura il display per mostrare un messaggio di benvenuto per 3 secondi, permettendo all'utente di vedere che il sistema si sta inizializzando.
Illoop()La funzione controlla continuamente se sono disponibili misurazioni del sensore e aggiorna il display di conseguenza. Se è disponibile una misurazione, cancella lo schermo e visualizza la temperatura sia in Fahrenheit che in Celsius, insieme all'umidità relativa.
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);
}Questo estratto dimostra come il programma recupera e visualizza i dati del sensore, gestendo eventuali errori controllando ilerrorCode.
Dimostrazione / Cosa aspettarsi
Al termine della configurazione, il display LCD visualizzerà la temperatura sia in Fahrenheit sia in Celsius, oltre alla percentuale di umidità relativa. Se il sensore è offline o si verifica un errore CRC, il display mostrerà i messaggi di errore corrispondenti. È importante assicurarsi che tutte le connessioni siano sicure per evitare problemi (nel video a 02:45).
Marcatori temporali del video
- 00:00- Introduzione al progetto
- 01:30- Istruzioni di cablaggio
- 03:15- Spiegazione del codice
- 04:45- Dimostrazione della funzionalità
++
/**
* 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
}
Cose di cui potresti avere bisogno
-
Amazon
-
AliExpressAcquista il sensore AM2302, DHT11 o DHT22 da AliExpress.s.click.aliexpress.com
Risorse e riferimenti
-
EsternoAM2320 Libreria (da GitHub)github.com
-
EsternoPagina di documentazione di Arduino Wirearduino.cc
File📁
Scheda tecnica (pdf)
-
Manuale utente del sensore di temperatura e umidità I2C Adafruit AM2320
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
File Fritzing
-
Sensore di umidità e temperatura AM2320
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB