Esta página é a continuação de outro projeto, Controle de servos, utilizados numa pista de comboios, de forma suave, que permite o controlo de uma passagem de nível automática, com luzes e som.
Com este projeto é possível controlar todos os elementos que constituem uma passagem de nível: i) Abertura e fecho das
cancelas; ii) Controlo das luzes associadas às cancelas; iii) Som da campainha. O movimento das cancelas é realizado com
um servo e o som é implementado tirando partido dos pinos DAC
(Digital do Analog Converter) que estão
disponíveis na família de microcontroladores ESP32. Toda a lógica de controlo dos servos é idêntica ao projeto acima
referido.
O projeto descrito nesta página continua a ser suportado sobre um microcontrolador "ESP32 TTGO T1".
Além dos elementos já indicados, uma passagem de nível inclui ainda um conjunto de sensores - emissor/receptor de infravermelho (IR) - que permitem determinar que um comboio se está a aproximar ou acabou de sair da zona da passagem de nível. A figura seguinte ilustra a relação entre os vários elementos que constituem a passagem de nível.
De modo a simplificar o controlo da passagem de nível foi desenvolvida a class Crossing
que disponibiliza um
conjunto simples de métodos para controle de uma passagem de nível:
openFences()
- Abre as cancelas associadas à passagem de nível;closeFences()
- Fecha as cancelas associadas à passagem de nível;lightsOn()
- Liga as associadas à passagem de nível;lightsOff()
- Desliga as associadas à passagem de nível;setMinVolume()
, setMaxVolume()
, setStepVolume()
- Para controle do volume
do som da passagem de nível;isSensorActive()
- Permite saber se algum dos sensores associados à passagem de nível está
ativo ou não.De modo a simplificar a leitura dos sensores IR foi utilizado um expansor de pinos I/O (Input/Output) mais concretamente foi utilizado o controlador I2C PCF8574. Este controlador permite controlar até 8 entradas de I/O (neste caso sensores IR) de forma independente, sendo possível ligar até 8 em cascata. Dado que a comunicação com este controlador é realizada através do protocolo I2C apenas é necessário utilizar dois pinos do microcontrolador (os mesmos que são utilizados para controlar os expansores PWM). De modo a simplificar a utilização deste sensor foi criada uma classe para encapsular o mesmo.
Internamente o controlo da passagem de nível é realizada utilizando a máquina de estados que se apresenta na seguinte figura.
O seguinte vídeo ilustra o funcionamento completo da passagem de nível. O vídeo completo do tutorial pode ser visualizado aqui.
A interface com o utilizador continua a ser 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 agora:
Wifi
;GlobalMotion
;Expanders
;Servos
;Crossings
;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 mais elementos (Servos ou Passagens
de Nível), apenas permite controlar os elementos previamente definidos no ficheiro de configuração. Pode-se adicionar mais
elementos por adição de elementos Servo
dentro do elemento Servos
ou elementos Crossing
dentro do elemento Crossings
.
Apos o microcontrolador terminar a sua configuração está disponível para controle dos servos e passagens de nível. 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]