Taula de continguts:

Robot de presència virtual: 15 passos
Robot de presència virtual: 15 passos

Vídeo: Robot de presència virtual: 15 passos

Vídeo: Robot de presència virtual: 15 passos
Vídeo: Pagode do Quinteto S.A em Floripa | Part. Chrigor Salgadinho e Kako de Oliveira ( Especial 15 anos ) 2024, De novembre
Anonim
Image
Image
Cotxe de robot mòbil
Cotxe de robot mòbil

Aquest robot mòbil interactua amb el seu entorn físic, representant la "presència virtual" de la persona que el controla de forma remota. Tothom pot accedir-hi a qualsevol lloc del món per dispensar llaminadures i jugar amb vosaltres.

El treball aquí el desenvolupen dues persones (una a Alemanya i una altra als Estats Units) com un intent de superar els mitjans tradicionals de comunicació basada en Internet creant una interfície física per a la interacció remota. Com COVID-19 continua afectant el món i tothom és responsable de limitar la nostra exposició física a les persones, intentem recuperar la connexió tangible que forma part de la interacció física.

Es basa en la funció ESP32-Camera-Robot-FPV-Teacher-Entry Instructable i modificada per incloure el sensor de distància, el dispensador de tractaments i la capacitat de "control des de qualsevol part del món", sempre que tingueu una connexió a Internet una mica estable.

Subministraments

El projecte té quatre parts principals: un cotxe de robot mòbil, un distribuïdor de xips, un joystick i configuració de comunicació de xarxa.

Cotxe de robot mòbil

  • Taula de pa
  • Kit de 2 motors i xassís de tracció amb rodes (inclou rodes, motors de corrent continu, placa de muntatge i cargols)
  • Arduino Mega 2560 (si construïu sense el sensor de distància o el dispensador de xips, un Uno tindrà prou pins)
  • (3) Bateries de 9V (en teniu unes quantes més, ja que les esgotareu la depuració)
  • LM2596 Mòdul de font d'alimentació Regulador DC / DC Buck 3A (o similar)
  • Mòdul Wifi ESP32-CAM
  • FT232RL FTDI USB a TTL Serial Converter (per programar l’ESP32-CAM)
  • Sensor de distància ultrasònic HC-SR04
  • Controlador de motor L298N
  • (3) LED (qualsevol color)
  • (3) Resistències de 220 ohms

Dispensador de xips

  • (2) Servos SG90
  • Cartró / cartró

Palanca de control

  • Arduino Uno
  • Mòdul Joystick
  • Mini tauler de pa, (1) LED, (1) resistència de 220 Ohm (opcional)

Altres

Molts fils de pont de cartró Cartró / cartró addicional Cinta Tisores Regle / cinta mètrica Tornavís petit Philips Tornavís petit

Paciència =)

Pas 1: cotxe de robot mòbil

El xassís Robot Car serveix de plataforma mòbil, amb un Arduino MEGA com a microcontrolador principal que condueix els motors, llegeix els valors dels sensors i acciona els servos. La majoria d’accions es realitzen fent que l’Arduino MEGA rebi ordres mitjançant comunicació en sèrie, enviades des de l’ESP32-CAM. Tot i que ESP32 proporciona una transmissió en directe de la càmera per controlar el robot, la seva altra funció és gestionar una connexió sense fils entre el robot i el servidor, cosa que permet als usuaris controlar-la des de qualsevol lloc del món. L'ESP32 rep ordres des de la pàgina web mitjançant la pressió de tecles i les envia a l'Arduino MEGA com a valors de caràcters. En funció del valor rebut, el cotxe anirà cap endavant, cap enrere, etc. Com que el control remot a través d'Internet depèn de molts factors externs, inclosa una alta latència, una mala qualitat de transmissió i fins i tot desconnexions, s'incorpora un sensor de distància per evitar que el robot es bloquegi * A causa dels requisits d’alimentació elevats i fluctuants del xip ESP32, es recomana utilitzar un regulador d’alimentació amb bateria (vegeu el diagrama de cablejat).

Pas 2: cotxe de robot mòbil: diagrama de circuits

Cotxe de robot mòbil: diagrama de circuits
Cotxe de robot mòbil: diagrama de circuits

Us guiarem muntant aquest pas a pas.

Pas 3: cotxe de robot mòbil: muntatge (motors)

Cotxe de robot mòbil: muntatge (motors)
Cotxe de robot mòbil: muntatge (motors)

Després de muntar el xassís 2WD, comencem connectant els motors i la bateria a l’Arduino MEGA mitjançant el controlador L298N.

Pas 4: cotxe de robot mòbil: muntatge (sensor de distància)

Cotxe de robot mòbil: muntatge (sensor de distància)
Cotxe de robot mòbil: muntatge (sensor de distància)

Com que hi ha bastants components per connectar, afegim una placa de configuració perquè puguem connectar l’alimentació i la terra compartida més fàcilment. Després de tornar a organitzar els cables, connectar el sensor de distància i fixar-lo a la part frontal del robot.

Pas 5: cotxe de robot mòbil: muntatge (ESP32 CAM)

Cotxe de robot mòbil: muntatge (ESP32 CAM)
Cotxe de robot mòbil: muntatge (ESP32 CAM)

A continuació, connecteu el mòdul ESP32-CAM i fixeu-lo al costat del sensor de distància prop de la part frontal del robot. Recordeu que aquest component força consumit d’energia necessita una bateria pròpia i un regulador de corrent continu.

Pas 6: cotxe de robot mòbil: muntatge (dispensador de xips)

Cotxe de robot mòbil: muntatge (dispensador de xips)
Cotxe de robot mòbil: muntatge (dispensador de xips)

Ara, afegim el dispensador de xips (més informació a la secció "Dispensador de xips"). Connecteu els dos servos segons el diagrama Fritzing i fixeu el dispensador a la cua del robot.

Pas 7: cotxe de robot mòbil: muntatge (galetes!)

Cotxe de robot mòbil: muntatge (galetes!)
Cotxe de robot mòbil: muntatge (galetes!)

Finalment, afegim llaminadures al dispensador.

Pas 8: cotxe de robot mòbil: codi Arduino

RobotCar_Code és el codi que haureu de carregar a l'Arduino Mega.

Així és com funciona: l’Arduino escolta els bytes que s’envien des de l’ESP32 mitjançant comunicació serial a la banda 115200. En funció del byte rebut, el cotxe avançarà, retrocedeix, esquerra, dreta, etc. enviant una tensió ALTA o BAIXA als motors per controlar la direcció, així com una variable PWM entre 0-255 per controlar la velocitat. Per evitar col·lisions, aquest codi també llegeix els valors que provenen del sensor de distància i, si la distància és inferior a un llindar especificat, el robot no avançarà. Finalment, si l’Arduino rep una ordre per dispensar una delícia, activarà els servos al dispensador de xips.

Pas 9: cotxe de robot mòbil: codi ESP32

L'ESP32 permet la comunicació entre el servidor i Arduino a través de Wifi. Està programat per separat de l’Arduino i té el seu propi codi:

  • ESP32_Code.ino és el codi perquè ESP32 enviï informació a l'Arduino
  • app_httpd.cpp és el codi necessari per al servidor web ESP32 per defecte i estableix la funció per escoltar les pulsacions de tecles. Bo per depurar i provar en wifi local. No s’utilitza per a comunicacions fora de la xarxa local.
  • camera_index.h és el codi html de l'aplicació web predeterminada
  • camera_pins.h defineix els pins segons el model ESP32

El codi ESP32 utilitza la biblioteca Wifi i el complement ESP32, que es pot instal·lar a l'IDE Arduino seguint aquests passos:

  1. A l’IDE Arduino, aneu a Fitxer> Preferències
  2. A continuació, a la pestanya Configuració, a l'URL del Gestor de taules addicionals, introduïu el següent "https://dl.espressif.com/dl/package_esp32_index.json"
  3. Ara obriu el Gestor de taules i aneu a Eines> Tauler> Gestor de taules i cerqueu l'ESP32 escrivint "ESP32"
  4. Hauríeu de veure "esp32 per Espressif Systems". Feu clic a Instal·la.
  5. Ara s’hauria d’instal·lar el complement ESP32. Per comprovar-lo, torneu a l'IDE d'Arduino i aneu a Eines> Tauler i seleccioneu el "Mòdul ESP32 Wrover".
  6. Torneu a anar a Eines> Velocitat de càrrega i configureu-lo a "115200".
  7. Finalment, aneu a Eines> Esquema de particions i configureu-lo a "Aplicació enorme (3 MB sense OTA / 1 MB SPIFFS)
  8. Un cop hàgiu completat això, us recomano seguir aquest tutorial de RandomNerdTutorials que explica detalladament com finalitzar la configuració de l'ESP32 i pujar el codi amb el programador FTDI Programació de l'ESP32

Pas 10: dispensador de xips

Dispensador de xips
Dispensador de xips

El dispensador de xips és una addició econòmica al robot mòbil que permet afectar l’entorn local i interactuar amb persones / animals deixant una deliciosa delícia. Consisteix en una caixa exterior de cartró amb 2 servos muntats a l'interior, així com un cartutx interior de cartró que conté articles (com ara dolços o llaminadures per a gossos) per dispensar. Un servo actua com una porta mentre l’altre empeny l’element.

* Totes les dimensions són en mil·límetres

Pas 11: Joystick

Palanca de control
Palanca de control

Tot i que pot ser divertit controlar un robot amb el teclat, és encara més divertit i intuïtiu utilitzar un joystick, on el robot reacciona directament en funció de la direcció que empeny. Com que aquest robot s’actua mitjançant pressions de tecles enregistrades a la pàgina web, necessitàvem el nostre joystick per emular un teclat. D'aquesta manera, els usuaris sense joystick poden controlar el robot directament des d'un teclat, però d'altres poden utilitzar el joystick.

Per a això, només teníem un Arduino Uno que no té la possibilitat d’utilitzar la biblioteca, de manera que el vam programar directament mitjançant un protocol USB conegut com Device Firmware Update (DFU) que permet que l’arduino es llampi amb un firmware genèric de teclat USB HID.. Dit d’una altra manera, quan l’arduino està connectat al USB ja no es reconeix com a arduino sinó com a teclat.

Pas 12: Joystick - Diagrama de circuits

Joystick - Diagrama de circuits
Joystick - Diagrama de circuits

Així és com hem connectat el joystick.

Pas 13: Joystick: emulador de teclat

Per tal que el vostre Arduino Uno pugui emular un teclat, heu de programar directament el xip Atmega16u2 a l’Arduino mitjançant una actualització manual del firmware del dispositiu (DFU). Els passos següents descriuran el procés per a una màquina Windows i, amb sort, us ajudaran a evitar alguns dels problemes que hem trobat.

El primer pas és escriure manualment el controlador USB Atmel a l'Arduino per tal que sigui reconegut com un USB i no com un Arduino que permeti llançar-lo amb el programador FLIP.

  1. Descarregueu el programador FLIP d’Atmel des d’aquí
  2. Connecteu el vostre Arduino Uno
  3. Aneu al Gestor de dispositius i cerqueu l'Arduino. Serà a COM o Dispositiu desconegut. Connecteu-lo i traieu-lo per assegurar-vos que aquest és el dispositiu correcte.
  4. Un cop hàgiu trobat l’Arduino Uno al Gestor de dispositius, feu-hi clic amb el botó dret i seleccioneu propietats> Controlador> Actualitza controlador> Navega pel meu ordinador per obtenir el programari del controlador> Permeteu-me triar d’una llista de controladors disponibles al meu ordinador> Tenir disc> Navegueu fins al arxiu "atmel_usb_dfu.inf" i seleccioneu-lo. Hauria d’estar a la carpeta on s’ha instal·lat el programador Atmel FLIP. Al meu ordinador es troba aquí: C: / Program Files (x86) Atmel / Flip 3.4.7 / usb / atmel_usb_dfu.inf
  5. Instal·leu el controlador
  6. Ara torneu al Gestor de dispositius, hauríeu de veure un "Dispositius USB Atmel" amb l'Arduino Uno ara etiquetat com a ATmega16u2.

Ara que l’ordinador reconeix l’Arduino Uno com a dispositiu USB, podem utilitzar el programador FLIP per fer-lo passar amb 3 fitxers separats i convertir-lo en un teclat.

Si vau desconnectar l’Arduino Uno després de la primera part, torneu-lo a endollar.

  1. Obriu FLIP
  2. Restabliu l'Arduino Uno connectant breument l'alimentació a terra.
  3. Feu clic a Selecció de dispositiu (icona com un microxip) i seleccioneu ATmega16U2
  4. Feu clic a Selecciona un mitjà de comunicació (icona com un cable USB) i seleccioneu USB. Si heu completat correctament la primera part, els altres botons grisos haurien de ser utilitzables.
  5. Aneu a Fitxer> Carrega fitxer hexadecimal> i pengeu el fitxer Arduino-usbserial-uno.hex
  6. A la finestra FLIP hauríeu de veure tres seccions: Operations Flow, FLASH Buffer Information i ATmega16U2. A la secció Flux d’operacions, marqueu les caselles Esborra, Programa i Verifica i, a continuació, feu clic a Executa.
  7. Un cop finalitzat aquest procés, feu clic a Inicia aplicació a la secció ATmega16U2.
  8. Connecteu el cicle de l’arduino desconnectant-lo de l’ordinador i endollant-lo de nou.
  9. Restabliu l'Arduino Uno connectant breument l'alimentació a terra.
  10. Obriu l'IDE d'Arduino i pengeu el fitxer JoyStickControl_Code.ino a la placa.
  11. Connecteu el cicle de l’arduino desconnectant-lo de l’ordinador i endollant-lo de nou.
  12. Restableix l’arduino connectant breument l’alimentació a terra.
  13. Torneu a FLIP, assegureu-vos que Selecció de dispositius diu Atmega16U2
  14. Feu clic a Selecciona un mitjà de comunicació i seleccioneu USB.
  15. Aneu a Fitxer> Carrega fitxer hexadecimal> i pengeu el fitxer Arduino-keyboard-0.3.hex
  16. A la finestra FLIP hauríeu de veure tres seccions: Operations Flow, FLASH Buffer Information i ATmega16U2. A la secció Flux d’operacions, marqueu les caselles Esborra, Programa i Verifica i, a continuació, feu clic a Executa.
  17. Un cop finalitzat aquest procés, feu clic a Inicia aplicació a la secció ATmega16U2.
  18. Connecteu el cicle de l’arduino desconnectant-lo de l’ordinador i endollant-lo de nou.
  19. Ara, quan aneu al Gestor de dispositius, hi hauria d’haver un nou dispositiu de teclat HID a sota de Teclats.
  20. Obriu un bloc de notes o qualsevol editor de text i comenceu a moure el joystick. Hauríeu de veure com s’escriuen números.

Si voleu canviar el codi de l'esbós d'Arduino, per exemple, escrivint ordres noves al joystick, haureu de fer-lo passar amb els 3 fitxers cada vegada.

Alguns enllaços útils: Arduino DFUAtLibUsbDfu.dll no trobat

Aquest emulador de teclat es basa en aquest tutorial de Michael el 24 de juny de 2012.

Pas 14: Comunicació de xarxa

Comunicació en xarxa
Comunicació en xarxa

Per rebre fluxos de vídeo i enviar ordres al robot des de qualsevol part del món, necessitem una manera d’obtenir dades des de l’ESP32-CAM. Això es fa en dues parts, un controlador de connexions a la vostra xarxa local i un servidor públic. Descarregueu els tres fitxers per aconseguir-ho:

  • Handlers.py: retransmet informació d’ESP32-CAM i del servidor públic (provat a Python 3.8)
  • Flask_app.py: defineix com respon la vostra aplicació a les sol·licituds entrants.
  • Robot_stream.html: fa un vídeo al vostre navegador i escolta ordres mitjançant el teclat o el joystick (provat a Chrome)

Gestor de connexions Podeu codificar-ho directament a app_httpd.cpp, però per fer una depuració més senzilla, fem servir un script Python que s’executa en un PC connectat a la mateixa xarxa. Obriu handlers.py i actualitzeu l'adreça IP i el nom d'usuari al vostre, i ja podreu començar. El flux començarà quan s'executi aquest fitxer.

Servidor públic Per accedir a tot el que hi ha a Internet, podeu iniciar un servidor amb un PaaS que trieu. A configurar Pythonanywhere (PA), aquesta configuració triga menys de 5 minuts:

  1. Registreu-vos per obtenir un compte i inicieu la sessió
  2. Aneu a la pestanya "Web" i premeu "Afegeix una nova aplicació web", trieu Flask i Python 3.6
  3. Copieu flask_app.py al directori / mysite
  4. Copieu robot_stream.html al directori / mysite / templates
  5. Feu clic a "Torna a carregar"

I … ja esteu a punt!

Exempció de responsabilitat: aquest flux de treball en xarxa és ràpid i senzill, però molt lluny de ser ideal. RTMP o sòcols serien més adequats per a la transmissió, però no són compatibles amb PA i requereixen una certa experiència amb la configuració de xarxes i servidors. També es recomana afegir algun mecanisme de seguretat per controlar l'accés.

Pas 15: ajuntar-ho tot

Ara engegueu el robot, executeu handlers.py en un ordinador (connectat a la mateixa xarxa que el robot) i podeu controlar el robot des d’un navegador en funció de l’URL que configureu des de qualsevol lloc que vulgueu. (per exemple,

Recomanat: