4. Lectura de sensores

Se da una introducción a los tipos de sensores económicos que se suelen utilizar para este tipo de proyectos y se aprende a través de varios ejemplos a obtener lecturas de ellos.

1. Tipos de sensores

Todo proyecto de IoT se compone principalmente de dos partes. Por un lado, la parte de Internet, su conexión con la base de datos la API (veremos más adelante que es esto) y demás. Y por otro, la parte de las cosas, es decir, los sensores que nos darán la información que subir a Internet.

Tenemos infinidad de tipos distintos de sensores, entre ellos:

  • Sensores de temperatura: DS18B2, LM35, DHT11...
  • Sensores de humedad ambiental: DHT11, DHT22
  • Sensores de luminosidad: BH1750, LDR
  • Detectores de movimiento: HC-SR501
  • Medidores de distancia: HC-SR04

Y muchos otros más...

  • Si deseas información para medir algún tipo de variable física concreta prueba a buscar el tipo de sensor que necesites acompañado de la palabra clave Arduino en Google.

Buscar Google: Sensor temperatura Arduino

Asimismo, los sensores también se pueden clasificar por la manera en la que nos dan las lecturas. Encontraremos sensores que nos dan la información en digital para poder tratarla directamente con un microcontrolador y sensores que nos darán las lecturas en formato analógico, por lo que para tratarlas con un micro requeriremos de un convertidor de tipo ADC (Analog To Digital).

No profundizaremos demasiado en la teoría que está detrás, ya que se verá posteriormente como implementar en la práctica un sensor de cada tipo.

En este taller práctico y para nuestro propósito de monitorizar las variables de una planta haremos uso de los siguientes sensores:

  • Sensor de temperatura y humedad ambiental DHT11, que nos dará un valor digital. [INSERTAR IMAGEN]
  • Sensor de humedad de suelo (higrómetro) S0021, que nos dará un valor analógico que tendremos que convertir. [INSERTAR IMAGEN]

2. Sensor DHT11

El DHT11 y el DHT22 son dos modelos de una misma familia de sensores, que permiten realizar la medición simultánea de temperatura y humedad.

Estos sensores disponen de un procesador interno que realiza el proceso de medición, proporcionando la medición mediante una señal digital, por lo que resulta muy sencillo obtener la medición desde un microprocesador como Arduino.

Ambos sensores presentan un encapsulado de plástico similar. Podemos distinguir ambos modelos por el color del mismo. El DHT11 presenta una carcasa azul, mientras que en el caso del sensor DHT22 el exterior es blanco.

De ambos modelos, el DHT11 es el hermano pequeño de la familia, y cuenta peores características técnicas. El DHT22 es el modelo superior pero, por contra, tiene un precio superior.

Las características del DHT11 son realmente escasas, especialmente en rango de medición y precisión.

  • Medición de temperatura entre 0 a 50, con una precisión de 2ºC
  • Medición de humedad entre 20 a 80%, con precisión del 5%.
  • Frecuencia de muestreo de 1 muestras por segundo (1 Hz)
  • El DHT11 es un sensor muy limitado que podemos usar con fines de formación, pruebas, o en proyectos que realmente no requieran una medición precisa.

Por el contrario, el modelo DHT22 tiene unas características mucho más aceptables.

  • Medición de temperatura entre -40 a 125, con una precisión de 0.5ºC
  • Medición de humedad entre 0 a 100%, con precisión del 2-5%.
  • Frecuencia de muestreo de 2 muestras por segundo (0.5 Hz)

EL DHT22 (sin llegar a ser en absoluto un sensor de alta precisión) tiene unas características aceptables para que sea posible emplearlo en proyectos reales de monitorización o registro, que requieran una precisión media.

Al ser digital y funcionar con el protocolo OneWire, solo necesitamos un solo cable para realizar las medidas tanto de temperatura como de humedad relativa del aire.

Para facilitar la lectura de variables que nos da el sensor existen varias librerías de Arduino que nos serán de gran ayuda. Estas librerías también son compatibles con el ESP8266.

En nuestro caso usaremos la librería SimpleDHT, la cual nos permite obtener la lectura de manera muy simple.

Las funciones que usaremos serán las siguientes:

  • SimpleDHT11 dht11 para iniciar el objecto de la librería.
  • ht11.read(pinDHT11, &temperature, &humidity, NULL) para guardar los valores de temperatura y humedad en las variables correspondientes. 

NOTA: Observese que las variables se incluyen en la función con un & delante, esto es porque se pasan como dirección de memoria.

Ejercicio 1: Se propone como ejercicio cargar el sketch de ejemplo que viene con la librería, realizar las conexiones pertinentes y obtener los valores de humedad y temperatura.

3. Sensor FC28

Es un sensor que mide la humedad del suelo. Son ampliamente empleados en sistemas automáticos de riego para detectar cuando es necesario activar el sistema de bombeo.

El FC-28 es un sensor sencillo que mide la humedad del suelo por la variación de su conductividad. No tiene la precisión suficiente para realizar una medición absoluta de la humedad del suelo, pero tampoco es necesario para controlar un sistema de riego.

El FC-28 no es más que dos electrodos separados una cierta distancia entre ellos, se hace pasar una pequeña cantidad de corriente entre estos dos electrodos y la variación de conductividad entre estos dos será empleada para obtener un nivel de potencial proporcional a ella.

Se distribuye con una placa de medición estándar que permite obtener la medición como valor analógico o como una salida digital, activada cuando la humedad supera un cierto umbral.

Los valores obtenidos van desde 0 sumergido en agua, a 1023 en el aire (o en un suelo muy seco). Un suelo ligeramente húmero daría valores típicos de 600-700. Un suelo seco tendrá valores de 800-1023.

La salida digital dispara cuando el valor de humedad supera un cierto umbral, que ajustamos mediante el potenciómetro. Por tanto, obtendremos una señal LOW cuando el suelo no está húmedo, y HIGH cuando la humedad supera el valor de consigna.

El valor concreto dependerá del tipo de suelo y la presencia de elementos químicos, como fertilizantes. Además, no todas las plantas requieren la misma humedad, por lo que lo mejor es que hagáis una pequeña calibración en el terreno real.

Usaremos el puerto de entrada analógica disponible (A0), este va directamente conectado al único canal del ADC del ESP8266. Dicho ADC tiene una resolución de 10bits por lo que nos dará valores entre 0 y 1023 para valores de voltaje entre 0 y 3.3 voltios respectivamente. Este micro-controlador funciona con una alimentación de 3.3V y, aunque sus pines digitales son tolerantes a 5V, los pines analógicos no lo son.

  • Ejercicio 1: Cargamos el siguiente ejemplo y realizaremos pruebas sumergiendo el electrodo directamente en un vaso con agua. ¿Que diferencia observamos respecto al sensor seco?
/* ************************************************* *
 * -------- ANALOG READ SERIAL EXAMPLE--- ---------- *
 * ----------- Jaime Laborda Macario --------------- *
 * ------------Taller Planta Twittera IoT----------- *
 *  https://github.com/jaimelaborda/Planta-Twittera  *
 * ************************************************* */


// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 115200 bits per second:
  Serial.begin(115220);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}