Cuprins:

Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +: 6 pași (cu imagini)
Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +: 6 pași (cu imagini)

Video: Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +: 6 pași (cu imagini)

Video: Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +: 6 pași (cu imagini)
Video: Raspberry Pi 400 Unboxing / Review - Ultra Cheap $70 Budget PC for School Students? 2024, Decembrie
Anonim
Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +
Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +
Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +
Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +

Prezentare generală

Acest Instructable se va concentra asupra modului de a oferi unui Roomba mort un nou creier (Raspberry Pi), ochi (Webcam) și o modalitate de a controla totul dintr-un browser web.

Există o mulțime de hack-uri Roomba care permit controlul prin interfața serială. Nu am avut norocul să dau peste un Roomba care are firmware curent sau placă de bază funcțională. Fie Roomba este prea vechi, fie Roomba este mort. Am găsit Roomba pe care l-am folosit pentru acest proiect într-un coș de cumpărături din magazinul de economisire local pentru 5 USD. Avea încă o baterie decentă, dar o placă de bază moartă. (Am găsit, de asemenea, camera web la același magazin de economii pentru aproximativ 5 USD). Tot ce folosesc de la Roomba original sunt motoarele, șasiul și bateria. Nu trebuie să utilizați Roomba pentru acest proiect. Ați putea folosi diferite motoare, roți și șasiu, dacă doriți. Îmi place să transform o bucată de gunoi în ceva utilizabil.

Pentru această construcție am folosit Raspberry Pi Model 3 A + și un controler de motor Riorand. Folosesc codul robotului controlat de browserul Dexter Industries pe care l-am modificat. Versiunea Dexter Industries configurează Pi ca un server websocket care vă permite să controlați robotul lor (platforma brick pi) dintr-un fișier html client care rulează un alt computer.

Am schimbat codul folosind pinii GPIO și am adăugat o modalitate de oprire a Pi când se face clic pe un buton / când se apasă tasta de evacuare în browser. De asemenea, am făcut câteva modificări la pagina web de control pentru a permite vizualizarea unui flux de mișcare printr-un iframe, în timp ce controlam robotul într-o singură pagină. Am configurat Pi cu un IP static pentru a găzdui fișierul client, astfel încât să mă pot conecta folosind orice computer sau dispozitiv din rețeaua mea.

Documentez aici procesul în speranța de a arăta cum să creați un robot de bază simplu și ieftin.

Piese utilizate

Raspberry Pi 3 A + (Adafruit Link) 30 USD

Riorand Dual Motor Driver Controller H-Bridge (Amazon Link) 22 USD

Baterie de 12V pentru motoare (Amazon Link) 19 USD

Baterie de 5V pentru Raspberry Pi (Amazon Link) 10 USD

Card Micro SD de 8 GB (Amazon Link) 5 USD

Jumper Wires (Amazon Link) 7 USD

Seria Roomba 500

. Tot împreună puțin sub 100 $.

Pasul 1: Instalați Raspbian și configurați o adresă IP statică

Instalați Raspbian și configurați o adresă IP statică
Instalați Raspbian și configurați o adresă IP statică

Am folosit Raspbian Stretch Lite. Nu am văzut o nevoie de desktop, dar puteți instala versiunea desktop dacă preferați.

Voi presupune că știi deja cum să instalezi Raspbian. Dacă aveți nevoie de ajutor, puteți găsi aici ghidul Raspberry Pi Foundation.

După ce ați instalat Raspbian, conectați-vă și rulați programul raspi-config.

pi @ raspberrypi: ~ $ sudo raspi-config

Configurați conexiunea WiFi în raspi-config

Selectați

2 Opțiuni de rețea

Selectați

Wi-Fi N2

Selectați o țară, introduceți SSID-ul dvs. și introduceți parola

Configurați SSH în raspi-config

Odată ce am făcut configurarea inițială, am folosit SSH pentru a configura totul fără cap. (Ați putea sări peste acest lucru dacă utilizați un monitor. Mi-a fost mai ușor să fac modificări la cod fără a fi nevoie să opriți robotul și să îl conectați la un monitor.)

Înapoi la meniul principal raspi-config

Selectați

5 Opțiuni de interfațare

Selectați

P2 SSH

Selectați

da

Înapoi la meniul principal raspi-config selectați

Verificați dacă sunteți conectat la rețeaua dvs

pi @ raspberrypi: ~ $ ifconfig

Ar trebui să primiți o ieșire similară cu aceasta. (Rețineți adresa IP; este posibil să aveți nevoie de ea mai târziu. De exemplu, 192.168.1.18)

wlan0: steaguri = 4163 mtu 1500

inet 192.168.1.18 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80:: c74f: 42ec: 8cd3: 2fda prefixlen 64 scopeid 0x20 ether b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) RX pachete 44396 bytes 5847726 (5,5 MiB) erori RX 0 scăzute 0 depășiri 0 cadru 0 pachete TX 30530 octeți 39740576 (37,8 MiB) erori TX 0 scăzute 0 depășiri 0 transportor 0 coliziuni 0

Verificați dacă puteți accesa internetul.

pi @ raspberrypi: ~ $ ping google.com

Ar trebui să primiți o ieșire similară cu aceasta.

PING google.com (216.58.194.110) 56 (84) octeți de date.

64 octeți din dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 timp = 18,2 ms 64 octeți din dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 timp = 19,4 ms 64 octeți din dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 timp = 23,6 ms 64 octeți din dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 time = 30.2 ms ^ C --- google.com ping statistics --- 4 pachete transmise, 4 primite, 0% pierdere pachete, timp 3004ms rtt min / avg / max / mdev = 18.209 / 22.901 / 30.267 / 4.715 ms

Configurați un IP static

Pentru a vă putea conecta în mod constant la robotul dvs. utilizând aceeași adresă din rețeaua dvs., veți dori să configurați un IP static.

Obțineți adresa curentă de rețea, de exemplu, 192.168.1.18

Folosesc adresa care a fost atribuită automat de DHCP atunci când Pi s-a conectat la rețeaua mea. Puteți schimba acest lucru cu orice doriți, atâta timp cât se potrivește cu rețeaua dvs. și nu intră în conflict cu alte adrese atribuite.

Deschideți dhcp.conf într-un editor de text. (Folosesc nano)

pi @ raspberrypi: ~ $ sudo nano /etc/dhcpcd.conf

Derulați în jos până la #Example configurație IP statică și modificați următoarele linii.

#interface eth0

#static ip_address = 192.168.11.13 #static routers = 192.168.11.1 #static domain_name_servers = 192.168.11.1 8.8.8.8

Modificați pentru a se potrivi cu rețeaua dvs. și eliminați # la începutul fiecărei linii.

Exemplu:

interfață wlan0

static ip_address = 192.168.1.18 routere statice = 192.168.1.1 static domain_name_servers = 192.168.1.1 8.8.8.8

Salvează și ieși.

Reporniți și conectați-vă la Pi prin SSH

pi @ raspberrypi: ~ $ sudo reboot

Conectați-vă de pe alt computer utilizând SSH. Utilizatorii Windows pot utiliza PuTTY sau subsistemul Windows pentru Linux (Windows10).

ian @ computer: ~ $ ssh [email protected]

Introduceți parola (valoarea implicită este zmeură).

parola [email protected]:

Ar trebui să fiți acum la promptul de comandă al Pi.

pi @ raspberrypi: ~ $

Pasul 2: Instalați și configurați mișcarea

Instalați și configurați mișcarea
Instalați și configurați mișcarea

Motion este un program folosit în multe proiecte de camere de securitate / webcam. Mișcarea are o mulțime de caracteristici. Cu toate acestea, îl configurăm pentru a transmite pur și simplu videoclipuri de la camera web la portul 8081.

Testați-vă camera web

Conectați camera web și enumerați dispozitivele USB conectate (poate fi necesar să reporniți după conectare).

pi @ raspberrypi: ~ $ lsusb

Ar trebui să obțineți o ieșire similară cu aceasta. Rețineți Logitech C210.

Autobuz 001 Dispozitiv 002: ID 046d: 0819 Logitech, Inc. Webcam C210

Autobuz 001 Dispozitiv 001: ID 1d6b: 0002 hub rădăcină Linux Foundation 2.0

Dacă camera dvs. nu apare, este posibil să nu fie compatibilă sau poate fi necesar să instalați drivere suplimentare.

Instalați Motion

Actualizați pachetele.

pi @ raspberrypi: ~ $ sudo apt-get update

Instalați Motion.

pi @ raspberrypi: ~ $ sudo apt-get install motion -y

Odată ce Motion este instalat, editați fișierul de configurare.

pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf

Schimbați următoarele rânduri pentru a se potrivi mai jos.

daemon on

lățime 640 înălțime 480 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off

Porniți Motion Daemon la Boot

Deschideți fișierul / etc / default / motion.

pi @ raspberrypi: ~ $ sudo nano / etc / default / motion

Schimba in

start_motion_daemon = da

Salvați fișierul și ieșiți

Reporniți

pi @ raspberrypi: ~ $ sudo reboot

După ce Pi a repornit, deschideți browserul și verificați dacă aveți streaming video în browser pe portul 8081

Exemplu:

192.168.1.18:8081

Depanarea Motion Daemon

Am întâmpinat probleme cu pornirea demonului de mișcare la pornire în timp ce încercam diferite opțiuni din fișierul motion.conf.

Dacă porniți mișcarea înainte de demonul de mișcare în Raspian Stretch, probabil veți întâmpina probleme pentru a începe să înceapă la boot mai târziu. Rularea „sudo motion” fără configurarea demonului să o facă creează mai întâi directorul / var / log / motion fără a acorda utilizatorului permisiunea de scriere.

Pasul 3: Instalați Apache și configurați pagina de control web

Instalați Apache și configurați pagina de control web
Instalați Apache și configurați pagina de control web

Apache este serverul web pentru pagina web de control a robotului. Vom înlocui fișierul Apache index.html implicit cu un fișier descărcat de pe github. De asemenea, veți schimba câteva linii de cod pentru a afișa fluxul video în mișcare și pentru a atribui unde să trimiteți comenzile pentru a controla robotul.

Instalați Apache și Git

pi @ raspberrypi: ~ $ sudo apt-get install apache2 git -y

Odată ce apache și git sunt instalate descărcați fișierele.

pi @ raspberrypi: ~ $ git clone

Deschideți directorul roombarobot.

pi @ raspberrypi: ~ $ cd roombarobot

Înlocuiți fișierul index.html din folderul / var / www / html cu fișierul index.html din / home / pi / roombarobot

pi @ raspberrypi: ~ / roombarobot $ sudo cp index.html / var / www / html

Editați fișierul index.html

Deschideți fișierul index.html cu un editor de text.

pi @ raspberrypi: ~ / roombarobot $ sudo nano /var/www/html/index.html

Localizați aceste două linii

var host = "ws: // ADRESA DVS.: 9093 / ws";

Schimbați „YOURIPADDRESS” la adresa IP statică pe care ați configurat-o la pasul 1 și salvați fișierul.

Exemplu:

var host = "ws: //192.168.1.18: 9093 / ws";

Pe un alt computer, deschideți un browser și introduceți adresa IP a Pi. Ar trebui să vedeți pagina web de control cu o casetă în stânga, streaming video de pe camera dvs. web și butoanele de control web din dreapta.

Pasul 4: Configurați și testați codul

Configurați și testați codul
Configurați și testați codul

Acest cod este scris în python și necesită biblioteca de tornade. Codul folosește biblioteca pentru a configura un server pentru a asculta comenzile de pe pagina web de control prin websockets pe portul 9093.

Instalați PIP și biblioteca Tornado

Instalați pip

pi @ raspberrypi: ~ $ sudo apt-get install python-pip

Instalați biblioteca tornado

pi @ raspberrypi: ~ $ sudo pip install tornado

Porniți programul Roombabot și testați conexiunea

Porniți programul roombabot.py

pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py

După ce rulați, ar trebui să vedeți „Gata” în terminal. Deschideți pagina web de control într-un browser și faceți clic pe conectare. Apoi faceți clic pe oricare dintre butoanele direcționale de pe pagină. De asemenea, puteți utiliza tastele săgeți de pe tastatură.

Ar trebui să vedeți o ieșire în terminal similară cu aceasta.

Gata

conexiune deschisă … conexiune deschisă … primită: u 8 Executare conexiune înainte deschisă … primită: l 6 Întoarcerea conexiunii stânga deschisă … primită: d 2 Executare Conexiune inversă deschisă … primită: r 4 Întoarcerea la dreapta

Apăsați ctrl + c pentru a opri programul.

Odată ce ați terminat testarea alimentării Pi.

pi @ raspberrypi: ~ $ sudo poweroff

Gandaci

Am observat o problemă cu butonul de oprire de pe pagina web de control. Uneori butonul de oprire nu face nimic atunci când este apăsat sau apăsat. Nu am reușit să-mi dau seama ce cauzează acest lucru, dar există o soluție. Dacă doriți să opriți robotul și butonul de oprire nu funcționează, reîncărcați pagina, faceți clic / atingeți butonul de conectare și apoi faceți clic / atingeți butonul de oprire. Ar trebui să se oprească.

Pasul 5: Asamblare

Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare
Asamblare

Așa cum am menționat anterior, nu trebuie să utilizați un Roomba pentru acest proiect. Orice lucru cu două motoare, două roți și un cadru ar funcționa. Am despărțit Roomba și am îndepărtat totul, cu excepția modulelor roții și a bateriei.

Module de roți

Roțile și motoarele Roomba sunt adăpostite împreună într-un modul detașabil. Fiecare modul are o carcasă exterioară albastră care conține motorul, cutia de viteze, roata, arcul suspensiei și placa de interfață.

Placă de interfață

Fiecare placă de interfață are șase fire care rulează către ea. Există două fire (roșu [+], negru [-]) care rotesc motorul, un fir de date pentru un senzor de efect hol, un fir pentru întrerupătorul de cădere a roții, un fir de 5 V și un fir GND pentru alimentarea senzorului. Va trebui să îndepărtați modulul pentru a accesa placa de interfață. Am îndepărtat totul înapoi la motor și am lipit fire noi [+] și [-] de la motor (vezi fotografiile). Depinde de dvs. dacă doriți sau nu să păstrați senzorii.

Arcuri de suspensie

Odată ce îndepărtați porțiunea de vid, greutatea Roomba este eliminată. Dacă nu scoateți arcurile, Roomba va sta într-un unghi. Le-am îndepărtat inițial, dar apoi le-am adăugat când am constatat că se luptă să se rostogolească peste covor. Punerea arcului înapoi a rezolvat problema.

Cablarea motoarelor la controlerul motorului

Motoarele sunt orientate unul față de celălalt. Asta înseamnă că, pentru a conduce Roomba într-o direcție înainte, un motor va trebui să se rotească înainte, în timp ce celălalt se rotește înapoi. Nu m-am gândit prea mult la asta până după ce am conectat totul. Am ajuns doar să scriu codul în jurul modului în care am conectat inițial motoarele. Acesta a fost un accident fericit, deoarece ori de câte ori Raspberry Pi pornește / oprește, există ieșiri de tensiune la pinii GPIO. Modul în care am conectat lucrurile, Roomba se rotește până când Raspberry Pi a pornit (aproximativ treizeci de secunde) și se rotește la oprire până când se scoate curentul. Dacă s-ar conecta diferit, s-ar roti înainte / înapoi, ceea ce ar fi iritant. Am de gând să rezolv în cele din urmă acest lucru cu un simplu comutator pentru controlerul motorului.

Cablarea motoarelor și a bateriei la controlerul motorului

Putere - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - -Baterie Roomba [+]

Motor 2- - - - - - - - - - - - - - - Negru- - - - - - - - - - - - - Motor stânga [-] Motor 2- - - - - - - - - - - - - - - Roșu- - - - - - - - - - - - - - Motor stânga [+] Motor 1- - - - - - - - - - - - - - Negru- - - - - - - - - - - - - -Motor drept [-] Motor 1- - - - - - - - - - - - - - - Roșu- - - - - - - - - - - - - - Motor drept [+] GND- - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - -Baterie Roomba [-]

Cablarea controlerului motorului la Raspberry Pi

Pinii controlerului motorului Culoare fir (vezi fotografiile) Pinii Raspberry Pi

GND- - - - - - - - - - - - - - - - - Negru- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Albastru - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Verde- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Galben - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Portocaliu - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Roșu- - - - - - - - - - - - - - -5V

Montarea electronice

Nu există multe lucruri care să pună totul la punct. I-am dezbrăcat camera. Cu capacul îndepărtat, puteți tăia cu ușurință standurile de plastic existente și găuri pentru a monta electronica. Există porturi existente pentru rularea cablurilor de la motoare. Dacă utilizați bateria stoc Roomba, există deja o decupare pentru accesul la terminalele bateriei.

Baterii

Am folosit baterii separate pentru Raspberry Pi și controlerul motorului. Bateria lui Pi este doar un pachet de 5V folosit pentru a stimula telefoanele mobile. Pentru controlerul motorului am folosit bateria originală Roomba care a venit cu ea. Terminalele bateriei nu sunt etichetate, deci este mai bine să verificați tensiunea cu un voltmetru înainte de al conecta la controlerul motorului. Pentru a atașa firele la bateria Roomba, am folosit patru magneți de neodim (vezi fotografiile). Am lipit doi dintre magneți pe fire, iar celelalte două le-am lipit de bornele bateriei. Lipirea demagnetizează magneții. Cu toate acestea, învelișul exterior se poate atașa în continuare la magneții de pe terminale și poate conduce electricitatea. Acest lucru face ca conectarea și deconectarea bateriei să fie o bucată de tort.

Testarea

După ce aveți totul împreună, verificați dacă aveți totul conectat corect, susțineți robotul pe ceva (astfel încât să nu se rostogolească) și porniți-l.

Conectați-vă și porniți programul roombabot.py

pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py

Accesați pagina de control web și testați-o. Dacă totul este conectat corect, roțile ar trebui să se rotească în direcția corespunzătoare atunci când butoanele sunt apăsate / tastele săgeți sunt apăsate (nu uitați să faceți clic pe conectare).

Pasul 6: Pornirea codului Python la pornire / finalizare

Lansarea codului Python la pornire / finalizare
Lansarea codului Python la pornire / finalizare
Lansarea codului Python la pornire / finalizare
Lansarea codului Python la pornire / finalizare

Ultimul lucru pe care trebuie să-l facem este să-i spunem lui Raspbian să pornească programul python la pornire. Pentru a face acest lucru, vom crea un script și îl vom programa pentru a rula la repornire folosind crontab.

Creați scriptul

Creați un nou fișier script numit startrobot.sh în directorul utilizator pi

pi @ raspberrypi: ~ $ sudo nano startrobot.sh

Copiați următoarele linii în fișier

#! / bin / sh

# startrobot.sh cd / cd / home / pi / roombarobot sudo python roombabot.py cd /

Salvați fișierul și ieșiți

Faceți fișierul startrobot.sh executabil

pi @ raspberrypi: ~ $ sudo chmod 755 startrobot.sh

Testați-l (apăsați ctrl + c pentru a opri)

pi @ raspberrypi: ~ $ sh startrobot.sh

Editați fișierul crontab

pi @ raspberrypi: ~ $ sudo crontab -e

Adăugați următoarea linie în partea de jos a fișierului

Comanda # m h dom mon dow

@reboot sh /home/pi/startrobot.sh

Salvează și ieși

Programul roombabot.py ar trebui să înceapă acum când Pi este repornit sau pornit.

Terminand

În acest moment ar trebui să aveți un robot funcțional pe care îl puteți controla folosind browserul de pe orice dispozitiv din rețeaua dvs. Am luat acest lucru puțin mai departe de la construirea originală și configurarea unui VPN pentru a putea accesa robotul când sunt departe de casă. Intenționez să fac câteva modificări suplimentare în viitor. Plănuiesc să-l fac autonom și, eventual, să urmez mișcarea, în timp ce sunt în continuare capabil să preiau comenzile atunci când vreau.

Recomandat: