Código de Arduino y vídeo para un sensor digital de temperatura y humedad Aosong AM2320
En este tutorial exploraremos cómo usar el sensor digital de temperatura y humedad Aosong AM2320 con Arduino. Este sensor se comunica mediante I2C y nos permite leer la temperatura en Celsius o Fahrenheit y la humedad en porcentaje. Al final de este tutorial, podrás construir un proyecto sencillo que muestre estas lecturas en el monitor serial.

El sensor AM2320 es compacto y proporciona datos fiables tanto de temperatura como de humedad. Tiene una resolución de 0.1°C para la temperatura y un rango de humedad de 0-99%. El proceso de configuración implica cablear el sensor al Arduino y escribir unas pocas líneas de código para leer y mostrar los valores del sensor. Este tutorial en vídeo ofrece una guía paso a paso, incluidos ejemplos de cableado y de programación (en el vídeo en 00:00).
Hardware explicado
El componente principal de este proyecto es el sensor Aosong AM2320. Funciona mediante comunicación I2C, lo que simplifica el proceso de conexión al requerir solo dos líneas de datos (SDA y SCL) además de alimentación y tierra. El sensor mide la temperatura en el rango de -40 °C a +80 °C con una precisión de ±0,5 °C y la humedad en un rango de 0 % a 99 % con una precisión similar. El sensor está diseñado para consumir muy poca energía, por lo que es adecuado para dispositivos alimentados por batería.
Además, el módulo AM2320 incluye resistencias pull-up que son necesarias para la comunicación I2C, lo que ayuda a estabilizar las señales en las líneas SDA y SCL. Esta característica simplifica el proceso de cableado, ya que no necesitarás añadir resistencias pull-up externas.
Detalles de la ficha técnica
| Fabricante | Aosong |
|---|---|
| Número de pieza | AM2320 |
| Tensión de lógica/E/S | 3.1 a 5.5 V |
| Tensión de alimentación | 3.1 a 5.5 V |
| Rango de temperatura | de -40 a +80 °C |
| Rango de humedad | 0 a 99 % |
| Resolución (Temperatura) | 0.1 °C |
| Resolución (Humedad) | 0.1 % |
| Precisión (Temperatura) | ±0.5 °C |
| Precisión (Humedad) | ±3 % |
| Paquete | Módulo |
- Asegúrese de que el suministro de voltaje sea correcto (3.1 a 5.5 V).
- Utilice resistencias de pull-up (típicamente 4,7 kΩ) para las líneas SDA y SCL.
- Mantenga el rango de temperatura entre -40°C y +80°C para evitar daños.
- Las lecturas de humedad son precisas en un rango del 0% al 99%.
- Vigilar códigos de error durante las lecturas (p. ej., sensor sin conexión).
Instrucciones de cableado

Para cablear el sensor AM2320 al Arduino, siga estos pasos cuidadosamente. Primero, conecte los pines de alimentación: el pin más a la izquierda del AM2320 se conecta al 5V (o VCC) del Arduino, mientras que el pin de tierra se conecta al GND del Arduino. El segundo pin desde la izquierda (SDA) se conecta al pin analógico A4 para un Arduino Uno o A20 para un Arduino Mega. El tercer pin (SCL) va a A5 para un Arduino Uno o A21 para un Arduino Mega.
Además, deberá conectar una resistencia de 4.7 kΩ desde el pin SDA hasta la línea de 5V y otra resistencia de 4.7 kΩ desde el pin SCL hasta la línea de 5V. Esto garantiza una comunicación I2C adecuada. Si está utilizando otros modelos de Arduino como el Leonardo, los pines SDA y SCL también serán A4 y A5, respectivamente.
Ejemplos de código y guía paso a paso
Echemos un vistazo a algunas partes clave del código Arduino utilizado en este proyecto. Primero, inicializamos el sensor y configuramos la comunicación serial:
#include
AM2320 sensor;
void setup() {
Serial.begin(9600);
sensor.begin();
} En este fragmento, incluimos la biblioteca necesaria con#include <AM2320.h>y crea una instancia del sensor. Elsetup()La función inicializa la comunicación serie a 9600 baudios e inicia el sensor.
A continuación, tenemos el bucle principal que lee la temperatura y la humedad:
if (sensor.measure()) {
Serial.print("Temperature: ");
Serial.print(temp('C'));
Serial.print(" C, Humidity: ");
Serial.print(sensor.getHumidity());
Serial.println("%");
}Este código comprueba si la medición del sensor fue exitosa. Si es así, imprime la temperatura en grados Celsius y el porcentaje de humedad en el monitor serie. Eltemp('C')Se llama a la función para obtener la temperatura en Celsius. Si desea Fahrenheit, puede llamartemp('F').
Demostración / Qué esperar
Cuando ejecutes el programa, deberías ver las lecturas de temperatura y humedad actualizándose cada medio segundo en el monitor serie. Por ejemplo, la salida podría mostrar "Temperature: 23.5 C, Humidity: 50%". Si aplicas calor al sensor, deberías observar que la temperatura aumenta y la humedad disminuye, demostrando su capacidad de respuesta (en el vídeo a las 11:15).
Marcas de tiempo del vídeo
- 00:00- Introducción al sensor AM2320
- 01:30- Instrucciones de cableado
- 03:45- Recorrido por el código
- 05:15- Demostración de lecturas
++
/**
This is Arduino code for Aosong Digital Temperature and Humidity Sensor.
This code is presented as part of a Robojax tutorial.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Copyright 2016 Ratthanan Nalintasnai
Modified for Robojax.com video by
Ahmad S. on March 22, 2018 at 22:45 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/3ifN0FhLB5E
**/
// Include library into the sketch
#include <AM2320.h>
// Create an instance of sensor
AM2320 sensor;
void setup() {
// enable serial communication
Serial.begin(9600);
Serial.print("Robojax AM2320 Demo ");
// call sensor.begin() to initialize the library
sensor.begin();
}
void loop() {
// sensor.measure() returns a boolean value
// - true indicates measurement is completed successfully
// - false indicates that either the sensor is not ready or CRC validation failed
// use getErrorCode() to check for the cause of the error.
if (sensor.measure()) {
Serial.print("Temperature: ");
Serial.print(temp('C'));
Serial.print(" C, Humidity: ");
Serial.print(sensor.getHumidity());
Serial.println("%");
}
else { // error has occurred
int errorCode = sensor.getErrorCode();
switch (errorCode) {
case 1: Serial.println("ERR: Sensor is offline"); break;
case 2: Serial.println("ERR: CRC validation failed."); break;
}
}
delay(500);
}
/*
* temp()
* returns temperature based on the parameter T
* if T == 'F', will convert Celsius to Fahrenheit
* if T is anything else or empty, will return Celsius
* how to use:
* to get Fahrenheit, use temp('F')
* to get Celsius, use temp('C') or temp('')
* the 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
}
Recursos y referencias
Aún no hay recursos.
Archivos📁
Hoja de datos (pdf)
-
Manual del usuario del sensor de temperatura y humedad I2C Adafruit AM2320
adafruit-am2320-temperature-humidity-i2c-sensor.pdf1.27 MB
Archivo de Fritzing
-
Sensor de Humedad y Temperatura AM2320
AM2320 Humidity and Temperature Sensor.fzpz0.01 MB