Código de búsqueda

Código de Arduino y vídeo para un sensor digital de temperatura y humedad Aosong AM2320

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

FabricanteAosong
Número de piezaAM2320
Tensión de lógica/E/S3.1 a 5.5 V
Tensión de alimentación3.1 a 5.5 V
Rango de temperaturade -40 a +80 °C
Rango de humedad0 a 99 %
Resolución (Temperatura)0.1 °C
Resolución (Humedad)0.1 %
Precisión (Temperatura)±0.5 °C
Precisión (Humedad)±3 %
PaqueteMó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

Arduino wiring for AM2320 sensor
Arduino wiring for AM2320 sensor

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

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
Arduino wiring for AM2320 sensor
84-This is the Arduino code for the Aosong AM2320 digital temperature and humidity sensor.
Idioma: C++
++
/**
    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)

Archivo de Fritzing