Controle de Servos com ESP32

Share on Facebook

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.

Configuração geral
Configuração geral
Comboio em aproximação
Comboio em aproximação
Comboio em afastamento
Comboio em afastamento

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:

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.

Máquina de estados da passagem de nível
Máquina de estados de controlo da passagem de nível

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:

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.

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
Montagem implementada
[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]