En este artículo aprenderemos a usar el sensor de lluvia con Arduino. Estos sensores se denominan a menudo de forma diferente: de lluvia, de agua, de nieve, pluviómetro, etc.
Si bien hay varios modelos, siempre se trata del mismo sensor, una placa con un circuito impreso en forma de serpentina y dos conectores. El sensor se conecta muy fácilmente al Arduino, el código para trabajar con estos sensores es simple y el son de bajo coste, lo que los hace ideales para proyectos sencillos en Arduino Uno, Mega, Nano.
Cómo funciona el sensor de lluvia arduino
El sensor de lluvia en los proyectos de Arduino te permite detectar y responder a las gotas de humedad, por ejemplo activando una alarma. Estos sistemas se utilizan mucho en domótica, la industria automotriz, los sistemas hogareños de riego y en otras áreas de nuestra vida cotidiana. En este artículo veremos el trabajo con el módulo ya preparado, que puede adquirirse fácilmente en cualquier tienda online especializada.

Como dijimos anteriormente hay varios modelos. Lo más habitual es conseguir en las tiendas alguno de estos 3 modelos de sensor de lluvia para Aruino: FC-37, YL-83 y MH-RD. Basicamente son iguales, sólo varían unos milímetros sus dimensiones y sus colores, pero trabajan exactamente igual.
El módulo del sensor consta de dos partes:
- Placa PCB con superficie niquelada, con resistencia a la oxidación y conductividad eléctrica. De hecho, el sensor es una simple resistencia variable, cerrada por el agua en diferentes lugares, que causa un cambio en la resistencia.
- La segunda parte del sensor es un comparador dual (normalmente LM393, pero son posibles las variantes LM293 y LM193). Su tarea principal es convertir el valor del sensor en una señal analógica de 0 a 5 voltios.
- También se puede conseguir el sensor con un relé de 12 voltios en lugar del comparador dual. En este caso se podría utilizar directamente sin intervención de una placa arduino, abriendo o cerrando el rele ante la presencia de agua.
El sensor está alimentado por 5V, que se puede arrancar fácilmente desde cualquier placa Arduino. Normalmente, el módulo sensor tiene dos salidas:
- Analógico. El valor recibido por el controlador oscilará entre 0 y 1023. Donde 0 – todo está inundado o hay un aguacero, el sensor está muy húmedo, 1023 – tiempo seco, el sensor está seco (en algunos sensores hay valores opuestos, 1023 – humedad máxima, 0 – sequedad máxima).
- Digital. Salida de alto (5V) o bajo voltaje si se excede algún umbral. El nivel de umbral es regulado por una resistencia de corte.
Conexión del detector de lluvia al arduino
Para conectar el sensor al Arduino necesitarás una placa (UNO, Mega, Nano o cualquier otra) y el propio sensor. Si deseas comprobar la intensidad de la precipitación, se recomienda colocar el sensor en ángulo y no en posición horizontal, para que las gotas acumuladas fluyan hacia abajo. 
Diagrama de conexión del módulo del sensor de lluvia al arduino:
- VCC (power input) – debe ser el mismo para el circuito Arduino conectado en voltaje y corriente. Es decir, en este caso, 5V;
- GND – conexión a tierra;
- AO – salida analógica;
- DO – salida digital.
La salida analógica se conecta a un pin analógico de microcontrolador, por ejemplo al A1. La salida digital se conecta a uno de los pines digitales. El voltaje puede ser suministrado desde la salida de 5V de la placa Arduino y la tierra está conectada a GND.
Si tu proyecto trabaja con tensiones eléctricas de 110v o 220v es muy importante aislar ambos circuitos para evitar descargas eléctricas. Si no tienes nociones básicas de electricidad te recomendamos estos cursos de electricidad que te servirán para trabajar en Arduino con tensiones altas.
Sensores de lluvia y Arduino: Ejemplos
Ejemplo de lectura del sensor
En este esquema simplemente leemos los valores del sensor y los mostramos en el monitor del puerto serie. Realice un experimento y compruebe cómo cambia el valor cuando toque el sensor con las manos húmedas o secas. Puede mojar el sensor con una rociador -simulando lluvia- y luego secarlo con un paño seco.
#define PIN_ANALOG_RAIN_SENSOR A1 // Entrada analógica para la señal del sensor lluvia
#define PIN_DIGITAL_RAIN_SENSOR 5 // Entrada digital para la señal del sensor de lluvia
void setup(){
Serial.begin(9600);
}
void loop(){
int sensorValue = analogRead(PIN_ANALOG_RAIN_SENSOR); // Leer datos del puerto analógico
Serial.print("Analog value: ");
Serial.println(sensorValue); // Salida de valor analógico al monitor de puerto
sensorValue = digitalRead(PIN_DIGITAL_RAIN_SENSOR); // Leer datos del puerto digital
Serial.print("Digital value: ");
Serial.println(sensorValue); // Salida del valor digital al monitor del puerto
delay(1000); // Retardo entre mediciones
}
Ejemplo de un proyecto de alarma de lluvia
Considere un ejemplo usando una alarma audible como un zumbador conectado en la salida digital D6. Si lo desea, puede conectar un relé en lugar de una alarma y realizar varias operaciones con la apertura de la red. En el esquema transferiremos los datos recibidos al monitor de puerto a través de la interfaz UART.
Esquema para proyecto con alarma
El siguiente es un código de prueba que activa la señal acústica en la salida digital 6 mencionada anteriormente, con un retardo de tiempo, para evitar falsas alarmas en caso de contacto accidental del agua con el sensor. El trabajo se implementa a través de una variable, que se actualiza cada segundo y actúa como un umbral – curCounter. La alarma se activa cuando el valor transmitido desde el sensor es inferior a 300. El retardo entre la detección de humedad y la señal de sonido es de poco más de 30 segundos.
#define PIN_RAIN_SENSOR A1 // Entrada analógica para la señal del sensor de lluvia
#define PIN_ALERT 6 // Salida digital para señalización
#define MAX_COUNTER 30 // Valor umbral para el contador
#define ALERT_LEVEL 300 // Valor umbral para contador
int curCounter= 0; // Contador "Statistics", que aumenta en 1 cada segundo tras la activación del sensor
void setup(){
Serial.begin(9600);
pinMode(PIN_ALERT, OUTPUT);
pinMode(PIN_RAIN_SENSOR, INPUT); // No tiene que especificarlo porque es el valor por defecto
}
void loop(){
int sensorValue = analogRead(PIN_RAIN_SENSOR);
Serial.println(sensorValue); // Valor de salida al monitor de puerto
delay(300); // short delay
// Si hay motivos suficientes para activar una alarma
if (curCounter >= MAX_COUNTER){
digitalWrite(PIN_ALERT, HIGH); // Alarma activada
curCounter = MAX_COUNTER; // Protección contra desbordamiento variable
}
// Determinar el nivel de humedad
if (sensorValue < ALERT_LEVEL){
// Una vez más, asegúrate de que todo esté húmedo, aumenta el contador
curCounter++;
}else {
// La intensidad de las precipitaciones no supera el umbral
digitalWrite(PIN_ALERT, LOW); // Desactivar alarma
curCounter = 0; // Contador a cero
}
delay(1000); // Retardo entre mediciones
}
En resumen
Los sensores de lluvia se pueden utilizar en un arduino para crear dispositivos que respondan a la aparición de humedad en forma de gotas. Entre las ventajas del módulo podemos mencionar su sencillez, comodidad y economía.
Es muy fácil conectar el sensor – con la ayuda de salidas analógicas o digitales. Para obtener el valor en el croquis, se utiliza la función estándar analogRead (o digitalRead para pin digital). Con estos valores se puede activar una alarma u otros dispositivos externos por medio de un relé.
Seguramente te interesen otros sensores para usar en tus proyectos de Arduino. Puedes ver mas tutoriales con ejemplos de uso de algunos de ellos:




