Skip to Content

Tutorial de Arduino para el sensor digital de temperatura y humedad AM2320

Tutorial de Arduino para el sensor digital de temperatura y humedad AM2320

En este tutorial, aprenderás a usar el sensor digital de temperatura y humedad AM2320 con Arduino. He incluido diagramas de conexión y dos ejemplos de código para empezar.

Para este tutorial, usaremos la biblioteca Adafruit AM2320. Esta biblioteca facilita mucho la comunicación con el sensor vía I2C. La usaremos en nuestro primer ejemplo para leer los datos de temperatura y humedad del sensor AM2320 y mostrarlos en el Monitor Serial.

En el segundo ejemplo, ampliamos esto añadiendo una pantalla LCD de 16×2 caracteres. Esta también se conectará vía bus I2C y nos permitirá mostrar las lecturas en la pantalla LCD. El proyecto completo se verá así:

Project to display AM2320 data on LCD
Proyecto para mostrar datos del AM2320 en LCD

Si quieres aprender más sobre otros sensores de temperatura, consulta nuestros otros tutoriales a continuación:

¡Vamos a empezar!

Partes necesarias

A continuación encontrarás las partes necesarias para este proyecto. Además de un Arduino, necesitarás una protoboard, algunos cables y, por supuesto, el sensor AM2320. Para este tutorial usaré el clásico Arduino Uno (REV3), pero cualquier otro Arduino (o ESP32/ESP8266) también servirá.

También incluí una pantalla LCD 16×2 en la lista de partes necesarias, que usarás para el segundo ejemplo de aplicación de este tutorial. Si solo quieres mostrar temperatura y humedad en el Monitor Serial, no necesitarás esta pantalla.

Arduino Uno

Dupont wire set

Juego de cables Dupont

Half_breadboard56a

Protoboard

USB Data Sync cable Arduino

Cable USB para Arduino UNO

Sensor de temperatura AM2320

LCD 16×2 con interfaz 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.

Acerca del AM2320

El AM2320 es un sensor digital de temperatura y humedad de bajo costo fabricado por ASAIR. Este sensor es similar a los populares DHT11/DHT22 pero cuenta con interfaz I2C en lugar del protocolo de bus único que usan muchos otros sensores DHTxx. Puedes encontrar nuestro tutorial para DHT11 y DHT22 aquí:

El sensor consta de un elemento capacitivo para medir humedad y un elemento integrado de alta precisión para medir temperatura, conectado a un microprocesador. El rango de medición de temperatura es de -40 a 80 grados Celsius, con una precisión declarada de ± 0.5 °C. 

Humedad relativa

Al revisar la hoja de datos del sensor, verás que mide la humedad relativa (HR) del aire y no la humedad absoluta. ¿Pero cuál es la diferencia? La humedad absoluta es la cantidad de vapor de agua en el aire (expresada en g/m³), sin importar la temperatura. La humedad relativa   toma en cuenta la temperatura.

La humedad relativa es la proporción entre la cantidad real de vapor de agua presente en el aire y la cantidad máxima de vapor de agua que el aire puede contener a una temperatura dada.

El aire cálido puede contener más agua que el aire frío. Esto significa que para la misma cantidad de vapor de agua en el aire, la humedad relativa en aire frío será mayor que en aire cálido. Al 100 por ciento de humedad relativa, el aire está saturado y alcanza su punto de rocío.

Pinout del AM2320

El pinout del sensor AM2320 es el siguiente:

Pinout of AM2320 (source)
Pinout del AM2320 (source)
Pin Nombre Descripción
1 VDD Pin de alimentación positiva (3.1 – 5.5 V)
2 SDA Datos seriales, puerto bidireccional
3 GND Tierra
4 SCL Entrada de reloj serial (tierra de bus único)

Ten en cuenta que la dirección I2C por defecto del sensor es 0x5C y no puede cambiarse.

La siguiente tabla muestra las características más importantes del AM2320:

Especificaciones del AM2320

Voltaje de alimentación 3.1 – 5.5 V
Consumo de energía En reposo: 10 μA
En medición: 950 μA
Rango de humedad 0 – 99.9 % HR ± 3 % HR
Rango de temperatura -40 – 80 °C ± 0.5 °C
Interfaz I2C
1-Wire
Periodo de muestreo 2.0 s
Dimensiones 15 x 12.1 x 4.5 mm
Costo Check price

Para más información, puedes consultar la hoja de datos aquí:

Conectando el AM2320 al Arduino

Conectar el AM2320 al Arduino es muy fácil, como puedes ver en el diagrama a continuación.

Wiring of the AM2320 with the Arduino
Conexión del AM2320 con Arduino

Solo conecta 5V (o 3.3V) del Arduino al Pin 1 (VDD) del AM2320 y de igual forma conecta Tierra (GND) a GND. A4 va al Pin 2 (SDA) y A5 se conecta al Pin 4 (SCL) del AM2320. Las conexiones también se muestran en la tabla a continuación.

Conexiones del AM2320

AM2320 Cable Arduino
Pin 1 (VDD) rojo 5 V
Pin 2 (SDA) amarillo A4
Pin 3 (GND) negro GND
Pin 4 (SCL) verde A5

Si no usas un Arduino Uno, los pines SDA y SCL pueden estar en otra ubicación. Consulta la tabla a continuación para más detalles.

Placa 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
Ubicación de los pines SDA y SCL en diferentes placas Arduino.

Un Arduino Uno con el diseño R3 (pinout 1.0) también tiene los pines SDA (línea de datos) y SCL (línea de reloj) cerca del pin AREF. El siguiente diagrama muestra un circuito alternativo que conecta el AM2320 a esos pines SDA y SCL:

Alternative Circuit with Pullup Resistors and alternative SDA/SCL pins
Circuito alternativo con resistencias pull-up y pines SDA/SCL alternativos

Notarás que también hay dos resistencias pull-up adicionales de 4.7KΩ en las líneas SDA y SCL. En muchos casos no las necesitarás, ya que el Arduino UNO tiene resistencias pull-up internas que suelen ser suficientes. Sin embargo, son de valor bastante alto y si tienes problemas de comunicación con un dispositivo I2C deberías añadir las tuyas propias, especialmente si usas cables largos.

Instalando las bibliotecas necesarias para Arduino

Para este tutorial, usaremos la biblioteca Adafruit AM2320 del sensor. Para instalarla, ve a Tools > Manage Libraries en el Arduino IDE. Se abrirá el Library Manager.

Library Manager to install Libraries
Instalar biblioteca vía Library Manager

En el LIBRARY MANAGER busca ‘Adafruit AM2320’ y haz clic en INSTALL.

Install Adafruit AM2320 library
Instalar biblioteca Adafruit AM2320

Dependiendo de las otras bibliotecas que tengas instaladas, puede que veas o no el siguiente mensaje. Te indica que necesitas instalar otras bibliotecas requeridas por la biblioteca AM2320. Eso está bien. Solo haz clic en INSTALL ALL.

Install dependent libraries
Instalar bibliotecas dependientes

Ahora tienes todas las bibliotecas instaladas que necesitamos para ejecutar el código que se muestra en la siguiente sección.

Código para leer temperatura y humedad con AM2320

El siguiente código de ejemplo muestra cómo leer temperatura y humedad del sensor AM2320 y mostrar los datos en el Monitor Serial y el Serial Plotter. Échale un vistazo rápido primero, luego discutiremos los detalles del código.

// 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);
}

Importando las bibliotecas

En el primer paso incluimos las bibliotecas Adafruit_AM2320 y Adafruit_Sensor.

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

Crear instancia del sensor

Luego, creamos una nueva instancia de la clase Adafruit_AM2320. En este caso la llamé «sensor«, pero puedes elegir otro nombre, siempre que ajustes el código siguiente en consecuencia.

Adafruit_AM2320 sensor = Adafruit_AM2320();

Función setup

En la función  setup() iniciamos la comunicación serial a 9600 baudios. Asegúrate de que el Monitor Serial también esté configurado a 9600. También inicializamos el sensor AM2320 con sensor.begin().

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

Función loop

En la sección loop del código, leemos los datos de temperatura y humedad del sensor AM2320 con las funciones readTemperature() y readHumidity().

Ten en cuenta que readTemperature() devuelve la temperatura en grados Celsius. Podemos convertirla fácilmente a Fahrenheit usando la fórmula 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();

Finalmente, imprimimos los resultados en el Monitor Serial y añadimos un retardo entre lecturas. El intervalo mínimo entre lecturas es de 2 segundos (ver hoja de datos), así que usamos un retardo de 2000 ms (=2 s) entre lecturas.

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

  delay(2000);

¡Y eso es todo! Tenemos un lector de temperatura y humedad. Ahora probémoslo.

Salida en el Monitor Serial

Si ejecutas este código y abres el Monitor Serial, deberías ver lecturas de temperatura y humedad similares a las siguientes. Asegúrate de que la velocidad en baudios esté a 9600.

Temperature and Humidity readings on Serial Monitor
Lecturas de temperatura y humedad en el Monitor Serial

Salida en el Serial Plotter

Si ahora abres el Serial Plotter y soplas sobre el sensor AM2320, deberías ver un pico en la humedad y un ligero aumento en la temperatura, similar al gráfico siguiente:

Temperature and Humidity data on Serial Plotter
Datos de temperatura y humedad en el Serial Plotter

Añadiendo un LCD para mostrar los datos

En esta parte te muestro cómo añadir una pantalla LCD 16×2 para mostrar los datos. Por suerte, es muy sencillo.

Conexión del LCD

El siguiente diagrama muestra la conexión completa. El AM2320 se conecta igual que antes. Añadimos el LCD conectando su alimentación (VCC, GND) a la línea de alimentación y sus pines SDA y SCL a las mismas líneas SDA y SCL a las que está conectado el AM2320.

Wiring of the AM2320 and LCD with the Arduino
Conexión del AM2320 y LCD con Arduino

Así, tanto el LCD como el AM2320 están conectados vía I2C al Arduino. I2C es un bus serial que puede permitir la comunicación de hasta 128 dispositivos.

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

Los dispositivos en el bus se distinguen por su dirección I2C. La dirección I2C del AM2320 es fija en 0x5C. Sin embargo, la dirección I2C de tu LCD puede variar. Las direcciones típicas son 0x27 o 0x3F, y a menudo están impresas en la parte trasera. Si no estás seguro, puedes ejecutar un escáner I2C para descubrir la dirección. Consulta nuestro tutorial Character I2C LCD with Arduino Tutorial.

Mostrando lecturas del AM2320 en LCD

El código para mostrar datos en el LCD es bastante simple. Usaremos la biblioteca LiquidCrystal de Frank de Brabander para controlar el LCD.

Si aún no la has instalado, deberás hacerlo igual que instalaste la biblioteca AM2302. Y si necesitas ayuda, consulta nuestro tutorial sobre How to use the MQ-7 Gas Sensor with an LCD display and Arduino, donde hacemos exactamente eso con pasos detallados.

Echa un vistazo rápido al código antes de explicar los detalles.

// 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);
}

Comenzamos incluyendo las bibliotecas necesarias.

Bibliotecas

Para usar el sensor AM2320 y la pantalla LCD, necesitamos incluir las bibliotecas necesarias. Incluimos «LiquidCrystal_I2C.h» para la pantalla LCD, «Adafruit_Sensor.h» para el sensor y «Adafruit_AM2320.h» para el sensor AM2320.

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

Objetos

Primero creamos dos objetos: uno para el sensor AM2320 y otro para la pantalla LCD. Inicializamos el objeto del sensor como «sensor» y el objeto del LCD como «lcd». Para crear el objeto lcd necesitamos pasar la dirección I2C del LCD (0x3F) y las dimensiones de la pantalla (20 columnas y 2 filas) al constructor «LiquidCrystal_I2C».

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

Función setup

En la función «setup()», inicializamos la comunicación serial a 9600 baudios. También llamamos a la función «begin()» del objeto sensor para inicializar el AM2320. Luego, llamamos a la función «init()» del objeto lcd para inicializar la pantalla LCD. Finalmente, encendemos la luz de fondo del LCD usando la función «backlight()».

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

Función loop

En la función «loop()», leemos los valores de temperatura y humedad del sensor usando las funciones «readTemperature()» y «readHumidity()» respectivamente.

Como antes, almacenamos la temperatura en Celsius en la variable «tempC» y la convertimos a Fahrenheit multiplicándola por 1.8 y sumando 32, guardando el resultado en la variable «tempF». De igual forma, almacenamos el valor de humedad en la variable «humidity».

Limpiamos la pantalla LCD usando la función «clear()». Luego, colocamos el cursor en la primera columna de la primera fila con «setCursor()» y escribimos «Temperature». Colocamos el cursor en la columna doce de la primera fila y mostramos la temperatura en Fahrenheit.

Después, colocamos el cursor en la primera columna de la segunda fila y escribimos «Humidity». Colocamos el cursor en la columna doce de la segunda fila y mostramos el valor de humedad.

Finalmente, añadimos un retardo de 2000 milisegundos (2 segundos) usando la función «delay()» para dar tiempo a que las lecturas se muestren antes de repetir el ciclo.

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);
}

Y eso es todo. Ahora tienes un sistema completamente funcional para mostrar datos de temperatura y humedad en un LCD.

Preguntas frecuentes

Aquí tienes algunas preguntas frecuentes sobre el uso del sensor AM2320 para leer temperatura y humedad y mostrar los datos en un LCD 16×2 con Arduino.

P: ¿Qué es el sensor AM2320?

R: El AM2320 es un sensor digital de temperatura y humedad que usa el bus serial I2C para comunicarse con microcontroladores como Arduino. Proporciona lecturas precisas de temperatura y humedad, ideal para aplicaciones como monitoreo meteorológico, domótica y control de invernaderos.

P: ¿Qué es I2C y cómo funciona?

R: I2C (Inter-Integrated Circuit) es un protocolo de comunicación serial que permite que múltiples dispositivos se comuniquen usando solo dos cables: SDA (línea de datos) y SCL (línea de reloj). Facilita la comunicación eficiente entre microcontroladores y sensores, minimizando el número de pines necesarios para la conexión.

Asegúrate de usar las direcciones I2C correctas de los dispositivos conectados en tu código. También verifica que las líneas SDA y SCL no estén invertidas.

P: ¿Cómo conecto el AM2320 y el LCD al Arduino vía I2C?

R: Para conectar el AM2320 y el LCD al Arduino vía I2C, debes hacer las siguientes conexiones:

  • Conecta el pin SDA del sensor AM2320 al pin SDA del Arduino.
  • Conecta el pin SCL del sensor AM2320 al pin SCL del Arduino.
  • Conecta el pin SDA del LCD al pin SDA del Arduino.
  • Conecta el pin SCL del LCD al pin SCL del Arduino.

P: ¿Cómo leo temperatura y humedad con el sensor AM2320?

R: Para leer temperatura y humedad con el sensor AM2320, debes inicializar el sensor y luego usar las funciones adecuadas para obtener los valores de temperatura y humedad. La biblioteca AM2320 proporciona funciones como begin() para inicializar el sensor y readTemperature() y readHumidity() para obtener las lecturas de temperatura y humedad respectivamente.

P: ¿Cómo muestro los datos en un LCD 16×2?

R: Para mostrar los datos de temperatura y humedad en un LCD 16×2, debes inicializar el LCD y luego usar las funciones de la biblioteca LCD para escribir los datos en la pantalla. La biblioteca LiquidCrystal proporciona funciones como begin() para inicializar el LCD y print() para mostrar los datos en el LCD.

P: ¿Hay consejos para solucionar problemas con el sensor AM2320 y el LCD?

R: Si tienes problemas usando el sensor AM2320 y el LCD, aquí tienes algunos consejos:

  • Revisa tus conexiones para asegurarte de que estén bien cableadas.
  • Verifica que hayas instalado las bibliotecas necesarias para el sensor AM2320 y el LCD.
  • Asegúrate de tener las direcciones I2C correctas tanto para el sensor como para el LCD.
  • Comprueba si hay conflictos con otros dispositivos que usen el bus I2C.
  • Prueba tu código paso a paso para identificar posibles errores.

Conclusión

En este tutorial te he mostrado cómo usar el sensor de temperatura y humedad AM2320 con Arduino. Espero que te haya resultado útil e informativo.

Si tienes alguna pregunta, no dudes en dejar un comentario.