Spisu treści:

Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+: 6 kroków (ze zdjęciami)
Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+: 6 kroków (ze zdjęciami)

Wideo: Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+: 6 kroków (ze zdjęciami)

Wideo: Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+: 6 kroków (ze zdjęciami)
Wideo: 📲Zbuduj aplikację mobilną dla automatyki w 3 prostych krokach 2024, Listopad
Anonim
Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+
Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+
Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+
Robot Roomba sterowany przez przeglądarkę z Raspberry Pi Model 3 A+

Przegląd

Ten Instruktaż skupi się na tym, jak dać martwemu Roombie nowy mózg (Raspberry Pi), oczy (kamera internetowa) i sposób kontrolowania wszystkiego z przeglądarki internetowej.

Istnieje wiele hacków do Roomby, które umożliwiają sterowanie przez interfejs szeregowy. Nie miałem szczęścia natknąć się na Roombę z aktualnym oprogramowaniem układowym lub działającą płytą główną. Albo Roomba jest za stara, albo Roomba nie żyje. Znalazłem Roombę, której używałem do tego projektu, w lokalnym sklepie z używanymi rzeczami za 5 USD. Wciąż miał przyzwoitą baterię, ale martwą płytę główną. (Znalazłem też kamerę internetową w tym samym sklepie z używanymi rzeczami za około 5 USD). Jedyne, czego używam z oryginalnej Roomby, to silniki, podwozie i akumulator. W tym projekcie nie musisz używać robota Roomba. Możesz użyć różnych silników, kół i podwozia, jeśli chcesz. Po prostu mam ochotę zamienić kawałek śmieci w coś użytecznego.

Do tej budowy użyłem Raspberry Pi Model 3 A+ i kontrolera silnika Riorand. Używam kodu z robota kontrolowanego przez przeglądarkę Dexter Industries, który zmodyfikowałem. Wersja Dexter Industries konfiguruje Pi jako serwer websocket, który pozwala kontrolować ich robota (platformę cegły pi) z pliku html klienta działającego na innym komputerze.

Zmieniłem kod używając pinów GPIO i dodałem sposób na wyłączenie Pi po kliknięciu przycisku / po naciśnięciu klawisza Escape w przeglądarce. Wprowadziłem również pewne zmiany na stronie internetowej sterowania, aby umożliwić oglądanie strumienia ruchu przez ramkę iframe, jednocześnie kontrolując robota na jednej stronie. Ustawiłem Pi ze statycznym adresem IP, aby hostować plik klienta, abym mógł połączyć się za pomocą dowolnego komputera lub urządzenia w mojej sieci.

Dokumentuję ten proces w nadziei, że pokażę, jak stworzyć prostego, niedrogiego robota bazowego.

Używane części

Raspberry Pi 3 A+ (Adafruit Link) 30 USD

Riorand Kontroler podwójnego sterownika silnika mostek H (łącze Amazon) 22 USD

Akumulator 12 V do silników (łącze Amazon) 19 USD

Bateria 5V do Raspberry Pi (Amazon Link) 10 USD

Karta Micro SD 8 GB (łącze Amazon) 5 USD

Przewody połączeniowe (łącze Amazon) 7 USD

Roomba serii 500

. Wszystko razem prawie 100 dolarów.

Krok 1: Zainstaluj Raspbian i skonfiguruj statyczny adres IP

Zainstaluj Raspbian i skonfiguruj statyczny adres IP
Zainstaluj Raspbian i skonfiguruj statyczny adres IP

Użyłem Raspbian Stretch Lite. Nie widziałem potrzeby korzystania z pulpitu, ale możesz zainstalować wersję na komputer, jeśli wolisz.

Zakładam, że już wiesz, jak zainstalować Raspbian. Jeśli potrzebujesz pomocy, możesz znaleźć przewodnik po Raspberry Pi Foundation tutaj.

Po uruchomieniu Raspbian zaloguj się i uruchom program raspi-config.

pi@raspberrypi:~ $ sudo raspi-config

Skonfiguruj połączenie WiFi w raspi-config

Wybierz

2 opcje sieciowe

Wybierz

N2 Wi-Fi

Wybierz kraj, wprowadź swój identyfikator SSID i wprowadź hasło

Skonfiguruj SSH w raspi-config

Po wykonaniu wstępnej konfiguracji użyłem SSH, aby ustawić wszystko bez nagłówka. (Możesz to pominąć, jeśli używasz monitora. Łatwiej było mi wprowadzać zmiany w kodzie bez konieczności zatrzymywania robota i podłączania go do monitora.)

Powrót do głównego menu raspi-config

Wybierz

5 opcji interfejsu

Wybierz

P2 SSH

Wybierz

tak

Wróć do głównego menu raspi-config, wybierz

Sprawdź, czy masz połączenie z siecią

pi@raspberrypi:~ $ ifconfig

Powinieneś otrzymać wynik podobny do tego. (Zanotuj adres IP; możesz go później potrzebować, np. 192.168.1.18)

wlan0: flagi=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) pakiety RX 44396 bajtów 5847726 (5,5 MiB) Błędy RX 0 porzucone 0 przekroczenia 0 ramka 0 Pakiety TX 30530 bajtów 39740576 (37,8 MiB) Błędy TX 0 porzucone 0 przekroczenia 0 nośnik 0 kolizje 0

Sprawdź, czy możesz połączyć się z internetem.

pi@raspberrypi:~ $ ping google.com

Powinieneś otrzymać wynik podobny do tego.

PING google.com (216.58.194.110) 56(84) bajtów danych.

64 bajty z dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=1 ttl=54 time=18,2 ms 64 bajty z dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=2 ttl =54 time=19,4 ms 64 bajty z dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=3 ttl=54 time=23.6 ms 64 bajty z dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=4 ttl=54 time=30.2 ms ^C --- google.com statystyki ping --- 4 pakiety wysłane, 4 odebrane, 0% utraty pakietów, czas 3004ms rtt min/avg/max/mdev = 18.209/ 22,901/30,267/4,715 ms

Skonfiguruj statyczny adres IP

Aby móc konsekwentnie łączyć się z robotem przy użyciu tego samego adresu w sieci, będziesz chciał ustawić statyczny adres IP.

Uzyskaj aktualny adres sieciowy, np. 192.168.1.18

Używam adresu, który został automatycznie przydzielony przez DHCP, gdy Pi łączył się z moją siecią. Możesz to zmienić na dowolne, o ile pasuje do Twojej sieci i nie koliduje z żadnymi innymi przypisanymi adresami.

Otwórz dhcp.conf w edytorze tekstu. (Używam nano)

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

Przewiń w dół do #Przykładowa konfiguracja statycznego adresu IP i zmień następujące wiersze.

#interfejs 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

Zmień, aby dopasować swoją sieć i usuń # na początku każdego wiersza.

Przykład:

interfejs wlan0

statyczny adres_ip=192.168.1.18 routery statyczne=192.168.1.1 statyczne serwery_nazw_domeny=192.168.1.1 8.8.8.8

Zapisz i wyjdź.

Uruchom ponownie i połącz się z Pi przez SSH

pi@raspberrypi:~ $ sudo restart

Połącz się z innego komputera za pomocą SSH. Użytkownicy systemu Windows mogą korzystać z PuTTY lub podsystemu Windows dla systemu Linux (Windows10).

ian@komputer:~$ ssh [email protected]

Wpisz swoje hasło (domyślne to malina).

hasło [email protected]:

Powinieneś być teraz w wierszu poleceń swojego Pi.

pi@raspberrypi:~$

Krok 2: Zainstaluj i skonfiguruj Motion

Zainstaluj i skonfiguruj ruch
Zainstaluj i skonfiguruj ruch

Motion to program używany w wielu projektach kamer bezpieczeństwa / kamer internetowych. Motion ma wiele funkcji. Jednak konfigurujemy go tak, aby po prostu przesyłać strumieniowo wideo z kamery internetowej do portu 8081.

Przetestuj swoją kamerę internetową

Podłącz kamerę internetową i wyświetl listę podłączonych urządzeń USB (po podłączeniu może być konieczne ponowne uruchomienie).

pi@raspberrypi:~ $ lsusb

Powinieneś otrzymać wynik podobny do tego. Zwróć uwagę na Logitech C210.

Magistrala 001 Urządzenie 002: ID 046d:0819 Logitech, Inc. Kamera internetowa C210

Magistrala 001 Urządzenie 001: ID 1d6b:0002 Główny koncentrator Linux Foundation 2.0

Jeśli aparat się nie wyświetla, może być niezgodny lub może być konieczne zainstalowanie dodatkowych sterowników.

Zainstaluj ruch

Zaktualizuj pakiety.

pi@raspberrypi:~ $ sudo apt-get update

Zainstaluj ruch.

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

Po zainstalowaniu Motion edytuj plik konfiguracyjny.

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

Zmień następujące wiersze, aby pasowały do poniżej.

demon włączony

szerokość 640 wysokość 480 liczba klatek na sekundę 100 wyjście_zdjęcia wyłączone ffmpeg_output_movies wyłączone text_right stream_port 8081 stream_quality 100 stream_localhost wyłączone webcontrol_localhost wyłączone

Uruchom demona ruchu przy rozruchu

Otwórz plik /etc/default/motion.

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

Zmień na

start_motion_daemon=tak

Zapisz plik i wyjdź

Restart

pi@raspberrypi:~ $ sudo restart

Po ponownym uruchomieniu Pi otwórz przeglądarkę i sprawdź, czy przesyłasz strumieniowo wideo do przeglądarki na porcie 8081

Przykład:

192.168.1.18:8081

Rozwiązywanie problemów z demonem ruchu

Napotkałem problemy z uruchomieniem demona ruchu przy starcie, gdy próbowałem różnych opcji w pliku motion.conf.

Jeśli zaczniesz ruch przed demonem ruchu w Raspian Stretch, prawdopodobnie napotkasz problemy z uruchomieniem go później. Uruchomienie "sudo motion" bez skonfigurowania demona, aby to zrobił, najpierw tworzy katalog /var/log/motion bez przyznawania użytkownikowi uprawnień do zapisu.

Krok 3: Zainstaluj Apache i skonfiguruj stronę kontroli sieci

Zainstaluj Apache i skonfiguruj stronę kontroli sieci
Zainstaluj Apache i skonfiguruj stronę kontroli sieci

Apache to serwer WWW dla strony internetowej sterowania robotem. Zastąpimy domyślny plik Apache index.html plikiem pobranym z github. Zmienisz również kilka wierszy kodu, aby wyświetlić strumień wideo ruchu i przypisz, gdzie wysyłać polecenia sterujące robotem.

Zainstaluj Apache i Git

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

Po zainstalowaniu apache i git pobierz pliki.

pi@raspberrypi:~ $ klon git

Otwórz katalog roombarobota.

pi@raspberrypi:~ $ cd roombarobot

Zastąp plik index.html w folderze /var/www/html plikiem index.html w /home/pi/roombarobot

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

Edytuj plik index.html

Otwórz plik index.html za pomocą edytora tekstu.

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

Znajdź te dwie linie

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

Zmień „YOURIPADDRESS” na statyczny adres IP ustawiony w kroku 1 i zapisz plik.

Przykład:

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

Na innym komputerze otwórz przeglądarkę i wprowadź adres IP swojego Pi. Powinieneś zobaczyć stronę sterowania z polem po lewej stronie, strumieniową transmisję wideo z kamery internetowej i przyciski sterowania po prawej stronie.

Krok 4: Skonfiguruj i przetestuj kod

Skonfiguruj i przetestuj kod
Skonfiguruj i przetestuj kod

Ten kod jest napisany w Pythonie i wymaga biblioteki tornado. Kod wykorzystuje bibliotekę do skonfigurowania serwera do nasłuchiwania poleceń ze strony internetowej sterowania za pośrednictwem gniazd sieciowych na porcie 9093.

Zainstaluj PIP i bibliotekę Tornado

Zainstaluj pip

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

Zainstaluj bibliotekę tornado

pi@raspberrypi:~ $ sudo pip zainstaluj tornado

Uruchom program Roombabot i przetestuj połączenie

Uruchom program roombabot.py

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

Po uruchomieniu w terminalu powinien pojawić się komunikat „Gotowe”. Otwórz stronę sterowania w przeglądarce i kliknij Połącz. Następnie kliknij dowolny z przycisków kierunkowych na stronie. Możesz także użyć klawiszy strzałek na klawiaturze.

Powinieneś zobaczyć wyjście w terminalu podobne do tego.

Gotowy

połączenie otwarte… połączenie otwarte… odebrane: u 8 Running Połączenie do przodu otwarte… połączenie odebrane: l 6 Obracanie w lewo połączenie otwarte… odebrane: d 2 Bieganie Połączenie wsteczne otwarte… odebrane: r 4 Obracanie w prawo

Naciśnij ctrl+c, aby zatrzymać program.

Po zakończeniu testowania wyłącz Pi.

pi@raspberrypi:~$ sudo poweroff

Robaki

Zauważyłem problem z przyciskiem wyłączania na stronie sterowania. Czasami przycisk zamykania nie robi nic po kliknięciu lub dotknięciu. Nie udało mi się ustalić, co to powoduje, ale istnieje obejście tego problemu. Jeśli chcesz wyłączyć robota, a przycisk zamykania nie działa, załaduj ponownie stronę, kliknij / naciśnij przycisk połączenia, a następnie kliknij / naciśnij przycisk zamykania. Powinien się wyłączyć.

Krok 5: Montaż

montaż
montaż
montaż
montaż
montaż
montaż
montaż
montaż

Jak wspomniano wcześniej, do tego projektu nie musisz używać Roomby. Wszystko z dwoma silnikami, dwoma kołami i ramą będzie działać. Rozebrałem Roombę i usunąłem wszystko oprócz modułów kół i akumulatora.

Moduły kół

Koła i silniki Roomby są umieszczone razem w wyjmowanym module. Każdy moduł ma niebieską obudowę zewnętrzną zawierającą silnik, skrzynię biegów, koło, sprężynę zawieszenia i płytkę interfejsu.

Płyta interfejsu

Do każdej płyty interfejsu biegnie sześć przewodów. Istnieją dwa przewody (czerwony [+], czarny [-]), które obracają silnikiem, jeden przewód danych czujnika efektu Halla, jeden przewód przełącznika spadku koła, jeden przewód 5 V i jeden przewód GND do zasilania czujnika. Będziesz musiał rozebrać moduł, aby uzyskać dostęp do płyty interfejsu. Wyjąłem wszystko z powrotem do silnika i przylutowałem nowe przewody [+] i [-] do silnika (patrz zdjęcia). Od Ciebie zależy, czy chcesz zachować czujniki, czy nie.

Sprężyny zawieszenia

Po usunięciu części próżniowej waga robota Roomba zostaje zrzucona. Jeśli nie usuniesz sprężyn, robot Roomba będzie siedział pod kątem. Pierwotnie je usunąłem, ale potem dodałem je z powrotem, gdy okazało się, że ma problem z przetaczaniem się po dywanie. Założenie sprężyny z powrotem rozwiązało problem.

Okablowanie silników do sterownika silnika

Silniki są odwrócone od siebie. Oznacza to, że aby prowadzić Roombę do przodu, jeden silnik będzie musiał obracać się do przodu, a drugi do tyłu. Nie myślałem o tym zbyt wiele, dopóki nie podłączyłem wszystkiego. Skończyło się na tym, że napisałem kod dotyczący tego, jak początkowo okablowałem silniki. To był szczęśliwy wypadek, ponieważ za każdym razem, gdy Raspberry Pi włącza się / wyłącza, na piny GPIO pojawia się napięcie. Sposób, w jaki mam wszystko podłączone, Roomba obraca się, dopóki Raspberry Pi nie uruchomi się (około trzydziestu sekund) i obraca się po wyłączeniu, aż do wyłączenia zasilania. Gdyby został podłączony inaczej, mógłby potencjalnie przetoczyć się do przodu / do tyłu, co byłoby irytujące. Planuję ostatecznie naprawić to za pomocą prostego przełącznika do sterownika silnika.

Podłączanie silników i akumulatora do sterownika silnika

Zasilanie- - - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - - -Akumulator Roomba [+]

Silnik 2- - - - - - - - - - - - - - - Czarny- - - - - - - - - - - - - -Lewy Silnik [-] Silnik 2- - - - - - - - - - - - - - - Czerwony- - - - - - - - - - - - - - -Lewy Silnik [+] Silnik 1- - - - - - - - - - - - - - - Czarny- - - - - - - - - - - - - -Prawy silnik[-] Silnik 1- - - - - - - - - - - - - - Czerwony- - - - - - - - - - - - - - -Prawy silnik[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - - -Akumulator Roomba [-]

Okablowanie sterownika silnika do Raspberry Pi

Piny sterownika silnika Kolor przewodu (patrz zdjęcia) Piny Raspberry Pi

GND- - - - - - - - - - - - - - - - - Czarny- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Niebieski - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Zielony- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Żółty - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Pomarańczowy - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Czerwony- - - - - - - - - - - - - - -5V

Montaż elektroniki

Niewiele jest w składaniu wszystkiego w całość. Zdjąłem roombę z obudowy. Po zdjęciu pokrywy można łatwo odpiąć istniejące plastikowe wsporniki i wywiercić otwory do zamontowania elektroniki. Istnieją istniejące porty do prowadzenia kabli z silników. Jeśli używasz standardowego akumulatora Roomba, istnieje już wycięcie na dostęp do zacisków akumulatora.

Baterie

Użyłem osobnych baterii do Raspberry Pi i sterownika silnika. Bateria Pi to po prostu zestaw baterii 5 V służący do doładowania telefonów komórkowych. Do sterownika silnika użyłem oryginalnego akumulatora Roomba, który był z nim dołączony. Zaciski akumulatora nie są oznaczone, dlatego najlepiej sprawdzić napięcie za pomocą woltomierza przed podłączeniem go do sterownika silnika. Do podłączenia przewodów do akumulatora Roomba użyłem czterech magnesów neodymowych (patrz zdjęcia). Przylutowałem dwa magnesy do przewodów, a pozostałe dwa przykleiłem do zacisków akumulatora. Lutowanie rozmagnesowuje magnesy. Jednak powłoka na zewnątrz może nadal przyczepiać się do magnesów na zaciskach i przewodzić prąd. To sprawia, że podłączanie i odłączanie akumulatora to bułka z masłem.

Testowanie

Gdy już wszystko zbierzesz, sprawdź, czy wszystko jest prawidłowo podłączone, podeprzyj robota na czymś (aby się nie odtoczył) i włącz go.

Zaloguj się i uruchom program roombabot.py

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

Przejdź do strony kontroli sieci i przetestuj ją. Jeśli wszystko jest prawidłowo podłączone, koła powinny obracać się w odpowiednim kierunku po kliknięciu przycisków / wciśnięciu klawiszy strzałek (nie zapomnij kliknąć połącz).

Krok 6: Uruchamianie kodu Pythona podczas rozruchu / kończenie pracy

Uruchamianie kodu Pythona podczas rozruchu / kończenie pracy
Uruchamianie kodu Pythona podczas rozruchu / kończenie pracy
Uruchamianie kodu Pythona podczas rozruchu / kończenie pracy
Uruchamianie kodu Pythona podczas rozruchu / kończenie pracy

Ostatnią rzeczą, jaką musimy zrobić, to powiedzieć Raspbianowi, aby uruchomił program Python podczas startu. Aby to zrobić, stworzymy skrypt i zaplanujemy jego uruchomienie przy ponownym uruchomieniu za pomocą crontab.

Utwórz Skrypt

Utwórz nowy plik skryptu o nazwie startrobot.sh w katalogu użytkownika pi

pi@raspberrypi:~ $ sudo nano startrobot.sh

Skopiuj następujące wiersze do pliku

#!/kosz/sz

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

Zapisz plik i wyjdź

Uczyń plik startrobot.sh wykonywalnym

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

Przetestuj (naciśnij ctrl + c, aby zatrzymać)

pi@raspberrypi:~$ sh startrobot.sh

Edytuj plik crontab

pi@raspberrypi:~$ sudo crontab -e

Dodaj następujący wiersz na dole pliku

# m h dom mon dow polecenie

@reboot sh /home/pi/startrobot.sh

Zapisz i wyjdź

Program roombabot.py powinien się teraz uruchomić po ponownym uruchomieniu Pi lub wyłączeniu zasilania.

Kończąc

W tym momencie powinieneś mieć funkcjonalnego robota, którym możesz sterować za pomocą przeglądarki z dowolnego urządzenia w swojej sieci. Poszedłem trochę dalej od oryginalnej kompilacji i konfiguracji VPN, aby móc uzyskać dostęp do robota, gdy jestem z dala od domu. W przyszłości zamierzam wprowadzić dodatkowe zmiany. Planuję uczynić go autonomicznym i ewentualnie podążać za ruchem, jednocześnie będąc w stanie przejąć kontrolę, kiedy tylko zechcę.

Zalecana: