Tutorial de sensor de lluvia para Arduino, ESP8266 y ESP32

En este tutorial, aprenderás cómo funcionan las diferentes partes del módulo sensor de lluvia y cómo conectar el módulo sensor de lluvia a tu placa microcontroladora.

En este tutorial, aprenderás cómo funcionan las diferentes partes del módulo sensor de lluvia y cómo conectar el módulo sensor de lluvia a tu placa microcontroladora Arduino, ESP8266 o ESP32.

Si quieres utilizar el sensor de lluvia durante mucho tiempo, aprenderás en el último ejemplo cómo aumentar la vida útil del sensor.

¿Qué es un sensor de lluvia para microcontroladores?

Los sensores de lluvia, también conocidos como sensores de gotas de lluvia, son sensores muy útiles que se utilizan en una variedad de casos de uso. Solo un sensor de lluvia solo puede detectar si está lloviendo y qué tan fuerte está lloviendo, pero en combinación con otros dispositivos eléctricos, puede crear aplicaciones útiles.

Para mí, la aplicación más útil es detectar una ventana abierta cuando empieza a llover porque muchas veces no sé si he cerrado una ventana después de salir de casa.

El sensor de lluvia consta de 2 componentes, que consideramos con más detalle a continuación:

  • Módulo de gota de lluvia para detectar si está lloviendo o no
  • Tarjeta de control para procesar datos del módulo de gotas de lluvia

Funcionalidad del módulo Rain Drop

El módulo de gotas de lluvia es una placa de circuito impreso de forma rectangular. El tamaño puede diferir de un modelo a otro, pero la construcción es la misma para cada modelo. La placa de conexión a tierra de la placa de circuito impreso está hecha de plástico reforzado con fibra que no es conductor. Sobre esta placa de tierra, se montan dos pines. De cada uno de estos pines comienza una pista conductora, construida como una «E» con un desplazamiento de la otra pista conductora. Por lo tanto, las pistas no están conectadas pero las pistas conductoras se juntan.

Tablón de lluvia

Puedes medir la resistencia de la tabla de lluvia con un multímetro, como hice yo. Las siguientes dos imágenes muestran la tabla de lluvia en estado seco con resistencia infinita y después de poner mi dedo en la tabla con una resistencia de 3.87 MΩ.

Resistencia infinita del panel de lluvia
Resistencia de los dedos de la tabla de lluvia

¿Por qué cambia la resistencia en un módulo Rain Drop?

La ilustración esquemática muestra la diferencia entre una variedad de estados para el panel de lluvia. En ausencia de lluvia, no hay conexión entre las dos pistas de cobre y la resistencia es infinita.

En caso de lluvia ligera, gotas de agua caen sobre la superficie del panel de lluvia y conectan las dos pistas conductoras. Debido a que el agua es un conductor, la resistencia del panel de lluvia disminuye, lo que resulta en una resistencia promedio. Lo mismo sucedió cuando toqué el sensor de lluvia, ya que mi piel también es conductora, conectando las dos pistas de cobre.

Si llueve mucho, más y más gotas de lluvia caen sobre la placa y disminuyen aún más la resistencia hasta que la resistencia es 0Ω y el circuito está en corto.

Resumir la tabla de lluvia: La placa de lluvia es una resistencia dependiente de la lluvia que tiene alta resistencia cuando no hay lluvia y baja resistencia cuando hay gotas de lluvia en la placa de circuito. El principio de funcionamiento es el mismo que el de un fotorresistor.

Ahora debemos asegurarnos de que podemos medir el cambio en la resistencia. Si lees mi tutorial sobre resistencias, sabrás que esto se puede hacer con un divisor de voltaje.

Funcionalidad de un divisor de voltaje

La siguiente imagen muestra un divisor de voltaje compuesto por dos resistencias. En nuestro caso, R2 es la resistencia de la tarjeta de lluvia. R1 es una resistencia de referencia con una resistencia conocida. A partir de la ecuación, puede ver que si conocemos el voltaje de suministro U, podemos calcular la caída de voltaje en el panel de lluvia.

Explicación del divisor de voltaje

Pero, ¿dónde encontramos el divisor de voltaje? Esta función tiene entre otras la tarjeta de control.

Funcionalidad de la tarjeta de control de un sensor de lluvia

La placa de control consta de dos pines de entrada y cuatro pines de salida. Los pines de entrada están conectados a la placa de lluvia y los pines de salida a su microcontrolador favorito, por ejemplo, un Arduino Uno o un ESP32 NodeMCU.

En el tablero de control encontrará varias resistencias que también funcionan como divisor de voltaje para proporcionar una señal analógica para la intensidad de la lluvia. Por lo tanto, en la entrada obtenemos una resistencia del tablero de lluvia y el tablero de control convierte esa resistencia en una caída de voltaje entre el pin analógico y tierra. El microcontrolador utiliza el convertidor interno de analógico a digital (ADC) para convertir el voltaje del pin analógico a un valor digital entre 0 y 1023 que se puede imprimir en la salida en serie de su Arduino IDE.

La parte más grande del panel de control es el potenciómetro para ajustar la sensibilidad del sensor de lluvia. El potenciómetro es solo una resistencia variable, cuya resistencia se cambia con la rueda de ajuste en la parte superior. Necesitamos este potenciómetro para comparar la resistencia del potenciómetro con la resistencia de la tabla de lluvia. Si la resistencia del panel de lluvia es menor que el umbral establecido por el potenciómetro, la salida digital del panel de control pasa de 1 ALTA a 0 BAJA.

Comparador LM393 de alta precisión - Ajuste de sensibilidad
Comparador de alta precisión LM393 - Comparator

Pero, ¿quién hace esta comparación entre las dos resistencias? Esto lo hace el comparador LM393 porque la caída de voltaje en ambas resistencias es lineal a su resistencia debido a la ley de ohmios. El LM393 consta de dos comparadores de voltaje de precisión independientes y está especialmente diseñado para operar desde una sola fuente de alimentación, en nuestro caso el microcontrolador. Puede encontrar más detalles sobre el LM393 en el sitio web de Instrumentos Texas.

En la siguiente imagen puede ver que la combinación de un potenciómetro y el comparador LM393 se usa muy a menudo para diferentes tipos de sensores donde necesita convertir una señal analógica en una señal digital a través del umbral del potenciómetro.

potenciómetro LM393

La tarjeta de control también tiene un LED incorporado que indica el estado de energía de la tarjeta y el estado de umbral. Si la salida digital de la tarjeta de control cambia de ALTA a BAJA, indicando que está lloviendo, el LED de estado de la tarjeta de control se iluminará.

Comparador de alta precisión LM393 - LED

Cableado entre el sensor de lluvia y las placas Arduino

Las siguientes imágenes muestran el cableado entre el módulo de gotas de lluvia y la placa de control, así como la conexión entre la placa de control y varias placas Arduino. Dado que la placa de lluvia solo conecta una resistencia a la placa de control, cambiar las clavijas de conexión no tiene ninguna influencia.

La placa de control está alimentada por el pin de 5 V de la placa del microcontrolador Arduino. Para la conexión analógica y digital, puede usar cualquier E / S digital y pines analógicos en su placa, pero si la conexión difiere de las imágenes, asegúrese de configurar los pines correctos en las siguientes secciones con el código del programa.

Si le falta una placa de microcontrolador Arduino, escriba un comentario en la sección debajo de este artículo y agregaré más imágenes impresionantes del cableado del sensor de lluvia. También puede ampliar las imágenes de cableado haciendo clic en ellas.

Arduino Nano
Arduino Pro Mini
Arduino Uno
Arduino Mega

Arduino Nano

Sensor de lluvia Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

Mini sensor de lluvia Arduino Pro

Arduino Uno

Sensor de lluvia Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.

Arduino Mega

Sensor de lluvia Mega Arduino

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

Cableado entre el sensor de lluvia y las placas ESP8266

El cableado entre las diversas placas ESP8266 y el módulo del sensor de lluvia se muestra en las siguientes imágenes. Para la alimentación, tomo el pin VIN y 5V del convertidor USB, pero también puede usar el pin 3.3V en su lugar porque la placa de control también funciona con un voltaje de 3.3V.

La conexión entre el módulo de gotas de lluvia y el tablero de control se puede cambiar en polaridad sin influir en la funcionalidad, porque el módulo de gotas de lluvia no es más que una resistencia para todo el circuito.

Si le falta una placa de microcontrolador ESP8266, escriba un comentario en la sección a continuación y agregaré más imágenes impresionantes del cableado del sensor de lluvia. También puede ampliar las imágenes de cableado haciendo clic en ellas.

ESP8266 NodeMCU
ESP8266 WeMos D1 Mini

ESP8266 NodeMCU

Sensor de lluvia NodeMCU ESP8266

ESP8266 WeMos D1 Mini

ESP8266 WeMos D1 Mini sensor de lluvia

Cableado entre el sensor de lluvia y las placas ESP32

El cableado entre el sensor de lluvia y la placa del microcontrolador ESP32 se muestra en la siguiente imagen. Dado que el ESP32 tiene varios convertidores de analógico a digital, puede elegir varios pines para la entrada analógica y digital del ESP32. Recomiendo descargar mi libro electrónico gratuito de hoja de datos de microcontroladores con pinout detallado que muestra cada pin analógico y digital de múltiples placas de microcontroladores Arduino, ESP8266 y ESP32.

Puede cambiar la conexión entre el módulo de gotas de lluvia y la placa de control sin influir en la funcionalidad, porque el módulo de gotas de lluvia se comporta como una resistencia para todo el circuito.

Si le falta una placa de microcontrolador ESP32, escriba un comentario en la sección a continuación y agregaré más imágenes impresionantes del cableado del sensor de lluvia. También puede ampliar las imágenes de cableado haciendo clic en ellas.

ESP32 ESP-WROOM-32

Sensor de lluvia ESP32 NodeMCU

La siguiente tabla le brinda una descripción general de todos los componentes y partes que utilicé para este tutorial. Recibo comisiones por compras realizadas a través de los enlaces de esta tabla.

Arduino NanoAmazonAliExpress
Arduino Pro MiniAmazonAliExpress
Arduino UnoAmazonAliExpress
Arduino MegaAmazonAliExpress
ESP32 ESP-WROOM-32AmazonAliExpress
ESP8266 NodeMCUAmazonAliExpress
ESP8266 WeMos D1 MiniAmazonAliExpress
Kit de condensadoresAmazonAliexpress
Kit de resistenciaAmazonAliExpress
Sensor de lluvia (en el kit de sensores)AmazonAliexpress

Leer la salida analógica y digital del módulo del sensor de lluvia

En este ejemplo, podemos utilizar el cableado del capítulo anterior y queremos imprimir los valores de los sensores analógicos y digitales en el monitor en serie. Además, utilizamos el trazador en serie del IDE de Arduino para mostrar el diagrama de la línea de tiempo de salida analógica.

Las siguientes secciones muestran el código del programa Arduino para este ejemplo.

// for Arduino Microcontroller
#define rainAnalog A1
#define rainDigital 2

// for ESP8266 Microcontroller
//#define rainAnalog A0
//#define rainDigital D1

// for ESP32 Microcontroller
//#define rainAnalog 35
//#define rainDigital 34

void setup() {
  Serial.begin(9600);
  pinMode(rainDigital,INPUT);
}
void loop() {
  int rainAnalogVal = analogRead(rainAnalog);
  int rainDigitalVal = digitalRead(rainDigital);

  Serial.print(rainAnalogVal);
  Serial.print("t");
  Serial.println(rainDigitalVal);
  delay(200);
}

El primer paso en el script de Arduino es definir los pines analógicos y digitales que conectan el microcontrolador y la placa de control. En mi caso, estoy usando el pin A1 para la conexión analógica y D2 para la conexión digital del microcontrolador Arduino como se ve en el fritzing sketch del Arduino Uno.

Para ESP8266 NodeMCU y WeMos D1 Mini, así como para ESP32, la definición de pines analógicos y digitales es diferente. Están incluidos en el guión pero comentados. Si está utilizando un microcontrolador ESP8266 o ESP32, descomente las líneas de código y comente la definición de pin de Arduino.

En la función de configuración, configuré la velocidad en baudios de la conexión en serie en 9600, que debe coincidir con la configuración de salida en serie del IDE de Arduino para imprimir los valores. También necesito configurar el pin digital como entrada porque quiero leer los valores en estos pines.

En la función de bucle, creo la variable rainAnalogVal como un número entero y leo el valor analógico del pin analógico con la función analogRead () incorporada. Luego también leo el valor numérico, con la función digitalRead () incorporada y almaceno el valor numérico en la variable rainDigitalVal que tiene los siguientes valores:

  • = 0, si llueve
  • = 1, si no llueve

Para mostrar el diagrama de tiempo del sensor de lluvia analógico, imprimimos el valor analógico y digital en la salida en serie y, con un breve retraso de 200 milisegundos, pausamos el script al final antes de que se vuelva a ejecutar el ciclo.

Las siguientes dos imágenes muestran el monitor de serie y el trazador de serie del IDE de Arduino. Puede ver claramente que el valor del sensor cae cuando toco la tabla de lluvia con mi dedo seco o mojado. Puede hacer clic en cada imagen para ampliarla.

Salida analógica y digital del módulo sensor de lluvia, visualizada por el monitor en serie

Monitor serial del módulo del sensor de lluvia

Salida analógica del módulo del sensor de lluvia, que se muestra como un gráfico de tiempo con el trazador de serie

Plotter serial del módulo del sensor de lluvia

Bono: aumenta la vida útil del sensor de lluvia

Debido al flujo de corriente y al contacto con el agua, el sensor de lluvia creará óxido debido a la electrólisis que dañará el sensor y lo hará impreciso. La fuerza de la electrólisis depende de tres factores diferentes:

  1. la calidad de la tabla de lluvia,
  2. la cantidad de agua en la tabla de lluvia
  3. con qué frecuencia y cuánta corriente pasa a través de los electrodos del panel de lluvia

Para aumentar la vida útil del sensor de lluvia, reducimos el voltaje de funcionamiento de 5V a 3.3V y también solo suministramos voltaje al sensor cuando queremos leer los valores del sensor con el microcontrolador. Por lo tanto, cambiamos el cableado y ya no conectamos el pin 5V del microcontrolador Arduino o el pin VIN del microcontrolador ESP8266 y ESP32 a la placa de control sino que conectamos el microcontrolador a través del pin 3.3V.

Además, no conectamos el microcontrolador Arduino, ESP8266 o ESP32 directamente al sensor de lluvia, pero usamos un MOSFET para desconectar completamente el sensor de lluvia del circuito cuando no necesitamos leer el valor del sensor analógico. Estoy usando el MOSFET IRLZ44N porque este MOSFET de nivel lógico también responde a voltajes bajos entre 2.5V o 5V.

La siguiente imagen muestra el nuevo cableado con un Arduino Uno como ejemplo.

Tutorial de sensor de lluvia para Arduino, ESP8266 y ESP32

En la impresionante foto también puede ver que estoy usando una resistencia de 1 MΩ para proteger la puerta en la fuente de ESD.

Con este cambio reducimos el voltaje de trabajo a 3.3V y con el pin digital podemos controlar cuando el pin digital se pone en HIGH para encender el sensor de lluvia y cuando poner el pin en LOW para apagar el sensor.

Una desventaja es que el convertidor analógico-digital (ADC) interno del microcontrolador tiene 5 V como voltaje de referencia y ahora no se usa el rango completo de valores para la señal analógica. Puede ver el valor analógico máximo reducido en la última imagen de este artículo.

También estoy construyendo el valor digital basado en el valor analógico en el script Arduino y no en el pin analógico en la placa de control. Por lo tanto, no tengo que conectar los pines digitales.

Las siguientes líneas muestran el nuevo script y los cambios que debemos realizar.

#define rainAnalog A1
#define sensorPower 7
boolean bIsRaining;

void setup() {
  Serial.begin(9600);
}
void loop() {
  digitalWrite(sensorPower, HIGH);  // Turn the sensor ON
  delay(10);              // Allow power to settle
  int rainAnalogVal = analogRead(rainAnalog);

  if(rainAnalogVal < 100) {
    bIsRaining = true;
  }
  else {
    bIsRaining = false;
  }
  digitalWrite(sensorPower, LOW);    // Turn the sensor OFF

  Serial.print(rainAnalogVal);
  Serial.print("t");
  Serial.println(bIsRaining);
  delay(1000ul*60*5); // wait for 5 Minutes
}

El primer cambio que hacemos es definir dos nuevas variables:

  • sensorPower define el nuevo pin digital que conecta la placa de control al microcontrolador.
  • bisRaining es un valor booleano que indica si está lloviendo o no.

La variable del valor numérico se elimina en el bloque de definición al inicio del script y también en la función de configuración.

En la función de bucle, encendemos la placa de control configurando el pin del sensor POWER HIGH y dejamos que la potencia se estabilice antes de leer el valor analógico. El valor booleano se construye mediante una función if else simple. En mi ejemplo, elijo 100 como umbral, pero puedes elija un valor diferente si lo desea. Después de calcular los valores analógicos y digitales, apagamos el sensor de lluvia configurando el pin de alimentación en LOW.

La siguiente imagen muestra la salida del script Arduino con un valor analógico máximo de 131 en lugar de 1023.

Monitor de la serie del sensor de lluvia que ahorra energía

Para demostrar que no hay baja corriente a través del sensor de lluvia, cuando el MOSFET desconecta el sensor de lluvia del microcontrolador, medí el voltaje entre los dos contactos del sensor de lluvia y cambié el script Arduino de que hay una corriente de 5 segundos, seguido de un período de desconexión de 5 segundos. La siguiente imagen muestra que el voltaje del sensor de lluvia oscila entre 3.3V y 0V. Por lo tanto, sabemos que el circuito MOSFET está funcionando bien.

Tutorial de sensor de lluvia para Arduino, ESP8266 y ESP32

Espero que les haya gustado este tutorial y si tiene alguna pregunta con respecto a este tutorial, deje un comentario a continuación y responderé sus preguntas lo antes posible.


Deja un comentario