Índice:

Robô de câmera ESP32 - FPV: 6 etapas
Robô de câmera ESP32 - FPV: 6 etapas

Vídeo: Robô de câmera ESP32 - FPV: 6 etapas

Vídeo: Robô de câmera ESP32 - FPV: 6 etapas
Vídeo: Surveillance Car using ESP32 Cam module | ESP32 Camera wi-fi car 🚓 2024, Julho
Anonim
Image
Image
ESP32 Camera Robot - FPV
ESP32 Camera Robot - FPV
ESP32 Camera Robot - FPV
ESP32 Camera Robot - FPV

O módulo ESP32 Camera é um PLC barato e poderoso. Inclui até reconhecimento facial!

Vamos construir um robô com ponto de vista de primeira pessoa que você dirige por meio de uma interface da web integrada!

Este projeto usa o módulo Geekcreit ESP32 com câmera OV2640. É baseado no módulo AIThinker.

Existem muitos clones de câmeras ESP32 diferentes por aí. Alguns funcionam, outros não. Sugiro que você use o mesmo módulo que usei para ter uma boa oportunidade de sucesso.

O robô funciona da seguinte maneira.

O ESP32 transmite um URL da web para sua rede que apresenta a transmissão de vídeo ao vivo com algumas caixas de seleção para operar algumas funções da câmera. Ele também recebe pressionamentos de teclas enviados para a página da web a partir do teclado que são comandos direcionais para o robô. Você pode querer construir o escudo do joystick USB para que possa dirigir o robô com o joystick em vez de digitar comandos no teclado.

Quando o ESP32 recebe pressionamentos de teclas, ele encaminha esses bytes para o Arduino Nano, que aciona os motores para fazer o robô se mover.

Este projeto é de dificuldade moderada-alta. Por favor, tome seu tempo.

Vamos começar!

Suprimentos

  • Módulo de câmera ESP-32 com câmera OV2640 - Eu recomendo o produto Geekcreit
  • Antena de encaixe externa para o ESP-32 para maximizar a força do sinal
  • Arduino Nano
  • Arduino Leonardo para o módulo Joystick (precisamos emulação de teclado USB fornecida pelo Leonardo)
  • Módulo Joystick Genérico
  • Chip L293D Quad H-bridge
  • DC-DC Buck Coverter com saída de 5 V para alimentar o ESP32
  • Adaptador Serial FTDI para programação do ESP32
  • Um chassi de robô genérico com dois motoredutores - qualquer chassi funcionará. Motores de 3 a 6 V são recomendados
  • 2 baterias LiPo de 7,4 V 1300 mAh (ou semelhante) para alimentar o ESP32 e os motores
  • 1 bateria de 9V para alimentar o Arduino Nano

Etapa 1: programe a câmera ESP32

Programe a câmera ESP32
Programe a câmera ESP32
Programe a câmera ESP32
Programe a câmera ESP32

Usando uma placa de ensaio, conecte sua câmera ESP32 ao adaptador FTDI da seguinte maneira:

FTDI ESP32

3,3 V ----------- 3,3 V

GND ----------- GND

TX ----------- U0R

Rx ----------- U0T

Além disso, conecte o pino IO0 ("olho-zero") ao GND. Você precisa fazer isso para colocar o ESP32 no modo de programação.

Descompacte o arquivo esp32CameraWebRobotforInstructable.zip.

Existem 4 arquivos neste projeto:

esp32CameraWebRobotforInstructable.ino é o esboço do Arduino.

ap_httpd.cpp é o código que gerencia o servidor da web e trata da configuração dos recursos da câmera na página da web e do recebimento de pressionamentos de tecla na página da web.

camera_index.h contém o código HTML / JavaScript para o aplicativo da web como matrizes de bytes. Modificar o aplicativo da web está muito além do escopo deste projeto. Incluirei um link para saber como modificar o HTML / JavaScript posteriormente.

camera_pins.h é o arquivo de cabeçalho pertencente à configuração de pinos da câmera ESP32.

Para colocar o ESP32 no modo de programação, você deve conectar IO0 ("eye-oh-zero") ao aterramento.

Inicie o seu Arduino IDE e vá para Tools / Boards / Boards Manager. Pesquise esp32 e instale a biblioteca esp32.

Abra o projeto em seu IDE Arduino.

Coloque a ID de rede do SEU roteador e a SUA senha nas linhas destacadas na imagem acima. Salve o projeto.

Vá ao menu Ferramentas e faça as seleções conforme mostrado na imagem acima.

Placa: ESP32 Wrover

Velocidade de upload: 115200

Esquema de partição: "APP enorme (3 MB sem OTA)"

e escolha a porta à qual seu adaptador FTDI está conectado.

Clique no botão "Upload".

Agora, às vezes, o ESP32 não inicia o upload. Portanto, esteja pronto para pressionar o botão RESET na parte de trás do ESP32 quando começar a ver os… ---… caracteres aparecerem no console durante o upload. Em seguida, ele começará a carregar.

Quando você vir 'pressione RST' no console, o upload estará concluído.

DESCONECTE IO0 do solo. Desconecte a linha de 3,3 V entre o adaptador FTDI e o ESP32.

A câmera ESP32 requer muita corrente para funcionar bem. Conecte um adaptador de energia 5V 2A aos pinos 5V e GND no ESP32.

Abra o Serial Monitor, defina a taxa de transmissão para 115200 e observe a reinicialização do ESP32. Eventualmente, você verá o URL do servidor.

Vá para o seu navegador e digite o URL. Quando o site carregar, clique no botão 'Iniciar transmissão' e a transmissão de vídeo ao vivo deve começar. Se você clicar na caixa de seleção 'Floodlight', o LED do flash integrado deve acender. Atenção! É BRILHANTE!

Etapa 2: construir o robô

Construa o Robô
Construa o Robô

Você precisa de um chassi de robô de duas rodas. Qualquer um serve. Monte o chassi de acordo com as instruções do fabricante.

Em seguida, conecte o robô de acordo com o diagrama. Deixe as conexões da bateria por enquanto.

O L293D é usado para controlar os motores. Observe que a metade do entalhe no chip é PARA O ESP32.

Normalmente, 6 pinos são necessários no Arduino para controlar dois motores.

Este robô requer apenas 4 pinos e ainda funciona totalmente.

Os pinos 1 e 9 são conectados à fonte de 5 V do Arduino, portanto, estão permanentemente ALTOS. Conectar o robô dessa forma significa que precisamos de dois pinos a menos no Arduino para controlar os motores.

Nas direções para a frente, os pinos de ENTRADA são ajustados para BAIXO e os pinos de modulação de onda de pulso do motor são ajustados para valores entre 0 e 255, com 0 significando OFF e 255 significando velocidade máxima.

Em direções reversas, os pinos de INPUT são definidos como HIGH e os valores de PWM são invertidos. 0 significa velocidade máxima e 255 significa desligado.

Descompacte e carregue o esboço do ArduinoMotorControl para o Arduino Nano.

Etapa 3: HEY! Espere um segundo! Por que preciso de um Arduino Nano?

Você provavelmente está pensando: "Ei! Existem pelo menos 4 pinos IO disponíveis na câmera ESP32. Por que não posso usá-los para controlar os motores?"

Bem, é verdade, existem pinos no ESP32 da seguinte maneira:

IO0 - necessário para colocar o ESP32 no modo de programação

IO2 - disponível

IO4 - o LED Flash

IO12, IO13, IO14, IO15, IO16 - pinos GPIO adicionais.

Se você apenas carregar um esboço básico no ESP32 para controlar os pinos com comandos PWM, eles funcionam.

NO ENTANTO, depois de ativar as bibliotecas de CÂMERA em seus esboços, esses pinos não estarão mais disponíveis.

Portanto, a coisa mais fácil a fazer é apenas usar um Nano para controlar os motores via PWM e enviar os comandos do ESP32 por comunicação serial através de um fio (ESP32 U0T para Arduino Rx0) e GND. Muito simples.

Etapa 4: conecte o joystick USB (opcional)

Você pode conduzir o robô enviando pressionamentos de tecla para a página da web da seguinte forma:

8 - Avançar

9 - Avançar à direita

7 - Avançar à Esquerda

4 - Girar para a esquerda

5 - Pare

1 - Inverter à esquerda

2 - Reverso

3 - Reverter à direita.

O esboço do joystick USB traduz as entradas do joystick em pressionamentos de teclas e os envia para a interface da web que os encaminha para o Arduino para conduzir o robô.

Conecte o joystick ao Arduino LEONARDO da seguinte maneira:

Leonardo Joystick

5V ---------- VCC

GND ---------- GND

A0 ---------- VRx

A1 ---------- VRy

Abra o esboço usbJoyStick, selecione Arduino Leonardo como a placa e carregue-o no Leonardo.

Se quiser testá-lo, basta abrir um editor de texto em seu computador, clicar com o mouse na janela e começar a mover o joystick. Você deve ver os valores de 1 a 9 exibidos na janela

Etapa 5: VAMOS VAMOS

Reserve algum tempo e examine sua fiação para ter certeza de que está tudo correto.

Em seguida, conecte as baterias da seguinte maneira.

1. Ligue a câmera ESP32. São necessários alguns segundos para iniciar o servidor da web.

2. Ligue o Arduino Nano.

3. Ligue os motores.

Abra seu navegador e acesse o URL do ESP32.

Clique no botão Iniciar transmissão.

Clique com o mouse em algum lugar da tela do navegador para que a tela agora seja o foco.

Comece a dirigir seu robô com o joystick (ou teclado).

Descobri que o tamanho do quadro padrão funciona bem para transmitir o vídeo ao vivo de forma razoavelmente responsiva por WiFi. No entanto, conforme você aumenta o tamanho do quadro, o fluxo se torna mais entrecortado porque você está tentando transmitir imagens maiores.

Este é um projeto desafiador que lhe dá a oportunidade de começar a trabalhar com streaming de vídeo ao vivo e dirigir um robô por WiFi. Espero que você tenha achado divertido!

AGORA VAI FAZER ALGO MARAVILHOSO!

Atualização de janeiro de 2020 - As últimas fotos mostram a versão final do robô, fortemente soldada e montada com segurança no chassi.

Os três interruptores montados na frente são os seguintes:

Esquerda - bateria de energia do motor

Center - bateria Arduino

Direita - Bateria de câmera ESP32

Eu poderia usar uma bateria grande com alguns transformadores buck-boost (eu uso um para o ESP32 - está no canto inferior direito da foto frontal), mas por uma questão de simplicidade, estou apenas mantendo as 3 baterias.

Robot agora no Access Point

Acho complicado demonstrar esse robô fora de casa porque a rede corporativa da minha escola não permite que eu conecte o servidor web do robô a ele. Como solução, pesquisei o uso do recurso Access Point do servidor web ESP32. Demora algum trabalho, mas requer mudanças mínimas no esboço do robô principal para fazer o ESP32 transmitir seu próprio endereço IP. Não é tão poderoso quanto um hub de wi-fi de alta velocidade dedicado (às vezes trava se você se mover muito rápido), mas funciona muito bem e agora posso demonstrar o robô em qualquer lugar que quiser sem ter que conectá-lo a uma rede! Depois de fazer o robô funcionar, tente convertê-lo em Ponto de Acesso você mesmo!

Etapa 6: detalhes de como modificar o código HTML / Javascript para o servidor da web

Isso não é necessário, mas recebi alguns pedidos.

Forneci a este documento do Google detalhes sobre como usar o CyberChef para converter entre HTML / Javascript e as representações de matriz de bytes no arquivo camera_index.h.

Recomendado: