Sommario:
- Passaggio 1: installa Raspbian e configura un indirizzo IP statico
- Passaggio 2: installa e configura Motion
- Passaggio 3: installa Apache e imposta la pagina di controllo Web
- Passaggio 4: impostare e testare il codice
- Passaggio 5: assemblaggio
- Passaggio 6: avvio del codice Python all'avvio / completamento
Video: Robot Roomba controllato dal browser con il modello Raspberry Pi 3 A+: 6 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
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
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
sì
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
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
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
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
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
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:
Albero di Natale controllato dal sito web (chiunque può controllarlo): 19 passaggi (con immagini)
Albero di Natale controllato da un sito web (chiunque può controllarlo): vuoi sapere che aspetto ha un albero di Natale controllato da un sito web? Ecco il video che mostra il mio progetto del mio albero di Natale. Il live streaming è terminato ormai, ma ho fatto un video, catturando quello che stava succedendo: Quest'anno, a metà dicembre
Ascensore modello controllato da Arduino: 7 passaggi (con immagini)
Ascensore modello controllato da Arduino: in questo Instructable ti mostrerò come ho costruito un ascensore giocattolo a due livelli, con porte scorrevoli funzionanti e un'auto che si muove su e giù su richiesta. Il cuore dell'ascensore è un Arduino Uno (o in questo caso un Adafruit Metro), con l'Adafruit Moto
Crea uno strumento MIDI controllato dal vento: 5 passaggi (con immagini)
Crea uno strumento MIDI controllato dal vento: questo progetto è stato presentato a "Creative Electronics", un modulo del quarto anno di BEng Electronics Engineering presso l'Università di Málaga, Scuola di telecomunicazioni. L'idea originale è nata molto tempo fa, perché il mio amico, Alejandro, ha speso più di un mezzo
Rover controllato dal web: 14 passaggi (con immagini)
Web Controlled Rover: Costruire e giocare con i robot è il mio principale piacere colpevole nella vita. Altri giocano a golf o a sciare, ma io costruisco robot (dato che non posso giocare a golf o sciare:-). Lo trovo rilassante e divertente! Per realizzare la maggior parte dei miei robot, utilizzo i kit chassis. Usare i kit mi aiuta a fare cosa
Treno modello controllato da tastiera V2.0 - Interfaccia PS/2: 13 passaggi (con immagini)
Treno modello controllato da tastiera V2.0 | Interfaccia PS/2: in uno dei miei precedenti Instructable, ti ho mostrato come controllare un plastico ferroviario usando una tastiera. Funzionava benissimo, ma aveva l'inconveniente di richiedere un computer per funzionare. In questo Instructable, vediamo come controllare un treno modello usando un keyboar