Envío en 1 a 2 días hábiles en productos disponibles

Troxino
Categorías

El proyecto de fin de semana · 11 de noviembre 2026

El detector de lluvia

Caen gotas en el sensor y el Arduino reacciona: suena una melodía de "¡mete la ropa!", un LED RGB se pone azul y un servo cierra un techo de cartón sobre un tendedero de juguete. Si llueve fuerte, el LED parpadea en morado y suena otra alarma. Cuando lleva 10 segundos seco, el LED vuelve a verde y el techo se abre solo.

  • Nivel principiante
  • 2 a 3 horas
  • 12 materiales

Sin soldar (Nano con pines soldados en protoboard y cables DuPont).

El detector de lluvia

Para qué sirve en la escuela

  • Feria de ciencias: un prototipo de "tendedero inteligente" o techo automático que resuelve un problema de la casa. Puedes medir con el Monitor Serie cuánto sube la lectura con llovizna, lluvia y aguacero (rocía 1, 5 y 20 veces).
  • Prepa y secundaria: práctica de entradas analógicas (analogRead), un servomotor con la librería Servo, un LED RGB y estados (seco, lluvia, aguacero).
  • Ingeniería: sensores resistivos, histéresis por tiempo (no abrir con cada gota que se escurre), alimentar un sensor solo al medir y desacoplar la alimentación del servo con un capacitor.

Cómo funciona

Qué vamos a hacer

Un tendedero que se cuida solo. El Arduino revisa el sensor dos veces por segundo y tiene tres estados: seco (LED verde, techo abierto), lluvia (melodía, LED azul y techo cerrado) y aguacero (pitidos rápidos y LED morado parpadeando). Cuando deja de llover, espera 10 segundos sin gotas antes de abrir el techo.

Cómo funciona

  • El sensor: la placa tiene pistas de cobre en forma de peine, intercaladas y sin tocarse. Una gota cae entre dos pistas y las une. Su circuito convierte eso en un voltaje en el pin S que sube con el agua: seco marca cerca de 0 y, con más agua, el número sube (los umbrales de 150 y 450 son un punto de partida para calibrar).
  • El Arduino: analogRead(A0) lee ese voltaje como un número de 0 a 1023 y lo compara con UMBRAL_LLUVIA y UMBRAL_AGUACERO para saber en qué estado está.
  • El servo: gira a un ángulo exacto (0° techo abierto, 90° cerrado). El código lo mueve de grado en grado con una pausa corta para que el techo baje despacio y no de golpe.
  • El LED RGB: son tres LEDs (rojo, verde y azul) en una sola cápsula que comparten la pata negativa. Prendiendo uno o varios a la vez mezclas colores: rojo y azul juntos se ven morado.

Por qué funciona

El agua de lluvia trae polvo y sales disueltas, así que conduce la electricidad. Mientras más pistas cubre el agua, más camino tiene la corriente y más sube la lectura. Por eso el mismo sensor distingue llovizna de aguacero.

El servo sabe a dónde ir por la señal PWM: cada 20 milisegundos el Arduino le manda un pulso, y lo que dura ese pulso (entre 1 y 2 milisegundos, más o menos) le dice el ángulo. El servo tiene adentro un motor, engranes y un sensor de posición que lo corrige hasta llegar a ese ángulo. La librería Servo hace los pulsos por ti.

Al arrancar, el motor del servo pide de golpe mucha más corriente que el resto del circuito. Ese jalón puede bajar los 5 V por un instante y reiniciar el Nano. El capacitor de 470 µF guarda un poco de energía junto al servo y la suelta justo en ese momento, como un tanque de reserva.

Los 10 segundos de espera son un retardo que hace el trabajo de la histéresis: si el techo se abriera en cuanto la lectura baja, una gota que se escurre lo haría abrir y cerrar sin parar. Esperar a que siga seco un rato hace que el sistema decida una vez y no tiemble.

Igual que en la planta del 4 de noviembre, el sensor se prende desde D7 solo al medir, para que la corriente no corroa las pistas.

Conexiones

El Nano va a lo largo del protoboard, montado sobre el canal central. Usa el riel rojo (+) como 5 V y el riel azul (−) como tierra común. Las resistencias brincan el canal; el LED RGB y el buzzer quedan del otro lado, con su pata − en el riel −.

Diagrama del protoboard

Pieza Pin de la pieza A dónde va
Nano GND Riel −
Nano 5V Riel +
Sensor de lluvia S Nano A0
Sensor de lluvia + Nano D7 (lo prendemos solo al medir)
Sensor de lluvia − Riel −
Servo MG90 Cable naranja (señal) Nano D9
Servo MG90 Cable rojo (+) Riel +
Servo MG90 Cable café (−) Riel −
Capacitor 470 µF Pata larga (+) Riel +
Capacitor 470 µF Pata del lado de la franja (−) Riel −
LED RGB R (la pata de la orilla, junto a la larga) Resistencia de 220 Ω → Nano D3
LED RGB Cátodo (la pata más larga) Riel −
LED RGB G Resistencia de 220 Ω → Nano D5
LED RGB B Resistencia de 220 Ω → Nano D6
Buzzer pasivo + (pata marcada o más larga) Resistencia de 100 Ω → Nano D10
Buzzer pasivo − Riel −

Corrientes: el rojo del LED RGB queda en unos 13 mA y el verde y el azul en unos 9 mA; el buzzer, con su resistencia de 100 Ω, por debajo de 20 mA. El servo toma su corriente del riel +, no de un pin.

Paso a paso

  1. 01

    Monta el Nano sobre el canal central del protoboard, con el conector USB hacia afuera. Presiona parejo hasta que entren todos los pines.

  2. 02

    Rieles: con cables macho-macho, une GND del Nano al riel − y 5V del Nano al riel +.

  3. 03

    El capacitor: pata larga (+) al riel + y la pata del lado de la franja (−) al riel −, lo más cerca posible de donde conectarás el servo. Al revés se daña: revisa dos veces.

  4. 04

    El LED RGB: la pata más larga es el cátodo y va al riel −. Cada una de las otras tres va a una fila con su resistencia de 220 Ω y de ahí un cable al Nano: R a D3, G a D5 y B a D6.

  5. 05

    El buzzer: pata − al riel −; pata + a una resistencia de 100 Ω y de ahí un cable a D10.

  6. 06

    El servo: con cables macho-macho desde su conector: café al riel −, rojo al riel + y naranja a D9.

  7. 07

    El sensor: con cables macho-hembra de 20 cm: S a A0, + a D7 y − al riel −. Deja la parte de las pistas lejos del protoboard: el agua no debe tocar el Nano.

  8. 08

    Sube el código: conecta el Nano por USB, en el IDE elige Arduino Nano y el puerto. Si no sube, cambia el procesador a ATmega328P (Old Bootloader). Al arrancar, el LED hace rojo, verde, azul y suena un pitido.

  9. 09

    Calibra: abre el Monitor Serie a 9600. Seco debe marcar cerca de 0; con unas gotas, más de 150; con el sensor muy mojado, más de 450. Ajusta UMBRAL_LLUVIA y UMBRAL_AGUACERO con tus números y vuelve a subir el código.

  10. 10

    Arma la maqueta: pega una tapa de cartón al brazo del servo (el techo) y pon el servo junto al tendedero de hilo con pinzas. Con el techo abierto (0°) la tapa queda parada; a 90° cubre la ropa. Si queda al revés, intercambia TECHO_ABIERTO y TECHO_CERRADO. Pon el sensor inclinado, afuera del techo, donde le caigan las gotas.

El paso a paso en imágenes

Código detector-de-lluvia.ino

Ábrelo en el Arduino IDE, elige tu placa y puerto, y súbelo con la flecha.

// El detector de lluvia
// El proyecto de fin de semana · Troxino.com
//
// Caen gotas en el sensor: suena la alarma "¡mete la ropa!", el LED se pone azul
// y el servo cierra un techo de cartón sobre el tendedero.
// Si llueve fuerte (aguacero), el LED parpadea en morado y suena otra alarma.
// Cuando lleva 10 segundos seco, el LED vuelve a verde y el techo se abre.
//
// Lectura del sensor: 0 = seco, más alta = más agua sobre las pistas.

#include <Servo.h>

const int PIN_SENSOR_VCC = 7;   // alimenta el sensor solo al medir
const int PIN_SENSOR     = A0;  // pin S del sensor
const int LED_ROJO       = 3;   // LED RGB de cátodo común
const int LED_VERDE      = 5;
const int LED_AZUL       = 6;
const int PIN_SERVO      = 9;   // cable naranja del servo
const int PIN_BUZZER     = 10;

// Ajusta estos dos números con lo que veas en el Monitor Serie.
const int UMBRAL_LLUVIA   = 150;  // de aquí para arriba: está lloviendo
const int UMBRAL_AGUACERO = 450;  // de aquí para arriba: aguacero

// Ángulos del servo. Si tu techo queda al revés, intercámbialos.
const int TECHO_ABIERTO = 0;
const int TECHO_CERRADO = 90;

const unsigned long CADA_LECTURA     = 500;    // ms entre lecturas
const unsigned long TIEMPO_PARA_SECO = 10000;  // ms seguidos sin lluvia para abrir el techo

const int SECO     = 0;
const int LLUVIA   = 1;
const int AGUACERO = 2;

Servo techo;
int posicionTecho = TECHO_ABIERTO;
int estado = SECO;
unsigned long ultimaGota = 0;
bool parpadeo = false;

// Prende el sensor, promedia 5 lecturas y lo vuelve a apagar.
// Así pasa corriente por las pistas solo un instante y se corroen mucho menos.
int leerSensor() {
  digitalWrite(PIN_SENSOR_VCC, HIGH);
  delay(10);  // deja que se estabilice

  long suma = 0;
  for (int i = 0; i < 5; i++) {
    suma += analogRead(PIN_SENSOR);
    delay(5);
  }

  digitalWrite(PIN_SENSOR_VCC, LOW);
  return suma / 5;
}

// Prende cada color del LED RGB (1 = prendido, 0 = apagado).
void color(int rojo, int verde, int azul) {
  digitalWrite(LED_ROJO, rojo ? HIGH : LOW);
  digitalWrite(LED_VERDE, verde ? HIGH : LOW);
  digitalWrite(LED_AZUL, azul ? HIGH : LOW);
}

// Mueve el techo poco a poco: se ve mejor y le pide menos corriente al USB.
void moverTecho(int destino) {
  int paso = destino > posicionTecho ? 1 : -1;
  while (posicionTecho != destino) {
    posicionTecho += paso;
    techo.write(posicionTecho);
    delay(12);
  }
}

// "¡Mete la ropa!": tres notas que suben, dos veces.
void alarmaLluvia() {
  for (int vez = 0; vez < 2; vez++) {
    tone(PIN_BUZZER, 1319, 150);  // Mi
    delay(180);
    tone(PIN_BUZZER, 1568, 150);  // Sol
    delay(180);
    tone(PIN_BUZZER, 2093, 300);  // Do agudo
    delay(450);
  }
}

// Aguacero: seis pitidos rápidos.
void alarmaAguacero() {
  for (int i = 0; i < 6; i++) {
    tone(PIN_BUZZER, 2600, 70);
    delay(120);
  }
}

// Convierte la lectura en SECO, LLUVIA o AGUACERO.
int clasificar(int lectura) {
  if (lectura >= UMBRAL_AGUACERO) {
    return AGUACERO;
  }
  if (lectura >= UMBRAL_LLUVIA) {
    return LLUVIA;
  }
  return SECO;
}

void setup() {
  pinMode(PIN_SENSOR_VCC, OUTPUT);
  digitalWrite(PIN_SENSOR_VCC, LOW);
  pinMode(LED_ROJO, OUTPUT);
  pinMode(LED_VERDE, OUTPUT);
  pinMode(LED_AZUL, OUTPUT);
  pinMode(PIN_BUZZER, OUTPUT);

  techo.attach(PIN_SERVO);
  techo.write(TECHO_ABIERTO);

  Serial.begin(9600);

  // Prueba rápida al arrancar: rojo, verde, azul y un pitido.
  color(1, 0, 0); delay(300);
  color(0, 1, 0); delay(300);
  color(0, 0, 1); delay(300);
  tone(PIN_BUZZER, 2000, 100);
  color(0, 1, 0);

  Serial.println("Detector de lluvia listo. Lectura: 0 = seco, alta = mojado.");
}

void loop() {
  int lectura = leerSensor();
  int nivel = clasificar(lectura);

  Serial.print("Lectura: ");
  Serial.println(lectura);

  if (nivel == SECO) {
    // Solo abre el techo cuando lleva un rato seco, no con cada gota que se escurre.
    if (estado != SECO && millis() - ultimaGota >= TIEMPO_PARA_SECO) {
      estado = SECO;
      color(0, 1, 0);
      Serial.println(">> Ya paro. Abro el techo.");
      moverTecho(TECHO_ABIERTO);
    }
  } else {
    ultimaGota = millis();

    if (estado == SECO) {
      estado = LLUVIA;
      color(0, 0, 1);
      Serial.println(">> Esta lloviendo: mete la ropa. Cierro el techo.");
      alarmaLluvia();
      moverTecho(TECHO_CERRADO);
    }

    if (nivel == AGUACERO && estado != AGUACERO) {
      estado = AGUACERO;
      Serial.println(">> Aguacero.");
      alarmaAguacero();
    } else if (nivel == LLUVIA && estado == AGUACERO) {
      estado = LLUVIA;
      Serial.println(">> Bajo a lluvia.");
    }
  }

  // Azul fijo con lluvia; morado que parpadea con aguacero.
  if (estado == LLUVIA) {
    color(0, 0, 1);
  } else if (estado == AGUACERO) {
    parpadeo = !parpadeo;
    color(parpadeo, 0, parpadeo);
  }

  delay(CADA_LECTURA);
}

Cómo probarlo

  1. Al conectar el Nano, el LED hace rojo, verde y azul, suena un pitido y se queda en verde.
  2. Rocía el sensor una o dos veces: suena la melodía (tres notas que suben, dos veces), el LED se pone azul y el techo baja despacio.
  3. Moja todo el sensor (o pásale el dedo mojado por todas las pistas): suenan seis pitidos rápidos y el LED parpadea en morado.
  4. Seca el sensor con un trapo: a los 10 segundos sin agua, el LED vuelve a verde y el techo se abre.

Problemas comunes

  • Siempre marca 0 aunque esté mojado: el + del sensor debe ir a D7 (no a 5V) y S a A0. Revisa que los cables macho-hembra estén bien metidos.
  • Detecta lluvia sin agua: los umbrales están muy bajos para tu sensor, o quedó una gota entre las pistas. Sécalo bien y mira el Monitor Serie.
  • El Nano se reinicia cuando se mueve el servo: revisa el capacitor (y su polaridad) y conecta el USB a un cargador de celular de 2 A en vez de un puerto viejo de laptop.
  • El servo tiembla o no se mueve: el cable naranja debe ir a D9 y el café al riel −. Que el techo de cartón sea ligero.
  • El LED sale de otro color: las patas R, G y B están en otro orden. Prueba moviendo los cables a D3, D5 y D6 hasta que al arrancar haga rojo, verde y azul.
  • El LED no prende nada: la pata larga (cátodo) debe ir al riel −. Si es un LED de ánodo común, no funciona con este código.
  • El buzzer no suena o suena muy bajito: que sea el pasivo (el código usa tone), con su pata + hacia D10.
  • Las pistas del sensor se ponen oscuras con el tiempo: es corrosión normal; por eso solo lo prendemos al medir. Sécalo después de usarlo.

Para mejorarlo

  • Un ventilador para secar la ropa: con un relevador, que prenda un ventilador cuando deje de llover.
  • Gráfica para la feria: usa el Serial Plotter del IDE para ver la lectura subir con cada rociada y bajar al secarse.
  • Contador de lluvias: guarda cuántas veces llovió y cuánto duró cada una.

¿Te atoraste?

Escríbenos por WhatsApp con una foto de tus conexiones y te ayudamos.

Cookies

Usamos cookies para tu sesión y tu carrito, y Google Analytics y Microsoft Clarity para ver qué funciona en la tienda. Nada de publicidad. Aviso de privacidad