O Sofá da Comunidade ficou inteligente!

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.


(.STL das caixas nos Anexos)

  1. 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.


(Vista traseira da placa)

  1. 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.

  1. 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.

  1. 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 :joy:)

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).


(Corte da pista 29V)


(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!


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade