Cuprins:
- Pasul 1: Instalați Raspbian și configurați o adresă IP statică
- Pasul 2: Instalați și configurați mișcarea
- Pasul 3: Instalați Apache și configurați pagina de control web
- Pasul 4: Configurați și testați codul
- Pasul 5: Asamblare
- Pasul 6: Pornirea codului Python la pornire / finalizare
Video: Robot Roomba controlat de browser cu Raspberry Pi Model 3 A +: 6 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
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ă
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
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
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
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
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
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:
Telecomandă bazată pe browser Arduino (linux): 9 pași (cu imagini)
Telecomandă bazată pe browser Arduino (linux): avem copii. Îi iubesc până la biți, dar ascund în continuare telecomanda pentru satelit și TV atunci când pun canalele pentru copii. După ce s-a întâmplat zilnic de câțiva ani și după ce draga mea soție mi-a permis să am un
Ascensor model controlat Arduino: 7 pași (cu imagini)
Model de ascensor controlat de Arduino: În acest instructabil vă voi arăta cum am construit un lift de jucărie pe două niveluri, cu uși glisante funcționale și o mașină care se mișcă în sus și în jos la cerere. Inima liftului este un Arduino Uno (sau în acest caz un Adafruit Metro), cu Adafruit Moto
Structură feroviară de model automat automat - Arduino controlat: 11 pași (cu imagini)
Structură feroviară automată simplă | Arduino controlat: microcontrolerele Arduino sunt o completare excelentă pentru modelul de cale ferată, mai ales atunci când se ocupă de automatizare. Iată o modalitate simplă și ușoară de a începe cu automatizarea modelului feroviar cu Arduino. Deci, fără alte îndemnuri, să începem
Robot de streaming video controlat Raspberry Pi Wifi: 8 pași (cu imagini)
Robot de streaming video controlat Raspberry Pi Wifi: V-ați gândit vreodată să construiți un robot cool cu o cameră pe el? Ei bine, ați ajuns în locul potrivit, vă voi arăta pas cu pas despre cum să construiți acest robot. Cu aceasta puteți merge la vânătoare de fantome pe timp de noapte controlând și văzând fluxul video de pe
Un semafor cu model controlat vocal, tip braille: 4 pași (cu imagini)
Un semafor cu tipar controlat vocal, tip braille: „Lordul Vetinari stătea la fereastra lui și privea turnul semaforului de cealaltă parte a râului. Toate cele opt obloane mari cu fața spre el clipeau cu furie - negru, alb, negru, alb, negru, alb … Informațiile zburau în