Índice:

Robô de Presença Virtual: 15 Passos
Robô de Presença Virtual: 15 Passos

Vídeo: Robô de Presença Virtual: 15 Passos

Vídeo: Robô de Presença Virtual: 15 Passos
Vídeo: Nosso melhor robô de todos os tempos! #ManualMaker Aula 10, Vídeo 2 2024, Novembro
Anonim
Image
Image
Carro Robô Móvel
Carro Robô Móvel

Este robô móvel interage com seu entorno físico, representando a "presença virtual" da pessoa que o controla remotamente. Ele pode ser acessado por qualquer pessoa, em qualquer lugar do mundo, para dispensar guloseimas e brincar com você.

O trabalho aqui é desenvolvido por duas pessoas (uma na Alemanha e outra nos Estados Unidos) como uma tentativa de ir além dos meios tradicionais de comunicação baseada na internet, criando uma interface física para interação remota. Como COVID-19 continua a afetar o mundo, e todos são responsáveis por limitar nossa exposição física às pessoas, tentamos trazer de volta a conexão tangível que faz parte da interação física.

É baseado no ESP32-Camera-Robot-FPV-Teacher-Entry Instructable e modificado para incluir sensor de distância, dispensador de guloseimas e capacidade de "controle de qualquer lugar do mundo", desde que você tenha uma conexão de Internet estável.

Suprimentos

O projeto tem 4 partes principais - um carro robô móvel, um dispensador de chip, um joystick e uma configuração de comunicação de rede.

Carro Robô Móvel

  • Tábua de pão
  • Kit de motor de tração de 2 rodas e robô de chassi (inclui rodas, motores DC, placa de montagem e parafusos)
  • Arduino Mega 2560 (se você construir sem o sensor de distância ou o Dispensador de Chip, um Uno terá pinos suficientes)
  • (3) Baterias de 9V (tenha mais algumas, pois você as drenará durante a depuração)
  • Módulo de fonte de alimentação LM2596 DC / DC Regulador Buck 3A (ou similar)
  • Módulo ESP32-CAM Wifi
  • FT232RL FTDI USB para conversor serial TTL (para programação do ESP32-CAM)
  • Sensor de distância ultrassônico HC-SR04
  • Motorista L298N
  • (3) LEDS (qualquer cor)
  • (3) Resistores de 220 Ohm

Dispensador de Chip

  • (2) Servos SG90
  • Papelão / Papelão

Controle de video game

  • Arduino Uno
  • Módulo Joystick
  • Mini placa de ensaio, (1) LED, (1) resistor de 220 Ohm (opcional)

De outros

Muitos fios de jumper de tábua de pãoExtra Cardboard / PaperboardTapeScissorsRuler / Measuring TapeSmall Philips ScrewdriverSmall Flathead Screwdriver

Paciência =)

Etapa 1: carro robô móvel

O chassi do Robot Car serve como uma plataforma móvel, com um Arduino MEGA como o microcontrolador principal que aciona os motores, lê os valores dos sensores e aciona os servos. A maioria das ações é realizada fazendo com que o Arduino MEGA receba comandos via comunicação serial, enviados do ESP32-CAM. Enquanto o ESP32 fornece transmissão ao vivo da câmera para controlar o robô, sua outra função é gerenciar uma conexão sem fio entre o robô e o servidor, permitindo que os usuários o controlem de qualquer lugar do mundo. O ESP32 recebe comandos da página da web por meio do pressionamento de tecla e os envia para o Arduino MEGA como valores char. Com base no valor recebido, o carro irá para a frente, para trás etc. Como o controle remoto via internet depende de muitos fatores externos, incluindo alta latência, baixa qualidade de transmissão e até mesmo desconexões, um sensor de distância é incorporado para evitar que o robô bata em objetos. * Devido aos altos e flutuantes requisitos de energia do chip ESP32, um Regulador de Fonte de Alimentação é recomendado para uso com energia de bateria (consulte o diagrama de fiação).

Etapa 2: Carro Robô Móvel - Diagrama de Circuito

Carro Robô Móvel - Diagrama de Circuito
Carro Robô Móvel - Diagrama de Circuito

Iremos orientá-lo na montagem passo a passo.

Etapa 3: Carro robô móvel - Montagem (motores)

Carro Robô Móvel - Montagem (Motores)
Carro Robô Móvel - Montagem (Motores)

Depois de montar o chassi 2WD, começamos conectando os motores e a bateria ao Arduino MEGA por meio do driver L298N.

Etapa 4: Carro robô móvel - Montagem (sensor de distância)

Carro Robô Móvel - Montagem (Sensor de Distância)
Carro Robô Móvel - Montagem (Sensor de Distância)

Como existem alguns componentes para conectar, vamos adicionar uma placa de ensaio, para que possamos conectar a alimentação e o aterramento compartilhado com mais facilidade. Depois de reorganizarmos os fios, conecte o sensor de distância e fixe-o na frente do robô.

Etapa 5: Carro Robô Móvel - Montagem (ESP32 CAM)

Carro Robô Móvel - Montagem (ESP32 CAM)
Carro Robô Móvel - Montagem (ESP32 CAM)

Em seguida, conecte o módulo ESP32-CAM e fixe-o próximo ao sensor de distância próximo à frente do robô. Lembre-se de que este componente que consome muita energia requer sua própria bateria e um regulador CC.

Etapa 6: Carro Robô Móvel - Montagem (Distribuidor de Chip)

Carro Robô Móvel - Montagem (Distribuidor de Chip)
Carro Robô Móvel - Montagem (Distribuidor de Chip)

Agora, vamos adicionar o dispensador de chips (mais sobre isso na seção "Dispensador de chips"). Conecte os dois servos de acordo com o diagrama de Fritzing e fixe o dispensador na cauda do robô.

Etapa 7: Carro robô móvel - Montagem (cookies!)

Carro robô móvel - Montagem (cookies!)
Carro robô móvel - Montagem (cookies!)

Finalmente, adicionamos guloseimas ao dispensador!

Etapa 8: Carro Robô Móvel - Código Arduino

RobotCar_Code é o código que você precisará carregar no Arduino Mega.

Funciona assim: o Arduino escuta os bytes enviados do ESP32 por meio de comunicação serial na banda 115200. Com base no byte recebido, o carro se moverá para frente, para trás, esquerda, direita etc. enviando uma tensão ALTA ou BAIXA aos motores para controlar a direção, bem como uma variável PWM entre 0-255 para controlar a velocidade. Para evitar colisões, este código também lê os valores vindos do sensor de distância e se a distância for menor que um limite especificado, o robô não se moverá para frente. Por último, se o Arduino receber um comando para dispensar uma guloseima, ele ativará os servos no Dispensador de Chip.

Etapa 9: Carro Robô Móvel - Código ESP32

O ESP32 permite a comunicação entre o servidor e o Arduino via Wifi. Ele é programado separadamente do Arduino e possui seu próprio código:

  • ESP32_Code.ino é o código do ESP32 para enviar informações ao Arduino
  • app_httpd.cpp é o código necessário para o servidor da web ESP32 padrão e define a função para escutar os pressionamentos de tecla. Bom para depurar e testar em wi-fi local. Não é usado para comunicação fora da rede local.
  • camera_index.h é o código html para o aplicativo da web padrão
  • camera_pins.h define os pinos dependendo do modelo ESP32

O código ESP32 usa a biblioteca Wifi, bem como o complemento ESP32, que pode ser instalado no IDE do Arduino seguindo estas etapas:

  1. No IDE do Arduino, vá para Arquivo> Preferências
  2. Em seguida, na guia Configurações em URL do gerenciador de placas adicionais, digite o seguinte "https://dl.espressif.com/dl/package_esp32_index.json"
  3. Agora abra o Board Manager e vá em Tools> Board> Boards Manager e procure o ESP32 digitando "ESP32"
  4. Você deverá ver "esp32 da Espressif Systems". Clique em Instalar.
  5. Agora, o add-on ESP32 deve ser instalado. Para verificar, volte para o IDE do Arduino e vá para Ferramentas> Placa e selecione "ESP32 Wrover Module".
  6. Mais uma vez, vá para Ferramentas> Velocidade de upload e defina para "115200".
  7. Por último, vá para Ferramentas> Esquema de partição e defina-o como "APP enorme (3 MB sem OTA / 1 MB SPIFFS)
  8. Depois de ter concluído isso, eu recomendo seguir este tutorial por RandomNerdTutorials que explica em detalhes como finalizar a configuração do ESP32 e fazer o upload do código com o programador FTDI. Programação do ESP32

Etapa 10: Distribuidor de Chip

Dispensador de Chip
Dispensador de Chip

O Chip Dispenser é uma adição barata ao robô móvel, permitindo que ele afete o ambiente local e interaja com pessoas / animais deixando uma guloseima saborosa. Consiste em uma caixa externa de papelão com 2 servos montados dentro, bem como um cartucho interno de papelão que contém itens (como doces ou guloseimas para cachorro) para dispensar. Um servo atua como um portão enquanto o outro empurra o item para fora.

*Todas as dimensões são em milímetros

Etapa 11: Joystick

Controle de video game
Controle de video game

Embora possa ser divertido controlar um robô com o teclado, é ainda mais divertido e intuitivo usar um joystick, onde o robô reage diretamente com base na direção que você empurra. Como esse robô é acionado por meio de pressionamentos de teclas gravados na página da Web, precisamos do nosso joystick para emular um teclado. Dessa forma, os usuários sem joystick ainda podem controlar o robô diretamente de um teclado, mas outros podem usar o joystick.

Para isso, só tínhamos um Arduino Uno que não tem a capacidade de usar a biblioteca, então o programamos diretamente usando um protocolo USB conhecido como Device Firmware Update (DFU) que permite que o arduino seja atualizado com um firmware de teclado USB HID genérico. Em outras palavras, quando o arduino é conectado ao usb, ele não é mais reconhecido como um arduino, mas como um teclado!

Etapa 12: Joystick - Diagrama de circuito

Joystick - Diagrama de Circuito
Joystick - Diagrama de Circuito

Aqui está como conectamos o joystick.

Etapa 13: Joystick - Emulador de teclado

Para que seu Arduino Uno emule um teclado, você precisa programar diretamente o chip Atmega16u2 no Arduino por meio de uma atualização manual do firmware do dispositivo (DFU). As etapas a seguir irão descrever o processo para uma máquina Windows e, esperamos, ajudá-lo a evitar alguns dos problemas que encontramos.

A primeira etapa é escrever manualmente o driver USB Atmel no Arduino para que seja reconhecido como um USB e não um Arduino, o que permite que ele seja atualizado com o programador FLIP.

  1. Baixe o programador FLIP da Atmel aqui
  2. Conecte seu Arduino Uno
  3. Vá para o Gerenciador de Dispositivos e encontre o Arduino. Estará em COM ou Dispositivo desconhecido. Conecte-o e desconecte-o para garantir que este seja o dispositivo correto.
  4. Depois de encontrar o Arduino Uno no gerenciador de dispositivos, clique com o botão direito nele e selecione propriedades> Driver> Atualizar driver> Procurar software de driver em meu computador> Deixe-me escolher em uma lista de drivers disponíveis em meu computador> Com disco> Navegar até o arquivo "atmel_usb_dfu.inf" e selecione-o. Ele deve estar na pasta onde o seu programador Atmel FLIP foi instalado. No meu computador, ele está aqui: C: / Arquivos de programas (x86) Atmel / Flip 3.4.7 / usb / atmel_usb_dfu.inf
  5. Instale o driver
  6. Agora volte para o Gerenciador de Dispositivos, você deve ver um "Dispositivos USB Atmel" com o Arduino Uno agora rotulado como um ATmega16u2!

Agora que o computador reconhece o Arduino Uno como um dispositivo USB, podemos usar o programador FLIP para atualizá-lo com 3 arquivos separados e transformá-lo em um teclado.

Se você desconectou seu Arduino Uno após a primeira parte, conecte-o novamente.

  1. Abra o FLIP
  2. Reinicialize o Arduino Uno conectando brevemente a alimentação ao aterramento.
  3. Clique em Seleção de dispositivo (ícone como um microchip) e selecione ATmega16U2
  4. Clique em Selecionar um meio de comunicação (ícone como um cabo USB) e selecione USB. Se você completou a primeira parte corretamente, os outros botões acinzentados devem se tornar utilizáveis.
  5. Vá para Arquivo> Carregar arquivo hexadecimal> e carregue o arquivo Arduino-usbserial-uno.hex
  6. Na janela FLIP, você deve ver três seções: Fluxo de operações, Informações do buffer FLASH e ATmega16U2. No Fluxo de Operações, marque as caixas para Apagar, Programa e Verificar e clique em Executar.
  7. Quando o processo for concluído, clique em Iniciar aplicativo na seção ATmega16U2.
  8. Conecte o ciclo do arduino desconectando-o do computador e conectando-o novamente.
  9. Reinicialize o Arduino Uno conectando brevemente a alimentação ao aterramento.
  10. Abra o IDE do Arduino e carregue o arquivo JoyStickControl_Code.ino para a placa.
  11. Conecte o ciclo do arduino desconectando-o do computador e conectando-o novamente.
  12. Reinicialize o arduino conectando brevemente a alimentação ao aterramento.
  13. Volte para o FLIP, certifique-se de que a Seleção de dispositivo diz Atmega16U2
  14. Clique em Selecionar um meio de comunicação e selecione USB.
  15. Vá para Arquivo> Carregar arquivo hexadecimal> e carregue o arquivo Arduino-keyboard-0.3.hex
  16. Na janela FLIP, você deve ver três seções: Fluxo de operações, Informações do buffer FLASH e ATmega16U2. No Fluxo de Operações, marque as caixas para Apagar, Programa e Verificar e clique em Executar.
  17. Quando o processo for concluído, clique em Iniciar aplicativo na seção ATmega16U2.
  18. Conecte o ciclo do arduino desconectando-o do computador e conectando-o novamente.
  19. Agora, quando você vai para o Gerenciador de dispositivos, deve haver um novo dispositivo de teclado HID em Teclados.
  20. Abra um bloco de notas ou qualquer editor de texto e comece a mover o joystick. Você deve ver os números sendo digitados!

Se você quiser alterar o código no esboço do Arduino, por exemplo, escrevendo novos comandos para o joystick, você precisará atualizá-lo com todos os 3 arquivos de cada vez.

Alguns links úteis: Arduino DFUAtLibUsbDfu.dll não encontrado

Este emulador de teclado é baseado neste tutorial de Michael em 24 de junho de 2012.

Etapa 14: Comunicação de rede

Comunicação de rede
Comunicação de rede

Para receber stream de vídeo e enviar comandos ao robô de qualquer lugar do mundo, precisamos de uma forma de obter dados de e para o ESP32-CAM. Isso é feito em duas partes, um manipulador de conexão em sua rede local e um servidor público. Baixe os três arquivos para conseguir isso:

  • Handlers.py: retransmite informações do ESP32-CAM e do servidor público (testado em Python 3.8)
  • Flask_app.py: define como seu aplicativo responde às solicitações de entrada.
  • Robot_stream.html: renderiza vídeo em seu navegador e ouve comandos por meio do teclado / joystick (testado no Chrome)

Manipulador de conexãoVocê pode codificar isso diretamente em app_httpd.cpp, mas para facilitar a depuração, usamos um script Python em execução em um PC conectado à mesma rede. Abra handlers.py e atualize o endereço IP e o nome de usuário para os seus e você está pronto para começar. O stream começará quando você executar este arquivo.

Servidor público Para acessar tudo na internet, você pode iniciar um servidor com um PaaS de sua escolha. Em pythonanywhere (PA), a configuração leva menos de 5 minutos:

  1. Cadastre-se para uma conta e faça login
  2. Vá para a guia “Web” e clique em “Adicionar um novo aplicativo da Web”, escolha Flask e Python 3.6
  3. Copie flask_app.py para o diretório / mysite
  4. Copie robot_stream.html para o diretório / mysite / templates
  5. Clique em “Recarregar”

E … está tudo pronto!

Isenção de responsabilidade: esse fluxo de trabalho de rede é rápido e simples, mas está longe de ser o ideal. RTMP ou soquetes seriam mais apropriados para streaming, mas não são suportados no PA e requerem alguma experiência com rede e configuração de servidor. Também é recomendável adicionar algum mecanismo de segurança para controlar o acesso.

Etapa 15: juntando tudo

Agora, ligue seu robô, execute handlers.py em um computador (conectado à mesma rede que o robô) e você pode controlar o robô de um navegador com base no url que você definiu de qualquer lugar que desejar. (por exemplo,

Recomendado: