Capacitación Arduino · Sensor de humedad

Higrómetro
¿Hay que regar
la planta?

Sonda YL-69 + módulo FC-28 (comparador LM393): el LED verde dice «suelo húmedo» y el rojo «¡regar!». Simulado en Tinkercad y en OpenCircuits.

Entrada analógica Umbral Bloques + C++

El componente

Sonda YL-69 + módulo FC-28

2 cables: la sonda va a P+ y P− +− +−LM393103103102PWRDOFC-28AODOGNDVCC Trimmer azul Comparador LM393 LED DO Sonda YL-69 fija desde cuándo está «seco» compara la humedad con el umbral encendido = suelo húmedo se entierra junto a la planta DO → D2 VCC → 5V GND → GND AO → sin usar
La sonda es una resistencia que baja con el agua: tierra seca = mucha resistencia, tierra mojada = poca. El módulo convierte eso en voltaje.
AO entrega la humedad como número (en el módulo real: seco ≈ 1023, mojado ≈ 300). DO entrega solo SÍ/NO: HIGH = suelo más seco que el umbral.

Cómo funciona

Del agua en la tierra a una señal digital

Humedad de la tierra umbral (trimmer) 💧 riego se va secando… Salida DO → pin D2 HIGH = seco LOW
  1. Con más agua, la sonda conduce mejor y el voltaje de AO cambia.
  2. El LM393 compara ese voltaje con el umbral del trimmer azul.
  3. Si la tierra está más seca que el umbral, DO pasa a HIGH. Arduino lo lee en D2.
  4. El programa enciende el LED rojo (regar) o el verde (suelo húmedo).

Truco de simulación

Tinkercad trae el sensor… pero no el módulo FC-28

En el kit real

+− +−LM393103103102PWRDOFC-28AODOGNDVCC Arduino 5VGNDD2

El módulo compara la humedad con el umbral del trimmer y entrega el resultado por DO.

En Tinkercad: módulo virtual

Parte del kitLa reemplazamos conArduino
Sonda + AOSensor de humedad del suelo (sí existe en Tinkercad)
seco = 0 · más agua = valor más alto
A0
Trimmer azulPotenciómetro
umbral de 0 a 1023
A1
Comparador LM393El código:
if (humedad < umbral)
—
LED DOLED verde (húmedo) y LED rojo (regar), con 220 ΩD12 · D13
Ojo: en Tinkercad más agua = número más alto. En el módulo real, AO es al revés (seco ≈ 1023). Por eso en el kit real usamos DO.

Paso 1 · Componentes

Búscalos en el panel de componentes de Tinkercad

Arduino Uno R3 ×1

Buscar: Arduino

Placa de pruebas pequeña ×1

Buscar: Placa de pruebas

Sensor de humedad del suelo ×1

Buscar: humedad. Hace de sonda + AO.

Potenciómetro ×1

Hace de trimmer azul: fija el umbral.

Resistencias 220 Ω ×2

Una para cada LED.

LED verde ×1

Suelo húmedo: todo bien.

LED rojo ×1

Suelo seco: ¡hay que regar!

Para cambiar el valor de una resistencia o el color del LED, haz clic en el componente y edítalo en el cuadro de propiedades.

Paso 2 · Circuito

Así se ve en Tinkercad

A0 0 A1 0 Estado SECO

Paso 2 · Conexiones

Conexión por conexión

Alimentación
Arduino 5VRiel + inferior
Arduino GNDRiel − inferior
Sensor de humedad (fuera de la protoboard)
Sensor VCCRiel + inferior
Sensor GNDRiel − inferior
Sensor SIGArduino A0
Trimmer (potenciómetro)
—Potenciómetro (fila e)Columnas 14, 15, 16
Columna 14Riel −
Columna 16Riel +
Columna 15 (cursor)Arduino A1
LED verde · suelo húmedo
—LED cátodo / ánodo (fila e)Columna 18 / 19
—220 ΩColumna 19 → 23 (fila c)
Arduino D12Columna 23
Columna 18Riel −
LED rojo · ¡regar!
—LED cátodo / ánodo (fila e)Columna 25 / 26
—220 ΩColumna 26 → 30 (fila c)
Arduino D13Columna 30
Columna 25Riel −
Todo va en los rieles de abajo (+ y −); los de arriba no se usan. La pata doblada del LED es el ánodo (+).

Paso 3 · Código en bloques

Arrastra estos bloques · todo dentro de «siempre»

Antes de empezar

Variables → Crear variable: humedad y umbral.

No pongas nada en «al iniciar»: lo que va ahí se ejecuta una sola vez. Las lecturas de A0 y A1 van dentro de «siempre».
Controlsiempre, si / si no
Entradaleer pin analógico A0 / A1
Matemáticascomparar ( < )
Variablesdefinir variable en, variable
Salidadefinir pin 12 / 13 en ALTA o BAJA

Paso 3 · Código C++

El mismo programa en texto

// C++ code
//
int humedad = 0;

int umbral = 0;

void setup()
{
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
}
En Tinkercad: Código → Bloques → Texto. Acepta el aviso, borra lo que haya y pega.
void loop()
{
  humedad = analogRead(A0);
  umbral = analogRead(A1);
  if (humedad < umbral) {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
  } else {
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
  }
  delay(10); // Delay a little bit to improve simulation performance
}

Paso 4 · Simular

¡A probar!

  1. Pulsa Iniciar simulación y deja el potenciómetro cerca de la mitad.
  2. Haz clic en el sensor de humedad: aparece su control. Bájalo (tierra seca): se enciende el LED rojo.
  3. Súbelo (riego): se apaga el rojo y se enciende el verde.
  4. Gira el potenciómetro: cambias desde qué humedad el sistema pide riego.

Si algo no funciona

Ningún LED enciendeRevisa la orientación (pata doblada = ánodo, hacia la resistencia).
Siempre rojoBaja el umbral (potenciómetro) o sube la humedad del sensor.
Siempre verdeEl umbral está en 0: súbelo.
No cambia nuncaLas lecturas deben estar dentro de «siempre», no en «al iniciar».

Paso 5 · Kit real

Del simulador a la maceta

Cambia el sensor y el potenciómetro por el higrómetro

DesdeHacia
Sonda + y −Módulo P+ y P−
Módulo DOArduino D2
Módulo VCC5V
Módulo GNDGND
Módulo AOsin conectar

Quita el sensor de Tinkercad y el potenciómetro: el módulo FC-28 ya trae su trimmer y su comparador. Los LEDs y sus 220 Ω se quedan.

Un solo cambio en el código

Borra las dos lecturas analogRead y cambia el if (humedad < umbral) por:

if (digitalRead(2) == HIGH) {   // DO en HIGH = suelo seco

Calibración

  1. Entierra la sonda en tierra apenas húmeda (el punto en que quieres regar).
  2. Gira el trimmer azul hasta que el LED DO del módulo justo cambie.
  3. Riega: el LED verde del Arduino se enciende.

No dejes la sonda siempre conectada a 5V: con el tiempo se oxida. En proyectos reales se alimenta solo al medir.

Alternativa · OpenCircuits

En OpenCircuits está el higrómetro del kit

+−LM393103103102PWRDOFC-28AODOGNDVCC +−
Humedad de la tierra 70 %
DO: LOW Iniciar.bat → SensoresSensor de humedad del suelo · Riego

El bloque nuevo

El bloque verde de la categoría Higrómetro lee la salida DO del módulo FC-28: es verdadero cuando la tierra está más seca que el umbral del tornillo azul. Reemplaza al if (humedad < umbral) de Tinkercad.

HigrómetroHigrómetro DO pin 2: ¿suelo seco?
Controlsiempre, si / si no
Salidadefinir pin 12 / 13 en ALTA o BAJA

No hacen falta variables: el módulo ya decide.

// C++ code
//
void setup()
{
  pinMode(2, INPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
}
void loop()
{
  if (digitalRead(2) == HIGH) {
    digitalWrite(13, HIGH);
    digitalWrite(12, LOW);
  } else {
    digitalWrite(13, LOW);
    digitalWrite(12, HIGH);
  }
  delay(10); // Delay a little bit to improve simulation performance
}
Este texto lo escribe OpenCircuits a partir de los bloques. Es el mismo programa del kit real: lee DO con digitalRead(2).

Para seguir

Retos

1 · Humedad en pantalla

Muestra la humedad en el Monitor serie cada segundo. Pista: Serial.println(humedad).

2 · Tres niveles

Agrega un LED amarillo: seco (rojo), justo (amarillo) y húmedo (verde), con dos umbrales.

3 · Alarma de riego

Si la tierra sigue seca por más de 10 segundos, suena el buzzer en D8.

4 · Porcentaje real

Con el módulo real, lee AO y conviértelo a % con map(valor, 1023, 300, 0, 100).

← → para avanzar · + − acercar el circuito · F pantalla completa