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
constint moistureSensorPin = A3; // Pin del sensor de humedadvoidsetup() {pinMode(moistureSensorPin, INPUT); // Configurar el pin del sensor como entradaSerial.begin(9600); // Inicializar la comunicación serial}voidloop() {int moistureValue =analogRead(moistureSensorPin); // Leer el valor del sensorSerial.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>constint moistureSensorPin = A3; // Pin del sensor de humedad// Valores mínimos y máximos esperados del sensor de humedadconstint minValue =300; // Ajusta estos valores según las lecturas de tu sensor en seco y en húmedoconstint maxValue =800;// Configuración de la pantalla LCD I2CLiquidCrystal_I2Clcd(0x27,16,2); // Asegúrate de usar la dirección correcta de tu LCDvoidsetup() {pinMode(moistureSensorPin, INPUT); // Configurar el pin del sensor como entradaSerial.begin(9600); // Inicializar la comunicación seriallcd.init(); // Iniciar la pantalla LCDlcd.backlight(); // Encender la retroiluminación de la LCD}voidloop() {int moistureValue =analogRead(moistureSensorPin); // Leer el valor del sensorint 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 LCDlcd.clear(); // Limpia la pantallalcd.setCursor(0,0); // Establece el cursor en la primera línealcd.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>constint moistureSensorPin = A3; // Pin del sensor de humedad// Valores mínimos y máximos esperados del sensor de humedadconstint minValue =300; constint maxValue =800;constint moistureThreshold =40; // Umbral de humedad del suelo (en porcentaje)// Configuración de la pantalla LCD I2CLiquidCrystal_I2Clcd(0x27,16,2); // Asegúrate de usar la dirección correcta de tu LCDvoidsetup() {pinMode(moistureSensorPin, INPUT); // Configurar el pin del sensor como entradaSerial.begin(9600); // Inicializar la comunicación seriallcd.init(); // Iniciar la pantalla LCDlcd.backlight(); // Encender la retroiluminación de la LCD}voidloop() {int moistureValue =analogRead(moistureSensorPin); // Leer el valor del sensorint 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 LCDlcd.clear(); // Limpia la pantallalcd.setCursor(0,0); // Establece el cursor en la primera línea // Determinar si la planta está muy seca o felizif (mappedValue < moistureThreshold) {lcd.print("Planta muy seca"); } else {lcd.print("Planta feliz"); }lcd.setCursor(0,1); // Mover el cursor a la segunda línealcd.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>constint moistureSensorPin = A3; // Pin del sensor de humedadconstint dryLedPin =12; // LED que indica que la planta está secaconstint happyLedPin =13; // LED que indica que la planta está feliz// Valores mínimos y máximos esperados del sensor de humedadconstint minValue =300; constint maxValue =800;constint moistureThreshold =40; // Umbral de humedad del suelo// Configuración de la pantalla LCD I2CLiquidCrystal_I2Clcd(0x27,16,2); voidsetup() {pinMode(moistureSensorPin, INPUT); pinMode(dryLedPin, OUTPUT); // Configurar el pin del LED seco como salidapinMode(happyLedPin, OUTPUT); // Configurar el pin del LED feliz como salidaSerial.begin(9600); lcd.init(); lcd.backlight(); }voidloop() {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 secodigitalWrite(happyLedPin, LOW); // Apagar el LED feliz } else {lcd.print("Planta feliz");digitalWrite(dryLedPin, LOW); // Apagar el LED secodigitalWrite(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.