Skip to content

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.

Índice de contenido

    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
    Ajustes