Proyecto 27 – Sensor de Humedad de Suelo

En este proyecto utilizaremos un sensor de humedad de suelo HW-080 o higrómetro con nuestro Arduino para detectar la humedad en un terreno. Este sensor es muy similar en su funcionamiento al sensor de lluvia utilizado en nuestro proyecto anterior

Sensor de humedad en suelo

Módulo comparador LM393 y sensor de humedad de suelo

El higrómetro de suelo es un sensor que mide la humedad por medio de la variación de la conductividad del suelo en el que se encuentra enterrado. Existen varios modelos higrómetros de tierra, pero aquí vamos a utilizar cualquiera de estos 3 modelos: HW-080, YL-69 o FC-28, que básicamente son el mismo sensor, hay que tener muy presente los pines del módulo comparador ya que pueden ser diferentes al del ejemplo. Son frecuentemente utilizados en sistemas de riego.

En nuestro caso vamos a utilizar el HW-080, este módulo se compone de dos partes:

  • La primera es un módulo de medición estándar con un comparador LM393, que nos permite obtener una lectura análoga o digital y se puede regular la sensibilidad del umbral, ya que tiene potenciómetro en el circuito.
  • La segunda parte es un PCB que básicamente es una resistencia variable cuyo valor varia según la humedad en la que se encuentra enterrada.

¿Cómo funciona el higrómetro?

El funcionamiento del sensor es bastante simple, la placa del sensor posee dos electrodos resistivos, los cuales miden la resistencia y de esto dependerá la humedad del suelo. Entonces en un suelo muy húmedo tendríamos un corto circuito entre los dos terminales es decir una resistencia muy baja o 0 resistencia y en el caso de un suelo muy seco la resistencia vendría siendo muy alta. En conclusión el sensor tiene dos sondas y medimos la resistencia entre ellas, entre menor sea la resistencia mayor la humedad.

Entre más humedad encuentre sobre las dos sondas del sensor la resistencia es menor, es decir la resistencia es inversamente proporcional a la humedad.

Componentes

  • Arduino UNO o placa compatible
  • Sensor de humedad en tierra HW-080 o FC-28
  • Cables o Jumpers
Diagrama de conexiones del sensor de humedad de suelo
Diagrama de conexiones del sensor de humedad de suelo

En este proyecto las conexiones son bastante simples, lo primero que debemos hacer es revisar es en el módulo comparador los pines de conexión, en un lado están los dos conectores que van a conectarse al sensor y por el otro lado encontraremos 4 pines (AO, DO, GND, VCC), los cuales son la alimentación del módulo (VCC, GND), un pin de salida digital (DO) y uno de salida análoga (AO).

Una vez identificados los pines del módulo comparador procedemos a conectar los dos pines de captura de datos a la tarjeta del sensor, luego conectamos el GND al GND del arduino, el VCC a los 5V del Arduino y por último conectamos el pin AO del módulo a el pin A0 del Arduino.

Código

#define sensor A0 
int valor = 0;

void setup()
{
    Serial.begin(9600);
}
void loop()
{
    int valor = map(analogRead(sensor), 0, 1023, 100, 0);
    //se hace un mapeo de la lectura del sensor a porcentual
    Serial.print("Humedad: ");
    Serial.print(valor);
    Serial.println("%");
    delay(100);
}

Explicación del código

Comenzaremos a revisar el código, primero vamos hacer la declaración de la variable.

#define sensor A0 
int valor = 0;

Declaramos primero una constante con define, pinSensor a la cual le asignaremos A0, el cual es el pin del Arduino al cual irá conectado nuestro sensor, luego vemos declarada otra variable de tipo entera valor que le asignaremos 0 para inicializarla.

Función setup()

Serial.begin(9600);

Como hemos visto anteriormente en otros proyectos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, el el caso de este proyecto lo único que vemos es la inicialización de la comunicación serial a una velocidad el 9600 baudios, por medio de la cual veremos la información de la tecla que hemos presionado a través del monitor serial.

Función loop()

int valor = map(analogRead(sensor), 0, 1023, 100, 0);
//se hace un mapeo de la lectura del sensor a porcentual
Serial.print("Humedad: ");
Serial.print(valor);
Serial.println("%");
delay(100);

Comenzaremos revisando el contenido de nuestra función loop, para esto vamos a irlo desglosando un poco, para que sea mas fácil de entender.

int valor = map(analogRead(sensor), 0, 1023, 100, 0);

Aquí podemos ver que se declara una variable de tipo entero llamada valor, vamos a hacer una pausa aquí para analizar lo que le estamos asignando a la variable valor. Vemos una función que no habíamos trabajado aún, la función map, la cual toma un valor lo mapea de un rango a otro rango, en nuestro caso mapea los valores capturados por el puerto A0 que vienen de nuestro sensor de 0-1023 a un nuevo rango que sería 100-0, donde el valor 0 de nuestro sensor equivale a 100 y el 1024 del sensor equivale a 0. No olvidemos que si el sensor registra un valor 0 equivale al 100% de humedad y si el valor es de 1023 está completamente seco.

Entonces podemos resumir que en esta línea se declara la variable entera valor, a la cual le asignamos la captura del valor del sensor mapeado de 0-1023 a 100-0.

Serial.print("Humedad: ");
Serial.print(valor);
Serial.println("%");
delay(100);

Las líneas que siguen ya son muy fáciles de comprender, ya las hemos visto en casi todos nuestros proyectos. La primera línea nos imprime en el monitor serial el texto «Humedad: «, la siguiente línea nos muestra el valor de nuestra variable valor y luego nos imprime el signo % y una nueva línea, finalmente hay una pausa de 100 milisegundos entre lectura y lectura.

Salida serial sensor de humedad en suelo
Salida por monitor serial del sensor

Resumen

En resumen al conectar nuestro Arduino a la computadora e iniciamos el monitor serial, comenzaremos registrar el porcentaje de humedad que tiene el suelo donde tenemos nuestro higrómetro enterrado.

NOTA:  El  análisis de los valores del sensor en el código no es una referencia real del porcentaje de humedad del suelo, por lo que hay que tener presente que  este código es para fines educativos, no para aplicaciones que  necesiten precisión.

4 comentarios en «Proyecto 27 – Sensor de Humedad de Suelo»

    • Hola Ivan.

      El procedimiento es mus simple, conectas los tres sensores a la los 5V y a la tierra (GND), luego conectas el pin A0 de uno de los sensores al A0 del arduino, el otro puerto A0 del otro sensor al pin A1 del arduino y el último sensor al A2 del arduino.

      El código podría ser el siguiente:


      #define sensor1 A0
      #define sensor2 A1
      #define sensor3 A2

      int valor1 = 0;
      int valor2 = 0;
      int valor3 = 0;

      void setup()
      {
      Serial.begin(9600);
      }
      void loop()
      {
      //hago las 3 lecturas
      int valor1 = map(analogRead(sensor1), 0, 1023, 100, 0);
      int valor2 = map(analogRead(sensor2), 0, 1023, 100, 0);
      int valor3 = map(analogRead(sensor3), 0, 1023, 100, 0);
      //imprimo los 3 valores
      Serial.print("Humedad sensor 1: ");
      Serial.print(valor1);
      Serial.println("%");
      Serial.print("Humedad sensor 2: ");
      Serial.print(valor2);
      Serial.println("%");
      Serial.print("Humedad sensor 3: ");
      Serial.print(valor3);
      Serial.println("%");
      delay(1000);
      }

      La parte de la salida por monitor seria puedes organizarla con tabulaciones para que salga todo en una línea y poner un delay más corto.

      Espero te haya servido de ayuda. No dudes en consultarme si tienes una duda.

      Responder
    • Hola Pablo, discúlpame por la demora, estaba de viaje.

      Cuéntame que tipo de pantalla LCD quieres usar 2004 o 1602 y el tipo de conexión, ya sea 4 bits, 8 bits o con módulo I2C?
      Quedo pendiente para ayudarte con tu proyecto.

      Responder

Deja un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.