8 - Sensor Capacitivo de Humedad

Leer un Sensor Capacitivo de Humedad del Suelo con Arduino

Introducción:

Los sensores capacitivos de humedad del suelo son herramientas esenciales en la agricultura y jardinería, ya que permiten monitorear la humedad del suelo de manera eficiente. En este tutorial, aprenderás a conectar un sensor capacitivo de humedad del suelo a Arduino, leer sus valores y mostrarlos en el monitor serial, y luego mostrar los valores mapeados en una pantalla LCD I2C de 16x2.

Lista de Materiales:

  • Arduino Uno

  • Cable Arduino USB

  • Sensor capacitivo de humedad del suelo

  • Pantalla LCD I2C de 16x2

  • Protoboard

  • Cables de conexión

Conexión del Sensor de Humedad del Suelo: El sensor capacitivo de humedad del suelo generalmente tiene tres pines: VCC, GND y DATO.

  • Conecta VCC a 5V en el Arduino

  • Conecta GND a GND en el Arduino

  • Conecta DATO al pin analógico A3 en el Arduino

Código:

Paso 1:

Lectura de la Humedad en el Monitor Serial

const int moistureSensorPin = A3;   // Pin del sensor de humedad

void setup() {
  pinMode(moistureSensorPin, INPUT);  // Configurar el pin del sensor como entrada
  Serial.begin(9600);                 // Inicializar la comunicación serial
}

void loop() {
  int moistureValue = analogRead(moistureSensorPin);  // Leer el valor del sensor

  Serial.print("Humedad del Suelo: ");
  Serial.println(moistureValue);

  delay(1000);  // Retardo de un segundo
}

Este código leerá la humedad del suelo y mostrará el valor en el monitor serial cada segundo.

Paso 2:

Mostrar Valores Mapeados en una Pantalla LCD I2C

Primero, instala la biblioteca LiquidCrystal_I2C en el IDE de Arduino.

Para agregar valores mínimos y máximos que definan el rango sobre el cual se mapearán las lecturas del sensor de humedad del suelo, puedes declarar dos variables al inicio del código. Estas variables representarán los límites inferior y superior del rango de lectura que esperas del sensor. Luego, puedes usar estas variables en la función map() para mapear las lecturas a un rango de 0 a 100.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int moistureSensorPin = A3;   // Pin del sensor de humedad

// Valores mínimos y máximos esperados del sensor de humedad
const int minValue = 300;  // Ajusta estos valores según las lecturas de tu sensor en seco y en húmedo
const int maxValue = 800;

// Configuración de la pantalla LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Asegúrate de usar la dirección correcta de tu LCD

void setup() {
  pinMode(moistureSensorPin, INPUT);  // Configurar el pin del sensor como entrada
  Serial.begin(9600);                 // Inicializar la comunicación serial
  lcd.init();                         // Iniciar la pantalla LCD
  lcd.backlight();                    // Encender la retroiluminación de la LCD
}

void loop() {
  int moistureValue = analogRead(moistureSensorPin);  // Leer el valor del sensor
  int mappedValue = map(moistureValue, minValue, maxValue, 0, 100); // Mapear el valor a un rango de 0 a 100

  // Asegurar que el valor mapeado se mantenga dentro del rango
  mappedValue = constrain(mappedValue, 0, 100);

  Serial.print("Humedad del Suelo: ");
  Serial.println(mappedValue);

  // Muestra el valor mapeado de la humedad en la pantalla LCD
  lcd.clear();                  // Limpia la pantalla
  lcd.setCursor(0, 0);          // Establece el cursor en la primera línea
  lcd.print("Humedad: ");
  lcd.print(mappedValue);
  lcd.print("%");

  delay(1000);  // Retardo de un segundo
}

Este código muestra la humedad del suelo mapeada a un rango de 0 a 100% en una pantalla LCD I2C. Asegúrate de ajustar la dirección I2C de la pantalla LCD si es necesario.

Para agregar un umbral (threshold) que indique si la planta está muy seca o feliz, y mostrar esta información en la pantalla LCD, puedes seguir estos pasos:

Paso 3:

Definir un Umbral y Mostrar el Estado de la Planta en la Pantalla LCD

Primero, define un valor de umbral que determine si la planta está muy seca o no. Luego, usa este valor para decidir qué mensaje mostrar en la pantalla LCD.

Aquí está el código con el paso adicional:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int moistureSensorPin = A3;   // Pin del sensor de humedad

// Valores mínimos y máximos esperados del sensor de humedad
const int minValue = 300;  
const int maxValue = 800;

const int moistureThreshold = 40;  // Umbral de humedad del suelo (en porcentaje)

// Configuración de la pantalla LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Asegúrate de usar la dirección correcta de tu LCD

void setup() {
  pinMode(moistureSensorPin, INPUT);  // Configurar el pin del sensor como entrada
  Serial.begin(9600);                 // Inicializar la comunicación serial
  lcd.init();                         // Iniciar la pantalla LCD
  lcd.backlight();                    // Encender la retroiluminación de la LCD
}

void loop() {
  int moistureValue = analogRead(moistureSensorPin);  // Leer el valor del sensor
  int mappedValue = map(moistureValue, minValue, maxValue, 0, 100); // Mapear el valor a un rango de 0 a 100
  mappedValue = constrain(mappedValue, 0, 100);

  Serial.print("Humedad del Suelo: ");
  Serial.println(mappedValue);

  // Muestra el estado de la planta y la humedad en la pantalla LCD
  lcd.clear();                  // Limpia la pantalla
  lcd.setCursor(0, 0);          // Establece el cursor en la primera línea

  // Determinar si la planta está muy seca o feliz
  if (mappedValue < moistureThreshold) {
    lcd.print("Planta muy seca");
  } else {
    lcd.print("Planta feliz");
  }

  lcd.setCursor(0, 1);          // Mover el cursor a la segunda línea
  lcd.print("Humedad: ");
  lcd.print(mappedValue);
  lcd.print("%");

  delay(1000);  // Retardo de un segundo
}

En este código, se define un umbral de humedad (moistureThreshold) como el 40% de humedad. Si la humedad mapeada está por debajo de este umbral, se mostrará "Planta muy seca" en la pantalla LCD; de lo contrario, se mostrará "Planta feliz". La segunda línea de la pantalla LCD muestra el porcentaje de humedad mapeado.

Este tercer paso permite una interacción más intuitiva con el usuario, proporcionando una lectura rápida del estado de la planta además de la medición numérica de la humedad.

Por supuesto, puedo agregar esa funcionalidad al tutorial. Vamos a incluir una sección adicional donde se controlan dos LEDs conectados a los pines D12 y D13 del Arduino. Uno de estos LEDs se encenderá si la planta está muy seca, y el otro se encenderá si la planta está feliz.

Paso 4:

Control de LEDs para Indicar el Estado de la Planta

Incluiremos en el código la inicialización de los pines de los LEDs y la lógica para controlar su estado en función de la humedad del suelo.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int moistureSensorPin = A3;   // Pin del sensor de humedad
const int dryLedPin = 12;           // LED que indica que la planta está seca
const int happyLedPin = 13;         // LED que indica que la planta está feliz

// Valores mínimos y máximos esperados del sensor de humedad
const int minValue = 300;  
const int maxValue = 800;
const int moistureThreshold = 40;  // Umbral de humedad del suelo

// Configuración de la pantalla LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); 

void setup() {
  pinMode(moistureSensorPin, INPUT);  
  pinMode(dryLedPin, OUTPUT);        // Configurar el pin del LED seco como salida
  pinMode(happyLedPin, OUTPUT);      // Configurar el pin del LED feliz como salida
  Serial.begin(9600);                
  lcd.init();                        
  lcd.backlight();                   
}

void loop() {
  int moistureValue = analogRead(moistureSensorPin);  
  int mappedValue = map(moistureValue, minValue, maxValue, 0, 100);
  mappedValue = constrain(mappedValue, 0, 100);

  Serial.print("Humedad del Suelo: ");
  Serial.println(mappedValue);

  lcd.clear();                  
  lcd.setCursor(0, 0);          

  if (mappedValue < moistureThreshold) {
    lcd.print("Planta muy seca");
    digitalWrite(dryLedPin, HIGH);   // Encender el LED seco
    digitalWrite(happyLedPin, LOW);  // Apagar el LED feliz
  } else {
    lcd.print("Planta feliz");
    digitalWrite(dryLedPin, LOW);    // Apagar el LED seco
    digitalWrite(happyLedPin, HIGH); // Encender el LED feliz
  }

  lcd.setCursor(0, 1);          
  lcd.print("Humedad: ");
  lcd.print(mappedValue);
  lcd.print("%");

  delay(1000);  
}

Con esta adición, el sistema no solo proporcionará una retroalimentación visual en la pantalla LCD, sino que también indicará el estado de la planta a través de los LEDs. Este tipo de retroalimentación es útil para una rápida verificación visual del estado de la planta.

Conclusión:

Con este tutorial, has aprendido a leer la humedad del suelo con un sensor capacitivo y mostrar esos datos tanto en el monitor serial como en una pantalla LCD I2C, y controlar actuadores. Este conocimiento te permitirá integrar la monitorización de la humedad del suelo en tus proyectos de jardinería o agricultura automatizada.

Última actualización