Integrar sensores de ultrasonido con ESPHome

Integrar sensores de ultrasonido con ESPHome

En esta entrada aprendemos a integrar sensores de ultrasonido con ESPHome, un dispositivo con aplicaciones muy útiles!

🥑 Si estás empezando con ESPHome, te recomiendo que veas el taller de la academia para sacarle el máximo partido!

¿Para qué sirve un ultrasonido?

Los sensores de ultrasonido sirven, básicamente, para medir distancias. Estos utilizan ondas sonoras de alta frecuencia para determinar cómo de lejos está un objeto, emitiendo una onda y calculando cuánto tiempo tarda en volver.

Tanto su funcionamiento como su instalación es muy sencilla, pero a pesar de ello pueden ser la herramienta perfecta para solucionar algún caso de uso. Por ejemplo, algunos usos típicos son la medición de depósitos o utilizarlo como «chivato» en el garaje para que no llegues a tocar pared con el coche.

En mi caso, quiero utilizarlos para detectar cuando la cafetera se queda sin agua, y para disparar una escena de iluminación en el salón, en función de la posición de los muebles(suena raro, pero sigue leyendo 😅).

Requisitos previos

Para integrar sensores de ultrasonido con ESPHome necesitas lo siguiente:

[content-egg module=Aliexpress2 template=grid groups=»componentes» cols=4 cols_xs=2 cols_sm=2]

*Algún precio puede haber cambiado desde la última revisión

Conexión del HC-SR04

Lo primero que vamos a hacer es conectar dicho sensor con nuestra placa. Como siempre, lo primero que te recomiendo es que consultes el ‘pinout’ (o distribución de pines) de la placa. En mi caso voy a utilizar una placa ESP32-Dev-Kit-v1 y este es su ‘pinout’.

Pinout ESP-WROOM-32

Por otro lado, el sensor HC-SR04 tiene el siguiente aspecto, que nos lleva al siguiente esquema de conexión.

  • Vcc irá conectado al pin de alimentación VIN de la placa.
  • Trig irá conectado al GPIO5 de la placa.
  • Echo irá conectado al GPIO18 de la placa.
  • Gnd irá conectado al pin GND (‘ground’ o tierra) de la placa.

Configuración de ESPHome

Ahora tenemos que ‘flashear’ la placa con ESPHome y la configuración correspondiente, que vamos a extraer directamente de la documentación ESPHome sobre el componente Ultrasonic Distance Sensor. Para ello sigue estos pasos:

  1. Conecta la placa a tu ordenador a través del puerto USB.
  2. En Home Assistant, accede al complemento de ESPHome desde el menú lateral y pulsa en “New device”. Pulsa en “Continue” y dale un nombre (por ejemplo, “Sensor de Ultrasonido”).
  3. Pulsa en “Next” y a continuación selecciona la opción “ESP32” como tipo de dispositivo. Verás que en el fondo se ha creado un nuevo dispositivo.
  4. Pulsa en “Skip” y haz clic en el enlace “Edit” del bloque correspondiente al dispositivo que acabas de crear.
  5. Añade las siguientes líneas al final del código.
captive_portal:

sensor:
  - platform: ultrasonic
    trigger_pin: GPIO5
    echo_pin: GPIO18
    name: "Distancia"
    id: distance
    update_interval: 2s
    timeout: 2m
    pulse_time: 10us
    unit_of_measurement: "m"
    accuracy_decimals: 1
  1. Cuando hayas terminado de editar el código pulsa en “Save” e “Install”. Selecciona la opción “Manual download” y espera a que el código se compile.
  2. Cuando termine, selecciona la opción “Factory format (Previously Modern)” para descargar el fichero ‘.bin’ correspondiente.
  3. Ahora ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
  4. Pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 7. De nuevo, pulsa en “Install”.
  5. Vuelve a Home Assistant y ve a Configuración > Dispositivos y servicios. Lo normal es que tu dispositivo haya sido descubierto y aparezca en la parte superior, esperando únicamente a que pulses el botón de “Configurar”.
⚠️ De lo contrario, pulsa en el botón de “Añadir integración”, busca “ESPHome” e introduce la IP de tu placa en el campo ‘Host’.
  1. Como siempre, te recomiendo que asignes una IP fija en tu router para evitar fallos en el futuro si esta cambia.

Adaptación a tu caso de uso

Bien, ya has conseguido integrar sensores de ultrasonido con ESPHome y debe estar reportando la distancia. Sin embargo, lo suyo es crear un sensor en lenguaje humano que interprete esa distancia en función de para qué quieres usarlo.

Te expongo mi caso. En el salón tengo dos «escenas», una de ellas es la de iluminación normal (con la lámpara de techo), por ejemplo, mientras estamos cenando sobre la mesa. La segunda es la de «modo relax» (con iluminación LED suave e indirecta), que utilizamos cuando estamos un rato relajados en el sofá viendo la televisión.

Hasta ahora cambiaba entre escenas con un mando, pero me di cuenta de que hay un gesto inequívoco que significa que hemos pasado al «modo relax». En concreto, retiramos la mesa y colocamos un «puf» para poner los pies.

Este cambio en la posición de los muebles modifica de forma significativa la distancia que hay entre el mueble de la televisión y la mesa. Por tanto, puedo utilizarlo como desencadenante entre las distintas escenas.

Para ello he añadido un sensor ‘template’ al código de ESPHome, que puedes adaptar como quieras.

captive_portal:

sensor:
  - platform: ultrasonic
    trigger_pin: GPIO5
    echo_pin: GPIO18
    name: "Distancia"
    id: distance
    update_interval: 2s
    timeout: 2m
    pulse_time: 10us
    unit_of_measurement: "m"
    accuracy_decimals: 1

text_sensor:
  - platform: template
    icon: mdi:sofa
    name: "Escena"
    update_interval: 2s
    lambda: |-
      if (id(distance).state > 1) {
        return {"Normal"};
      } else {
        return {"Relax"};
      }

Luego he cortado y soldado los cables para que el dispositivo fuera más compacto, y he diseñado una carcasa bonita para colocar el dispositivo en el mueble, disimulándolo con el resto de la decoración.

⭐ Si tienes una impresora 3D puedes descargar el soporte que he creado desde nuestro perfil de Patreon. Y si no, también puedes comprarlo en La R3D y recibirlo en casa!

A partir de ahí ya puedo utilizar el cambio de estado de la entidad como desencadenante en el cambio de escenas.