Innehållsförteckning:

Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+: 6 steg (med bilder)
Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+: 6 steg (med bilder)

Video: Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+: 6 steg (med bilder)

Video: Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+: 6 steg (med bilder)
Video: How to Build Loop With a Web Browser 2024, November
Anonim
Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+
Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+
Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+
Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+

Översikt

Denna instruktion kommer att fokusera på hur man ger en död Roomba en ny hjärna (Raspberry Pi), ögon (webbkamera) och ett sätt att styra allt från en webbläsare.

Det finns många Roomba -hackar som tillåter kontroll via det seriella gränssnittet. Jag har inte haft turen att stöta på en Roomba som har nuvarande firmware eller fungerande moderkort. Antingen är Roomba för gammal eller så är Roomba död. Jag hittade Roomba som jag använde för detta projekt i en lokal butiksköpkorg för $ 5. Det hade fortfarande ett hyfsat batteri, men ett dött moderkort. (Jag hittade också webbkameran i samma butik för omkring $ 5). Allt jag använder från den ursprungliga Roomba är motorer, chassi och batteri. Du behöver inte använda en Roomba för detta projekt. Du kan använda olika motorer, hjul och chassi om du vill. Jag vill bara förvandla en skräp till något användbart.

För denna konstruktion använde jag Raspberry Pi Model 3 A+ och en Riorand -motorstyrenhet. Jag använder kod från Dexter Industries Browser Controlled Robot som jag modifierade. Dexter Industries -versionen sätter upp Pi som en websocket -server som låter dig styra deras robot (brick pi -plattform) från en html -fil med en annan dator.

Jag har ändrat koden med GPIO -stiften och lagt till ett sätt för Pi att stänga av när en knapp klickas / när Escape -tangenten trycks in i webbläsaren. Jag gjorde också några ändringar på kontrollwebbsidan för att tillåta visning av en rörelseström genom en iframe, samtidigt som jag kontrollerade roboten inom en enda sida. Jag ställde in Pi med en statisk IP för att vara värd för klientfilen så att jag kunde ansluta med vilken dator eller enhet som helst i mitt nätverk.

Jag dokumenterar processen här i hopp om att visa hur man skapar en enkel, billig basrobot.

Delar som används

Raspberry Pi 3 A+ (Adafruit Link) $ 30

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

12V batteri för motorer (Amazon Link) $ 19

5V batteri för Raspberry Pi (Amazon Link) $ 10

8 GB Micro SD -kort (Amazon Link) $ 5

Jumper Wires (Amazon Link) $ 7

Roomba 500 -serien

. Alla tillsammans strax under $ 100.

Steg 1: Installera Raspbian och konfigurera en statisk IP -adress

Installera Raspbian och konfigurera en statisk IP -adress
Installera Raspbian och konfigurera en statisk IP -adress

Jag använde Raspbian Stretch Lite. Jag såg inget behov av skrivbordet, men du kan installera skrivbordsversionen om du föredrar det.

Jag antar att du redan vet hur du installerar Raspbian. Om du behöver hjälp kan du hitta Raspberry Pi Foundation's guide här.

När du har startat Raspbian loggar du in och kör programmet raspi-config.

pi@raspberrypi: ~ $ sudo raspi-config

Konfigurera din WiFi-anslutning i raspi-config

Välj

2 Nätverksalternativ

Välj

N2 Wi-fi

Välj ett land, ange ditt SSID och ange din lösenfras

Konfigurera SSH i raspi-config

När jag gjorde den första konfigurationen använde jag SSH för att ställa in allt utan huvud. (Du kan hoppa över det här om du använder en bildskärm. Det var lättare för mig att göra ändringar i koden utan att behöva stoppa roboten och ansluta den till en bildskärm.)

Tillbaka till raspi-config-huvudmenyn

Välj

5 Gränssnittsalternativ

Välj

P2 SSH

Välj

Ja

Tillbaka till huvudmenyn för raspi-config

Kontrollera att du är ansluten till ditt nätverk

pi@raspberrypi: ~ $ ifconfig

Du bör få en utmatning som liknar detta. (Notera IP -adressen; du kan behöva den senare, t.ex. 192.168.1.18)

wlan0: flaggor = 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 eter b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) RX -paket 44396 byte 5847726 (5,5 MiB) RX -fel 0 tappade 0 överskridanden 0 ram 0 TX -paket 30530 byte 39740576 (37,8 MiB) TX -fel 0 tappade 0 överskridanden 0 transportör 0 kollisioner 0

Kontrollera att du kan nå internet.

pi@raspberrypi: ~ $ ping google.com

Du bör få en utmatning som liknar detta.

PING google.com (216.58.194.110) 56 (84) byte med data.

64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 tid = 18,2 ms 64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 tid = 19,4 ms 64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 tid = 23,6 ms 64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 tid = 30,2 ms ^C --- google.com pingstatistik --- 4 paket överförda, 4 mottagna, 0% paketförlust, tid 3004ms rtt min/avg/max/mdev = 18.209/ 22.901/30.267/4.715 ms

Konfigurera en statisk IP

För att konsekvent kunna ansluta till din robot med samma adress i ditt nätverk vill du skapa en statisk IP.

Skaffa din nuvarande nätverksadress, t.ex. 192.168.1.18

Jag använder adressen som automatiskt tilldelades av DHCP när Pi anslöt till mitt nätverk. Du kan ändra detta till vad du vill så länge det matchar ditt nätverk och inte står i konflikt med andra tilldelade adresser.

Öppna dhcp.conf i en textredigerare. (Jag använder nano)

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

Rulla ner till #Exempel på statisk IP -konfiguration och ändra följande rader.

#gränssnitt 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

Ändra för att matcha ditt nätverk och ta bort # i början av varje rad.

Exempel:

gränssnitt wlan0

static ip_address = 192.168.1.18 static routers = 192.168.1.1 static domain_name_servers = 192.168.1.1 8.8.8.8

Spara och avsluta.

Starta om och anslut till Pi via SSH

pi@raspberrypi: ~ $ sudo reboot

Anslut från en annan dator med SSH. Windows -användare kan använda PuTTY eller Windows -delsystemet för Linux (Windows10).

ian@dator: ~ $ ssh [email protected]

Ange ditt lösenord (standard är hallon).

[email protected] lösenord:

Du borde nu befinna dig vid din Pi: s kommandotolk.

pi@raspberrypi: ~ $

Steg 2: Installera och konfigurera Motion

Installera och konfigurera Motion
Installera och konfigurera Motion

Motion är ett program som används i många säkerhetskameror / webbkameraprojekt. Motion har många funktioner. Men vi ställer in det för att helt enkelt strömma video från webbkameran till port 8081.

Testa din webbkamera

Anslut din webbkamera och lista anslutna usb -enheter (du kan behöva starta om efter anslutning).

pi@raspberrypi: ~ $ lsusb

Du bör få en utmatning som liknar detta. Observera Logitech C210.

Buss 001 Enhet 002: ID 046d: 0819 Logitech, Inc. Webbkamera C210

Buss 001 Enhet 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub

Om din kamera inte dyker upp är den kanske inte kompatibel eller du kan behöva installera ytterligare drivrutiner.

Installera rörelse

Uppdatera paket.

pi@raspberrypi: ~ $ sudo apt-get update

Installera rörelse.

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

Redigera konfigurationsfilen när Motion är installerat.

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

Ändra följande rader för att matcha nedan.

demon på

bredd 640 höjd 480 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off

Starta Motion Daemon vid Boot

Öppna filen/etc/default/motion.

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

Ändra till

start_motion_daemon = ja

Spara filen och avsluta

Starta om

pi@raspberrypi: ~ $ sudo reboot

När Pi har startat om öppnar du webbläsaren och kontrollerar att du har videoströmning till webbläsaren på port 8081

Exempel:

192.168.1.18:8081

Felsökning av Motion Daemon

Jag stötte på problem med att få motion -demonen att starta vid start medan jag försökte ut olika alternativ i filen motion.conf.

Om du startar rörelse före rörelsedemonen i Raspian Stretch kommer du förmodligen att stöta på problem med att få den att starta vid start senare. Att köra "sudo motion" utan att konfigurera demonen för att göra det skapar först katalogen/var/log/motion utan att ge användaren skrivbehörighet.

Steg 3: Installera Apache och konfigurationswebbkontrollsida

Installera Apache och konfigurationswebbkontrollsida
Installera Apache och konfigurationswebbkontrollsida

Apache är webbservern för robotens kontrollwebbsida. Vi kommer att ersätta standard Apache index.html -filen med en fil som laddats ner från github. Du kommer också att ändra ett par rader kod för att visa videoströmmen och tilldela vart du ska skicka kommandona för att styra roboten.

Installera Apache och Git

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

När apache och git är installerade ladda ner filerna.

pi@raspberrypi: ~ $ git -klon

Öppna roombarobot -katalogen.

pi@raspberrypi: ~ $ cd roombarobot

Ersätt index.html -filen i mappen/var/www/html med index.html -filen i/home/pi/roombarobot

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

Redigera index.html -filen

Öppna index.html -filen med en textredigerare.

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

Leta reda på dessa två rader

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

Ändra "YOURIPADDRESS" till den statiska IP -adress du ställde in i steg 1 och spara filen.

Exempel:

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

Öppna en webbläsare på en annan dator och ange din Pi: s IP -adress. Du bör se kontrollwebbsidan med en ruta till vänster, strömning av video från din webbkamera och webbkontrollknapparna till höger.

Steg 4: Konfigurera och testa koden

Konfigurera och testa koden
Konfigurera och testa koden

Denna kod är skriven i python och kräver tornadobiblioteket. Koden använder biblioteket för att konfigurera en server för att lyssna efter kommandon från kontrollwebbsidan via webbuttag på port 9093.

Installera PIP och Tornado Library

Installera pip

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

Installera tornadobibliotek

pi@raspberrypi: ~ $ sudo pip installera tornado

Starta Roombabot -programmet och testa anslutningen

Starta roombabot.py -programmet

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

När du har kört bör du se "Klar" i terminalen. Öppna kontrollwebbsidan i en webbläsare och klicka på anslut. Klicka sedan på någon av riktningsknapparna på sidan. Du kan också använda piltangenterna på tangentbordet.

Du bör se en utgång i terminalen som liknar denna.

Redo

anslutning öppnad … anslutning öppnad … mottagen: u 8 Körning Framåt anslutning öppnad … mottagen: l 6 Sväng vänster anslutning öppnad … mottagen: d 2 Körning Omvänd anslutning öppnad … mottagen: r 4 Sväng höger

Tryck på ctrl+c för att stoppa programmet.

När du är klar testar du strömmen till Pi.

pi@raspberrypi: ~ $ sudo poweroff

Buggar

Jag har märkt ett problem med avstängningsknappen på kontrollwebbsidan. Ibland gör avstängningsknappen ingenting när det klickas eller knackas. Jag har inte kunnat förstå vad som orsakar detta, men det finns en lösning. Om du vill stänga av roboten och avstängningsknappen inte fungerar, ladda om sidan, klicka / tryck på anslutningsknappen och klicka / tryck sedan på avstängningsknappen. Det borde stängas av.

Steg 5: Montering

hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning
hopsättning

Som nämnts tidigare behöver du inte använda en Roomba för detta projekt. Allt med två motorer, två hjul och en ram skulle fungera. Jag tog isär Roomba och tog bort allt utom hjulmodulerna och batteriet.

Hjulmoduler

Roombas hjul och motorer är placerade tillsammans i en avtagbar modul. Varje modul har ett blått yttre hus som innehåller motor, växellåda, hjul, upphängningsfjäder och gränssnittskort.

Gränssnittskort

Varje gränssnittskort har sex ledningar som går till det. Det finns två ledningar (röd [+], svart [-]) som roterar motorn, en datakabel för en hall -effektsensor, en ledning för omkopplaren, en 5V -kabel och en GND -kabel för att driva sensorn. Du måste ta isär modulen för att komma åt gränssnittskortet. Jag tog bort allt tillbaka till motorn och lödde nya [+] och [-] ledningar till motorn (se bilder). Det är upp till dig om du vill bevara sensorerna eller inte.

Fjädrar

När du har tagit bort vakuumdelen slungas Roombas vikt. Om du inte tar bort fjädrarna kommer Roomba att sitta snett. Jag tog ursprungligen bort dessa, men lade sedan tillbaka dem när jag upptäckte att det kämpade med att rulla över mattan. Att sätta fjädern tillbaka fixade problemet.

Anslut motorerna till motorstyrenheten

Motorerna är vända från varandra. Det betyder att för att köra Roomba i riktning framåt måste en motor rotera framåt medan den andra roterar bakåt. Jag tänkte inte så mycket på detta förrän efter att jag kopplat upp allt. Jag slutade bara skriva koden kring hur jag ursprungligen kopplade motorerna. Detta var en lycklig olycka eftersom när Raspberry Pi slås på/av finns det spänningsutgång till GPIO -stiften. Så som jag har fått ihop saker och ting, snurrar Roomba tills Raspberry Pi har startat upp (cirka trettio sekunder) och snurrar vid avstängning tills strömmen är borttagen. Om den är ansluten annorlunda skulle den eventuellt rulla framåt / bakåt vilket skulle vara irriterande. Jag tänker så småningom fixa detta med en enkel omkopplare för motorstyrenheten.

Anslutning av motorer och batteri till motorstyrenheten

Effekt - - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - - Roomba batteri [+]

Motor 2- - - - - - - - - - - - - - - Svart- - - - - - - - - - - - - - Vänster motor [-] Motor 2- - - - - - - - - - - - - - - - Röd - - - - - - - - - - - - - - - Vänster motor [+] Motor 1- - - - - - - - - - - - - - - Svart - - - - - - - - - - - - - - -Rättmotor [-] Motor 1- - - - - - - - - - - - - - - Röd- - - - - - - - - - - - - - - - Högermotor [+] GND- - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - - Roomba -batteri [-]

Anslutning av motorstyrenheten till Raspberry Pi

Motor Controller Pins Wire Color (se bilder) Raspberry Pi Pins

GND- - - - - - - - - - - - - - - - - Svart- - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Blå - - - - - - - - - - - - - - GPIO 18 DIR 2- - - - - - - - - - - - - - - Grön- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Gul - - - - - - - - - - - --GPIO 24 DIR 1- - - - - - - - - - - - - - - - - Orange - - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Röd- - - - - - - - - - - - - - - -5V

Montering av elektroniken

Det är inte mycket som går åt till att sätta ihop allt. Jag tog av roomba i chassit. Med locket borttaget kan du enkelt klippa bort de befintliga plastavstånden och borra hål för att montera elektroniken. Det finns befintliga portar för att driva kablar från motorerna. Om du använder Roomba -batteriet i lager finns det redan en avstängning för åtkomst till batteripolerna.

Batterier

Jag använde separata batterier för Raspberry Pi och motorstyrenheten. Pi -batteriet är bara ett 5V -batteri som används för att öka mobiltelefonerna. För motorstyrenheten använde jag det ursprungliga Roomba -batteriet som följde med. Batteripolerna är inte märkta, så det är bäst att kontrollera spänningen med en voltmeter innan du kopplar den till motorstyrenheten. För att fästa ledningarna till Roomba -batteriet använde jag fyra neodymmagneter (se bilder). Jag lodde två av magneterna till trådarna och de andra två fastnade jag på batteripolerna. Lödning avmagnetiserar magneterna. Beläggningen på utsidan kan dock fortfarande fästa vid magneterna på terminalerna och leda elektricitet. Detta gör att ansluta och koppla ur batteriet till en kaka.

Testning

När du har allt ihop kontrollerar du att allt är korrekt anslutet, stöder din robot på något (så att det inte rullar iväg) och slår på det.

Logga in och starta roombabot.py -programmet

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

Gå till webbkontrollsidan och testa det. Om allt är korrekt anslutet bör hjulen rotera i motsvarande riktning när du klickar på knapparna / trycker på piltangenterna (glöm inte att klicka på anslut).

Steg 6: Starta Python -koden vid start / avslutning

Starta Python -koden vid start / avslutning
Starta Python -koden vid start / avslutning
Starta Python -koden vid start / avslutning
Starta Python -koden vid start / avslutning

Det sista vi behöver göra är att berätta för Raspbian att starta python -programmet vid start. För att göra detta kommer vi att göra skript och schemalägga det för att köras vid omstart med crontab.

Skapa skriptet

Skapa en ny skriptfil som heter startrobot.sh i pi -användarkatalogen

pi@raspberrypi: ~ $ sudo nano startrobot.sh

Kopiera följande rader till filen

#!/bin/sh

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

Spara filen och avsluta

Gör filen startrobot.sh körbar

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

Testa det (tryck på ctrl + c för att stoppa)

pi@raspberrypi: ~ $ sh startrobot.sh

Redigera crontab -filen

pi@raspberrypi: ~ $ sudo crontab -e

Lägg till följande rad längst ner i filen

# m h dom mon dow kommando

@reboot sh /home/pi/startrobot.sh

Spara och avsluta

Roombabot.py -programmet ska nu starta när Pi startas om eller strömmen slås på.

Slutför

Vid denna tidpunkt bör du ha en funktionell robot som du kan styra med webbläsaren från vilken enhet som helst i ditt nätverk. Jag har tagit detta lite längre sedan den ursprungliga uppbyggnaden och konfigurationen av ett VPN för att kunna komma åt roboten när jag är hemifrån. Jag tänker göra några ytterligare ändringar i framtiden. Jag planerar att göra det autonomt och möjligen följa rörelser samtidigt som jag fortfarande kan ta över kontrollerna när jag vill.

Rekommenderad: