Código de búsqueda

Código de Arduino y vídeo para un sensor digital de temperatura y humedad Aosong AM2320 con LCD1602 y módulo I2C

Código de Arduino y vídeo para un sensor digital de temperatura y humedad Aosong AM2320 con LCD1602 y módulo I2C

En este tutorial exploraremos cómo utilizar el sensor digital de temperatura y humedad Aosong AM2320 junto con una pantalla LCD1602 que emplea un módulo I2C. El objetivo es mostrar lecturas de temperatura tanto en Fahrenheit como en Celsius, así como la humedad relativa. Esta configuración es ideal para monitorizar las condiciones ambientales en diversos proyectos, convirtiéndola en una adición versátil a tu kit de herramientas Arduino.

Usaremos el sensor AM2320 para recopilar datos de temperatura y humedad, que luego se mostrarán en el LCD1602. El módulo I2C simplifica el proceso de cableado, requiriendo solo cuatro conexiones: VCC, GND, SDA y SCL. Para una comprensión clara del cableado y la programación, recomiendo ver el video asociado (en el video a las 00:00).

Hardware explicado

Los componentes clave en este proyecto incluyen el sensor AM2320, la pantalla LCD1602 y el módulo I2C. El AM2320 es un sensor digital que proporciona lecturas precisas de temperatura y humedad a través de una interfaz I2C. Funciona con un voltaje de 3.3V a 5.5V y tiene un rango de medición de -40°C a +80°C para la temperatura y de 0% a 100% para la humedad.

La pantalla LCD1602 permite la visualización de las lecturas del sensor. Es una pantalla de 16x2 caracteres que se comunica mediante el protocolo I2C, lo que reduce el número de conexiones requeridas a solo cuatro. El módulo I2C convierte los datos paralelos del LCD a un formato serial, facilitando su conexión al Arduino.

Detalles de la ficha técnica

FabricanteAosong
Número de piezaAM2320
Voltaje lógico/E/S3.3 V - 5.5 V
Tensión de alimentación3.3 V - 5.5 V
Corriente de salida≤ 1.5 mA
Rango de medición (temperatura)-40°C a +80°C
Rango de medición (humedad)0% a 100%
Tiempo de respuesta≤ 2 s
PaqueteDIP-4
Notas / variantesSe recomiendan resistencias pull-up para las conexiones I2C.

  • Asegúrese de que el suministro de energía sea adecuado y esté dentro del rango de voltaje especificado.
  • Utilice resistencias pull-up (se recomiendan 4,7 kΩ) para las líneas SDA y SCL.
  • Compruebe que la dirección I2C sea correcta (por defecto es 0x27 para la mayoría de las pantallas LCD).
  • Maneje los errores potenciales comprobando el código de error del sensor.
  • Borre la pantalla LCD antes de mostrar nuevas lecturas para evitar que se superpongan.

Instrucciones de cableado

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

Para cablear el sensor AM2320, conecte el pin izquierdo (VCC) a 5V en el Arduino. El segundo pin (SDA) va al pin A4 en un Arduino Uno (o al pin 20 en un Mega). El tercer pin (GND) debe conectarse a tierra, y el cuarto pin (SCL) se conecta al pin A5 en un Arduino Uno (o al pin 21 en un Mega). Además, conecte una resistencia de 4.7kΩ entre el pin SDA y 5V, y otra resistencia de 4.7kΩ entre el pin SCL y 5V para asegurar niveles de señal adecuados.

Para la pantalla LCD1602 con I2C, conecta el pin VCC a 5V y el pin GND a tierra. Conecta el pin SDA del LCD al mismo pin SDA (A4) que usa el sensor. De manera similar, conecta el pin SCL del LCD al mismo pin SCL (A5) que usa el sensor. Este cableado compartido permite que ambos dispositivos se comuniquen por el mismo bus I2C.

Ejemplos de código y guía paso a paso

El siguiente código inicializa el sensor AM2320 y la pantalla LCD1602. Comienza incluyendo las bibliotecas necesarias y creando una instancia del sensor.

#include 
AM2320 sensor;
#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

Aquí, elsensorse crea un objeto a partir de la biblioteca AM2320, y ellcdel objeto se inicializa con la dirección I2C de la pantalla.

En elsetup()En la función, inicializamos tanto el sensor como la pantalla LCD. Esto incluye encender la retroiluminación y mostrar un mensaje inicial.

void setup() {
  sensor.begin();
  lcd.begin();
  lcd.backlight();
  lcd.print("Robojax AM2320 ");
  lcd.setCursor (0,1);
  lcd.print("LCD1602 I2C Demo");
  delay(3000);
}

Este código configura la pantalla para mostrar un mensaje de bienvenida durante 3 segundos, permitiendo que el usuario vea que el sistema se está inicializando.

Elloop()La función comprueba continuamente las mediciones del sensor y actualiza la pantalla en consecuencia. Si hay una medición disponible, borra la pantalla y muestra la temperatura en Fahrenheit y Celsius, junto con la humedad 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);
}

Este extracto demuestra cómo el programa recupera y muestra los datos del sensor mientras maneja cualquier error potencial comprobando elerrorCode.

Demostración / Qué esperar

Cuando la configuración esté completa, espere que la pantalla LCD muestre la temperatura tanto en Fahrenheit como en Celsius, así como el porcentaje de humedad relativa. Si el sensor está desconectado o hay un error de CRC, la pantalla mostrará mensajes de error correspondientes. Es importante asegurarse de que todas las conexiones estén seguras para evitar cualquier problema (en el video a las 02:45).

Marcas de tiempo del vídeo

  • 00:00- Introducción al proyecto
  • 01:30- Instrucciones de cableado
  • 03:15- Explicación del código
  • 04:45- Demostración de la funcionalidad

Imágenes

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

Cosas que podrías necesitar

Recursos y referencias

Archivos📁

Hoja de datos (pdf)

Archivo de Fritzing