Resumo
Este projecto consiste em integrar um sofá com “relax eléctricos” ao Home Assistant, utilizando um ESP32 Mini D1 com Tasmota32.
O sofá em questão tem 3 lugares, cada um com um comando de 2 microswitchs para abrir ou fechar o atuador linear por baixo do sofá que faz mover a estrutura mecânica e reclinar o sofá para uma posição de quase deitada.
Descrição
Para além da abertura e do fecho mecânico já existente, vamos poder fazer alguns upgrades e automações, tais como voltar a abrir o sofá em caso de algum objeto ficar entalado entre assentos, por exemplo, aquele chinelo esquecido que ficou preso, etc.
Controlar o sofá com a Alexa, levantar todos os assentos para que o vosso robot aspirador possa aspirar por baixo, são algumas das potencialidades deste projeto.
Lista de Material
1x ESP32 Mini D1
3x Módulo de 2 relés 5v compatíveis com arduíno
1x Fonte de alimentação Hi-Link HLK-PW01 de 3W
1x Perfboard 9x15
5x Bloco de terminais de 4 pinos
4x Bloco de terminais de 2 pinos
1x Ficha IEC tipo 8 de painel
12x Ficha RJ45 fêmea para PCB
12x Fichas RJ45 para cabo
3x Ficha DIN 4 pinos de painel
3x Ficha DIN 4 pinos para cabo
1x Cabo IEC tipo 8
+/- 8m de cabo de rede
Planeamento
Iremos fazer 1 caixa central e 3 caixas individuais para cada assento, que irão ligar à caixa central. As ligações destas caixas serão feitas com cabo de rede, uma vez que precisamos de 7/8 condutores entre cada caixa à caixa central.
Nas caixas de cada assento irão ligar os cabos do motor, os cabos da central, os cabo dos comandos e os cabos dos reed switchs.
-
Perfboard
Este é o layout da perfboard (caixa central), onde iremos colocar o ESP32 Mini D1, a fonte de alimentação Hi-Link e os blocos de terminais.
Vamos utilizar 6 GPIO para atacar os relés, 6 GPIO para receber o controlo dos microswitchs e 3 GPIO para receber a informação dos reed switchs.
-
Relés
Cada módulo de 2 relés irá fazer abrir ou fechar um atuador linear. Este irá receber 5V, GND, IN1 e IN2 vindos da central e 29V, GND, K1 e K2 do motor.
-
Microswitchs
Cada comando tem dois microswitchs, um irá abrir e outro irá fechar cada assento do sofá, no entanto, teremos de retirar o comando para o ligar diretamente ao ESP32.
-
Reed switchs
Cada assento terá, por baixo do sofá, um reed switch para receber a informação se o sofá fechou corretamente ou se algo o impediu de fechar, será com este sensor que teremos a informação se algum objecto ficou entalado no sofá ou não.
Mãos à Obra!
Comecemos então por soldar a perfboard seguindo o esquema supra mencionado. A minha ficou com este aspecto:
(Eu sei que não está muito bonita, mas foi a primeira vez que soldei electrónica )
A seguir, a caixa central terá uma ficha IEC tipo 8 que irá fazer ligação com o bloco de terminais já soldados, provenientes do AC do Hi-Link. Terá também 3 fichas RJ45 para ligar a cada uma das caixas individuais, para isso, iremos usar o esquema de ligações tipo B.
Com base neste esquema, iremos utilizar os fios do cabo de rede para o seguinte:
GND – Branco/Laranja da Ficha 1, 2 e 3 e Branco/Castanho da Ficha 1, 2 e 3
5V – Laranja da Ficha 1, 2 e 3
R1 – Branco/Verde da Ficha 1
R2 – Azul da Ficha 1
R3 – Branco/Verde da Ficha 2
R4 – Azul da Ficha 2
*RR1 – Branco/Verde da Ficha 3
R6 – Azul da Ficha 3
S1 – Branco/Azul da Ficha 1
S2 – Verde da Ficha 1
S3 – Branco/Azul da Ficha 2
S4 – Verde da Ficha 2
S5 – Branco/Azul da Ficha 3
S6 – Verde da Ficha 3
RS1 – Castanho da Ficha 1
RS2 – Castanho da Ficha 2
RS3 – Castanho da Ficha 3
*Nota: Nos testes iniciais, o GPIO representado pelo R5 passou a fazer pullup quando ligado ao módulo de relés, pelo que troquei esta ligação para o RR1 (GPIO de Reserva).
Depois da caixa central feita, avançamos para as caixas individuais, sendo que cada caixa deverá conter, para além do módulo de relés, 3 fichas RJ45 e uma DIN de 4 pinos. Uma RJ45 será para receber os sinais da caixa central, outra ficha será para o comando e outra ficha para o reed switch. A ficha DIN de 4 pinos servirá para receber o cabo do motor e ligar à saída dos relés.
A ficha CENTRAL terá o seguinte esquema:
Branco/Laranja – GND
Laranja – 5V
Branco/Verde – IN1 (Relé)
Azul – IN2 (Relé)
Branco/Azul – K1 (Microswitch)
Verde – K2 (Microswitch)
Branco/Castanho -– GND
Castanho – Reed Switch
Do motor vem uma ficha DIN de 5 pinos. O comando, originalmente, ligava a essa ficha de 5 pinos. Retirei o cabo do comando e usei o cabo para fazer a ligação entre a ficha do motor (5 pinos) e a caixa de cada assento (4 pinos).
Os fios do cabo do motor são:
Verde – 29V
Branco – GND
Preto – K1 (Abre)
Amarelo – K2 (Fecha)
Nas fichas DIN de 4 pinos usamos:
Pin 1 – 29V
Pin 2 – K1
Pin 3 – K2
Pin 4 – GND
Depois ligamos os fios do motor à saída dos relés:
No meu caso, os comandos têm uma placa com 2 microswitchs, no entanto, os NO tinham um shunt na pista dos 29V, pelo que cortei a pista de forma a isolar os NO dos microswitchs, mantendo o Comum e o NC em shunt com o GND.
Ao fazer a cablagem do comando devemos ter em conta que cada NC terá que ter um cabo de GND, uma vez que a continuidade da pista não chega para fazer o switch atuar. Posto isto, o fio laranja do cabo do comando tem um shunt com o fio branco/laranja (GND).
(Novo esquema de ligações do comando ao ESP32)
No final, o comando deverá ficar com este aspeto:
Por fim, fazemos os reed switchs usando o fio Branco/Castanho como GND e o Castanho para fechar o circuito.
(montagem do RS entre a base do sofá e a parte que levanta)
Programação
Terminada a fase de DIY, avançamos para a programação do ESP32 Mini D1. Para isso vamos flashar com Tasmota32 usando o ESPHome-Flasher.
Configurada a fase inicial do Tasmota, é necessário configurar o MQTT e seguir para o Configure Module.
Com base no pinout do ESP32 Mini D1,
vamos usar os seguintes GPIOS:
Caixa 1 (Assento direito do sofá)
GPIO15 – IN1 (Relé)
GPIO02 – IN2 (Relé)
GPIO21 – K1 (Microswitch)
GPIO17 – K2 (Microswitch)
GPIO14 – Reed Switch
Caixa 2 (Assento do meio do sofá)
GPIO0 – IN1 (Relé)
GPIO4 – IN2 (Relé)
GPIO16 – K1 (Microswitch)
GPIO19 – K2 (Microswitch)
GPIO5 – Reed Switch
Caixa 3 (Assento esquerdo do sofá)
GPIO12 – IN1 (Relé)
GPIO27 – IN2 (Relé)
GPIO18 – K1 (Microswitch)
GPIO26 – K2 (Microswitch)
Os parâmetros devem ficar iguais à imagem infra:
Depois vamos abrir a consola do Tasmota e fazer os seguintes comandos:
Backlog SO80 1; ShutterRelay1 1; ShutterRelay2 3; ShutterRelay3 5
Backlog Interlock1 1,2; Interlock2 3,4; Interlock3 5,6; Interlock ON
Backlog ShutterOpenDuration1 7.5; ShutterOpenDuration2 7.5; ShutterOpenDuration3 7.5
Backlog ShutterCloseDuration1 8; ShutterCloseDuration2 8; ShutterCloseDuration3 8
Backlog ShutterMode7 1; ShutterMode8 1; ShutterMode9 1
Rule1 on Switch7#state do publish2 stat/%topic%/Reed1 %value% endon
Rule2 on Switch8#state do publish2 stat/%topic%/Reed2 %value% endon
Rule3 on Switch9#state do publish2 stat/%topic%/Reed3 %value% endon
Backlog Rule1 1; Rule2 1; Rule3 1
Nota: Estes valores devem ser definidos consoante o tempo que o sofá demora a abrir e a fechar. No meu caso, foram estes os valores em resultado.
Após a configuração do Tasmota, vamos ao Home Assistant e, através da integração do Tasmota, vamos verificar se o dispositivo já está disponível, se sim, avançamos para o próximo passo:
Na configuração do Home Assistant, para apanharmos o estado dos reed switchs, vamos acrescentar o seguinte código:
binary_sensor:
- platform: mqtt
name: Sensor Sofa Direito
state_topic: "stat/sofa/Sensor1"
payload_on: "0"
payload_off: "1"
device_class: opening
- platform: mqtt
name: Sensor Sofa Meio
state_topic: "stat/sofa/Sensor2"
payload_on: "0"
payload_off: "1"
device_class: opening
- platform: mqtt
name: Sensor Sofa Esquerdo
state_topic: "stat/sofa/Sensor3"
payload_on: "0"
payload_off: "1"
device_class: opening
Nota: Na configuração do meu Tasmota, o device tem o nome de “Sofa”.
Por fim, para fazer a automação do sofá em caso de algum objecto ficar preso, vamos ao Node-Red e utilizamos o seguinte flow:
Este flow irá fazer com que o sofá abra individualmente cada assento a 40%, caso o assento não feche de forma correcta.
(.json em anexo)
Vídeos
Controlo por voz com Alexa:
Simulação de objecto entalado:
Interação com Roborock S6 MaxV:
Anexos
.JSON do flow do Node Red
STL da caixa central
STL da tampa para a caixa central
STL da caixa pequena
STL da tampa para a caixa pequena
Considerações finais
Este projecto surgiu de uma ideia antiga e no âmbito do concurso da CPHA, no entanto, este projeto não seria possível sem a partilha de conhecimento de toda a comunidade e os agradecimentos seriam maiores que a própria documentação do projecto, mas não posso terminar sem agradecer aos meus mentores @Luis_Andrade e @tmarquespt, por todo o tempo e paciência, agradecer ao @JorgeTeixeira por me levar para os maus caminhos das perfboards, ao @Encarnacao e ao @j_assuncao pelas aulas de 3D, ao @RodolfoVieira pela ajuda na impressora 3D, um agradecimento também especial ao @FSousa, entre muitos outros membros que me ajudaram e tornaram este projeto possível. Obrigado a todos!