arduino-lluvia

Detector de lluvia con Arduino y sensor FC-37 o YL-83

¿Qué es un sensor de lluvia?

Este tipo de sensores detectan la presencia de lluvia por la variación de conductividad del sensor al entrar en contacto con el agua. Existen varios modelos de sensores similares, como el FC-37 y el YL-83.

Constructivamente son sensores sencillos. Se dispone de dos contactos, unidos a unas pistas conductoras entrelazadas entre sí a una pequeña distancia, sin existir contacto entre ambas. Al depositarse agua sobre la superficie, se pone en contacto eléctrico ambos conductores, lo que puede ser detectado por un sensor.

Ambos modelos se envían con una placa de medición estándar con el comparador LM393, que permite obtener la lectura tanto como un valor analógico como de forma digital cuando se supera un cierto umbral, que se regula a través de un potenciómetro ubicado en la propia placa.

Los valores analógicos medidos varían desde 0 para una placa totalmente empapada, a 1023 para una placa totalmente seca.

La salida digital dispara cuando el valor de humedad supera un cierto valor, que ajustamos mediante el potenciómetro. Por tanto, obtendremos una señal LOW en ausencia de lluvia, y HIGH con presencia de lluvia.

En el caso del sensor de lluvia la señal analógica carece de interés, ya que el sensor no dispone de la precisión necesaria para medir la cantidad de agua acumulada. En cualquier caso, sería difícil extrapolar la medición a un valor de litros hora. Es decir, no podemos medir la cantidad de lluvia, solo su presencia.

El sensor de lluvia puede ser empleado, por ejemplo, para extender un toldo o activar algún otro mecanismo, hacer sonar una alarma, o registrar la cantidad de tiempo (días, horas) en el que se producen precipitaciones en una determinada zona.

El sensor de lluvia también puede ser empleado para detectar inundaciones, colocándolo en el suelo de un sótano o sala de calderas, por ejemplo. También puede ser útil para detectar cuando el agua de un depósito sobrepasa un determinado nivel.

Al usar el sensor en presencia de agua, aseguraros de proteger los contactos y partes eléctricas del circuito, y exponiendo únicamente la placa sensora. De lo contrario podéis provocar un cortocircuito, y dañar alguno de los componentes eléctricos.

Precio

Los sensores de lluvia son realmente baratos. Podemos encontrar un sensor de tipo YL-83 o FC-37, incluida la placa de medición, por 0,65€ en vendedores internacionales de Ebay y Aliexpress.

Ambos modelos, YL-80 y FC-37 se venden en pequeñas variaciones de geometría (más grandes, más pequeños) y de color. Pero más allá de estas diferencias, todas las variantes que veáis son idénticas en comportamiento.

sensor-lluvia

Esquema montaje

El esquema eléctrico es sencillo. Conectamos el sensor a la placa de medición. El sensor no tiene polaridad, por lo que puede ser conectada en cualquier sentido.

arduino-sensor-conexion

Por otro lado, alimentamos la placa de medición conectando los pines GND y 5V a los pines correspondientes de Arduino.

arduino-sensor-lluvia-esquema

Finalmente, conectamos la salida digital del sensor a una entrada digital para leer el estado del sensor, como vimos en la entrada Entradas digitales en Arduino.

arduino-placa-sensor

Si quisieramos obtener el valor analógico de la medición, conectaríamos la salida analógica del sensor a una entrada analógica de Arduino, aunque como hemos dicho este sensor no dispone de la precisión suficiente para que el valor analógico sea realmente de utilidad.

Opcionalmente, podemos calibrar el umbral de disparo de la salida digital con el potenciómetro, vertiendo agua en un pequeño experimento. Pero suele ser suficiente con dejar el potenciómetro en un valor medio.

Ejemplos de código

El código es igualmente sencillo. Simplemente leemos el estado de la entrada digital. Si el sensor se dispara ejecutamos las acciones necesarias.

const int sensorPin = 9;

void setup() {
  Serial.begin(9600);   //iniciar puerto serie
  pinMode(pin, INPUT);  //definir pin como entrada
}
 
void loop(){
  int value = 0;
  value = digitalRead(sensorPin );  //lectura digital de pin
 
  if (value == LOW) {
      Serial.println("Detectada lluvia");
  }
  delay(1000);
}

También podemos leer el estado del sensor mediante el uso de interrupciones. Para más información consultar la entrada Qué son y cómo usar interrupciones en Arduino y Leer un pulsador con interrupciones en Arduino

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full