# O Sofá da Comunidade ficou inteligente!

**URL:** <https://forum.cpha.pt/t/o-sofa-da-comunidade-ficou-inteligente/7193>\
**Category:** Concurso 1/2021\
**Created:** [11 Março , 2021 22:11 UTC](https://forum.cpha.pt/t/o-sofa-da-comunidade-ficou-inteligente/7193 "2021-03-11T22:11:19Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![philder](https://forum.cpha.pt/user_avatar/forum.cpha.pt/philder/32/8926_2.png) [@philder](https://forum.cpha.pt/u/philder)\
**Post date:** [11 Março , 2021 22:11 UTC](https://forum.cpha.pt/t/o-sofa-da-comunidade-ficou-inteligente/7193/1 "2021-03-11T22:11:20Z")

</div>

## [size=5]Resumo[/size]

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.

* * *

## [size=5]Descrição[/size]

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.

* * *

## [size=5]Lista de Material[/size]

1x [ESP32 Mini D1](https://www.az-delivery.de/en/products/esp32-d1-mini)  
3x [Módulo de 2 relés 5v compatíveis com arduíno](https://mauser.pt/catalog/product_info.php?cPath=324_517_2118&products_id=096-8841)  
1x [Fonte de alimentação Hi-Link HLK-PW01 de 3W](https://mauser.pt/catalog/product_info.php?cPath=1667_2604_1758&products_id=096-6877)  
1x [Perfboard 9x15](https://www.amazon.es/Universal-Prototipo-Circuito-Protoboard-Arduino/dp/B01D8N1Z5O/ref=sr_1_fkmr0_1?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=perfboard+9x15&qid=1615422379&sr=8-1-fkmr0)  
5x [Bloco de terminais de 4 pinos](https://mauser.pt/catalog/product_info.php?cPath=1874_640_1512&products_id=011-2825)  
4x [Bloco de terminais de 2 pinos](https://mauser.pt/catalog/product_info.php?cPath=1874_640_1512&products_id=011-2823)  
1x [Ficha IEC tipo 8 de painel](https://mauser.pt/catalog/product_info.php?cPath=1874_640_1107&products_id=011-2621)  
12x [Ficha RJ45 fêmea para PCB](https://mauser.pt/catalog/product_info.php?cPath=1874_640_358&products_id=015-0337)  
12x [Fichas RJ45 para cabo](https://mauser.pt/catalog/product_info.php?cPath=1874_640_358&products_id=015-0496)  
3x [Ficha DIN 4 pinos de painel](https://mauser.pt/catalog/product_info.php?cPath=1874_640_463&products_id=011-1858)  
3x [Ficha DIN 4 pinos para cabo](https://mauser.pt/catalog/product_info.php?cPath=1874_640_463&products_id=011-0631)  
1x [Cabo IEC tipo 8](https://mauser.pt/catalog/product_info.php?cPath=1874_57_2700_2703&products_id=019-3715)  
+/- [8m de cabo de rede](https://mauser.pt/catalog/product_info.php?cPath=1874_56_76_2727&products_id=015-0148)

* * *

## [size=5]Planeamento[/size]

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.

[![](https://forum.cpha.pt/uploads/default/original/2X/8/88585849cd1e80eefbc4dbebcd9b5dab5b53cbf1.jpeg) ](https://dl.dropboxusercontent.com/s/b1ssg68hsvnh28i/IMG_6838.jpg)

[![](https://forum.cpha.pt/uploads/default/original/2X/c/cf605b25b61aca5928407b67f829d3b2470315c9.jpeg) ](https://dl.dropboxusercontent.com/s/myeb72vnpzpukrz/IMG_6839.jpg)  
_[size=2](.STL das caixas nos Anexos)[/size]_

1. **[size=4]Perfboard[/size]**  
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.

[![](https://forum.cpha.pt/uploads/default/original/2X/3/3854a869996a1139bf0bcf99fcd2697ec59d1848.png) ](https://dl.dropboxusercontent.com/s/3hw9iyhnlm25b64/layout1.png)  
[size=2]_(Vista traseira da placa)_[/size]

1. **[size=4]Relés[/size]**  
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.

[![](https://forum.cpha.pt/uploads/default/original/2X/e/ee39e279cbe88984242829d32b589818a3e78ef9.jpeg) ](https://dl.dropboxusercontent.com/s/pcat25fj7dzy7h5/IMG_6577.jpg)

1. **[size=4]Microswitchs[/size]**  
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.

[![](https://forum.cpha.pt/uploads/default/original/2X/3/3f1c5736668faab1e1f87a56895f106c8e7fad09.jpeg) ](https://dl.dropboxusercontent.com/s/2dicgrvbh2w0b92/IMG_6513.jpg)

1. **[size=4]Reed switchs[/size]**  
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.

[![](https://forum.cpha.pt/uploads/default/original/2X/9/9e3fa31b79deeddf1b451f13f91d4523ad035130.jpeg) ](https://dl.dropboxusercontent.com/s/yd90p79wzztu4f3/IMG_6675.jpg)

* * *

## [size=5]Mãos à Obra![/size]

Comecemos então por soldar a perfboard seguindo o esquema supra mencionado. A minha ficou com este aspecto:

[![](https://forum.cpha.pt/uploads/default/original/2X/5/546ae6ff7f084701e9bba714504ca9a73783ed16.jpeg) ](https://dl.dropboxusercontent.com/s/vncjeihiu8qlc88/IMG_6741.jpg)  
[size=2]_(Eu sei que não está muito bonita, mas foi a primeira vez que soldei electrónica 😂)_[/size]

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.

 ![](https://forum.cpha.pt/uploads/default/original/2X/a/a5e8b89c0f3b00787b178d1de3b46ba0a506d01d.jpeg)

Com base neste esquema, iremos utilizar os fios do cabo de rede para o seguinte:

[![](https://forum.cpha.pt/uploads/default/original/2X/7/7b709c44d3f688eda7aacf45387dc561392a6ef9.jpeg) ](https://dl.dropboxusercontent.com/s/6gyn3vfyccavj71/esquema_pcb_final.jpg)

**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**

[color=red]\ ***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).[/color]

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.

[![](https://forum.cpha.pt/uploads/default/original/2X/3/33ec8cfe75e62285cca767fe36044a97974290b7.jpeg) ](https://dl.dropboxusercontent.com/s/w5trep7wi34myrx/ESQUEMA%20CAIXA.jpg)

A ficha **[color=a042fa]CENTRAL[/color]** 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**

[![](https://forum.cpha.pt/uploads/default/original/2X/d/d594fe81fe6b9218b6e212f3bbf0e882f6c39717.jpeg) ](https://dl.dropboxusercontent.com/s/fgircvp5nwc5e1r/caixas.jpg)

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

[![](https://forum.cpha.pt/uploads/default/original/2X/e/e1285c4c59c1c3fdd905c4d5b13b1a89b2482d99.jpeg) ](https://dl.dropboxusercontent.com/s/1ecdlfb2d7xxjee/CABO%20MOTOR.jpg)

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**

[![](https://forum.cpha.pt/uploads/default/original/2X/b/beaf7017a160d5947bede4bfa06579a9a496aa8b.jpeg) ](https://dl.dropboxusercontent.com/s/kycx99kv3frv200/esquema_ficha_din4_final.jpg)

Depois ligamos os fios do motor à saída dos relés:

[![](https://forum.cpha.pt/uploads/default/original/2X/0/0092a08450884d268588e0460084317c3d109cb8.jpeg) ](https://dl.dropboxusercontent.com/s/pl1ts00b57w0xfy/ESQUEMA%20SAIDA%20RELES.jpg)

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

[![](https://forum.cpha.pt/uploads/default/original/2X/5/56056ebf60be4b7813af13522835cc30991a9953.jpeg) ](https://dl.dropboxusercontent.com/s/t0hir7o57ny9pxl/corte_29v.jpg)  
[size=2]_(Corte da pista 29V)_[/size]

[![](https://forum.cpha.pt/uploads/default/original/2X/4/49925f6edcbc159eee9867942e5bce0eeafbbb93.jpeg) ](https://dl.dropboxusercontent.com/s/zxvszxkx1g90dei/esquema_comando_final.jpg)  
[size=2]_(Novo esquema de ligações do comando ao ESP32)_[/size]

No final, o comando deverá ficar com este aspeto:

[![](https://forum.cpha.pt/uploads/default/original/2X/5/51cfca2688f034ffade76957ae1dbb72148933cf.jpeg) ](https://dl.dropboxusercontent.com/s/u2tsppjl9dig6ef/comando_pronto.jpg)

Por fim, fazemos os reed switchs usando o fio Branco/Castanho como GND e o Castanho para fechar o circuito.

[![](https://dl.dropboxusercontent.com/s/ry31zwgaep1zozy/IMG_6764.jpg) ](https://dl.dropboxusercontent.com/s/ry31zwgaep1zozy/IMG_6764.jpg)

[![](https://dl.dropboxusercontent.com/s/01jbm41a8ps781l/IMG_6837%202.JPG) ](https://dl.dropboxusercontent.com/s/01jbm41a8ps781l/IMG_6837%202.JPG)  
_[size=2](montagem do RS entre a base do sofá e a parte que levanta)[/size]_

* * *

## [size=5]Programação[/size]

Terminada a fase de DIY, avançamos para a programação do ESP32 Mini D1. Para isso vamos flashar com [Tasmota32](https://github.com/arendst/Tasmota/tree/firmware/firmware/tasmota32) usando o [ESPHome-Flasher](https://github.com/esphome/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,

 ![](https://forum.cpha.pt/uploads/default/original/2X/8/83e3af243cb60459d2ad5788e68e7205813bb05b.png)  
vamos usar os seguintes GPIOS:

**[size=4]Caixa 1[/size]** _[size=2](Assento direito do sofá)[/size]_

GPIO15 – IN1 (Relé)  
GPIO02 – IN2 (Relé)  
GPIO21 – K1 (Microswitch)  
GPIO17 – K2 (Microswitch)  
GPIO14 – Reed Switch

**[size=4]Caixa 2[/size]** _[size=2](Assento do meio do sofá)[/size]_

GPIO0 – IN1 (Relé)  
GPIO4 – IN2 (Relé)  
GPIO16 – K1 (Microswitch)  
GPIO19 – K2 (Microswitch)  
GPIO5 – Reed Switch

**[size=4]Caixa 3[/size]** _[size=2](Assento esquerdo do sofá)[/size]_

GPIO12 – IN1 (Relé)  
GPIO27 – IN2 (Relé)  
GPIO18 – K1 (Microswitch)  
GPIO26 – K2 (Microswitch)

Os parâmetros devem ficar iguais à imagem infra:

[![](https://forum.cpha.pt/uploads/default/original/2X/5/5ef80b9276bb5a806485d724f6f967160c98e969.png) ](https://dl.dropboxusercontent.com/s/u7inpvbslm4q8ut/print_modulo.png)

Depois vamos abrir a consola do Tasmota e fazer os seguintes comandos:

```auto
Backlog SO80 1; ShutterRelay1 1; ShutterRelay2 3; ShutterRelay3 5

```

```auto
Backlog Interlock1 1,2; Interlock2 3,4; Interlock3 5,6; Interlock ON

```

```auto
Backlog ShutterOpenDuration1 7.5; ShutterOpenDuration2 7.5; ShutterOpenDuration3 7.5

```

```auto
Backlog ShutterCloseDuration1 8; ShutterCloseDuration2 8; ShutterCloseDuration3 8

```

```auto
Backlog ShutterMode7 1; ShutterMode8 1; ShutterMode9 1

```

```auto
Rule1 on Switch7#state do publish2 stat/%topic%/Reed1 %value% endon

```

```auto
Rule2 on Switch8#state do publish2 stat/%topic%/Reed2 %value% endon

```

```auto
Rule3 on Switch9#state do publish2 stat/%topic%/Reed3 %value% endon

```

```auto
Backlog Rule1 1; Rule2 1; Rule3 1

```

[color=red] **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.[/color]

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:

```auto
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

```

[color=red] **Nota:** Na configuração do meu Tasmota, o device tem o nome de “Sofa”.[/color]

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:

[![](https://forum.cpha.pt/uploads/default/original/2X/d/d11a8f6ba3b1b2a885e23ccaf779fbf5a723c62d.jpeg) ](https://dl.dropboxusercontent.com/s/bh2jzty1mv7c450/Flow_NR.jpg)

Este flow irá fazer com que o sofá abra individualmente cada assento a 40%, caso o assento não feche de forma correcta.  
_[size=2](.json em anexo)[/size]_

* * *

## [size=5]Vídeos[/size]

[size=4]Controlo por voz com Alexa:[/size]

[![](https://forum.cpha.pt/uploads/default/original/2X/b/b5d59d2a33c91fb9a34de726c8be99ff8758d630.jpeg "Projecto Sofá CPHA - Controlo por Alexa") ](https://www.youtube.com/watch?v=WrSB59nePoM)

[size=4]Simulação de objecto entalado:[/size]

[![](https://forum.cpha.pt/uploads/default/original/3X/a/1/a1af992368795ea1203dfb430e81fd88da6705ce.jpeg "Projecto Sofá CPHA - Exemplo de objecto entalado") ](https://www.youtube.com/watch?v=aZ4wz5pAw-s)

[size=4]Interação com Roborock S6 MaxV:[/size]

[![](https://forum.cpha.pt/uploads/default/original/2X/6/61dd4b2059f05201ba8aa9076c5db8a877c35c1e.jpeg "Projecto Sofá CPHA - Interação com Roborock S6 MaxV") ](https://www.youtube.com/watch?v=HRPkqFGU4Xg)

* * *

## [size=5]Anexos[/size]

[.JSON do flow do Node Red](https://www.dropbox.com/s/slt5pncisixetie/Flow_Sofa_Final.json?dl=0)  
[STL da caixa central](https://www.dropbox.com/s/fxf6wj0x4ij7vtb/Caixa_Central_Sofa.stl?dl=0)  
[STL da tampa para a caixa central](https://www.dropbox.com/s/t6bg3ydy15ly3z6/Tampa_Caixa_Central_Sofa.stl?dl=0)  
[STL da caixa pequena](https://www.dropbox.com/s/2jssu33fznn9wax/Caixa_Pequena_Sofa.stl?dl=0)  
[STL da tampa para a caixa pequena](https://www.dropbox.com/s/ns8eguxleysvafd/Tampa_Caixa_Pequena_Sofa.stl?dl=0)

* * *

## [size=5]Considerações finais[/size]

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!
