Cerca codice

Codice Arduino e video per un sensore digitale di temperatura e umidità Aosong AM2320 con LCD1602 e modulo I2C

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

ProduttoreAosong
Numero di parteAM2320
Tensione logica/I/O3.3 V - 5.5 V
Tensione di alimentazione3.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
PacchettoDIP-4
Note / variantiSi 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

Arduino wiring for AM2320 sensor with LCD
Arduino wiring for AM2320 sensor with LCD

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à

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 with LCD
Arduino wiring for AM2320 sensor with LCD
85-This is the Arduino code for an Aosong AM2320 temperature and humidity sensor with an LCD1602 and I2C module.
Lingua: C++
++
/**
 * 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  
}
86-This is the Arduino code for the Aosong AM2320 temperature and humidity sensor with an LCD1602 and I2C module.
Lingua: C++
/*********************************************************************
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

Risorse e riferimenti

File📁

Scheda tecnica (pdf)

File Fritzing