Lectura del sensor

El ejemplo anterior nos ha servido para comprobar que todo funciona correctamente. Si queremos, podemos trabajar con él tal cual está para medir la temperatura y la humedad con este sensor. Sin embargo, para poder entender las instrucciones fundamentales de lectura de los datos y, de este modo, ser capaces de adaptar el sketch a nuestras necesidades específicas, vamos a utilizar la versión simplificada que incluimos a continuación:

#include <SimpleDHT.h>
const int pinDHT22 = 2;
SimpleDHT22 sensorDHT22;

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

void loop() {
  float temperatura;
  float humedad;
  sensorDHT22.read2(pinDHT22, &temperatura, &humedad, NULL);

  Serial.print("Temperatura: ");
  Serial.print(temperatura);
  Serial.print(" °C \t");
  Serial.print("Humedad: ");
  Serial.print(humedad);
  Serial.println(" %");
 
  delay(2500);
}

Veamos qué significan las instrucciones de este sketch, una a una. Recuerda que las instrucciones que se escriben antes de la función loop() se encargan de la configuración inicial y se ejecutan una única vez, y que en cuanto la ejecución del programa entra en loop() sus instrucciones se repiten una y otra vez.

#include <SimpleDHT.h>

El significado de esta instrucción es bastante obvio: le estamos diciendo a Arduino que incluya en el programa la biblioteca SimpleDHT que añadimos anteriormente (si aún no lo has hecho, en el apartado “Añadir una biblioteca en el IDE de Arduino” se explica cómo hacerlo). Fíjate bien en la sintaxis: las instrucciones para incluir bibliotecas comienzan con el símbolo # y, ¡ojo!, no terminan con un punto y coma.

const int pinDHT22 = 2;

Como ya hicimos anteriormente, vamos a utilizar una constante, que llamamos pinDHT22, para referirnos al pin digital 2, que es donde hemos conectado el pin de datos del sensor. Si lo has conectado a un pin diferente (debe ser un pin digital), escribe aquí el número correspondiente.

SimpleDHT22 sensorDHT22;

Con esta instrucción estamos haciendo dos cosas. Por un lado, estamos creando una instancia del sensor a la que llamamos sensorDHT22 (puedes escoger otro nombre, si lo deseas). A efectos prácticos lo que estamos haciendo es algo así como ponerle un nombre a nuestro sensor: cada vez que nos queramos referir al sensor en el programa lo haremos a través del nombre sensorDHT22.

Por otro lado, ¿recuerdas que, cuando declaramos una variable en Arduino, antes de su nombre debemos siempre especificar de qué tipo es (un número entero, un número real…)? Pues con el sensor pasa lo mismo. De acuerdo con la biblioteca que estamos usando, cualquier sensor que tengamos va a ser un objeto de la clase SimpleDHT22. Por eso, antes del nombre del sensor anteponemos SimpleDHT22 para que el programa sepa el “tipo” de objeto que va a ser.

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

En la función setup() inicializamos la comunicación con el monitor serie a 9600 bits de datos por segundo.

void loop() {

El programa entra en la función loop().

float temperatura;
float humedad;

Con estas dos instrucciones creamos dos variables, llamadas temperatura y humedad. En dichas variables almacenaremos, respectivamente, los valores de la temperatura y la humedad medidas por el sensor. Como estos valores serán números decimales, declaramos las variables del tipo float.

sensorDHT22.read2(pinDHT22, &temperatura, &humedad, NULL);

La función read2() se encarga de la lectura del sensor. Esta función (que pertenece a la biblioteca SimpleDHT) necesita cuatro argumentos. El primer argumento es el pin en el que está conectado el sensor; en nuestro caso estamos utilizando la constante pinDHT22 para referirnos al pin digital 2. Con el siguiente argumento conseguimos que la temperatura medida por el sensor se almacene en la variable temperatura que creamos previamente. El tercer argumento desempeña un papel análogo al anterior; esta vez el valor de la humedad se almacena en la variable humedad. El último argumento, NULL, debe dejarse como está.

Fíjate que para utilizar la función read2() debemos escribir primero sensorDHT22, que es el nombre que le pusimos a nuestro sensor al principio del programa, y después, separado por un punto, escribimos la función con sus argumentos. Esta es la manera de decir que la función read2() va a actuar sobre el objeto sensorDHT22. La notación del punto es muy habitual en muchos lenguajes de programación; en concreto, es la notación que utilizan los lenguajes de programación orientados a objetos.

Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C \t");
Serial.print("Humedad: ");
Serial.print(humedad);
Serial.println(" %");

Todas estas instrucciones sirven, como ya sabrás, para mostrar por pantalla los valores de la temperatura y la humedad. Fíjate que cada vez que se mide la temperatura y la humedad sus valores se imprime en una única línea, porque la única instrucción que introduce un salto de línea es la última (println). Para separar los valores de la temperatura y la humedad hemos escrito \t, que imprime los espacios correspondientes a un tabulador.

delay(2500);
}

Como dijimos cuando hablamos de las especificaciones del sensor DHT22, su frecuencia de muestreo de 0,5 Hz. Por eso para tomar un nuevo dato hay que esperar, como mínimo, 2 segundos. En nuestro caso estamos esperando 2,5 segundos antes de que vuelva a empezar la función loop() y se tome una nueva medida.

El resultado de ejecutar el programa anterior es el siguiente:

Last updated