Controlador de acuario con ESP32/Arduino

Subforo para nuestros bricos y dudas sobre el "hardware" y la decoración de nuestros acuarios

Moderador: Nandi

Responder
Avatar de Usuario
Blinkito
Mensajes: 24
Registrado: Dom, 15 Ene 2023, 22:54
Acuarios: 300L
Ubicación: Málaga

Controlador de acuario con ESP32/Arduino

Mensaje por Blinkito »

Hola compañeros,

Por aquí os traigo un proyecto de cambio de agua automatizado y algunos extras añadidos para nuestros acuarios. No puedo decir que sea exclusivamente con Arduino, porque es un compendio de tecnologías, aunque sí que se basa en el mismo.

Imagen

Paso a explicaros cómo funciona y cómo lo he realizado sin entrar demasiado en detalles de configuración y código, aunque si alguno quiere más detalles estaré encantado de explicarle.

Antes de nada y para poneros en contexto:
Mi acuario (300 L) tiene entrada y salida de agua unidas a las de la red aprovechando la entrada de agua y el desagüe del fregadero de la cocina que me queda al lado. Ya cuando lo monté lo hice pensando en automatizar todo lo posible. Al principio sólo tenía la entrada con 2 llaves de paso de PVC: una abre y cierra y la segunda regula el caudal de entrada al acuario. Con la automatización añadí una electroválvula entre ambas de forma que sigo teniendo la primera llave para cerrar si es necesario para mantenimiento o alguna emergencia y la que regula el caudal.

Bien, pasemos ahora a los requisitos que tenía pensados para el proyecto de automatización:
  • Controlable tanto a través del móvil como a través de asistente de voz (Siri en mi caso, aunque pudiera ser cualquiera de los otros dos grandes: Alexa o Google Home). Aquí un inciso, yo trabajo con Siri como asistente de voz por cuestiones de privacidad: me da control local de mis dispositivos aunque se vaya internet y es así porque los datos no pasan por un cloud en los servidores de la compañía, como sí ocurre con Alexa o Google, que dependen de que haya conexión para funcionar.
  • Controlable tanto dentro como fuera de casa, es decir, que tenga acceso a ello desde mi red local o fuera de la misma.
  • Poder ver valores de: temperatura, pH, caudal de agua actual y litros cambiados diaria, semanal o mensualmente, según se quiera. Así como un registro en el tiempo de los datos.
  • Poder consultar valores a través de una pantalla en el mueble del acuario sin necesidad de mirar el móvil o el PC.
  • Poder mantener la automatización aunque no tenga conexión a internet. Esto no tiene nada que ver con el asistente de voz. Es cuestión de que las variables que almacenan los datos de horario y días se guarden en local en el dispositivo que controla la válvula. Se detalla más adelante.
  • Posibilidad de ampliar la instalación si se necesita más adelante. Por ejemplo, por si en algún momento pongo un sump con su bomba de subida, si entra en el circuito un depósito de agua que tratar antes de meter en la urna, control de la iluminación o cualquier otra situación que pueda desencadenar en más dispositivos que controlar.
Por todos estos requisitos y aprovechando que en casa ya tengo un servidor en el que corren una serie de servicios, entre ellos Home Assistant, me decanté por usar:

- Placa ESP32 (similar a Arduino).
- ESPHome (software para programar la placa).
- Home Assistant (software para controlar domótica).

Pero esto no es lo único necesario para llevar a cabo el proyecto. Hay muchas casuísticas dependiendo de qué hardware (placa, sensores, válvulas) queramos utilizar y de cómo queramos instalar el software (servidor dedicado (Home Assistant OS), servidor con Docker, PC con Windows, Mac, máquina virtual…) Así que me centraré exclusivamente en cómo lo tengo yo montado.

Si alguno está interesado en indagar más puedo darle enlaces u orientación sobre el resto de opciones.

En cuanto a mi configuración, pasemos a diferenciar entre hardware y software.

Hardware:

- Placa ESP32
- Protoboard
- Relé en estado sólido (SSR). Puede ser uno normal, pero los SSR no hacen ruido.
- Conversor AC-DC para pasar de corriente alterna a corriente continua.
- Pantalla OLED i2c. En mi caso modelo SSH1106 de 128x64 px. Valen otros modelos.
- Electroválvula con solenoide a 24v AC.
- Transformador de 220v a 24v AC.
- Sensor de temperatura DS18b20 encapsulado.
- Conectores macho jack 6.3 mm o minijack de 3.5 mm de 3 polos (entrada de voltaje, tierra y datos).
- Conectores hembra jack según medida del conector macho de 3 polos.
- Caudalímetro YF-S201, hay otras opciones también válidas. Cuestión de adecuar los cálculos a la frecuencia del modelo.
- Una caja donde meterlo todo (yo usé una impresora 3D para la mía, pero puede valer una caja de conexiones estanca).


Sofware:

- Instalación de ESPHome.
- Instalación de broker MQTT.
- Instalación de Home Assistant.
- Instalación de MariaDB (gestor de bases de datos SQL). No es un requisito indispensable.

Y ahora pasemos a montarlo todo.

En cuanto a las instalaciones de software no daré detalles más allá de comentar qué hace cada cosa.
En mi caso lo tengo todo instalado en mi servidor a través de contenedores Docker que ofrecen la posibilidad de mover la instalación de un servidor a otro o a un PC sin apenas dificultad más que copiar los archivos de su carpeta de un sitio a otro.

ESPHome:
Es un software que se usa para programar placas ESP32 o Arduino en yaml que es un lenguaje declarativo, esto quiere decir que no necesitamos saber de programación. El software convertirá el yaml en los archivos necesarios para que el código funcione en la placa. Incluso descargará las librerías necesarias. Algo que normalmente deberíamos gestionar nosotros mismos si lo hacemos con Arduino IDE o PlatformIO en Visual Studio Code.
Además, podemos ver los logs o hacer cambios en el código e instalarlos en la placa de manera inalámbrica una vez que hemos iniciado el proyecto.

MQTT:
Es un sistema de comunicación entre las placas ESP32 o Arduino y un software de control como Home Assistant. Haciendo que las primeras sean detectadas y controladas por el software.

Home Assistant:
Como ya he dicho anteriormente, es un software que permite, a grandes rasgos, controlar dispositivos electrónicos por wifi, zigbee o bluetooth. Aunque va mucho más allá ofreciendo compatibilidad con miles de productos, servicios y una amalgama de configuraciones de automatización que hacen que Siri, Alexa o Google Home se vean como si fueran del siglo pasado.

MariaDB:
Es un gestor de bases de datos SQL. Una base de datos no es más que una tabla donde se almacenan datos relacionados entre sí.
Por defecto, Home Assistant crea su propia base de datos en su carpeta de configuración, pero cuando tienes una instalación donde ya tienes cierto número de dispositivos o automatizaciones en las que las llamadas a la base de datos para registrar o leer los mismos suelen ser muy frecuentes Home Assitant tiende a ralentizarse. En estos casos se recomienda tener la base de datos separada del mismo de forma que Home Assistant sólo se encarga de controlar los dispositivos y el gestor de bases de datos se encarga de gestionar las lecturas y escrituras en ella.

Bien, ahora después del tostón de software pasemos a lo que más mola, el cacharreo puro y duro!
  1. Lo primero es conectar la placa ESP32 a la protoboard, teniendo cuidado de dejar sitio para hacer las conexiones que vayamos a necesitar. En mi caso puse unos conectores dupont hembra unidos a los pines de la placa y puse unos conectores para la entrada de corriente y tierra que se unían a los pines correspondientes de la placa, para alimentarla.
  2. La entrada de alimentación para el circuito.
    En mi caso parto de un transformador de 220v a 24v desde la regleta a la caja de conexiones.
    Aquí ya tuve en cuenta una resistencia que hay que poner entre la alimentación y la conexión de datos del sensor de temperatura para que de los valores correctos.

    Esta corriente de 24v AC es la que usaré para dos cosas:
    • Alimentar a través del relé SSR el solenoide de la electroválvula ya que funciona a 24v AC, el cuál abrirá y cerrará el propio relé.
    • Alimentar el relé SSR y la placa ESP32 que van a 5v a través del conversor de AC a DC que se regula con un potenciómetro que lleva.
  3. Las conexiones del sensor de temperatura, sonda de pH y caudalímetro.
    Van todas con los conectores jack hembra.
    Yo usé los de 6.3 mm pensando en que los conectores macho de 3.5 mm serían difíciles de soldar, pero más adelante descubrí que no lo eran así que para próximas versiones cambiaré los conectores hembra de 6.3 mm que ocupan mucho espacio en la caja por otros de 3.5 mm.

    Excepto el conector de la electroválvula que va a 24v y es controlada por el relé, el resto (pH y caudalímetro) llevan su conexión de Vin y GND a la protoboard compartida con los de la placa porque funcionan a 5v.
  4. El resto es decidir qué pines se usarán para los datos de los sensores, conectarlos y apuntarlos para la configuración del código.
  5. La caja.

    Como os comenté antes, al principio iba a usar una caja estanca, pero en el transcurso del proyecto compré una impresora 3D y al final acabé diseñando e imprimiendo la caja según las necesidades del proyecto.

    Además, dado que la sonda de pH, que incluye una placa, tiene un conector tipo BNC que tiene un cable muy corto y no llegaba a donde tengo la caja principal, le diseñé una caja propia a la placa del sensor de pH que tiene el conector BNC y de ahí sale con un conector jack que va hasta la caja principal.
Aquí cuando pensaba meterlo todo en la caja estanca.
Imagen


Aquí imprimiendo ya la caja diseñada por mi.
Imagen


Y aquí la caja para la placa de la sonda de pH.
Imagen

Imagen

Imagen

Configuración:

Una vez que tenemos todo conectado toca configurar el código necesario.

Antes de seguir recomiendo encarecidamente configurar un simple interruptor, sensor de temperatura y sensor para el caudalímetro con los pines elegidos y subirlo a la placa simplemente para comprobar que todo funciona correctamente: que el relé abre y cierra cuando le damos la orden, que el sensor de temperatura envía los datos y que el de pH y el caudalímetro envían también datos, aunque estos no serán los valores directos a usar porque envían pulsos y hay que convertirlos mediante unas fórmulas en el código.

Antes de nada, el código no es mío creado desde cero. Primero porque a día de hoy no tengo todos los conocimientos necesarios para hacerlo y segundo porque gracias a que todo esto es de código abierto hay ya suficiente información en internet como para poder hacerlo simplemente modificando el código a nuestras necesidades.

Siendo esto así, encontré un código usado para un sistema de riego en el que se creaban varias zonas de riego (zona 1, zona 2…), varios interruptores que son los relés (interruptor 1, interruptor 2…), días de activación (los días de la semana), horarios (horario 1, horario 2…) y la duración (duración 1, duración 2…).

Cogí el código y lo adapté a lo que necesitaba:
- Me quedé con una única zona porque sólo iba a controlar una electroválvula: zona 1.
- Un único relé: interruptor 1.

El resto: días de la semana, horarios y duración aunque borré todo para quedarme sólo con uno de cada, no hacía falta modificarlos porque sólo son variables que almacenan datos que les enviamos desde Home Assistant.

Me explico:
Una variable es una declaración de un elemento que va a almacenar un dato. Este dato no es algo fijo, por eso se llama variable. Y somos nosotros quienes, a través de Home Assistant, le diremos qué valor queremos que tenga tanto en el día o días de la semana que se activará, la hora a la que lo hará y la duración en minutos que tendrá.

Y he aquí el quid de la cuestión, estas variables no están almacenadas en Home Assistant, si no en el código de la placa. Es esto lo que hace posible que el sistema siga funcionando con la programación establecida aunque se apague el servidor o se vaya internet en casa.

Ahora sólo nos queda crear los elementos en el código para los sensores.

El de temperatura es el más fácil porque da los datos directamente.

No obstante, para el sensor de pH necesitaremos calibrar la sonda con las soluciones que incluye, modificando ciertos valores en el código para que la medición sea correcta.

Y para el caudalímetro deberemos introducir una fórmula en la configuración del sensor que variará dependiendo del modelo que tengamos. Básicamente convierte los pulsos que produce al rotar en litros por segundo. Y luego a su vez pasarlos a litros por minuto si así lo preferimos.

Por último, declaramos la configuración de la pantalla, jugamos un poco con el tamaño y posición de la letra, podemos incluso subir una fuente propia y listo.

Subimos la configuración a la placa, vamos a Home Assistant y veremos que ha detectado el dispositivo y todos los elementos que hemos declarado en su código.

Ahora ya es cuestión de crear la página o dashboard mostrando cada elemento según nos guste y lo tendremos.

Este es el mío.
Imagen

En cuanto a cómo poder acceder a esto desde fuera de nuestra red local es otro tema a parte.

Yo lo hago con un dominio propio y un proxy inverso por cuestiones de seguridad. Así no pueden acceder a mi IP real. Pero hay otras formas más sencillas como una VPN.

¿Y cómo puedo controlarlo con el asistente de voz?
Más sencillo aún. Home Assistant tiene integración con Apple Homekit y hace que en la app Casa te aparezcan los dispositivos. Con esto ya se pueden controlar con Siri desde un HomePod. Aquí lo interesante es controlar el interruptor que declaramos en el código que es el que controla el relé de apertura y cierre de la electroválvula.

Y esto es todo.

Os dejo unas fotos del interior una vez todo ensamblado.

Imagen

Imagen

Sé que puede resultar un poco denso :looney , pero también hay otras formas más sencillas de hacerlo tanto la parte de dónde tener instalado Home Assistant como la de automatizarlo todo. Ya depende de lo que os queráis complicar. Entiendo que no todo el mundo tiene las mismas necesidades ni las mismas ganas de complicarse, pero eso es lo bonito de este mundo: todas las diferentes posibilidades que te brinda.

Como comentario final, os dejo las futuras modificaciones que me gustaría llevar a cabo para la v2:
  • Cambiar los conectores de jack de 6.3 mm por otro tipo de conector estanco.
  • Añadir al menos dos conectores más para tener posibilidad de ampliación sin cambiar de caja.
  • Añadir el control de la iluminación con dimmeo y canales con diferente color para el efecto amanecer/atardecer y la luz de luna.
  • Buscar la forma de tener la fuente de alimentación dentro de la caja. Seguramente parte de esto incluya pasar a una electroválvula con solenoide a 9v CC que también admiten 12v y así aprovechar una fuente de alimentación de 12v y un reductor a 5v para la placa, sensores y relés.
Muchas gracias a todos y espero no haberos aburrido demasiado. :jeje

Por aquí estoy si alguno tiene dudas o quiere profundizar más en el tema.

Además, también son bienvenidas todas las ideas que os vengan a la cabeza para poder simplificar o mejorar el sistema.

Un saludo!
Avatar de Usuario
Nandi
Moderador
Moderador
Mensajes: 4415
Registrado: Jue, 30 Jun 2011, 00:00
Acuarios: 630 escalares, 60 fluvial africano, 86 cria
Ubicación: Málaga
Contactar:

Re: Controlador de acuario con ESP32/Arduino

Mensaje por Nandi »

Ya tardabas en presentar ese pedazo de proyecto :biggreen . Buena currada, aunque no he entendido la mitad de lo has escrito :jaja . No dejes de actualizar ese 2.0

Un saludo.
Imagen
Avatar de Usuario
Francistrus
Moderador
Moderador
Mensajes: 10202
Registrado: Mar, 12 Oct 2010, 00:00
Acuarios: 650 Centroamerica, 300 "comunitario", 60 Nannacara anomala
Ubicación: Málaga
Contactar:

Re: Controlador de acuario con ESP32/Arduino

Mensaje por Francistrus »

A mi tambien me parece un proyectazo y totalmente fuera de mi alcance, jeje.
Estaría bien que pusieras precios orientativos, por si alguien se ve con ganas y capacidad de abordar algo parecido.
Un saludo.
Imagen
Avatar de Usuario
Blinkito
Mensajes: 24
Registrado: Dom, 15 Ene 2023, 22:54
Acuarios: 300L
Ubicación: Málaga

Re: Controlador de acuario con ESP32/Arduino

Mensaje por Blinkito »

Nandi escribió: Sab, 04 Nov 2023, 13:46 Ya tardabas en presentar ese pedazo de proyecto :biggreen . Buena currada, aunque no he entendido la mitad de lo has escrito :jaja . No dejes de actualizar ese 2.0

Un saludo.
:jeje la verdad es que sí, lleva ya funcionando unos meses jejeje seguro que serás el primero en saber de la 2.0 ;)
Francistrus escribió: Dom, 05 Nov 2023, 08:15 A mi tambien me parece un proyectazo y totalmente fuera de mi alcance, jeje.
Estaría bien que pusieras precios orientativos, por si alguien se ve con ganas y capacidad de abordar algo parecido.
Un saludo.
Nunca se sabe Fran, todo es ponerse.

Actualizaré el tema con enlaces en cuanto pueda. Aunque como dato orientativo toda la electrónica ha salido por menos de 35€ y todo comprado en AliExpress.

Lo más caro sería la electroválvula y en Leroy Merlín las hay de varios precios rondando de media los 18-20€.

Por otro lado, también tengo pendiente probar a hacerlo mucho más simple de forma que podamos acceder a todo esto desde una URL a la placa y no depender de tantos programas.

De esta forma incluso podrían prepararse las placas con el código que haya preparado previamente así que sería ensamblar, subir código y a funcionar.

Os mantendré informados de los avances!
Vallferrera
Mensajes: 57
Registrado: Sab, 30 Oct 2021, 00:25
Acuarios: un 600 l
Ubicación: Molins de Rei

Re: Controlador de acuario con ESP32/Arduino

Mensaje por Vallferrera »

¿Y un regalito para los del foro? ¿Te lo has planteado? :jaja :jaja
Avatar de Usuario
Blinkito
Mensajes: 24
Registrado: Dom, 15 Ene 2023, 22:54
Acuarios: 300L
Ubicación: Málaga

Re: Controlador de acuario con ESP32/Arduino

Mensaje por Blinkito »

Vallferrera escribió: Jue, 09 Nov 2023, 16:05 ¿Y un regalito para los del foro? ¿Te lo has planteado? :jaja :jaja
Jajajaja si te refieres al código, ya te digo, encantado de cederlo a quien lo quiera.

Para otro tipo de regalos ya no puedo ayudarte, que esta la cosa muy mala :jeje
Responder