Sommario:

Robot a presenza virtuale: 15 passaggi
Robot a presenza virtuale: 15 passaggi

Video: Robot a presenza virtuale: 15 passaggi

Video: Robot a presenza virtuale: 15 passaggi
Video: Il Tuo Nuovo Aiutante in Casa: Un Robot Che Fa TUTTO dal Caffè alle Pulizie 2024, Novembre
Anonim
Image
Image
Auto robot mobile
Auto robot mobile

Questo robot mobile interagisce con l'ambiente fisico che lo circonda, rappresentando la "presenza virtuale" della persona che lo controlla a distanza. È accessibile a chiunque, in qualsiasi parte del mondo, per dispensare prelibatezze e giocare con te.

Il lavoro qui è sviluppato da due persone (una in Germania e una negli Stati Uniti) come tentativo di andare oltre i tradizionali mezzi di comunicazione basati su Internet creando un'interfaccia fisica per l'interazione remota. Poiché il COVID-19 continua a colpire il mondo e ognuno è responsabile di limitare la nostra esposizione fisica alle persone, cerchiamo di riportare la connessione tangibile che fa parte dell'interazione fisica.

Si basa su ESP32-Camera-Robot-FPV-Teacher-Entry Instructable e modificato per includere sensore di distanza, erogatore di snack e funzionalità di "controllo da qualsiasi parte del mondo", a condizione che si disponga di una connessione Internet alquanto stabile.

Forniture

Il progetto ha 4 parti principali: un'auto robot mobile, un distributore di chip, un joystick e l'impostazione della comunicazione di rete.

Auto robot mobile

  • tagliere
  • Motore a 2 ruote motrici e kit robot telaio (include ruote, motori CC, scheda di montaggio e viti)
  • Arduino Mega 2560 (se costruisci senza il sensore di distanza o il Chip Dispenser, uno avrà abbastanza pin)
  • (3) Batterie da 9 V (tenetene qualcuna in più in quanto le scaricherete durante il debug)
  • LM2596 Modulo di alimentazione Regolatore DC/DC Buck 3A (o simile)
  • Modulo Wi-Fi ESP32-CAM
  • FT232RL Convertitore seriale FTDI da USB a TTL (per la programmazione di ESP32-CAM)
  • Sensore di distanza ad ultrasuoni HC-SR04
  • Driver del motore L298N
  • (3) LED (qualsiasi colore)
  • (3) Resistori da 220 Ohm

Distributore di trucioli

  • (2) Servi SG90
  • Cartone / Cartone

Telecomando da gioco

  • Arduino Uno
  • Modulo joystick
  • Mini tagliere, (1) LED, (1) resistenza da 220 Ohm (opzionale)

Altro

Un sacco di fili per ponticelli per tagliere Cartone extra / cartone Nastro Forbici Righello / Metro a nastro Cacciavite Philips piccoloCacciavite a testa piatta piccolo

Pazienza =)

Passaggio 1: auto robot mobile

Il telaio Robot Car funge da piattaforma mobile, con un Arduino MEGA come microcontrollore principale che guida i motori, legge i valori dei sensori e aziona i servi. La maggior parte delle azioni viene eseguita facendo in modo che Arduino MEGA riceva comandi tramite comunicazione seriale, inviati da ESP32-CAM. Mentre ESP32 fornisce lo streaming live della telecamera per controllare il robot, la sua altra funzione è quella di gestire una connessione wireless tra il robot e il server, consentendo quindi agli utenti di controllarlo da qualsiasi parte del mondo. L'ESP32 riceve i comandi dalla pagina Web tramite la pressione dei tasti e li invia all'Arduino MEGA come valori di caratteri. In base al valore ricevuto, l'auto andrà avanti, indietro, ecc. Poiché il controllo remoto via Internet dipende da molti fattori esterni tra cui alta latenza, scarsa qualità del flusso e persino disconnessioni, è incorporato un sensore di distanza per evitare che il robot si schianti negli oggetti.* A causa dei requisiti di alimentazione elevati e fluttuanti del chip ESP32, si consiglia di utilizzare un regolatore di alimentazione con alimentazione a batteria (vedere lo schema elettrico).

Passaggio 2: auto robot mobile - Schema elettrico

Auto robot mobile - Schema elettrico
Auto robot mobile - Schema elettrico

Ti guideremo attraverso l'assemblaggio di questo passo dopo passo.

Fase 3: Robot mobile - Assemblaggio (motori)

Robot mobile - Assemblaggio (motori)
Robot mobile - Assemblaggio (motori)

Dopo aver assemblato lo chassis 2WD, iniziamo collegando i motori e la batteria all'Arduino MEGA tramite il driver L298N.

Fase 4: Robot mobile - Assemblaggio (sensore di distanza)

Auto robot mobile - Assemblaggio (sensore di distanza)
Auto robot mobile - Assemblaggio (sensore di distanza)

Poiché ci sono alcuni componenti da collegare, aggiungiamo una breadboard, in modo da poter collegare più facilmente l'alimentazione e la messa a terra condivisa. Dopo aver riorganizzato i fili, colleghiamo il sensore di distanza e lo fissiamo nella parte anteriore del robot.

Passaggio 5: Robot mobile - Assemblaggio (CAM ESP32)

Robot mobile - Assemblaggio (CAM ESP32)
Robot mobile - Assemblaggio (CAM ESP32)

Quindi, collega il modulo ESP32-CAM e fissalo accanto al sensore di distanza vicino alla parte anteriore del robot. Ricorda che questo componente piuttosto affamato di energia richiede una batteria propria e un regolatore CC.

Passaggio 6: Robot mobile - Assemblaggio (Dispenser di chip)

Auto robot mobile - Assemblaggio (Dispenser di chip)
Auto robot mobile - Assemblaggio (Dispenser di chip)

Ora aggiungiamo il chip-dispenser (maggiori informazioni su questo nella sezione "Chip Dispenser"). Cablare i due servi secondo lo schema di Fritzing e fissare il dispenser alla coda del robot.

Passaggio 7: Robot mobile - Assemblaggio (cookie!)

Auto robot mobile - Assemblaggio (cookie!)
Auto robot mobile - Assemblaggio (cookie!)

Infine, aggiungiamo le prelibatezze al dispenser!

Passaggio 8: auto robot mobile - Codice Arduino

RobotCar_Code è il codice che dovrai caricare su Arduino Mega.

Ecco come funziona: l'Arduino ascolta i byte che vengono inviati dall'ESP32 tramite comunicazione seriale sulla banda 115200. In base al byte ricevuto, l'auto si sposterà avanti, indietro, sinistra, destra ecc. inviando una tensione ALTA o BASSA ai motori per controllare la direzione, nonché una variabile PWM tra 0-255 per controllare la velocità. Per evitare collisioni questo codice legge anche i valori in arrivo dal sensore di distanza e se la distanza è inferiore a una soglia specificata, il robot non avanzerà. Infine, se Arduino riceve un comando per erogare un dolcetto, attiverà i servi nel Chip Dispenser.

Passaggio 9: auto robot mobile - codice ESP32

L'ESP32 consente la comunicazione tra il server e Arduino tramite Wifi. È programmato separatamente da Arduino e ha un proprio codice:

  • ESP32_Code.ino è il codice per ESP32 per inviare informazioni ad Arduino
  • app_httpd.cpp è il codice necessario per il server web ESP32 predefinito e imposta la funzione per ascoltare la pressione dei tasti. Buono per il debug e il test sul wifi locale. Non viene utilizzato per la comunicazione al di fuori della rete locale.
  • camera_index.h è il codice html per l'applicazione web predefinita
  • camera_pins.h definisce i pin a seconda del modello ESP32

Il codice ESP32 utilizza la libreria Wifi e il componente aggiuntivo ESP32, che può essere installato nell'IDE Arduino seguendo questi passaggi:

  1. Nell'IDE di Arduino vai su File> Preferenze
  2. Quindi nella scheda Impostazioni sotto URL di Gestione schede aggiuntive inserisci il seguente "https://dl.espressif.com/dl/package_esp32_index.json"
  3. Ora apri Boards Manager e vai su Strumenti> Board> Boards Manager e cerca ESP32 digitando "ESP32"
  4. Dovresti vedere "esp32 di Espressif Systems". Fare clic su Installa.
  5. Ora il componente aggiuntivo ESP32 dovrebbe essere installato. Per verificare torna all'IDE Arduino e vai su Strumenti> Scheda e seleziona il "Modulo Wrover ESP32".
  6. Di nuovo vai su Strumenti> Velocità di caricamento e impostalo su "115200".
  7. Infine, vai su Strumenti> Schema di partizione e impostalo su "App enorme (3 MB senza OTA / 1 MB SPIFFS)
  8. Una volta completato questo, ti consiglio di seguire questo tutorial di RandomNerdTutorials che spiega in dettaglio come finalizzare l'impostazione di ESP32 e caricare il codice con il programmatore FTDIProgrammare ESP32

Passaggio 10: distributore di chip

Distributore di trucioli
Distributore di trucioli

Il Chip Dispenser è un'aggiunta economica al robot mobile che gli consente di influenzare l'ambiente locale e interagire con persone/animali lasciando un gustoso bocconcino. Consiste in una scatola esterna in cartone con 2 servomotori montati all'interno, oltre a una cartuccia interna in cartone che contiene oggetti (come caramelle o dolcetti per cani) da erogare. Un servo funge da cancello mentre l'altro spinge l'oggetto fuori.

*Tutte le dimensioni sono in millimetri

Passaggio 11: joystick

Telecomando da gioco
Telecomando da gioco

Mentre può essere divertente controllare un robot con la tastiera, è ancora più divertente e intuitivo usare un joystick, dove il robot reagisce direttamente in base alla direzione in cui spingi. Poiché questo robot viene azionato tramite la pressione dei tasti registrata sulla pagina web, avevamo bisogno del nostro joystick per emulare una tastiera. In questo modo gli utenti senza joystick possono comunque controllare il robot direttamente da una tastiera, ma altri possono utilizzare il joystick.

Per questo avevamo solo un Arduino Uno che non ha la possibilità di utilizzare la libreria, quindi l'abbiamo programmato direttamente utilizzando un protocollo USB noto come Device Firmware Update (DFU) che consente di eseguire il flashing dell'arduino con un firmware generico per tastiera USB HID. In altre parole, quando l'arduino è collegato all'usb non viene più riconosciuto come arduino ma come tastiera!

Passaggio 12: Joystick - Schema elettrico

Joystick - Schema elettrico
Joystick - Schema elettrico

Ecco come abbiamo cablato il joystick.

Passaggio 13: Joystick - Emulatore di tastiera

Affinché il tuo Arduino Uno possa emulare una tastiera, devi programmare direttamente il chip Atmega16u2 su Arduino tramite un aggiornamento manuale del firmware del dispositivo (DFU). I seguenti passaggi descriveranno il processo per una macchina Windows e, si spera, ti aiuteranno a evitare alcuni dei problemi che abbiamo riscontrato.

Il primo passo è scrivere manualmente il driver USB Atmel su Arduino in modo che venga riconosciuto come USB e non come Arduino, il che gli consente di essere flashato con il programmatore FLIP.

  1. Scarica il programmatore FLIP di Atmel da qui
  2. Collega il tuo Arduino Uno
  3. Vai in Gestione dispositivi e trova Arduino. Sarà sotto COM o Dispositivo sconosciuto. Collegalo e scollegalo per assicurarti che sia il dispositivo corretto.
  4. Una volta trovato Arduino Uno in Gestione dispositivi, fai clic con il pulsante destro del mouse e seleziona Proprietà> Driver> Aggiorna driver> Sfoglia il mio computer per il software del driver> Fammi scegliere da un elenco di driver disponibili sul mio computer> Disco driver> Sfoglia al file "atmel_usb_dfu.inf" e selezionalo. Dovrebbe trovarsi nella cartella in cui è stato installato il programmatore FLIP Atmel. Sul mio computer è qui: C:\Program Files (x86)\Atmel\Flip 3.4.7\usb\atmel_usb_dfu.inf
  5. Installa il driver
  6. Ora torna a Gestione dispositivi, dovresti vedere un "Dispositivi USB Atmel" con Arduino Uno ora etichettato come ATmega16u2!

Ora che il computer riconosce Arduino Uno come dispositivo USB, possiamo usare il FLIP Programmer per flasharlo con 3 file separati e trasformarlo in una tastiera.

Se hai scollegato Arduino Uno dopo la prima parte, ricollegalo.

  1. Apri FLIP
  2. Ripristina Arduino Uno collegando brevemente l'alimentazione a terra.
  3. Fare clic su Selezione dispositivo (icona come un microchip) e selezionare ATmega16U2
  4. Fare clic su Seleziona un mezzo di comunicazione (icona come un cavo USB) e selezionare USB. Se hai completato correttamente la prima parte, gli altri pulsanti in grigio dovrebbero diventare utilizzabili.
  5. Vai su File > Carica file esadecimale > e carica il file Arduino-usbserial-uno.hex
  6. Nella finestra FLIP dovresti vedere tre sezioni: Flusso delle operazioni, Informazioni sul buffer FLASH e ATmega16U2. Nel flusso delle operazioni seleziona le caselle Cancella, Programma e Verifica, quindi fai clic su Esegui.
  7. Una volta completato questo processo, fare clic su Avvia applicazione nella sezione ATmega16U2.
  8. Collega e riavvia arduino scollegandolo dal computer e ricollegandolo.
  9. Ripristina Arduino Uno collegando brevemente l'alimentazione a terra.
  10. Apri l'IDE di Arduino e carica il file JoyStickControl_Code.ino sulla scheda.
  11. Collega e riavvia arduino scollegandolo dal computer e ricollegandolo.
  12. Ripristina l'arduino collegando brevemente l'alimentazione a terra.
  13. Torna a FLIP, assicurati che la selezione del dispositivo dica Atmega16U2
  14. Fare clic su Seleziona un mezzo di comunicazione e selezionare USB.
  15. Vai su File > Carica file esadecimale > e carica il file Arduino-keyboard-0.3.hex
  16. Nella finestra FLIP dovresti vedere tre sezioni: Flusso delle operazioni, Informazioni sul buffer FLASH e ATmega16U2. Nel flusso delle operazioni seleziona le caselle Cancella, Programma e Verifica, quindi fai clic su Esegui.
  17. Una volta completato questo processo, fare clic su Avvia applicazione nella sezione ATmega16U2.
  18. Collega e riavvia arduino scollegandolo dal computer e ricollegandolo.
  19. Ora, quando vai in Gestione dispositivi, dovrebbe esserci un nuovo dispositivo tastiera HID in Tastiere.
  20. Apri un blocco note o un editor di testo e inizia a muovere il joystick. Dovresti vedere i numeri che vengono digitati!

Se vuoi cambiare il codice nello sketch di Arduino, ad esempio scrivendo nuovi comandi sul joystick, dovrai flasharlo con tutti e 3 i file ogni volta.

Alcuni link utili: Arduino DFUAtLibUsbDfu.dll non trovato

Questo emulatore di tastiera si basa su questo tutorial di Michael del 24 giugno 2012.

Passaggio 14: comunicazione di rete

Comunicazione di rete
Comunicazione di rete

Per ricevere il flusso video e inviare comandi al robot da qualsiasi parte del mondo, abbiamo bisogno di un modo per ottenere dati da e verso ESP32-CAM. Questo viene fatto in due parti, un gestore di connessione sulla rete locale e un server pubblico. Scarica i tre file per ottenere questo:

  • Handlers.py: trasmette le informazioni da ESP32-CAM e dal server pubblico (testato su Python 3.8)
  • Flask_app.py: definisce come la tua app risponde alle richieste in arrivo.
  • Robot_stream.html: esegue il rendering del video nel browser e ascolta i comandi tramite tastiera/joystick (testato su Chrome)

Gestore di connessione Puoi codificarlo direttamente in app_httpd.cpp, ma per un debug più semplice utilizziamo uno script Python in esecuzione su un PC connesso alla stessa rete. Apri handlers.py e aggiorna l'indirizzo IP e il nome utente con i tuoi e sei pronto per partire. Il flusso inizierà quando eseguirai questo file.

Server pubblico Per accedere a tutto su Internet, puoi avviare un server con una PaaS a tua scelta. Su pythonanywhere (PA) la configurazione richiede meno di 5 minuti:

  1. Crea un account e accedi
  2. Vai alla scheda "Web" e premi "Aggiungi una nuova app Web", scegli Flask e Python 3.6
  3. Copia flask_app.py nella directory /mysite
  4. Copia robot_stream.html nella directory /mysite/templates
  5. Fare clic su "Ricarica"

E… sei a posto!

Dichiarazione di non responsabilità: questo flusso di lavoro di rete è rapido e semplice ma molto lontano dall'ideale. RTMP o socket sarebbero più appropriati per lo streaming, ma non sono supportati su PA e richiedono una certa esperienza con la configurazione di rete e server. Si consiglia inoltre di aggiungere un meccanismo di sicurezza per controllare l'accesso.

Passaggio 15: mettere tutto insieme

Ora accendi il tuo robot, esegui handlers.py su un computer (collegato alla stessa rete del robot) e puoi controllare il robot da un browser in base all'URL che hai impostato da qualsiasi luogo tu voglia. (es.

Consigliato: