Cuprins:

Robot de prezență virtuală: 15 pași
Robot de prezență virtuală: 15 pași

Video: Robot de prezență virtuală: 15 pași

Video: Robot de prezență virtuală: 15 pași
Video: Robot de tuns gazonul Redback RM118APP: 50-600mp, reglaj înălțime 20-60mm, lațime 180mm, aplicatie. 2024, Noiembrie
Anonim
Image
Image
Mașină cu robot mobil
Mașină cu robot mobil

Acest robot mobil interacționează cu mediul său fizic, reprezentând „prezența virtuală” a persoanei care îl controlează de la distanță. Poate fi accesat de oricine, oriunde în lume, pentru a distribui delicatese și a se juca cu tine.

Lucrarea de aici este dezvoltată de două persoane (una în Germania și una în SUA) ca o încercare de a trece dincolo de mijloacele tradiționale de comunicare bazate pe internet prin crearea unei interfețe fizice pentru interacțiunea la distanță. Deoarece COVID-19 continuă să afecteze lumea și toată lumea este responsabilă pentru limitarea expunerii noastre fizice la oameni, încercăm să readucem conexiunea tangibilă care face parte din interacțiunea fizică.

Se bazează pe ESP32-Camera-Robot-FPV-Teacher-Entry Instructable și modificat pentru a include senzorul de distanță, dozatorul de tratare și capacitatea de „control de oriunde din lume”, cu condiția să aveți o conexiune la internet oarecum stabilă.

Provizii

Proiectul are 4 părți principale - o mașină mobilă pentru robot, un distribuitor de cipuri, un joystick și configurarea comunicării în rețea.

Mașină cu robot mobil

  • Pană de pâine
  • Kit de motor cu 2 roți și șasiu pentru robot (include roți, motoare de curent continuu, placă de montare și șuruburi)
  • Arduino Mega 2560 (dacă construiți fără senzorul de distanță sau distribuitorul de cipuri, Uno va avea suficiente pini)
  • (3) Baterii de 9V (mai aveți câteva în jur, deoarece le veți scurge de depanare)
  • LM2596 Modul de alimentare DC / DC Buck 3A Regulator (sau similar)
  • Modul Wifi ESP32-CAM
  • FT232RL FTDI USB to TTL Serial Converter (pentru programarea ESP32-CAM)
  • Senzor de distanță cu ultrasunete HC-SR04
  • Driver motor L298N
  • (3) LED-uri (orice culoare)
  • (3) Rezistențe de 220 ohmi

Distribuitor de cipuri

  • (2) Servere SG90
  • Carton / Carton

Joystick

  • Arduino Uno
  • Modulul Joystick
  • Mini Breadboard, (1) LED, (1) Rezistor de 220 Ohm (opțional)

Alte

O mulțime de fire de jumper din pană Carton suplimentar / carton Bandă foarfece Reglă / bandă de măsurare Șurubelniță Philips mică Șurubelniță cu cap plat

Răbdare =)

Pasul 1: Mașină robot mobilă

Șasiul Robot Car servește ca o platformă mobilă, cu un Arduino MEGA ca microcontroler principal care acționează motoarele, citind valorile senzorilor și acționând servomotoarele. Majoritatea acțiunilor sunt efectuate prin faptul că Arduino MEGA primește comenzi prin comunicații seriale, trimise de la ESP32-CAM. În timp ce ESP32 oferă fluxul live al camerei pentru a controla robotul, cealaltă funcție a acestuia este de a gestiona o conexiune fără fir între robot și server, permițând astfel utilizatorilor să îl controleze de oriunde din lume. ESP32 primește comenzi de pe pagina web prin apăsarea tastei și le trimite către Arduino MEGA ca valori de caractere. Pe baza valorii primite, mașina va merge înainte, înapoi etc. Deoarece telecomanda prin internet depinde de o mulțime de factori externi, inclusiv o latență ridicată, o calitate slabă a fluxului și chiar deconectări, este încorporat un senzor de distanță pentru a împiedica blocarea robotului. în obiecte. * Datorită cerințelor ridicate și fluctuante de putere ale cipului ESP32, se recomandă utilizarea unui regulator de alimentare cu bateria (a se vedea schema de cabluri).

Pasul 2: Mașină robot mobilă - Diagrama circuitului

Mașină robot mobilă - Diagrama circuitului
Mașină robot mobilă - Diagrama circuitului

Vă vom ghida prin asamblarea acestui pas cu pas.

Pasul 3: Mașină robot mobilă - Asamblare (motoare)

Mașină cu robot mobil - Ansamblu (motoare)
Mașină cu robot mobil - Ansamblu (motoare)

După ce asamblați șasiul 2WD, începem prin conectarea motoarelor și a bateriei la Arduino MEGA prin intermediul driverului L298N.

Pasul 4: Mașină cu robot mobil - Ansamblu (senzor de distanță)

Mașină cu robot mobil - Ansamblu (senzor de distanță)
Mașină cu robot mobil - Ansamblu (senzor de distanță)

Deoarece există destul de multe componente de conectat, haideți să adăugăm o placă de calcul, astfel încât să putem conecta mai ușor alimentarea și solul partajat. După ce reorganizăm firele, conectăm senzorul de distanță și fixați-l în partea din față a robotului.

Pasul 5: Mașină robot mobil - Asamblare (ESP32 CAM)

Mașină robot mobilă - ansamblu (ESP32 CAM)
Mașină robot mobilă - ansamblu (ESP32 CAM)

Apoi, conectați modulul ESP32-CAM și fixați-l lângă senzorul de distanță din fața robotului. Amintiți-vă că această componentă destul de consumatoare de energie necesită propria baterie și un regulator de curent continuu.

Pasul 6: Mașină cu robot mobil - Ansamblu (distribuitor de cipuri)

Mașină cu robot mobil - ansamblu (distribuitor de cipuri)
Mașină cu robot mobil - ansamblu (distribuitor de cipuri)

Acum, să adăugăm distribuitorul de cipuri (mai multe despre acest lucru în secțiunea „Distribuitor de cipuri”). Conectați cele două servouri conform schemei Fritzing și fixați distribuitorul la coada robotului.

Pasul 7: Mașină robot mobil - Asamblare (cookie-uri!)

Mașină robot mobil - Asamblare (cookie-uri!)
Mașină robot mobil - Asamblare (cookie-uri!)

În cele din urmă, adăugăm delicatese în dozator!

Pasul 8: Mașină robot mobilă - Cod Arduino

RobotCar_Code este codul pe care va trebui să îl încărcați pe Arduino Mega.

Iată cum funcționează: Arduino ascultă octeții care sunt trimiși de la ESP32 prin comunicații seriale pe banda 115200. Pe baza octetului primit, mașina se va deplasa înainte, înapoi, la stânga, la dreapta etc., trimițând fie o tensiune HIGH, fie LOW la motoare pentru a controla direcția, precum și o variabilă PWM între 0-255 pentru a controla viteza. Pentru a evita coliziunile, acest cod citește și valorile care vin de la senzorul de distanță și, dacă distanța este mai mică decât un prag specificat, robotul nu va avansa. În cele din urmă, dacă Arduino primește o comandă pentru a elibera un tratament, acesta va activa servo-urile din distribuitorul de cipuri.

Pasul 9: Mașină robot mobilă - cod ESP32

ESP32 permite comunicarea între server și Arduino prin Wifi. Este programat separat de Arduino și are propriul cod:

  • ESP32_Code.ino este codul pentru ca ESP32 să trimită informații către Arduino
  • app_httpd.cpp este codul necesar pentru serverul de internet ESP32 implicit și setați funcția pentru a asculta apăsarea tastelor. Bun pentru depanare și testare pe wifi local. Nu este utilizat pentru comunicarea în afara rețelei locale.
  • camera_index.h este codul html pentru aplicația web implicită
  • camera_pins.h definește pinii în funcție de modelul ESP32

Codul ESP32 folosește biblioteca Wifi, precum și suplimentul ESP32, care poate fi instalat în Arduino IDE urmând acești pași:

  1. În IDE-ul Arduino, accesați Fișier> Preferințe
  2. Apoi, în fila Setări, sub URL-ul Managerului de plăci suplimentare, introduceți următorul „https://dl.espressif.com/dl/package_esp32_index.json”
  3. Acum deschideți Managerul plăcilor și accesați Instrumente> Placă> Manager plăcile și căutați ESP32 tastând „ESP32”
  4. Ar trebui să vedeți „esp32 by Espressif Systems”. Faceți clic pe Instalare.
  5. Acum ar trebui instalat suplimentul ESP32. Pentru a verifica reveniți la IDE-ul Arduino și accesați Instrumente> Placă și selectați "ESP32 Wrover Module".
  6. Din nou, accesați Instrumente> Viteză de încărcare și setați-l la „115200”.
  7. În cele din urmă, accesați Instrumente> Schemă de partiție și setați-l la „Aplicație uriașă (3 MB fără OTA / 1 MB SPIFFS)
  8. Odată ce ați finalizat acest lucru, vă recomand să urmați acest tutorial de RandomNerdTutorials care explică în detaliu cum să finalizați configurarea ESP32 și încărcarea codului cu programatorul FTDI Programarea ESP32

Pasul 10: Distribuitor de cipuri

Distribuitor de cipuri
Distribuitor de cipuri

Distribuitorul de cipuri este un plus ieftin la robotul mobil, permițându-i să afecteze mediul local și să interacționeze cu oamenii / animalele lăsând o delicioasă delicatese. Se compune dintr-o cutie exterioară din carton cu 2 servouri montate în interior, precum și un cartuș interior din carton care conține obiecte (cum ar fi bomboane sau mâncăruri pentru câini) pentru a fi distribuite. Un servo acționează ca o poartă în timp ce celălalt împinge obiectul în afară.

* Toate dimensiunile sunt exprimate în milimetri

Pasul 11: Joystick

Joystick
Joystick

Deși poate fi distractiv să controlați un robot cu tastatura, este și mai distractiv și mai intuitiv să folosiți un joystick, unde robotul reacționează direct în funcție de direcția pe care o împingeți. Deoarece acest robot este acționat prin apăsarea tastelor înregistrate pe pagina web, am avut nevoie de joystick-ul nostru pentru a emula o tastatură. Astfel, utilizatorii fără joystick pot controla robotul direct de la tastatură, dar alții pot folosi joystick-ul.

Pentru aceasta am avut doar un Arduino Uno care nu are capacitatea de a utiliza biblioteca, așa că am programat-o direct folosind un protocol USB cunoscut sub numele de Device Firmware Update (DFU) care permite arduino-ului să fie intermitent cu un firmware generic de tastatură USB HID.. Cu alte cuvinte, atunci când arduino este conectat la USB nu mai este recunoscut ca un arduino ci ca o tastatură!

Pasul 12: Joystick - Diagrama circuitului

Joystick - Diagrama circuitului
Joystick - Diagrama circuitului

Iată cum am conectat joystick-ul.

Pasul 13: Joystick - Emulator de tastatură

Pentru ca Arduino Uno să emuleze o tastatură, trebuie să programați direct cipul Atmega16u2 de pe Arduino printr-o actualizare manuală a firmware-ului dispozitivului (DFU). Următorii pași vor descrie procesul pentru o mașină Windows și, sperăm, să vă ajute să evitați unele dintre problemele pe care le-am întâmpinat.

Primul pas este să scrieți manual driverul USB Atmel pe Arduino, astfel încât acesta să fie recunoscut ca un USB și nu ca un Arduino care să permită să fie intermitent cu programatorul FLIP.

  1. Descărcați programatorul FLIP de la Atmel de aici
  2. Conectați-vă Arduino Uno
  3. Accesați Device Manager și găsiți Arduino. Va fi sub COM sau Dispozitiv necunoscut. Conectați-l și scoateți-l pentru a vă asigura că acesta este dispozitivul corect.
  4. După ce ați găsit Arduino Uno în Managerul de dispozitive, faceți clic dreapta pe acesta și selectați proprietăți> Driver> Actualizare driver> Căutare computer pentru software pentru driver> Permiteți-mi să aleg dintr-o listă de drivere disponibile pe computerul meu> Au disc> Navigați la fișierul „atmel_usb_dfu.inf” și selectați-l. Acest lucru ar trebui să fie în dosarul în care a fost instalat programatorul dvs. Atmel FLIP. Pe computerul meu este aici: C: / Program Files (x86) Atmel / Flip 3.4.7 / usb / atmel_usb_dfu.inf
  5. Instalați driverul
  6. Acum reveniți la Device Manager, ar trebui să vedeți un „Atmel USB Devices” cu Arduino Uno etichetat acum ca ATmega16u2!

Acum că computerul recunoaște Arduino Uno ca dispozitiv USB, putem folosi programatorul FLIP pentru a-l bloca cu 3 fișiere separate și a-l transforma într-o tastatură.

Dacă ați deconectat Arduino Uno după prima parte, conectați-l din nou.

  1. Deschideți FLIP
  2. Resetați Arduino Uno conectând scurt alimentarea la masă.
  3. Faceți clic pe Selecție dispozitiv (pictogramă ca un microcip) și selectați ATmega16U2
  4. Faceți clic pe Selectați un mediu de comunicare (pictogramă precum un cablu USB) și selectați USB. Dacă ați completat corect prima parte, celelalte butoane cu gri ar trebui să devină utilizabile.
  5. Accesați Fișier> Încărcați fișier hexagonal> și încărcați fișierul Arduino-usbserial-uno.hex
  6. În fereastra FLIP ar trebui să vedeți trei secțiuni: Fluxul de operații, Informațiile despre tamponul FLASH și ATmega16U2. În fluxul de operații bifați casetele pentru Ștergere, Programare și Verificare, apoi faceți clic pe Executare.
  7. După finalizarea acestui proces, faceți clic pe Start Application în secțiunea ATmega16U2.
  8. Conectați ciclu arduino deconectându-l de la computer și reconectându-l.
  9. Resetați Arduino Uno conectând scurt alimentarea la masă.
  10. Deschideți IDE-ul Arduino și încărcați fișierul JoyStickControl_Code.ino pe placă.
  11. Conectați ciclul arduino deconectându-l de la computer și reconectându-l.
  12. Resetați arduino prin conectarea scurtă a curentului la masă.
  13. Reveniți la FLIP, asigurați-vă că Selecția dispozitivului spune Atmega16U2
  14. Faceți clic pe Selectați un mediu de comunicare și selectați USB.
  15. Accesați Fișier> Încărcați fișier hexagonal> și încărcați fișierul Arduino-keyboard-0.3.hex
  16. În fereastra FLIP ar trebui să vedeți trei secțiuni: Fluxul de operații, Informațiile despre tamponul FLASH și ATmega16U2. În fluxul de operații bifați casetele pentru Ștergere, Programare și Verificare, apoi faceți clic pe Executare.
  17. După finalizarea acestui proces, faceți clic pe Start Application în secțiunea ATmega16U2.
  18. Conectați ciclul arduino deconectându-l de la computer și reconectându-l.
  19. Acum, când accesați Device Manager, ar trebui să existe un nou dispozitiv HID Keyboard sub Keyboards.
  20. Deschideți un blocnotes sau orice editor de text și începeți să mutați joystick-ul. Ar trebui să vedeți numerele tastate!

Dacă doriți să schimbați codul din schița Arduino, de exemplu scriind noi comenzi pe joystick, va trebui să-l blocați cu toate cele 3 fișiere de fiecare dată.

Câteva legături utile: Arduino DFUAtLibUsbDfu.dll nu a fost găsit

Acest emulator de tastatură se bazează pe acest tutorial de Michael pe 24 iunie 2012.

Pasul 14: Comunicare în rețea

Comunicare în rețea
Comunicare în rețea

Pentru a primi flux video și a trimite comenzi către robot de oriunde din lume, avem nevoie de o modalitate de a obține date către și de la ESP32-CAM. Acest lucru se face în două părți, un handler de conexiune în rețeaua dvs. locală și un server public. Descărcați cele trei fișiere pentru a realiza acest lucru:

  • Handlers.py: transmite informații de la ESP32-CAM și de la serverul public (testat pe Python 3.8)
  • Flask_app.py: definește modul în care aplicația dvs. răspunde la solicitările primite.
  • Robot_stream.html: redă videoclipuri în browserul dvs. și ascultă comenzile prin tastatură / joystick (testat pe Chrome)

Connection Handler Puteți codifica acest lucru direct în app_httpd.cpp, dar pentru o depanare mai ușoară folosim un script Python care rulează pe un PC conectat la aceeași rețea. Deschideți handlers.py și actualizați adresa IP și numele de utilizator la propriile dvs. și sunteți gata de plecare. Fluxul va începe când rulați acest fișier.

Server public Pentru a accesa totul pe internet, puteți porni un server cu un PaaS la alegere. În configurarea Pythonanywhere (PA), această configurare durează mai puțin de 5 minute:

  1. Înscrieți-vă pentru un cont și conectați-vă
  2. Accesați fila „Web” și apăsați „Adăugați o nouă aplicație web”, alegeți Flask și Python 3.6
  3. Copiați flask_app.py în directorul / site-ul meu
  4. Copiați robot_stream.html în directorul / site-ul meu / șabloane
  5. Faceți clic pe „Reîncărcați”

Și … ești pregătit!

Declinare de responsabilitate: Acest flux de lucru în rețea este rapid și simplu, dar foarte departe de a fi ideal. RTMP sau socket-urile ar fi mai potrivite pentru streaming, dar nu sunt acceptate pe PA și necesită o anumită experiență în configurarea rețelelor și a serverului. De asemenea, se recomandă adăugarea unor mecanisme de securitate pentru a controla accesul.

Pasul 15: Puneți totul împreună

Acum, porniți robotul, rulați handlers.py pe un computer (conectat la aceeași rețea ca robotul) și puteți controla robotul dintr-un browser în funcție de adresa URL setată de oriunde doriți. (de exemplu,

Recomandat: