Controlador para EcoSpa Ouro Fino ESPhome

Meu PC está bugando. Salvei postando para não perder. Jajá edito e concluo.

3 anos depois, eu finalmente tirei o projeto da prateleira e terminei, refinando o código com ajuda do Gemini.

Relembrando, o EcoSpa ouro fino, tem um painel simples originalmente. Funções: Hidro, e Aquecimento. Mostrador simples de temperatura. Se o aquecedor está ligado, e desliga-se a hidro, um timer de 10s continua rodando a hidro depois de desligar o aquecedor, para evitar superaquecimento da resistência.

Objetivo inicial: Mesma funcionalidade, porém com controle via Home Assistant.

Por engenharia reversa, e algumas ajudas de quem conhece mais que eu, consegui mapear as entradas e saídas do controle. Há uma caixa de potência que recebe 220vac, e converte para 12vdc e 5vdc. Esta placa de potencia recebe os comandos do painel, que realiza a logica de controle. Painel comanda o aquecimento e bomba por níveis lógicos e faz o controle de temperatura também.

Entradas:
VCC GPIO4 GPIO18 Marrom
Terra GPIO5 GPIO21 Laranja
Nível de água GPIO27 Vermelho
NTC GPIO23 Azul

Saídas:
Bomba Hidro GPIO16 Amarelo
Aquecedor GPIO17 Verde

Esses são os dados da minha banheira, mas a Ouro Fino é bem artesanal, então as cores de fios podem variar.
Com base nessas informações, criei um código na unha no ESPhome. Desconhecia o tipo do NTC, então medi a resistência do NTC em duas temperaturas diferentes 25c = 108.8k Ohm, 30c= 80k ohm.

Usei um SSD1306 que tinha em casa de um kit de eletrônicos que comprei a anos. 128x64pixels.

Queria um terceiro modo que é: quando a banheira chega na temperatura correta, a bomba da hidro desliga automaticamente, respeitando os 10 segundos de segurança. Re-ligando automaticamente quando a temperatura cai. Eu aumentei o tempo de segurança para 20s, porquê notei que sempre que desligava o aquecedor, a temperatura aumentava uns 2 ou 3 graus com apenas 10 segundos. Com 20, dá tempo da resistência esfriar completamente.

Além disso, queria um modo que a banheira pudesse continuar funcionando, mas que as teclas fisicas não atuassem. Tenho um filho de menos de 2 anos que adora apertar botôes, então acrescentei esse modo.

O código final foi refinado no Gemini, então use sabendo disso.

ESP32 opera em 3.3v, e o ATtiny opera em 5V, então usei optoacopladores nas entradas e saídas.
A minha caixa de potencia usa um transistor 78L05 para fornecer 5vcc, ele não aguenta tocar o ESP32, então tive que abrir a caixa e trocar o 78L05 por um 7805. Aparentemente algumas caixas de potência já vêm com o 7805. Vale a pena verificar qual é a sua.

O último problema foi, como deixar o projeto a prova d’agua. Usei botôes ip67 do ali express, e caixas de projeto ip67 também do ali express. Mas mesmo assim tive problema com água. Então resolvi fazer uma PCB sob medida, e separar os botões e tela, do microcontrolador e optoacopladores. O PCB fica dentro da banheira longe da água, e os botôes/tela ficam no lugar do controlador original.

Para acabamento visual, vou utilizar adesivo DTF colado no acrílico da caixa. Pensei em mandar fazer teclado membrana, mas é caro, então reaproveitei os botões do ali express, usei uma quantidade desrespeitosa de PU, e vamos ver o quanto aguenta.

Abaixo ilustrações e código:


Primeiro protótipo de bancada funcionando, com um RpiPico como osciloscópio.