Controle de Servos com ESP32

Share on Facebook

Esta página descreve um projeto que já desejava implementar há algum tempo: Controle de servos, utilizados numa pista de comboios, de forma suave.

Com este projeto é possível controlar o movimento das agulhas/desvios de forma suave. Por outro lado ao colocar o servo por baixo do layout a maquete fica com um aspeto mais realista. Outra aplicação dos servos pode ser por exemplo no controle das cancelas de uma passagem de nivel.

O projeto aqui descrito baseia-se num microcontrolador ESP32, mais concretamento no modelo "ESP32 TTGO T1". A escolha do microcontrolador ESP32 face ao tradicional Arduino® deveu-se ao facto de os modelos ESP32 suportarem de raíz conectividade Wi-Fi e Bluethooth®.

A escolha do modelo TTGO T1 face ao modelo base ESP32 deveu-se ao facto de este modelo já ter incorporado um display OLED de 1,14 polegadas com uma rsolução 135*240.

No entanto, o código desenvolvido é facilmente adaptável para qualquer microprocessor ESP32.

De modo a simplificar o controlo dos servos foi desenvolvida a class TurnOut que disponibiliza um conjunto simples de métodos para controle dos servos:

De modo a simplificar o controle PWM que permite controlar a posição dos servos foi utilizado um expansor de pinos PWM, mais concretamente foi utilizado o controlador I2C Pca9685. Este controlador permite controlar até 16 dispositivos (neste caso servos) de forma independente, sendo possível ligar até 64 em cascata. Dado que a comunicação com este controlador é realizada através do protocolo I2C apenas é necessário utilizar dois pinos do microcontrolador.

As diferentes classes desenvolvidas visaram esconder a complexidade de controlo dos servos. A versão atual do projeto utiliza apenas um expansor, o que permite controlar neste momento um máximo de 16 servos. Todavia, com pequenas alterações é possível utilizar mais expansores, o que irá permitir controlar mais servos.

A interface com o utilizador é realizada através de um conjunto de páginas HTML que são disponibilizadas pelo microcontrolador. Na diretoria data que existe junto com o código que suporta este projeto é disponibilizado o ficheiro de configurações settings.xml que deve modificado.

O ficheiro de configurações permite:

Por omissão o ficheiro de configurações assume que a rede Wi-Fi é configurada em modo Access Point com o nome Tires-Trains e fica assocido ao endereço IP 192.168.5.5.

A página de controlo que é disponibilizada pelo microcontrolador não permite adicionar servos, apenas permite controlar os servos previamente definidos no ficheiro de configuração. Pode-se adicionar mais servos por adição de elementos tortoise dentro do elemento tortoises.

Apos o microcontrolador terminar a sua configuração está disponível para controle dos servos. Ao premir o botão esquerdo (ligado ao GPIO) é apresentado no display durante 2 segundos o nome da rede ao qual o microcontrolador está ligado bem como o endereço IP do mesmo.

A figura seguinte apresenta o aspeto da página de configuração.

Página de configuração
Página de configuração

Nas secções seguintes estão disponíveis os detalhes de implementação.

Lista de Material Utilizado

[Go Back] [Top]

Esquema de Ligações

O esquema de ligações (feito em Fritzing) está apresentado na próxima figura.

Esquema de ligações
Esquema de ligações

A bateria de 9V é apenas representativa da alimentação. Na versão atual foi utilizado um transformador (5V / 1A). As figuras seguintes mostram a montagem implementada.

Montagem implementada 1
Montagem implementada - Sem suporte do servo
Montagem implementada 2
Montagem implementada - Com suporte do servo
[Go Back] [Top]

Software

Para programar o ESP foi utilizado o Arduino IDE. Dado que projeto atual tira partido do sistema de ficheiros SPIFFS (SPI Flash File Storage) foi utilizada a versão 1.8.19 devidamente configurada com a ferramenta "ESP32 Sketch Data Upload" com o esquema de partições "Default 4MB with spiffs (1.2 MB APP / 1.5 MB SPIFFS)".

A partir do momento que a partição SPIFFS seja criada uma vez pode-se utilizar uma versão mais recente do Arduino IDE, como por exemplo a versão 2.2.1. A ferramenta "ESP32 Sketch Data Upload" está disponível aqui.

[Go Back] [Top]

Bibliotecas

Além dos módulos que estão disponibilizados na diretoria do projeto são necessárias várias bibliotecas adicionais que se podem dividir em três grupos:

[Go Back] [Top]

Instruções

Os passos necessários para compilar todo o código são os seguintes:

As mensagens de debug que são produzidas através da função DebugMessagePrintf, que está definida da biblioteca Utils, só são apresentadas se a macro DebugMode estiver definida.

Um modo simples de definir as mensagens de debug é editar o ficheiro platform.local.txt (se este ficheiro não existir pode-se criar) e adicionar a flag -DDebugMode à opção compiler.cpp.extra_flags. Caso esta opção não exista pode-se adicionar.

A figura seguinte apresenta o ficheiro platform.local.txt que foi utilizado para compilar o código.

Flags de compilação
Flags de compilação
[Go Back] [Top]

Suporte do Servo

O modelo 3D para suporte do servo pra controle de desvios está disponível aqui. Uma segunda versão, por exemplo para utilizar em passagens de nível está disponível aqui.

[Go Back] [Top]

Código Completo

O código completo está disponível aqui.

[Go Back] [Top]