Controle Web de Robô com FPV usando a Vespa




Introdução

Após muitos pedidos e muito tempo de desenvolvimento, o tão esperado tutorial em que mostramos como integrar a Vespa com o ESP32-CAM, para ter monitoramento por imagem enquanto controlamos um robô através de uma página Web, está disponível para ser replicado na sua casa.

Neste tutorial, veremos os códigos de controle das duas placas para que o monitoramento seja possível.

Lista de Materiais

Programação da Vespa

O primeiro passo para replicar este projeto é gravar o código na Vespa, a fim de coletar o nome da rede Wi-Fi que a Vespa irá criar, já que a rede terá os últimos 4 caracteres do MAC Address do seu ESP32.

Para carregar o código à placa, basta conectar o cabo USB à placa. Contudo, vale lembrar que é recomendado seguir o tutorial de primeiros passos com a Vespa para que ela seja reconhecida corretamente pelo seu computador e para que a biblioteca da placa esteja instalada na IDE.

Biblioteca

Para o controle Wi-Fi da Vespa, é necessário instalar as seguintes bibliotecas na sua Arduino IDE:

Biblioteca ArduinoJson Biblioteca AsyncTCP Biblioteca ESPAsyncWebServer

Código

Copie, cole e carregue o código a seguir na sua Vespa:

Explicação do Código

Neste código, a Vespa é responsável por criar uma rede Wi-Fi própria e um servidor web assíncrono. Com isso, podemos conectar celulares, tablets e até mesmo computadores à rede criada para acessar o servidor da placa. Após criar a sua rede, a placa também disponibiliza um endereço de IP, que será utilizado para acessar a página web do controle do robô.

A página web do servidor está inteiramente programada no código, e é graças à ela que a interface de controle é apresentada. Na página está presente, principalmente, a janela de exibição do vídeo coletado pelo ESP32-CAM e um joystick que direciona o robô. Ao mover o joystick, são enviados dados em formato JSON para a Vespa, que, por sua vez, os identifica e age de acordo com o que foi comandado pelo joystick.

Outra funcionalidade interessante da interface de controle está no medidor de bateria, que é uma das diversas funcionalidades da Vespa. A placa mede a tensão da bateria a cada 5 segundos e, em seguida, atualiza a tensão exibida na interface. Com isso, você sempre saberá quando é necessário trocar ou recarregar as baterias do robô.

A função mais importante deste código é a de controle dos motores, já que é ela a responsável por dar a direção ao robô. Nela, é verificado o ângulo em que o ponteiro do joystick está definido (tomando como referência os ângulos mostrados na imagem abaixo), e então os motores são acionados de acordo com o esperado. Por exemplo, quando o ponteiro está para cima/frente, ou seja, com um ângulo entre 80 e 100°, os motores são acionados para frente usando os comandos da biblioteca da placa.

angulos-joystick
Ângulos do Joystick

Grande parte das funções do projeto possuem monitoramento pelo monitor serial, então, se desejar, você pode acompanhar as informações da placa. Para isso, basta abrir o monitor serial na porta serial da sua placa, com a velocidade de 115200 bps.

Programação do ESP32-CAM

Após carregar o código na Vespa, utilize o seu celular ou seu computador para ver qual é o nome da rede gerada por ela, que deve ser algo parecido com Vespa-10:7C, por exemplo. Com esta informação, podemos alterar o código que será gravado no ESP32-CAM.

Circuito para Gravação

Para gravar o código no ESP32-CAM, é necessário montar o circuito da imagem a seguir:

circuito-gravacao-codigo
Circuito para Gravação de Código

Atente-se aos jumpers entre o IO0 e o GND no ESP32-CAM e o jumper no conversor USB-UART. Para o jumper do ESP32-CAM, é necessário que a placa entre em modo de gravação. Já o jumper do conversor USB-UART, deve estar conectado ao 3V3 para que ambas as placas operem na mesma tensão.

Com o circuito montado, selecione o modelo de placa como AI Thinker ESP32-CAM para a gravação do código abaixo.

Código

Com o circuito montado, copie, cole e carregue o código abaixo para a sua placa. Apenas lembre-se de alterar a variável ssid com o nome da rede Wi-Fi criada pela sua Vespa, como visto anteriormente.

Explicação do Código

Nesse código, o ESP32-CAM se conecta à rede criada pela Vespa e, assim que conectado, acessa o servidor assíncrono criado por ela. Com isso, o ESP32-CAM é capaz de enviar em tempo real a imagem coletada por sua câmera para a página Web de controle do Rocket Tank.

Como o servidor é assíncrono, o controle do robô e a exibição de vídeo são executados de forma paralela, não havendo interferência ou atraso no controle do robô ou na exibição da imagem.

Montagem do Rocket Tank

Com os códigos gravados em ambas as placas, podemos montar o Rocket Tank. Para isso, siga o manual de montagem do Rocket Tank através do botão a seguir:

Manual de Montagem do Rocket Tank

A Vespa possui o mesmo padrão de furação de fixação que as placas da plataforma Arduino UNO, portanto é mais simples utilizar esses furos para fixá-la. Já para a fixação do suporte das baterias, você pode seguir o manual de montagem abaixo:

Manual de Montagem do Suporte de Bateriais ao Rocket Tank

Montagem Eletrônica do Projeto

Com a estrutura montada e as placas programadas, monte o circuito a seguir:

circuito-eletrico-projeto
Circuito Elétrico do Projeto

O Que Deve Acontecer

Com o robô montado, ligue a Vespa e, consequentemente, o ESP32-CAM, movendo a chave liga-desliga da Vespa para a posição ON com as baterias 18650 conectadas ao seu suporte no robô. Após alguns instantes, a rede Wi-Fi da Vespa será gerada, o ESP32-CAM se conectará à ela e o controle com monitoramento de imagem estará disponível para acesso. Se conecte à rede da Vespa utilizando a senha robocore e, assim que estiver conectado, acesse o endereço de IP 192.168.4.1. Ao acessar o endereço de IP pelo seu navegador, será aberta a página Web de controle, como na imagem abaixo:

pagina-controle-web
Página de Controle com Imagem

Neste momento, mova o joystick da página para que o robô se mova e você consiga ver pela transmissão ao vivo do ESP32-CAM por onde está passando, como no GIF abaixo:

Resultado Final

A transmissão de vídeo também pode ser diretamente acessada enquanto estiver conectado à rede da Vespa. Para isso, basta acessar o IP 192.168.4.2.

Conclusão

Neste tutorial, vimos como realizar o controle do Web de um robô com a Vespa e como exibir em tempo real o vídeo coletado pelo ESP32-CAM.

Indo Além

Por mais que o uso da Vespa com o Access Point funcione consideravelmente bem, o seu alcance não é dos melhores. Uma solução que pode aumentar o alcance do controle do robô é a conexão da Vespa e do ESP32-CAM em uma rede local gerada por um roteador, já que estes dispositivos possuem antenas mais robustas para maior alcance.