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:
gotoToMinimum()
- Posiciona o servo na sua posição mínima;gotoToMaximum()
- Posiciona o servo na sua posição máxima;gotoToCenter()
- Posiciona o servo na sua posição central, ou seja entre a
posição mínima e a máxima;moveToMinimum()
- Move o servo até à posição mínima de forma suave;moveToMaximum()
- Move o servo até à posição máxima de forma suaveDe 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:
wifi
;globalMotion
;tortoises
;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.
Nas secções seguintes estão disponíveis os detalhes de implementação.
![]() |
![]() |
![]() |
O esquema de ligações (feito em Fritzing) está apresentado na próxima figura.
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.
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]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:
Os passos necessários para compilar todo o código são os seguintes:
settings.xml
para configurar as definições
da rede Wi-Fi e o número de servos pretendidos;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.
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]O código completo está disponível aqui.
[Go Back] [Top]