Proyecto paso a paso: sensor de humedad de suelo + relé + bomba/valvula. Código listo para Arduino UNO.
Automatizar el riego en macetas o un pequeño huerto usando un sensor de humedad de suelo. Cuando la humedad sea baja, el sistema activa una bomba mediante un relé por un tiempo configurable.
Precaución: Si trabajas con electroválvulas o fuentes de CA, toma medidas de seguridad y aislamiento. Este tutorial asume DC baja tensión.
Antes de usar valores crudos, mide A0 con el sensor en suelo seco y en suelo bien húmedo. Anota los valores (por ejemplo: seco ~700–900, húmedo ~200–400). Usa esos valores para ajustar el umbral en el código.
// RiegoAutomatico.ino
// Lectura de sensor de humedad y control de relé (no bloqueante)
const int sensorPin = A0; // sensor de humedad analógico
const int relePin = 7; // pin de control del rele (LOW/ HIGH según módulo)
// Ajusta según calibración
const int valorSeco = 800; // ejemplo: lectura en suelo seco
const int valorHumedo = 300; // ejemplo: lectura en suelo muy húmedo
int umbral = 550; // punto medio; si lectura > umbral -> seco
const unsigned long tiempoRiego = 10UL * 1000UL; // 10 segundos de riego por ciclo
const unsigned long intervaloEntreLecturas = 15UL * 1000UL; // revisar cada 15 segundos
unsigned long ultimoMillisLectura = 0;
unsigned long riegoInicio = 0;
bool regando = false;
void setup() {
Serial.begin(9600);
pinMode(relePin, OUTPUT);
digitalWrite(relePin, HIGH); // asume relé activo LOW; ajusta según tu módulo
}
void loop() {
unsigned long now = millis();
// Si estamos regando, ver si ya se cumplió el tiempo
if (regando) {
if (now - riegoInicio >= tiempoRiego) {
pararRiego();
}
// mientras regando, podemos seguir monitoreando o simplemente retornar
}
// Lecturas periódicas
if (now - ultimoMillisLectura >= intervaloEntreLecturas) {
ultimoMillisLectura = now;
int lectura = analogRead(sensorPin);
Serial.print("Lectura humedad: "); Serial.println(lectura);
// Si lectura indica suelo seco y no estamos regando -> iniciar riego
if (lectura > umbral && !regando) {
iniciarRiego();
}
}
}
void iniciarRiego() {
Serial.println("Iniciando riego...");
regando = true;
riegoInicio = millis();
digitalWrite(relePin, LOW); // activa relé (cambia si tu módulo es activo HIGH)
}
void pararRiego() {
Serial.println("Parando riego...");
regando = false;
digitalWrite(relePin, HIGH); // desactiva relé
}
Notas: algunos módulos relé son "active LOW" (se activan escribiendo LOW). Si tu relé tiene LED que se enciende con LOW, ajusta el código en consecuencia.
Contenido: libre para usar y modificar (atribuir al autor si lo compartes). Creado con fines educativos.
Recursos recomendados:
Recursos recomendados: