Proyecto 26 – Sensor de lluvia

En este proyecto utilizaremos un sensor de lluvia con nuestro Arduino para detectar la presencia de precipitaciones, es decir lluvia. Vamos a ver dos ejemplos de código, el primero en el que registraremos por serial el valor del sensor y el segundo código utilizaremos estos valores para evaluar las condiciones de la precipitación.

Sensor de lluvia

Módulo se Sensor de lluvia MH-RD
Módulo se Sensor de lluvia MH-RD

El sensor de lluvia o pluviómetro es un dispositivo que tiene la capacidad de detectar la presencia de las gotas de agua que caen sobre él. Existen varios modelos de lluvia pero aquí vamos a utilizar cualquiera de estos 3 modelos: MH-RD, YL-83 o FC-37, que básicamente son el mismo sensor, con tamaños similares pero distribución de pines diferentes y diferentes fabricante.

En nuestro caso vamos a utilizar el MH-RD, este módulo se compone de dos partes:

  • La primera es un módulo de medición estándar con un comparador LM393, que nos permite obtener una lectura análoga o digital y se puede regular la sensibilidad del umbral, ya que tiene potenciómetro en el circuito.
  • La segunda parte es un PCB que básicamente es una resistencia variable cuyo valor varia según la cantidad de agua que se encuentra sobre su superficie.

¿Cómo funciona el sensor de lluvia?

El funcionamiento del sensor es bastante simple, la placa del sensor tiene expuestas unas líneas de cobre, que funcionan como una resistencia variable, cuya resistencia cambia según la cantidad de agua que se encentra en su superficie.

Entre más agua se encuentre sobre la superficie de la placa la resistencia es menor, es decir la resistencia es inversamente proporcional a la cantidad de agua.

Componentes

  • Arduino UNO o placa compatible
  • Módulo Sensor de lluvia
  • Cables o Jumpers
Diagrama de conexiones del sensor MH-RD
Diagrama de conexiones del sensor MH-RD y YL-83

En este proyecto las conexiones son bastante simples, lo primero que debemos hacer es revisar es en el módulo comparador los pines de conexión, en un lado están los dos conectores que van a conectarse al sensor y por el otro lado encontraremos 4 pines (AO, DO, GND, VCC), los cuales son la alimentación del módulo (VCC, GND), un pin de salida digital (DO) y uno de salida análoga (AO).

Una vez identificados los pines del módulo comparador procedemos a conectar los dos pines de captura de datos a la tarjeta del sensor, luego conectamos el GND al GND del arduino, el VCC a los 5V del arduino y por último conectamos el pin AO del módulo a el pin A0 del Arduino.

Código

int pinSensor=A0;
int valor=0;

void setup()
{
  Serial.begin(9600); 
}

void loop()
{
  valor=analogRead(pinSensor);
  Serial.println(valor);
}

Explicación del código

Comenzaremos a revisar el código, lo primero que vamos a hacer es la declaración de las variables.

int pinSensor=A0;
int valor=0;

Declaramos primero una variable entera pinSensor a la cual le asignaremos A0, el cual es el pin del Arduino al cual irá conectado nuestro sensor, luego vemos declarada otra variable de tipo entera valor que le asignaremos 0 para inicializarla.

Función setup()

Serial.begin(9600);

Como hemos visto anteriormente en otros proyectos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, el el caso de este proyecto único que vemos es la inicialización de la comunicación serial a una velocidad el 9600 baudios, por medio de la cual veremos la información que nos envía el sensor a través del monitor serial.

Normalmente en nuestros otros proyectos utilizamos la función PinMode() para configurar los pines del Arduino, tanto los de entrada como los de salida, pero en este ejemplo no lo hacemos, ya que no hay necesidad de configurarlos cuando hablamos de las entradas análogas.

Función loop()

valor=analogRead(pinSensor);
Serial.println(valor);

En la primera línea del loop() vemos que a la variable valor le asignamos la lectura análoga del pinSensor, en otras palabras el valor que nos envía el sensor.

Si miramos la siguiente línea es muy fácil de entender mostramos por el monitor serial el contenido de la variable valor, adicionalmente podemos agregar un delay si queremos que haga una pausa entre medidas, por ejemplo, delay(10) .

Salida serial

Resumen

En resumen al conectar nuestro Arduino a la computadora e iniciamos el monitor serial, comenzaremos a ver los valores que nos envía el sensor de lluvia a través del monitor de serie.

Código 2

int pinSensor=A0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int valor = analogRead(pinSensor);
  if (valor > 950)
    Serial.println("No hay lluvia");
  else if (valor <= 950 && valor >600 )
  {
    Serial.println("Llueve");
  }
  else if (valor <= 600 && valor > 300)
  {
    Serial.println("Aguacero");
  }
  else
  {
    Serial.println("Se inundó esto!");
  }
  delay(1); 
}

Explicación del código

Vamos a comenzar a revisar el código y como es de costumbre vamos a ver primero la declaración de las variables:

int pinSensor=A0;

Comenzaremos mirando la única línea que hay aquí, en donde declaramos una variable de tipo entero de nombre pinSensor a la que le asignamos A0, el cual lógicamente sería el pin análogo del Arduino al que utilizaremos para conectar nuestro sensor.

Función setup()

Serial.begin(9600);

Como hemos visto anteriormente en otros proyectos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, el el caso de este proyecto único que vemos es la inicialización de la comunicación serial a una velocidad el 9600 baudios, por medio de la cual veremos la información que nos envía el sensor a través del monitor serial.

Función loop()

int valor = analogRead(pinSensor);
if (valor > 950)
  Serial.println("No hay lluvia");
else if (valor <= 950 && valor >600 )
{
  Serial.println("Llueve");
}
else if (valor <= 600 && valor > 300)
{
  Serial.println("Aguacero");
}
else
{
  Serial.println("Se inundó esto!");
}
delay(1); 

En la primera línea del loop() vemos que a la variable valor le asignamos la lectura análoga del pinSensor, es decir el valor que nos envía el sensor.

A continuación vemos una serie de comparaciones, el primer if que encontramos nos pregunta si el valor capturado del sensor es mayor a 950, entonces imprime por serial «No hay lluvia». Si la condición no se cumple encontramos un else if que pregunta que si valor mayor o igual a 950 y menor que 600, entonces imprime por serial «Llueve». Si las condiciones anteriores no se cumplen encontramos otro else if en el cual preguntamos si valor es menor o igual a 600 y mayor a 300, entonces imprime por el serial «Aguacero». Por ultimo encontramos un else, que si no se cumple ninguna de las anteriores condiciones, entonces imprime «Se inundó esto!».

Resumen

En resumen al conectar nuestro Arduino a la computadora e iniciamos el monitor serial, comenzaremos registrar si esta seco, hay lluvia o un aguacero, inclusive si hay una posibilidad de inundación.

NOTA:  El  análisis de los valores del sensor en el código no es una referencia real de la intensidad de lluvia, por lo que hay que tener presente que  este código es para fines educativos, no para aplicaciones que  necesiten precisión.

Deja un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.