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.