mh-rd sensor de lluvia ESPHome

mh-rd sensor de lluvia ESPHome

En este manual, voy a utilizar un sensor mh-rd detectar la lluvia lo antes posible. Con esto, podremos activar acciones. Quiero destacar que también podemos utilizar el sensor yl-83 que es prácticamente igual pero más caro. El propósito no es medir la cantidad de precipitación durante un período de tiempo determinado sino detectar el momento en qué empieza a llover. También vamos a ver cómo detectar la intensidad de la lluvia que está cayendo.

Además, crearé un sensor que me dirá la fecha del último día que llovió y uno que me dirá cuántos días hace que no llueve.

Aunque yo ahora lo voy a hacer para detectar la lluvia, también lo podemos utilizar como sensor de inundación.

Me imaginé un montón de cosas antes de tomar la forma más sencilla: medir la resistencia entre 2 conductores separados por unos milímetros con la esperanza de detectar una gota de agua que hubiera caído entre los 2.

Esta técnica tiene el mérito de ser sencilla, pero presenta algunos problemas, el mayor de los cuales es la corrosión de los conductores, realizándola correctamente podremos limitarla.

Características

  • Intervalo de intento de detección de lluvia ajustable (mediante el potenciómetro que incluye el propio sensor)
  • Bajo costo
  • Todas las funciones utilizables con ESPHome

El módulo, lo voy a instalar en una caja impermeable IP65 para proteger las partes electrónicas. Esta cajita la he comprado en un bazar. También la encontrarás en tiendas de bricolaje.

Piezas necesarias para construir el sensor de lluvia con ESPHome

Para poner en marcha este sensor, son imprescindibles las siguientes piezas.

Instalación mh-rd sensor de lluvia

Para instalar el firmware en el ESP32, le invito a seguir el procedimiento descrito en mí manual de Inicio de ESPHome.

Detección de lluvia

El sensor utilizado proviene de un kit de detección de lluvia que se encuentra fácilmente en línea cuya foto se muestra a continuación.

mh-rd sensor de lluvia

El kit tiene 1 entrada para el sensor, 1 potenciómetro para ajustar el umbral de sensibilidad, 2 Leds y 2 salidas: una analógica y otra digital.

Operación:

  • Por defecto, cuando está seco, la resistencia es muy alta.
  • Cuando el sensor detecta seco, cada 5 segundos, se toma una medida y se promedia, si el valor + el umbral de detección de lluvia es inferior a la última medida, entonces se considera lluvia (o nieve).
  • Si la resistencia promedio del sensor menos el umbral de detección de secado supera el último valor leído, se considera que el sensor se está secando.

Hay muchas variables de configuración que le permiten configurarlo todo.

Nota: Para el caso de la nieve, los umbrales pueden NO ser los mismos. También sería posible configurar para distinguir la lluvia de la nieve, pero yo no lo voy a hacer ya que en mi ciudad no nieva prácticamente nunca (en 2023 hace 15 años que no cae ni un copo de nieve ☹).

Cableando del mh-rd sensor de lluvia con un ESP32

SensorESP32Comentario
GNDGNDNegro
VCCVCC (3,3-5 V)Rojo
A0 (salida analógica)Entrada analógica 0 (SN)Verde
D0 (salida digital)Entrada digital (SP)Naranja

Esquema de cableando del mh-rd sensor de lluvia con un ESP32 wroom-32

Código para utilizar en ESPHome para el mh-rd sensor de lluvia

sensor:
  - platform: adc
    id: source_sensor
    pin: GPIO39 #AO-SN
    name: Intensidad de lluvia
    attenuation: 11db
    internal: False

    # Es importante tener un intervalo de actualización bajo para que
    # la medición tenga tiempo para hacerse correctamente durante
    # la activación de la tensión

    update_interval: 5s

    filters:
      - multiply: 0.846153 # 3.9 (11db attenuation full-scale voltage) -> 3.3V
      - median:
          window_size: 7
          send_every: 4
          send_first_at: 3

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO36 #DO-SP
      inverted: true
    name: "Sensor de lluvia ESPHome"

Tarjeta indicadora

Aprovechando el cambio de voltaje, creo una tarjeta indicadora que me muestre de forma gráfica la intensidad de lluvia. Al final del artículo, tienes el nuevo sensor de intensidad.

Código para crear esta tarjeta indicadora

type: gauge
min: 0
max: 4
entity: sensor.intensidad_de_lluvia
segments:
  - from: '3.6'
    color: green
    lavel: Seco
  - from: '2.5'
    color: blue
  - from: '1.5'
    color: yellow
  - from: '0'
    color: red
needle: true
name: Intensidad de lluvia

¿Cuántos días hace que no llueve?

Vamos a ver cómo crear los sensores que nos den la fecha del último día y hora que llovió y así mismo del recuento de días que no llueve.

Código para pegar en el archivo configuration.yaml o en el templates.yaml si lo tienes creado

template:
  - trigger:
      - platform: state
        entity_id: binary_sensor.sensor_de_lluvia_esphome
        to: 'off'
        from: 'on'
    sensor:
      - name: End of Last Rain
        state: >
          {{ now() }}
  - sensor:
      - name: Days Since Last Rain
        state: >
          {% if is_state('binary_sensor.sensor_de_lluvia_esphome', 'on') %}
            0
          {% else %}
            {{ (now() - states('sensor.end_of_last_rain') | as_datetime).days }}
          {% endif %}

Este sensor nos da la fecha del último día que llovió en un formato nada amigable. En base a este, voy a crear dos sensores uno que me dará solo la fecha del último día que llovió y el otro me dará la fecha y hora, pero en un formato más amigable. Si decides crear estos dos sensores, tienes que copiar este código en tu archivo sensors.yaml

- platform: template
  sensors:
    fecha_ultimo_dia_que_llovio:
      friendly_name: Último día que llovió
      value_template: "{{ as_timestamp(states('sensor.end_of_last_rain')) | timestamp_custom('%d-%m-%Y, %H:%M') }}"
      icon_template: mdi:weather-rainy

- platform: template
  sensors:
    fecha_ultimo_dia_con_lluvia:
      friendly_name: Último día con lluvia
      value_template: "{{ as_timestamp(states('sensor.end_of_last_rain')) | timestamp_custom('%d-%m-%Y') }}"
      icon_template: mdi:weather-rainy

Finalmente doy formato a estos dos sensores en el archivo customize.yaml

sensor.days_since_last_rain:
  friendly_name: Días sin lluvia
  device_class: moisture
sensor.fecha_ultimo_dia_que_llovio:
  device_class: moisture
sensor.fecha_ultimo_dia_con_lluvia:
  device_class: moisture

Sensor de intensidad de lluvia

Aprovechando el cambio de voltaje en la placa cuando llueve, creo este sensor que me marca la intensidad de lluvia de 0 a 10. En tu caso, tendrás que cambiar el sensor.intensidad_de_lluvia por el id de tu sensor.

- platform: template
  sensors:
    lluvia_intensidad:
      friendly_name: "Intensidad de Lluvia"
      unit_of_measurement: ""
      value_template: "{{ ((3.73 - states('sensor.intensidad_de_lluvia')|float) / 3.73 * 10)|round(0) }}"

Tarjeta indicadora de intensidad de lluvia

type: gauge
entity: sensor.lluvia_intensidad
needle: true
severity:
  green: 1
  yellow: 4
  red: 7
min: 0
max: 10

Sígueme a YouTube

Sígueme en Youtube - mh-rd sensor de lluvia
(Visited 3.011 times, 2 visits today)
Ads Blocker Image Powered by Code Help Pro

¡Hemos detectado un bloqueador de anuncios!

Parece que estás utilizando un bloqueador de anuncios. Nunca vamos a cobrar para ofrecer el contenido, pero sí dependemos de la publicidad para financiar y mantener activo este sitio web. Si disfrutas del contenido que ofrecemos, por favor, añade tecnoyfoto.com a la lista blanca de tu bloqueador de anuncios para seguir accediendo a nuestro contenido.

¡Gracias por tu apoyo!