Código de búsqueda

Lección 35-2: Uso del sensor de temperatura HTU21D - Código personalizado

Lección 35-2: Uso del sensor de temperatura HTU21D - Código personalizado

En este tutorial, exploraremos cómo usar el sensor de temperatura HTU21D con Arduino para medir la temperatura y la humedad. El HTU21D es un sensor confiable y de bajo consumo que se comunica a través de I2C, lo que facilita su integración en tus proyectos. Al final de esta lección, tendrás un código funcional que lee la temperatura en Celsius, Fahrenheit y Kelvin, así como la humedad relativa.

HTU21D module

Antes de sumergirnos en el cableado y el código, es esencial entender los componentes involucrados. El sensor HTU21D requiere conexiones mínimas: alimentación, tierra y dos cables I2C para la transferencia de datos. Esta simplicidad lo convierte en una excelente opción para diversas aplicaciones, desde estaciones meteorológicas hasta dispositivos para el hogar inteligente. Para una guía visual, consulta el video en la marca de tiempo :45.

Hardware Explicado

El componente principal de este proyecto es el sensor HTU21D, que mide la temperatura y la humedad. Este sensor puede operar con voltajes de 1.5V a 3.6V, lo que lo hace versátil para diferentes aplicaciones. Proporciona lecturas de alta resolución, con mediciones de temperatura que oscilan entre -40°C y +125°C y lecturas de humedad con una resolución de 0.04%.

Además, el sensor utiliza comunicación I2C, que requiere dos pines: SDA (línea de datos) y SCL (línea de reloj). Esto permite una integración fácil con Arduino y otros microcontroladores sin necesidad de cableado complejo. La biblioteca de Adafruit simplifica la interacción con el sensor, gestionando la recuperación de datos y los protocolos de comunicación sin problemas.

Detalles de la hoja de datos

FabricanteTE Connectivity
Número de parteHTU21D-F
Voltaje de lógica/E/S1.5 - 3.6 V
Tensión de alimentación3.3 V
Consumo actual (en reposo)0.02 µA (típ.)
Consumo actual (activo)450 µA (típ.)
Rango de temperatura-40 a +125 °C
Rango de humedad0 a 100 %HR
Resolución0.04 %HR; 0.01 °C
PaqueteDFN de 6 pines

  • Asegúrese de proporcionar la fuente de alimentación correcta para evitar daños en el sensor.
  • Utiliza resistencias de pull-up en las líneas SDA y SCL si no están integradas.
  • Mantenga las conexiones del sensor cortas para minimizar el ruido.
  • Monitore la tensión durante el funcionamiento para mantener la estabilidad.
  • Considere usar un condensador para desacoplar cerca de los pines de alimentación.

Instrucciones de cableado

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

Para cablear el sensor de temperatura HTU21D, comience conectando la alimentación y la tierra. Conecte el pin izquierdo del sensor a una fuente de 3.3V, asegurándose de que pueda manejar el voltaje requerido. El segundo pin, típicamente marcado en rojo, debe ir a tierra.

A continuación, conecta el pin SDA del sensor al pinA4en el Arduino, que sirve como la línea de datos para la comunicación I2C. Luego, conecta el pin SCL al pinA5, que actúa como la línea del reloj. Asegúrate de que estas conexiones estén seguras, ya que los cables sueltos pueden provocar lecturas intermitentes o fallos en la comunicación con el sensor.

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

En el código, comenzamos incluyendo las bibliotecas necesarias e inicializando el sensor. La líneaAdafruit_HTU21DF htu = Adafruit_HTU21DF();crea una instancia de la clase sensor. En elsetup()función, comenzamos la comunicación serial y verificamos si el sensor está conectado correctamente.

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

Este fragmento verifica si el sensor está funcionando correctamente. Si no, imprime un mensaje de error y detiene el programa. En elloop()función, leemos los valores de temperatura y humedad de forma continua.

void loop() {
    Serial.print(getHTU('C'));
    Serial.print("C");
    Serial.print(getHTU('H'));
    Serial.println("%");
    delay(1000);
}

Aquí, la funcióngetHTU()se llama con diferentes parámetros para recuperar la temperatura en Celsius y la humedad. El retraso asegura que las lecturas se tomen cada segundo, proporcionando una salida suave en el monitor serial. El código completo está disponible para referencia debajo del artículo.

Demostración / Qué Esperar

Una vez que todo esté cableado correctamente y el código haya sido cargado, deberías ver las lecturas de temperatura y humedad impresas en el monitor serie. La temperatura se mostrará en Celsius, seguida del porcentaje de humedad correspondiente. Si aplicas calor al sensor, deberías observar que la temperatura aumenta en consecuencia (en el video a las 10:15).

Tenga cuidado con los límites del sensor; si la temperatura excede los 125 °C, puede devolver una lectura incorrecta o mostrar cero. Asegúrese siempre de que sus conexiones estén seguras y de que el sensor esté alimentado correctamente para evitar problemas durante la operación.

Marcas de tiempo del video

  • 00:00Introducción
  • 03:45Cableando el sensor
  • 05:30Revisión de código
  • 10:15Demostración
  • 12:00Conclusión

Imágenes

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
513-Lesson 35: Using HTU21D Temperature Sensor (F, C, K, RH)
Idioma: C++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 35: HTU21D Temperature Sensor Custom code
 
 * Written/Updated by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada

 
  Please watch video instructions here https://youtu.be/LyA0yAKlf9E
 This code is available at http://robojax.com/course1/?vid=lecture35
 
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339  
If you found this tutorial helpful, please support me so I can continue creating.
Make a donation using PayPal http://robojax.com/L/?id=64

 * Code is available at http://robojax.com/learn/arduino

 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    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 <https://www.gnu.org/licenses/>. 
    
	
 */ 
 /*

 
**************************************************
*
  This is an example for the HTU21D-F Humidity & Temperature Sensor

  Designed specifically to work with the HTU21D-F sensor from Adafruit
  ----> https://www.adafruit.com/products/1899

  These displays use I2C to communicate; 2 pins are required to
  interface
 ***************************************************
*/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"

// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

void setup() {
//Get the code for the course: http://robojax.com/L/?id=339  	
  Serial.begin(9600);
  Serial.println("Robojax.com");
  Serial.println("HTU21D-F test");

  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

void loop() {
//Get the code for the course: http://robojax.com/L/?id=339  
    Serial.print(getHTU('C'));
    printDegree();
    Serial.println("C");
    
    Serial.print(getHTU('F'));
    printDegree();
    Serial.println("F");

    Serial.print(getHTU('K'));
    Serial.println("K");    
    Serial.println(" ");  

    Serial.print("Humidity:");
    Serial.print(getHTU('H'));
    Serial.println("%");

    if(getHTU('C') <81)
    {
      //digitalWrite(5, LOW);
          
    }
    delay(1000);
}


/*
 * @brief returns temperature or relative humidity
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 *     H = Humidity
 * @return returns one of the values above
 * Usage: to get Fahrenheit type: getHTU('F')
 * to print it on serial monitor Serial.println(getHTU('F'));
 * Written by Ahmad Shamshiri on July 13, 2019
 * in Ajax, Ontario, Canada
 * www.Robojax.com 
 */
float getHTU(char type)
{
	//Get the code for the course: http://robojax.com/L/?id=339  
  float value;
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
   if(type =='F')
   {
    value = temp *9/5 + 32;//convert to Fahrenheit 
   }else if(type =='K')
   {
    value = temp + 273.15;//convert to Kelvin
   }else if(type =='H')
   {
    value = rel_hum;//return relative humidity
   }else{
    value = temp;// return Celsius
   }
   return value;
}//


/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
 void printDegree()
{
    Serial.print("\xC2"); 
    Serial.print("\xB0");  
}

Cosas que podrías necesitar

Archivos📁

Hoja de datos (pdf)