Objetivo y caso de uso
Qué construirás: Un riego automático con Arduino que enciende una mini bomba de 5 V cuando baja la luz (atardecer o nublado) usando una LDR y un umbral calibrable con histéresis. La decisión se toma en menos de 300 ms.
Para qué sirve
- Regar macetas de balcón al atardecer para reducir evaporación (ON cuando VA < 2.2 V o A0 < 450; OFF > 550).
- Activar riego en días muy nublados para evitar estrés hídrico (D3 alto controla la bomba vía NPN).
- Automatizar el riego de semilleros al final del día de manera consistente (bomba 100–400 mA).
- Mantener húmedas jardineras cuando la vivienda está desocupada (histéresis evita conmutaciones por luz variable).
Resultado esperado
- Señal analógica en VA (nodo divisor): 0.1–4.8 V; riego ON cuando VA < 2.2 V (umbral calibrable).
- Lectura ADC A0: 0–1023; riego ON típicamente por debajo de 450; OFF por encima de 550 (histéresis).
- Pin D3 (control): nivel alto al activar bomba; nivel bajo en reposo.
- Corriente de bomba (I_PUMP): 100–400 mA; caída de VC a ~0.2–0.3 V cuando Q1 satura.
- Latencia de decisión: < 300 ms (con lectura y filtrado simple).
Público objetivo: Personas que inician en electrónica/Arduino; Nivel: básico
Arquitectura/flujo: LDR -> Divisor -> ADC A0 -> MCU -> Transistor NPN -> Bomba 5V
Materiales
- 1 × Arduino UNO (o compatible 5 V)
- 1 × Fotoresistencia (LDR) tipo GL5528 (o similar)
- 1 × Resistor [R1] 10 k
- 1 × Transistor NPN [Q1] 2N2222 (o 2N3904)
- 1 × Resistor [R2] 1 k (base de Q1)
- 1 × Resistor [R3] 100 k (pull-down de base)
- 1 × Diodo [D1] 1N4007 (rueda libre)
- 1 × Mini bomba de agua DC 5 V [M1] (200–400 mA)
- 1 × Fuente 5 V DC (≥ 1 A) para bomba y Arduino (masa común)
- 6–8 × Cables Dupont y protoboard
Guía de conexionado
- Alimentación y referencia:
- Conecta +5V de la fuente al pin 5V del Arduino y al positivo de la bomba [M1]; comparte GND entre fuente y Arduino.
- Divisor de luz (sensor):
- Conecta [LDR1] LDR entre +5V y o VA node.
- Conecta [R1] 10 k entre o VA node y GND.
- Conecta o VA node al pin A0 del Arduino.
- Etapa de potencia (bomba):
- Conecta [M1] Bomba 5V entre +5V y o VC node.
- Conecta el colector de [Q1] NPN 2N2222 a o VC node y el emisor a GND.
- Conecta [D1] 1N4007 entre +5V (cátodo) y o VC node (ánodo) en antiparalelo con la bomba.
- Control de base (Arduino D3):
- Conecta o VD node al pin D3 del Arduino.
- Conecta [R2] 1 k entre o VD node y o VB node.
- Conecta [R3] 100 k entre o VB node y GND.
- Conecta la base de [Q1] NPN 2N2222 a o VB node.
Esquemático
+5V
|
+-------------+-------------+
| |
[LDR1] LDR [M1] Bomba 5V
| |
VA node-> o o <- VC node
| |
[R1] 10k |
| |
GND |
| C
o----- [Q1] NPN 2N2222
| E
| |
GND GND
+5V
|
[D1] 1N4007
|
o VC node (antiparalelo a la bomba)
Desde el nodo VA (lectura ADC):
VA node o
|
o A0 pin
Desde el nodo VD (control desde Arduino):
D3 pin o----o VD node----[R2] 1k----o VB node
|
[R3] 100k
|
GND
Base de Q1:
VB node o----(a base de [Q1])
---
Código de ejemplo (Arduino)
const int PIN_LDR = A0;
const int PIN_PUMP = 3; // D3
// Umbrales con histéresis (ajusta según tu luz ambiente)
const int UMBRAL_ON = 450; // A0 < 450 => poca luz => regar
const int UMBRAL_OFF = 550; // A0 > 550 => suficiente luz => parar
const unsigned long MIN_INTERVAL_MS = 60000; // 1 min entre riegos (demo)
const unsigned long DURACION_RIEGO_MS = 10000; // 10 s de bomba
unsigned long tUltimoRiego = 0;
bool regando = false;
unsigned long tInicioRiego = 0;
int leerLuzSuavizada() {
long acc = 0;
const int N = 16;
for (int i=0; i<N; i++) {
acc += analogRead(PIN_LDR);
delay(5);
}
return acc / N;
}
void setup() {
pinMode(PIN_PUMP, OUTPUT);
digitalWrite(PIN_PUMP, LOW);
Serial.begin(115200);
}
void loop() {
int luz = leerLuzSuavizada();
unsigned long now = millis();
if (regando) {
if (now - tInicioRiego >= DURACION_RIEGO_MS) {
regando = false;
digitalWrite(PIN_PUMP, LOW);
Serial.println("BOMBA=OFF fin de ciclo");
}
} else {
if (luz < UMBRAL_ON && (now - tUltimoRiego) >= MIN_INTERVAL_MS) {
regando = true;
tInicioRiego = now;
tUltimoRiego = now;
digitalWrite(PIN_PUMP, HIGH);
Serial.println("BOMBA=ON por poca luz");
}
}
// Seguridad: si hay mucha luz, asegura bomba OFF
if (luz > UMBRAL_OFF && !regando) {
digitalWrite(PIN_PUMP, LOW);
}
Serial.print("A0=");
Serial.print(luz);
Serial.print(" VA_V=");
Serial.println((luz * 5.0) / 1023.0, 2);
}
Mediciones y pruebas
-
Verificación del divisor de luz:
- Con un multímetro, mide V_VA (tensión en el nodo VA respecto a GND). V_VA significa “voltaje en VA” y se mide poniendo la punta roja en VA y la negra en GND.
- Ilumina la LDR con una linterna: V_VA debe subir a ~3.5–4.8 V; cúbrela con la mano: V_VA debe bajar a < 1.0 V.
- En el monitor serie, verifica que A0 sube (> 800) con luz y baja (< 200) en oscuridad.
-
Ajuste de umbrales:
- Coloca la LDR en la iluminación típica de “atardecer” deseada y anota V_VA y A0.
- Fija UMBRAL_ON a ese valor de A0 menos ~50 y UMBRAL_OFF a ese valor más ~50 para crear histéresis.
- Criterio: la bomba no debe oscilar con nubes pasajeras.
-
Prueba de etapa de potencia (sin agua primero):
- Ordena “riego” tapando la LDR; mide V_VC (tensión en VC respecto a GND). V_VC debe caer a ~0.2–0.3 V con la bomba encendida.
- Mide I_PUMP (corriente de la bomba). I_PUMP significa “corriente de la bomba” y se mide colocando el multímetro en serie entre +5V y M1, en rango de corriente DC. Debe estar dentro de la especificación de tu fuente.
-
Prueba integral con agua (breve):
- Coloca la manguera de la bomba en un recipiente. Activa el riego cubriendo la LDR; observa un caudal estable durante DURACION_RIEGO_MS.
- Criterio de éxito: latencia < 300 ms desde que baja la luz hasta encendido; sin reinicios de Arduino; temperatura de transistor “tocable” (< 60 °C).
Calibración rápida
- Si riega demasiado pronto (todavía hay luz): baja UMBRAL_ON en pasos de 25.
- Si no riega al anochecer: sube UMBRAL_ON en pasos de 25.
- Si hay oscilaciones por nubes: aumenta la diferencia entre UMBRAL_ON y UMBRAL_OFF (histéresis) a ≥ 150.
Errores comunes
- Olvidar el diodo [D1] en la bomba: provoca picos inductivos y reinicios del Arduino.
- No compartir GND entre la fuente de la bomba y el Arduino: la etapa de control no conmuta.
- Conectar la LDR y R1 al revés si esperas la relación contraria (recuerda: con LDR arriba y R1 abajo, VA sube con luz).
- Alimentar la bomba desde el USB del PC: el puerto no entrega suficiente corriente.
Seguridad y alimentación
- Usa una fuente de 5 V con corriente nominal superior al máximo de la bomba (margen del 50% recomendado).
- Mantén las conexiones y la bomba alejadas del agua; eleva la electrónica y utiliza mangueras bien fijadas.
- Para bombas > 500 mA o válvulas más grandes, considera un MOSFET lógico con disipador y fusible.
Mejoras y extensiones
- Añadir un sensor de humedad de suelo y regar solo si hay poca luz y el suelo está seco.
- Registrar A0 y eventos en tarjeta SD o enviar por MQTT (telemetría).
- Programar ventanas horarias (por ejemplo, permitir riego solo 20:00–07:00).
- Sustituir transistor por MOSFET lógico (IRLZ44N o similar) para mayor eficiencia en cargas más grandes.
Más Casos Prácticos en Prometeo.blog
Encuentra este producto y/o libros sobre este tema en Amazon
Como afiliado de Amazon, gano con las compras que cumplan los requisitos. Si compras a través de este enlace, ayudas a mantener este proyecto.



