Inhoudsopgave:

Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+ - Ajarnpa
Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+ - Ajarnpa

Video: Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+ - Ajarnpa

Video: Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+ - Ajarnpa
Video: Online Cursus Webdesign & layout met CSS - Font-size bepalen met pixels, em of rem 2024, December
Anonim
Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+
Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+
Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+
Browsergestuurde Roomba-robot met de Raspberry Pi Model 3 A+

Overzicht

Deze Instructable zal zich richten op hoe je een dode Roomba een nieuw brein (Raspberry Pi), ogen (webcam) kunt geven en een manier om alles vanuit een webbrowser te besturen.

Er zijn veel Roomba-hacks die bediening via de seriële interface mogelijk maken. Ik heb niet het geluk gehad om een Roomba tegen te komen met de huidige firmware of een werkend moederbord. Of de Roomba is te oud of de Roomba is dood. Ik vond de Roomba die ik voor dit project gebruikte in een lokale kringloopwinkel voor $ 5. Het had nog steeds een behoorlijke batterij, maar een dood moederbord. (Ik vond de webcam ook in dezelfde kringloopwinkel voor ongeveer $ 5). Alles wat ik gebruik van de originele Roomba zijn de motoren, het chassis en de batterij. U hoeft voor dit project geen Roomba te gebruiken. Je kunt desgewenst verschillende motoren, wielen en chassis gebruiken. Ik heb gewoon zin om van een stuk rommel iets bruikbaars te maken.

Voor deze build heb ik de Raspberry Pi Model 3 A+ en een Riorand-motorcontroller gebruikt. Ik gebruik code van de Dexter Industries Browser Controlled Robot die ik heb aangepast. De Dexter Industries-versie stelt de Pi in als een websocket-server waarmee je hun robot (brick pi-platform) kunt besturen vanuit een client-html-bestand dat op een andere computer draait.

Ik heb de code gewijzigd om de GPIO-pinnen te gebruiken en een manier toegevoegd om de Pi uit te schakelen wanneer op een knop wordt geklikt / wanneer de escape-toets in de browser wordt ingedrukt. Ik heb ook enkele wijzigingen aangebracht in de besturingswebpagina om een bewegingsstream via een iframe te kunnen bekijken, terwijl ik de robot allemaal binnen één pagina bestuur. Ik heb de Pi ingesteld met een statisch IP-adres om het clientbestand te hosten, zodat ik verbinding kon maken met elke computer of elk apparaat in mijn netwerk.

Ik documenteer het proces hier in de hoop te laten zien hoe je een eenvoudige, goedkope basisrobot kunt maken.

Gebruikte onderdelen

Raspberry Pi 3 A+ (Adafruit Link) $30

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

12V-batterij voor motoren (Amazon Link) $ 19

5V-batterij voor de Raspberry Pi (Amazon Link) $ 10

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

Jumperdraden (Amazon Link) $ 7

Roomba 500-serie

Alles bij elkaar net onder de $ 100.

Stap 1: Installeer Raspbian en stel een statisch IP-adres in

Raspbian installeren en een statisch IP-adres instellen
Raspbian installeren en een statisch IP-adres instellen

Ik gebruikte Raspbian Stretch Lite. Ik zag geen behoefte aan de desktop, maar je kunt de desktopversie installeren als je dat liever hebt.

Ik ga ervan uit dat je al weet hoe je Raspbian moet installeren. Als je hulp nodig hebt, kun je hier de handleiding van de Raspberry Pi Foundation vinden.

Zodra u Raspbian in gebruik hebt, logt u in en voert u het raspi-config-programma uit.

pi@raspberrypi:~ $ sudo raspi-config

Stel uw wifi-verbinding in raspi-config in

Selecteer

2 netwerkopties

Selecteer

N2 wifi

Selecteer een land, voer uw SSID in en voer uw wachtwoordzin in

SSH instellen in raspi-config

Nadat ik de eerste configuratie had uitgevoerd, gebruikte ik SSH om alles headless in te stellen. (U kunt dit overslaan als u een monitor gebruikt. Het was voor mij gemakkelijker om wijzigingen in de code aan te brengen zonder de robot te moeten stoppen en op een monitor aan te sluiten.)

Terug naar het hoofdmenu van raspi-config

Selecteer

5 interface-opties

Selecteer

P2 SSH

Selecteer

Ja

Terug in het hoofdmenu van raspi-config selecteer

Controleer of u bent verbonden met uw netwerk

pi@raspberrypi:~ $ ifconfig

U zou een uitvoer moeten ontvangen die vergelijkbaar is met deze. (Let op het IP-adres; je hebt het misschien later nodig, bijvoorbeeld 192.168.1.18)

wlan0: vlaggen = 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-pakketten 484774396 5,5 MiB) RX-fouten 0 weggevallen 0 overschrijdingen 0 frame 0 TX-pakketten 30530 bytes 39740576 (37,8 MiB) TX-fouten 0 weggevallen 0 overschrijdingen 0 vervoerder 0 botsingen 0

Controleer of u internet kunt bereiken.

pi@raspberrypi:~ $ ping google.com

U zou een uitvoer moeten ontvangen die vergelijkbaar is met deze.

PING google.com (216.58.194.110) 56(84) bytes aan gegevens.

64 bytes van dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=1 ttl=54 tijd=18.2 ms 64 bytes van dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=2 ttl =54 tijd=19.4 ms 64 bytes van dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=3 ttl=54 tijd=23.6 ms 64 bytes van dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=4 ttl=54 tijd=30,2 ms ^C --- google.com ping-statistieken --- 4 pakketten verzonden, 4 ontvangen, 0% pakketverlies, tijd 3004 ms rtt min/avg/max/mdev = 18,209/ 22.901/30.267/4.715 ms

Een statisch IP instellen

Om consistent verbinding te kunnen maken met uw robot met hetzelfde adres in uw netwerk, moet u een statisch IP-adres instellen.

Haal uw huidige netwerkadres op, bijvoorbeeld 192.168.1.18

Ik gebruik het adres dat automatisch werd toegewezen door DHCP toen de Pi verbinding maakte met mijn netwerk. U kunt dit wijzigen in wat u maar wilt, zolang het maar overeenkomt met uw netwerk en niet conflicteert met andere toegewezen adressen.

Open dhcp.conf in een teksteditor. (ik gebruik nano)

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

Scrol omlaag naar #Example statische IP-configuratie en wijzig de volgende regels.

#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

Wijzig deze zodat deze overeenkomt met uw netwerk en verwijder de # aan het begin van elke regel.

Voorbeeld:

interface wlan0

statisch ip_address=192.168.1.18 statische routers=192.168.1.1 statisch domain_name_servers=192.168.1.1 8.8.8.8

Opslaan en afsluiten.

Start opnieuw op en maak verbinding met de Pi via SSH

pi@raspberrypi:~ $ sudo reboot

Maak verbinding vanaf een andere computer via SSH. Windows-gebruikers kunnen PuTTY of het Windows-subsysteem voor Linux (Windows10) gebruiken.

ian@computer:~$ ssh [email protected]

Voer uw wachtwoord in (de standaardinstelling is framboos).

[email protected]'s wachtwoord:

Je zou nu bij de opdrachtprompt van je Pi moeten zijn.

pi@raspberrypi:~$

Stap 2: Motion installeren en configureren

Motion installeren en configureren
Motion installeren en configureren

Motion is een programma dat in veel beveiligingscamera-/webcamprojecten wordt gebruikt. Beweging heeft veel functies. We stellen het echter in om eenvoudig video van de webcam naar poort 8081 te streamen.

Test je webcam

Sluit uw webcam aan en vermeld aangesloten USB-apparaten (mogelijk moet u opnieuw opstarten nadat u verbinding hebt gemaakt).

pi@raspberrypi:~ $ lsusb

U zou een uitvoer moeten krijgen die vergelijkbaar is met deze. Let op de Logitech C210.

Bus 001 Apparaat 002: ID 046d:0819 Logitech, Inc. Webcam C210

Bus 001 Apparaat 001: ID 1d6b:0002 Linux Foundation 2.0 root-hub

Als uw camera niet wordt weergegeven, is deze mogelijk niet compatibel of moet u mogelijk extra stuurprogramma's installeren.

Beweging installeren

Pakketten bijwerken.

pi@raspberrypi:~ $ sudo apt-get update

Installeer beweging.

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

Nadat Motion is geïnstalleerd, bewerkt u het configuratiebestand.

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

Wijzig de volgende regels zodat ze hieronder overeenkomen.

daemon aan

breedte 640 hoogte 480 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost uit webcontrol_localhost uit

Start de Motion Daemon bij opstarten

Open het /etc/default/motion-bestand.

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

Veranderen naar

start_motion_daemon=ja

Sla het bestand op en sluit af

Opnieuw opstarten

pi@raspberrypi:~ $ sudo reboot

Nadat de Pi opnieuw is opgestart, opent u de browser en controleert u of u videostreaming hebt in de browser op poort 8081

Voorbeeld:

192.168.1.18:8081

Problemen met de bewegingsdaemon oplossen

Ik kwam problemen tegen om de bewegingsdaemon bij het opstarten te laten starten terwijl ik verschillende opties in het bestand motion.conf uitprobeerde.

Als u beweging start vóór de bewegingsdaemon in Raspian Stretch, zult u waarschijnlijk problemen tegenkomen om het later bij het opstarten te laten starten. Door "sudo motion" uit te voeren zonder de daemon te configureren om dit te doen, wordt eerst de map /var/log/motion gemaakt zonder de gebruiker schrijfrechten te geven.

Stap 3: Apache installeren en webbeheerpagina instellen

Apache installeren en webbeheerpagina instellen
Apache installeren en webbeheerpagina instellen

Apache is de webserver voor de besturingswebpagina van de robot. We gaan het standaard Apache index.html-bestand vervangen door een bestand dat is gedownload van github. Je zult ook een aantal regels code wijzigen om de bewegende videostream weer te geven en toe te wijzen waar de commando's naartoe moeten worden gestuurd om de robot te besturen.

Apache en Git. installeren

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

Zodra apache en git zijn geïnstalleerd, downloadt u de bestanden.

pi@raspberrypi:~ $ git-kloon

Open de roombarobot-map.

pi@raspberrypi:~ $ cd roombarobot

Vervang het bestand index.html in de map /var/www/html door het bestand index.html in het bestand /home/pi/roombarobot

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

Bewerk het index.html-bestand

Open het bestand index.html met een teksteditor.

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

Zoek de deze twee lijnen

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

Wijzig "UWIP-ADRES" in het statische IP-adres dat u in stap 1 hebt ingesteld en sla het bestand op.

Voorbeeld:

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

Open op een andere computer een browser en voer het IP-adres van je Pi in. U zou de bedieningswebpagina moeten zien met een vak aan de linkerkant, streaming video van uw webcam en de webbedieningsknoppen aan de rechterkant.

Stap 4: Stel de code in en test deze

De code instellen en testen
De code instellen en testen

Deze code is geschreven in python en vereist de tornado-bibliotheek. De code gebruikt de bibliotheek om een server in te stellen om te luisteren naar opdrachten van de besturingswebpagina via websockets op poort 9093.

Installeer PIP en de Tornado-bibliotheek

pip installeren

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

Installeer tornado-bibliotheek

pi@raspberrypi:~ $ sudo pip install tornado

Start het Roombabot-programma en test de verbinding

Start het roombabot.py-programma

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

Eenmaal uitgevoerd, zou u "Klaar" in de terminal moeten zien. Open de besturingswebpagina in een browser en klik op verbinden. Klik vervolgens op een van de richtingsknoppen op de pagina. U kunt ook de pijltjestoetsen op uw toetsenbord gebruiken.

U zou een uitvoer in de terminal moeten zien die er ongeveer zo uitziet.

Klaar

verbinding geopend… verbinding geopend… ontvangen: u 8 Lopend Voorwaarts verbinding geopend… ontvangen: l 6 Draaien naar links verbinding geopend… ontvangen: d 2 Draaien Omgekeerde verbinding geopend… ontvangen: r 4 Draaien naar rechts

Druk op ctrl+c om het programma te stoppen.

Als je klaar bent met het testen, zet je de Pi uit.

pi@raspberrypi:~$ sudo poweroff

Bugs

Ik heb een probleem opgemerkt met de afsluitknop op de bedieningswebpagina. Soms doet de afsluitknop niets wanneer erop wordt geklikt of getikt. Ik heb niet kunnen achterhalen wat dit veroorzaakt, maar er is een oplossing. Als u de robot wilt uitschakelen en de afsluitknop werkt niet, laad de pagina dan opnieuw, klik / tik op de verbindingsknop en klik / tik vervolgens op de afsluitknop. Het zou moeten uitschakelen.

Stap 5: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Zoals eerder vermeld hoef je voor dit project geen Roomba te gebruiken. Alles met twee motoren, twee wielen en een frame zou werken. Ik heb de Roomba uit elkaar gehaald en alles verwijderd behalve de wielmodules en de batterij.

Wielmodules

De wielen en motoren van Roomba zijn samen gehuisvest in een verwijderbare module. Elke module heeft een blauwe buitenbehuizing met daarin de motor, versnellingsbak, wiel, ophangveer en interfacekaart.

Interfacekaart

Elke interfacekaart heeft zes draden die ernaartoe lopen. Er zijn twee draden (Rood [+], Zwart [-]) die de motor draaien, één datadraad voor een hall-effectsensor, één draad voor de wielvalschakelaar, één 5V-draad en één GND-draad om de sensor van stroom te voorzien. U moet de module uit elkaar halen om toegang te krijgen tot de interfacekaart. Ik heb alles terug naar de motor verwijderd en nieuwe [+] en [-] draden aan de motor gesoldeerd (zie foto's). Het is aan jou of je de sensoren wilt behouden of niet.

Ophangveren

Zodra u het vacuümgedeelte verwijdert, wordt het gewicht van de Roomba weggegooid. Als u de veren niet verwijdert, zal de Roomba schuin gaan zitten. Ik heb deze oorspronkelijk verwijderd, maar heb ze toen weer toegevoegd toen ik merkte dat het moeite had om over tapijt te rollen. Door de veer terug te plaatsen was het probleem verholpen.

Bedrading van de motoren naar de motorcontroller

De motoren zijn van elkaar af gericht. Dat betekent dat om de Roomba vooruit te laten rijden, de ene motor naar voren moet draaien en de andere achteruit. Ik dacht hier niet veel over na totdat ik alles had aangesloten. Uiteindelijk heb ik gewoon de code geschreven over hoe ik de motoren in eerste instantie had aangesloten. Dit was een gelukkig ongeluk, want telkens wanneer de Raspberry Pi wordt in- of uitgeschakeld, is er spanningsuitgang naar de GPIO-pinnen. Zoals ik dingen heb aangesloten, draait de Roomba totdat de Raspberry Pi is opgestart (ongeveer dertig seconden) en draait hij bij het afsluiten totdat de stroom wordt verwijderd. Als het anders bedraad zou zijn, zou het mogelijk naar voren / achteren rollen, wat irritant zou zijn. Ik ben van plan dit uiteindelijk op te lossen met een eenvoudige schakelaar voor de motorcontroller.

De motoren en batterij aansluiten op de motorcontroller

Voeding- - - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - - -Roomba Accu [+]

Motor 2- - - - - - - - - - - - - - - Zwart- - - - - - - - - - - - - Linker motor [-] Motor 2- - - - - - - - - - - - - - - Rood- - - - - - - - - - - - - - -Linker Motor [+] Motor 1- - - - - - - - - - - - - - - Zwart- - - - - - - - - - - - - -Rechter Motor[-] Motor 1- - - - - - - - - - - - - - - Rood- - - - - - - - - - - - - - -Rechter Motor[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - - -Roomba Accu [-]

De motorcontroller aansluiten op de Raspberry Pi

Motor Controller Pins Draadkleur (zie foto's) Raspberry Pi Pins

GND- - - - - - - - - - - - - - - - - Zwart- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Blauw - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Groen- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Geel - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Oranje - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Rood- - - - - - - - - - - - - - -5V

De elektronica monteren

Er komt niet veel bij kijken om alles in elkaar te zetten. Ik heb de roomba uit zijn chassis gehaald. Als de kap is verwijderd, kunt u eenvoudig de bestaande plastic afstandhouders afknippen en gaten boren om de elektronica te monteren. Er zijn bestaande poorten om kabels van de motoren te laten lopen. Als u de standaard Roomba-batterij gebruikt, is er al een uitsparing voor toegang tot de batterijpolen.

Batterijen

Ik gebruikte aparte batterijen voor de Raspberry Pi en de motorcontroller. De batterij van de Pi is slechts een 5V-batterijpakket dat wordt gebruikt om mobiele telefoons te stimuleren. Voor de motorcontroller heb ik de originele Roomba-batterij gebruikt die erbij zat. De accupolen zijn niet gelabeld, dus het is het beste om de spanning te controleren met een voltmeter voordat u deze aansluit op de motorcontroller. Om de draden aan de Roomba-batterij te bevestigen, heb ik vier neodymium-magneten gebruikt (zie foto's). Ik heb twee van de magneten aan de draden gesoldeerd en de andere twee heb ik aan de batterijpolen geplakt. Solderen demagnetiseert de magneten. De coating aan de buitenkant kan echter nog steeds aan de magneten op de klemmen hechten en elektriciteit geleiden. Dit maakt het aansluiten en loskoppelen van de accu een fluitje van een cent.

Testen

Als je alles bij elkaar hebt, controleer dan of je alles correct hebt aangesloten, zet je robot ergens op (zodat hij niet wegrolt) en zet hem aan.

Log in en start het roombabot.py-programma

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

Ga naar de webcontrolepagina en test het uit. Als alles correct is aangesloten, moeten de wielen in de juiste richting draaien wanneer de knoppen worden ingedrukt / de pijltjestoetsen worden ingedrukt (vergeet niet op verbinden te klikken).

Stap 6: De Python-code starten bij opstarten / afmaken

De Python-code starten bij opstarten/afsluiten
De Python-code starten bij opstarten/afsluiten
De Python-code starten bij opstarten/afsluiten
De Python-code starten bij opstarten/afsluiten

Het laatste wat we moeten doen is Raspbian vertellen om het python-programma bij het opstarten te starten. Om dit te doen gaan we een script maken en plannen om het te laten draaien bij het opnieuw opstarten met behulp van crontab.

Maak het script

Maak een nieuw scriptbestand met de naam startrobot.sh in de pi-gebruikersmap

pi@raspberrypi:~ $ sudo nano startrobot.sh

Kopieer de volgende regels naar het bestand

#!/bin/sh

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

Sla het bestand op en sluit af

Maak het startrobot.sh-bestand uitvoerbaar

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

Test het uit (Druk op ctrl + c om te stoppen)

pi@raspberrypi:~$ sh startrobot.sh

Bewerk het crontab-bestand

pi@raspberrypi:~$ sudo crontab -e

Voeg de volgende regel toe aan de onderkant van het bestand:

# m h dom mon dow commando

@reboot sh /home/pi/startrobot.sh

Opslaan en afsluiten

Het roombabot.py-programma zou nu moeten starten wanneer de Pi opnieuw wordt opgestart of wordt uitgezet.

Afronden

Op dit punt zou u een functionele robot moeten hebben die u kunt besturen met behulp van de browser vanaf elk apparaat in uw netwerk. Ik heb dit een beetje verder gegaan sinds de oorspronkelijke bouw en het instellen van een VPN om toegang te krijgen tot de robot als ik niet thuis ben. Ik ben van plan om in de toekomst nog enkele wijzigingen aan te brengen. Ik ben van plan om het autonoom te maken en mogelijk bewegingen te volgen terwijl ik toch de besturing kan overnemen wanneer ik wil.