
Si alguna vez has tenido que salir corriendo a recoger la ropa tendida por una lluvia repentina, sabes lo frustrante que es. En este proyecto, aplicaremos principios sencillos de automatización utilizando un Servomotor SG90 y un Sensor de Lluvia YL-83 para crear un Tendedero Automático a Escala.
Componentes Necesarios
Para construir este modelo funcional, necesitarás los siguientes elementos. Haz clic en los enlaces para conseguir tus componentes en nuestra tienda y empezar hoy mismo:
1x Arduino Uno o Nano: Nuestro microcontrolador.
1x Servomotor SG90: Nuestro actuador principal para el movimiento del tendedero.
1x Sensor de Lluvia YL-83: Detecta la humedad. Usaremos su salida digital (
DO).1x Protoboard: Para conexiones limpias y organizadas.
Cables Jumper: Para las conexiones entre componentes.
Materiales para la Maqueta: Cartón, palitos o plástico para simular la estructura móvil del tendedero.
¡Consejo Pro! Recuerda que el Servomotor SG90 es un componente clave, y puedes aprender más sobre su funcionamiento básico y pinout en nuestra
El Circuito: Conexión Paso a Paso
El montaje es sencillo. Conectaremos el sensor de lluvia para que actúe como un interruptor digital y el servomotor al pin PWM para controlar la posición.

Conexión del Sensor de Lluvia (Input)
El módulo del Sensor de Lluvia (YL-83 viene con un comparador que nos permite usar la salida digital (DO), lo cual simplifica la lógica de programación a un simple estado HIGH (seco) o LOW (mojado).
VCC (Módulo): 5V (Arduino)
GND (Módulo): GND (Arduino)
DO (Salida Digital): Pin Digital 2 (Arduino)
Conexión del Servomotor SG90 (Output)
El SG90 necesita una conexión de 5V y un pin PWM para la señal.
Cable Rojo (VCC): 5V (Arduino)
Cable Marrón (GND): GND (Arduino)
Cable Naranja/Amarillo (Señal): Pin Digital 9 (Arduino)
Código Arduino: Lógica de Programación
Nuestra lógica de programación se basará en una simple máquina de estados: el tendedero estará en estado ABIERTO (posición 0°) hasta que el sensor de lluvia cambie el estado a CERRADO (posición 180°).
1. Variables y Constantes
Declaramos las posiciones angulares como constantes. Como expertos, evitamos usar números mágicos directamente en el código para mejorar la legibilidad y el mantenimiento.
2. Funciones setup() y loop()
En el setup(), inicializamos el servo en la posición ABIERTO (asumiendo que el clima está bien por defecto). El loop() se encargará de la lógica de detección y movimiento.
3. Explicación de la Lógica Clave
El corazón de este código reside en la optimización dentro del loop().
Programación Limpia: La condición
if (miServo.read() != POS_CERRADO)es crucial. Esto evita que el servomotor reciba constantemente el comando de moverse a una posición donde ya se encuentra. Si el servo ya está cerrado, no hay necesidad de enviarle el comando de cierre repetidamente, lo que reduce el consumo de energía y la vibración innecesaria,
#include
// 1. Declaración de Objetos y Pines
Servo miServo; // Crear el objeto Servo
const int pinSensorLluvia = 2; // Pin digital conectado a la salida DO del YL-83
// 2. Definición de Estados del Servo (Posiciones en grados)
const int POS_ABIERTO = 0; // Tendedero fuera (Seco)
const int POS_CERRADO = 180; // Tendedero dentro (Lluvia)
// --- VARIABLES DE CONTROL ---
// Usamos una variable para rastrear el último estado conocido
// Esto mejora la robustez y evita enviar comandos repetidos.
int estadoActualTendedero = POS_ABIERTO;
void setup() {
// Inicialización del Servo en el Pin 9 (PWM)
miServo.attach(9);
// Inicialización del Sensor de Lluvia (YL-83 DO)
// IMPORTANTE: Lo configuramos como INPUT simple.
// La mayoría de estos módulos son 'Activos en Bajo' (LOW al mojar).
pinMode(pinSensorLluvia, INPUT);
// Inicializar el tendedero en posición abierta
miServo.write(POS_ABIERTO);
Serial.begin(9600);
Serial.println("Tendedero Automatico Inicializado. Posicion: ABIERTO.");
}
void loop() {
// Leer el estado digital del sensor de lluvia
int estadoLluvia = digitalRead(pinSensorLluvia);
// ----------------------------------------------------
// Lógica de Tendedero Cerrado (Prioridad: Detección de Lluvia)
// ----------------------------------------------------
// Condición de Lluvia: El sensor digital está en LOW (o 0)
if (estadoLluvia == LOW) {
if (estadoActualTendedero != POS_CERRADO) {
// Actuar: Cerrar el tendedero
miServo.write(POS_CERRADO);
estadoActualTendedero = POS_CERRADO; // Actualizar estado
Serial.println("¡Lluvia Detectada! -> Cerrando Tendedero.");
delay(1500); // Pausa para permitir el movimiento completo
}
}
// ----------------------------------------------------
// Lógica de Tendedero Abierto
// ----------------------------------------------------
// Condición de Seco: El sensor digital está en HIGH (o 1)
else {
if (estadoActualTendedero != POS_ABIERTO) {
// Actuar: Abrir el tendedero
miServo.write(POS_ABIERTO);
estadoActualTendedero = POS_ABIERTO; // Actualizar estado
Serial.println("Cielo Despejado -> Abriendo Tendedero.");
delay(1500);
}
}
}
Resultados y Próximos Pasos
Una vez cargado el código y conectado el circuito, puedes simular la lluvia dejando caer unas gotas de agua sobre el sensor. El servomotor debe moverse rápidamente a la posición de cierre (180°). Al secar el sensor, el servomotor regresará automáticamente a la posición inicial (0°).
