Sommario:

Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+: 6 passaggi (con immagini)
Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+: 6 passaggi (con immagini)

Video: Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+: 6 passaggi (con immagini)

Video: Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+: 6 passaggi (con immagini)
Video: Raspberry Pi 3 ⋆ IoT sicuro? — Ubuntu Core 18 2024, Luglio
Anonim
Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+
Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+
Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+
Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+

Panoramica

Questo Instructable si concentrerà su come dare a Roomba morto un nuovo cervello (Raspberry Pi), occhi (Webcam) e un modo per controllare tutto da un browser web.

Esistono molti hack di Roomba che consentono il controllo tramite l'interfaccia seriale. Non sono stato abbastanza fortunato da imbattermi in un Roomba con firmware aggiornato o scheda madre funzionante. O Roomba è troppo vecchio o Roomba è morto. Ho trovato il Roomba che ho usato per questo progetto in un cestino dell'usato locale per $ 5. Aveva ancora una batteria decente, ma una scheda madre morta. (Ho anche trovato la webcam nello stesso negozio dell'usato per circa $ 5). Tutto quello che sto usando dal Roomba originale sono i motori, il telaio e la batteria. Non è necessario utilizzare Roomba per questo progetto. Puoi usare motori, ruote e telaio diversi, se lo desideri. Ho solo voglia di trasformare un pezzo di spazzatura in qualcosa di utilizzabile.

Per questa build ho usato il Raspberry Pi Model 3 A+ e un controller motore Riorand. Sto usando il codice del robot controllato dal browser Dexter Industries che ho modificato. La versione Dexter Industries configura il Pi come un server websocket che consente di controllare il proprio robot (piattaforma brick pi) da un file html client che esegue un altro computer.

Ho cambiato il codice usando i pin GPIO e ho aggiunto un modo per spegnere il Pi quando si fa clic su un pulsante / quando si preme il tasto Esc nel browser. Ho anche apportato alcune modifiche alla pagina web di controllo per consentire la visualizzazione di un flusso di movimento attraverso un iframe, mentre controllavo il robot tutto all'interno di una singola pagina. Ho impostato il Pi con un IP statico per ospitare il file client in modo da potermi connettere utilizzando qualsiasi computer o dispositivo sulla mia rete.

Sto documentando il processo qui nella speranza di mostrare come creare un robot di base semplice ed economico.

Parti usate

Raspberry Pi 3 A+ (collegamento Adafruit) $ 30

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

Batteria da 12 V per motori (Amazon Link) $ 19

Batteria da 5 V per Raspberry Pi (Amazon Link) $ 10

Scheda Micro SD da 8 GB (collegamento Amazon) $ 5

Ponticelli (collegamento Amazon) $ 7

Roomba serie 500

. Tutti insieme poco meno di $100.

Passaggio 1: installa Raspbian e configura un indirizzo IP statico

Installa Raspbian e configura un indirizzo IP statico
Installa Raspbian e configura un indirizzo IP statico

Ho usato Raspbian Stretch Lite. Non ho visto la necessità del desktop, ma puoi installare la versione desktop se preferisci.

Presumo che tu sappia già come installare Raspbian. Se hai bisogno di aiuto, puoi trovare la guida della Raspberry Pi Foundation qui.

Una volta installato e funzionante Raspbian, accedi ed esegui il programma raspi-config.

pi@raspberrypi:~ $ sudo raspi-config

Configura la tua connessione WiFi in raspi-config

Selezionare

2 opzioni di rete

Selezionare

N2 Wi-Fi

Seleziona un Paese, inserisci il tuo SSID e inserisci la tua passphrase

Imposta SSH in raspi-config

Una volta eseguita la configurazione iniziale, ho usato SSH per impostare tutto senza testa. (Potresti saltare questo se usi un monitor. È stato più facile per me apportare modifiche al codice senza dover fermare il robot e collegarlo a un monitor.)

Torna al menu principale di raspi-config

Selezionare

5 opzioni di interfaccia

Selezionare

P2 SSH

Selezionare

Torna al menu principale di raspi-config seleziona

Verifica di essere connesso alla tua rete

pi@raspberrypi:~ $ ifconfig

Dovresti ricevere un output simile a questo. (Prendere nota dell'indirizzo IP; potrebbe essere necessario in seguito, ad es.192.168.1.18)

wlan0: flag=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) pacchetti RX 44396 (byte 584777) 5,5 MiB) Errori RX 0 persi 0 superamenti 0 frame 0 Pacchetti TX 30530 byte 39740576 (37,8 MiB) Errori TX 0 persi 0 superamenti 0 portanti 0 collisioni 0

Verifica di poter accedere a Internet.

pi@raspberrypi:~ $ ping google.com

Dovresti ricevere un output simile a questo.

PING google.com (216.58.194.110) 56(84) byte di dati.

64 byte da dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=1 ttl=54 time=18.2 ms 64 byte da dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=2 ttl =54 time=19.4 ms 64 byte da dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=3 ttl=54 time=23.6 ms 64 byte da dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=4 ttl=54 time=30,2 ms ^C --- google.com ping statistics --- 4 pacchetti trasmessi, 4 ricevuti, 0% pacchetti persi, tempo 3004ms rtt min/avg/max/mdev = 18,209/ 22.901/30.267/4.715 ms

Imposta un IP statico

Per essere in grado di connettersi in modo coerente al tuo robot utilizzando lo stesso indirizzo sulla tua rete, ti consigliamo di impostare un IP statico.

Ottieni il tuo indirizzo di rete corrente, ad es.192.168.1.18

Sto usando l'indirizzo che è stato assegnato automaticamente da DHCP quando il Pi si è connesso alla mia rete. Puoi cambiarlo in quello che preferisci, purché corrisponda alla tua rete e non sia in conflitto con altri indirizzi assegnati.

Apri dhcp.conf in un editor di testo. (io uso nano)

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

Scorri verso il basso fino a #Example static IP configuration e modifica le seguenti righe.

#interfaccia eth0

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

Cambia in modo che corrisponda alla tua rete e rimuovi il # all'inizio di ogni riga.

Esempio:

interfaccia wlan0

indirizzo_ip statico=192.168.1.18 router statici=192.168.1.1 nome_dominio_servers=192.168.1.1 8.8.8.8

Salva ed esci.

Riavvia e connettiti al Pi tramite SSH

pi@raspberrypi:~ $ sudo reboot

Connettiti da un altro computer tramite SSH. Gli utenti Windows possono utilizzare PuTTY o il sottosistema Windows per Linux (Windows10).

ian@computer:~$ ssh [email protected]

Inserisci la tua password (l'impostazione predefinita è lampone).

password di [email protected]:

Dovresti essere ora al prompt dei comandi del tuo Pi.

pi@raspberrypi:~$

Passaggio 2: installa e configura Motion

Installa e configura Motion
Installa e configura Motion

Motion è un programma utilizzato in molti progetti di telecamere di sicurezza / webcam. Il movimento ha molte funzioni. Tuttavia, lo stiamo configurando per trasmettere semplicemente il video dalla webcam alla porta 8081.

Metti alla prova la tua webcam

Collega la tua webcam ed elenca i dispositivi USB collegati (potrebbe essere necessario riavviare dopo la connessione).

pi@raspberrypi:~ $ lsusb

Dovresti ottenere un output simile a questo. Nota Logitech C210.

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

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

Se la videocamera non viene visualizzata, potrebbe non essere compatibile o potrebbe essere necessario installare driver aggiuntivi.

Installa movimento

Aggiorna i pacchetti.

pi@raspberrypi:~ $ sudo apt-get update

Installa il movimento.

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

Una volta installato Motion, modificare il file di configurazione.

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

Modifica le seguenti righe in modo che corrispondano di seguito.

demone acceso

larghezza 640 altezza 480 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off

Avvia il demone di movimento all'avvio

Apri il file /etc/default/motion.

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

Cambia in

start_motion_daemon=sì

Salva il file ed esci

Riavviare

pi@raspberrypi:~ $ sudo reboot

Dopo che il Pi si è riavviato, apri il browser e verifica di avere lo streaming video nel browser sulla porta 8081

Esempio:

192.168.1.18:8081

Risoluzione dei problemi del demone di movimento

Ho riscontrato problemi nell'avvio del demone di movimento all'avvio mentre stavo provando diverse opzioni nel file motion.conf.

Se avvii il movimento prima del demone di movimento in Raspian Stretch, probabilmente incontrerai problemi nel farlo avviare all'avvio in un secondo momento. L'esecuzione di "sudo motion" senza configurare il demone per farlo prima crea la directory /var/log/motion senza concedere il permesso di scrittura all'utente.

Passaggio 3: installa Apache e imposta la pagina di controllo Web

Installa Apache e imposta la pagina di controllo Web
Installa Apache e imposta la pagina di controllo Web

Apache è il server web per la pagina web di controllo del robot. Sostituiremo il file index.html di Apache predefinito con un file scaricato da github. Cambierai anche un paio di righe di codice per visualizzare il flusso video del movimento e assegnare dove inviare i comandi per controllare il robot.

Installa Apache e Git

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

Una volta installati apache e git, scarica i file.

pi@raspberrypi:~ $ git clone

Apri la directory roombarobot.

pi@raspberrypi:~ $ cd roombarobot

Sostituisci il file index.html nella cartella /var/www/html con il file index.html in /home/pi/roombarobot

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

Modifica il file index.html

Apri il file index.html con un editor di testo.

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

Individua queste due linee

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

Cambia "YOURIPADDRESS" con l'indirizzo IP statico che hai impostato nel passaggio 1 e salva il file.

Esempio:

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

Su un altro computer, apri un browser e inserisci l'indirizzo IP del tuo Pi. Dovresti vedere la pagina web di controllo con una casella a sinistra, lo streaming di video dalla tua webcam e i pulsanti di controllo web a destra.

Passaggio 4: impostare e testare il codice

Imposta e testa il codice
Imposta e testa il codice

Questo codice è scritto in python e richiede la libreria tornado. Il codice utilizza la libreria per configurare un server per ascoltare i comandi dalla pagina Web di controllo tramite websocket sulla porta 9093.

Installa PIP e la libreria Tornado

Installa pip

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

Installa la libreria tornado

pi@raspberrypi:~ $ sudo pip install tornado

Avvia il programma Roombabot e verifica la connessione

Avvia il programma roombabot.py

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

Una volta in esecuzione, dovresti vedere "Pronto" nel terminale. Aprire la pagina Web di controllo in un browser e fare clic su Connetti. Quindi fare clic su uno dei pulsanti direzionali nella pagina. Puoi anche usare i tasti freccia sulla tastiera.

Dovresti vedere un output nel terminale simile a questo.

Pronto

connessione aperta… connessione aperta… ricevuta: u 8 Running Forward connessione aperta… ricevuta: l 6 Girando a sinistra connessione aperta… ricevuta: d 2 Running Reverse connessione aperta… ricevuta: r 4 Girando a destra

Premi ctrl+c per interrompere il programma.

Una volta terminato il test, spegni il Pi.

pi@raspberrypi:~$ sudo poweroff

bug

Ho notato un problema con il pulsante di spegnimento sulla pagina web di controllo. A volte il pulsante di spegnimento non fa nulla quando viene cliccato o toccato. Non sono stato in grado di capire cosa sta causando questo, ma c'è una soluzione alternativa. Se desideri spegnere il robot e il pulsante di spegnimento non funziona, ricarica la pagina, fai clic/tocca il pulsante di connessione e quindi fai clic/tocca sul pulsante di spegnimento. Dovrebbe spegnersi.

Passaggio 5: assemblaggio

Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea
Assemblea

Come accennato in precedenza, non è necessario utilizzare Roomba per questo progetto. Qualsiasi cosa con due motori, due ruote e un telaio funzionerebbe. Ho smontato Roomba e rimosso tutto tranne i moduli ruota e la batteria.

Moduli ruota

Le ruote e i motori di Roomba sono alloggiati insieme in un modulo rimovibile. Ciascun modulo ha un alloggiamento esterno blu contenente il motore, il cambio, la ruota, la molla di sospensione e la scheda di interfaccia.

Scheda di interfaccia

Ogni scheda di interfaccia ha sei fili in esecuzione ad essa. Ci sono due fili (rosso[+], nero[-]) che ruotano il motore, un cavo dati per un sensore ad effetto hall, un cavo per l'interruttore di caduta della ruota, un cavo da 5V e un cavo GND per alimentare il sensore. Dovrai smontare il modulo per accedere alla scheda di interfaccia. Ho rimosso tutto dal motore e ho saldato i nuovi cavi [+] e [-] al motore (vedi foto). Sta a te decidere se conservare o meno i sensori.

Molle di sospensione

Una volta rimossa la parte del vuoto, il peso di Roomba viene scaricato. Se non si rimuovono le molle, Roomba rimarrà inclinato. Inizialmente li ho rimossi, ma poi li ho riaggiunti quando ho scoperto che faceva fatica a rotolare sul tappeto. Rimontando la molla ho risolto il problema.

Cablaggio dei motori al Motor Controller

I motori sono rivolti l'uno verso l'altro. Ciò significa che per guidare Roomba in avanti, un motore dovrà ruotare in avanti mentre l'altro ruota all'indietro. Non ci ho pensato molto fino a quando non ho collegato tutto. Ho finito per scrivere il codice su come inizialmente ho cablato i motori. Questo è stato un felice incidente perché ogni volta che il Raspberry Pi si accende/spegne, c'è un'uscita di tensione sui pin GPIO. Nel modo in cui ho cablato le cose, Roomba gira fino a quando il Raspberry Pi non si avvia (circa trenta secondi) e gira quando si spegne fino a quando non viene rimossa l'alimentazione. Se cablato in modo diverso, potrebbe potenzialmente rotolare avanti / indietro, il che sarebbe irritante. Ho intenzione di risolvere il problema con un semplice interruttore per il controller del motore.

Cablaggio dei motori e della batteria al controller del motore

Alimentazione- - - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - - -Batteria Roomba [+]

Motore 2- - - - - - - - - - - - - - - Nero- - - - - - - - - - - - - Motore sinistro [-] Motore 2- - - - - - - - - - - - - - - Rosso- - - - - - - - - - - - - - -Motore sinistro [+] Motore 1- - - - - - - - - - - - - - - Nero- - - - - - - - - - - - - -Motore dx[-] Motore 1- - - - - - - - - - - - - - - Rosso- - - - - - - - - - - - - -Motore dx[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - - -Batteria Roomba [-]

Cablaggio del controller del motore al Raspberry Pi

Pin del controller del motore Colore del filo (vedi foto) Pin Raspberry Pi

GND- - - - - - - - - - - - - - - - - Nero- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - Blu - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Verde- - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - Giallo - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Arancio - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Rosso- - - - - - - - - - - - - - -5V

Montaggio dell'elettronica

Non c'è molto da fare per mettere tutto insieme. Ho smontato il roomba dal telaio. Con il coperchio rimosso, puoi facilmente staccare i distanziatori in plastica esistenti e praticare dei fori per montare l'elettronica. Ci sono porte esistenti per far passare i cavi dai motori. Se si utilizza la batteria di Roomba di serie, è già presente un ritaglio per l'accesso ai terminali della batteria.

batterie

Ho usato batterie separate per il Raspberry Pi e il controller del motore. La batteria del Pi è solo un pacco batteria da 5 V utilizzato per potenziare i cellulari. Per il controller del motore ho usato la batteria originale Roomba fornita con esso. I terminali della batteria non sono etichettati, quindi è meglio controllare la tensione con un voltmetro prima di collegarlo al controller del motore. Per collegare i cavi alla batteria di Roomba, ho utilizzato quattro magneti al neodimio (vedi foto). Ho saldato due dei magneti ai fili e gli altri due li ho attaccati ai terminali della batteria. La saldatura smagnetizza i magneti. Tuttavia, il rivestimento esterno può ancora attaccarsi ai magneti sui terminali e condurre elettricità. Questo rende il collegamento e lo scollegamento della batteria un gioco da ragazzi.

test

Una volta che hai tutto insieme, verifica di avere tutto cablato correttamente, appoggia il tuo robot su qualcosa (in modo che non rotoli via) e accendilo.

Accedi e avvia il programma roombabot.py

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

Vai alla pagina di controllo web e provalo. Se tutto è cablato correttamente, le ruote dovrebbero ruotare nella direzione corrispondente quando si fa clic sui pulsanti / si premono i tasti freccia (non dimenticare di fare clic su Connetti).

Passaggio 6: avvio del codice Python all'avvio / completamento

Avvio del codice Python all'avvio/Finendo
Avvio del codice Python all'avvio/Finendo
Avvio del codice Python all'avvio/Finendo
Avvio del codice Python all'avvio/Finendo

L'ultima cosa che dobbiamo fare è dire a Raspbian di avviare il programma Python all'avvio. Per fare ciò creeremo uno script e pianificheremo che venga eseguito al riavvio usando crontab.

Crea lo script

Crea un nuovo file di script chiamato startrobot.sh nella directory utente pi

pi@raspberrypi:~ $ sudo nano startrobot.sh

Copia le seguenti righe nel file

#!/bin/sh

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

Salva il file ed esci

Rendi eseguibile il file startrobot.sh

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

Provalo (premi ctrl + c per interrompere)

pi@raspberrypi:~$ sh startrobot.sh

Modifica il file crontab

pi@raspberrypi:~$ sudo crontab -e

Aggiungi la seguente riga in fondo al file

# m h dom mon dow comando

@reboot sh /home/pi/startrobot.sh

Salva ed esci

Il programma roombabot.py ora dovrebbe avviarsi quando il Pi viene riavviato o spento e riacceso.

Terminando

A questo punto dovresti avere un robot funzionante che puoi controllare usando il browser da qualsiasi dispositivo sulla tua rete. L'ho portato un po' oltre dalla build originale e ho configurato una VPN per poter accedere al robot quando sono lontano da casa. Ho intenzione di apportare ulteriori modifiche in futuro. Ho intenzione di renderlo autonomo e possibilmente seguire il movimento pur essendo in grado di assumere i comandi quando voglio.

Consigliato: