Taula de continguts:
- Pas 1: instal·leu Raspbian i configureu una adreça IP estàtica
- Pas 2: instal·leu i configureu Motion
- Pas 3: instal·leu Apache i configureu la pàgina de control web
- Pas 4: configureu i proveu el codi
- Pas 5: Muntatge
- Pas 6: Inicieu el codi Python en arrencar / acabar
Vídeo: Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +: 6 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Visió general
Aquest instructiu se centrarà en com donar a Roomba mort un nou cervell (Raspberry Pi), ulls (càmera web) i una manera de controlar-ho tot des d’un navegador web.
Hi ha molts hacks de Roomba que permeten controlar mitjançant la interfície sèrie. No he tingut la sort de trobar-me amb un Roomba que té el microprogramari actual o la placa base que funciona. O el Roomba és massa antic o el Roomba està mort. He trobat el Roomba que he utilitzat per a aquest projecte en una paperera de botigues de segona mà local per 5 dòlars. Encara tenia una bateria decent, però una placa base morta. (També vaig trobar la càmera web a la mateixa botiga de segona mà per uns 5 dòlars). Tot el que faig servir del Roomba original són els motors, el xassís i la bateria. No cal que utilitzeu Roomba per a aquest projecte. Si voleu, podeu utilitzar diferents motors, rodes i xassís. Només m’agrada convertir un tros d’escombraries en quelcom usable.
Per a aquesta versió he utilitzat el Raspberry Pi Model 3 A + i un controlador de motor Riorand. Estic fent servir el codi del robot controlat per navegador Dexter Industries que he modificat. La versió de Dexter Industries configura el Pi com a servidor de connexió web que permet controlar el seu robot (plataforma brick pi) des d’un fitxer html client que executa un altre equip.
He canviat el codi que utilitza els pins GPIO i he afegit una manera perquè el Pi es tanqui quan es fa clic a un botó / quan es prem la tecla d'escapada al navegador. També he fet alguns canvis a la pàgina web de control per permetre visualitzar un flux de moviment a través d’un iframe, mentre controlava el robot en una sola pàgina. He configurat el Pi amb una IP estàtica per allotjar el fitxer client i així poder connectar-me mitjançant qualsevol equip o dispositiu de la meva xarxa.
Estic documentant el procés aquí amb l'esperança de mostrar com crear un robot base senzill i econòmic.
Peces usades
Raspberry Pi 3 A + (enllaç Adafruit) 30 dòlars
Controlador de controlador de motor dual Riorand H-Bridge (Amazon Link) 22 dòlars
Bateria de 12 V per a motors (Amazon Link) 19 dòlars
Bateria de 5V per al Raspberry Pi (Amazon Link) 10 $
Targeta micro SD de 8 GB (Amazon Link) 5 USD
Jumper Wires (Amazon Link) 7 dòlars
Sèrie Roomba 500
Tots junts, poc menys de 100 dòlars.
Pas 1: instal·leu Raspbian i configureu una adreça IP estàtica
He utilitzat Raspbian Stretch Lite. No veia la necessitat de l'escriptori, però podeu instal·lar la versió d'escriptori si ho preferiu.
Vaig a suposar que ja sabeu com instal·lar Raspbian. Si necessiteu ajuda, podeu trobar la guia de la Fundació Raspberry Pi aquí.
Un cop tingueu Raspbian en funcionament, inicieu sessió i executeu el programa raspi-config.
pi @ raspberrypi: ~ $ sudo raspi-config
Configureu la vostra connexió WiFi a raspi-config
Seleccioneu
2 Opcions de xarxa
Seleccioneu
Wi-Fi N2
Seleccioneu un país, introduïu el vostre SSID i introduïu la vostra contrasenya
Configureu SSH a raspi-config
Un cop vaig fer la configuració inicial, vaig utilitzar SSH per configurar-ho tot sense cap. (Podeu ometre-ho si feu servir un monitor. Em va resultar més fàcil fer canvis al codi sense haver d'aturar el robot i connectar-lo a un monitor).
Torneu al menú principal de raspi-config
Seleccioneu
5 Opcions d'interfície
Seleccioneu
P2 SSH
Seleccioneu
Sí
De nou al menú principal de raspi-config, seleccioneu
Verifiqueu que esteu connectat a la vostra xarxa
pi @ raspberrypi: ~ $ ifconfig
Hauríeu de rebre una sortida similar a aquesta. (Tingueu en compte l'adreça IP; és possible que la necessiteu més endavant. Per exemple, 192.168.1.18)
wlan0: banderes = 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 paquets 44396 bytes 5847726 (5,5 MiB) Errors RX 0 caiguts 0 superacions 0 fotogrames 0 Paquets TX 30530 bytes 39740576 (37,8 MiB) Errors TX 0 caiguts 0 superacions 0 portador 0 col·lisions 0
Verifiqueu que pugueu accedir a Internet.
pi @ raspberrypi: ~ $ ping google.com
Hauríeu de rebre una sortida similar a aquesta.
PING google.com (216.58.194.110) 56 (84) bytes de dades.
64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 temps = 18,2 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 temps = 19,4 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 temps = 23,6 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 temps = 30,2 ms ^ C --- google.com estadístiques de ping --- 4 paquets transmesos, 4 rebuts, 0% de pèrdua de paquets, temps 3004 ms rtt mínim / avg / max / mdev = 18.209 / 22,901 / 30,267 / 4,715 ms
Configureu una IP estàtica
Per poder connectar-vos constantment al robot mitjançant la mateixa adreça de la vostra xarxa, voldreu configurar una IP estàtica.
Obteniu la vostra adreça de xarxa actual, per exemple, 192.168.1.18
Estic fent servir l'adreça que DHCP va assignar automàticament quan el Pi es va connectar a la meva xarxa. Podeu canviar-ho pel que vulgueu sempre que coincideixi amb la vostra xarxa i no entri en conflicte amb cap altra adreça assignada.
Obriu dhcp.conf en un editor de text. (Faig servir nano)
pi @ raspberrypi: ~ $ sudo nano /etc/dhcpcd.conf
Desplaceu-vos cap avall fins a #Exemple de configuració d'IP estàtica i canvieu les línies següents.
#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
Canvieu perquè coincideixi amb la vostra xarxa i traieu el # al començament de cada línia.
Exemple:
interfície wlan0
static ip_address = 192.168.1.18 routers estàtics = 192.168.1.1 static domain_name_servers = 192.168.1.1 8.8.8.8
Guardar i sortir.
Reinicieu i connecteu-vos al Pi mitjançant SSH
pi @ raspberrypi: ~ $ sudo reinici
Connecteu-vos des d’un altre equip mitjançant SSH. Els usuaris de Windows poden utilitzar PuTTY o el subsistema Windows per a Linux (Windows10).
ian @ computer: ~ $ ssh [email protected]
Introduïu la vostra contrasenya (per defecte és raspberry).
contrasenya de [email protected]:
Ara hauríeu d'estar al comandament del vostre Pi.
pi @ raspberrypi: ~ $
Pas 2: instal·leu i configureu Motion
Motion és un programa utilitzat en molts projectes de càmeres de seguretat / càmeres web. El moviment té moltes funcions. Tot i això, l’estem configurant per reproduir simplement vídeo des de la càmera web al port 8081.
Proveu la vostra càmera web
Connecteu la vostra càmera web i enumereu els dispositius USB connectats (és possible que hàgiu de reiniciar després de connectar-vos).
pi @ raspberrypi: ~ $ lsusb
Hauríeu d'obtenir una sortida similar a aquesta. Tingueu en compte el Logitech C210.
Bus 001 Dispositiu 002: ID 046d: 0819 Càmera web Logitech, Inc. C210
Bus 001 Dispositiu 001: ID 1d6b: 0002 concentrador arrel de Linux Foundation 2.0
Si la càmera no apareix, és possible que no sigui compatible o que hàgiu d'instal·lar controladors addicionals.
Instal·leu Motion
Actualitza els paquets.
pi @ raspberrypi: ~ $ sudo apt-get update
Instal·leu Motion.
pi @ raspberrypi: ~ $ sudo apt-get install motion -y
Un cop instal·lat Motion, editeu el fitxer de configuració.
pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
Canvieu les línies següents perquè coincideixin a continuació.
dimoni encès
amplada 640 alçada 480 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off
Inicieu el dimoni de moviment a l'arrencada
Obriu el fitxer / etc / default / motion.
pi @ raspberrypi: ~ $ sudo nano / etc / default / motion
Canviar a
start_motion_daemon = sí
Deseu el fitxer i sortiu
Reinicieu
pi @ raspberrypi: ~ $ sudo reinici
Un cop reiniciat el Pi, obriu el navegador i verifiqueu que teniu transmissions de vídeo al navegador al port 8081
Exemple:
192.168.1.18:8081
Resolució de problemes del dimoni de moviment
Vaig tenir problemes per aconseguir que el dimoni de moviment comencés a arrencar mentre provava diferents opcions al fitxer motion.conf.
Si inicieu el moviment abans del dimoni de moviment a Raspian Stretch, probablement tindreu problemes per aconseguir que comenci a arrencar més endavant. Executar "sudo motion" sense configurar el dimoni per fer-ho primer crea el directori / var / log / motion sense concedir permís d'escriptura a l'usuari.
Pas 3: instal·leu Apache i configureu la pàgina de control web
Apache és el servidor web de la pàgina web de control del robot. Anem a substituir el fitxer Apache index.html per defecte per un fitxer descarregat de github. També canviarà un parell de línies de codi per mostrar el flux de vídeo en moviment i assignar on enviar les ordres per controlar el robot.
Instal·leu Apache i Git
pi @ raspberrypi: ~ $ sudo apt-get install apache2 git -y
Un cop instal·lats apache i git, descarregueu els fitxers.
pi @ raspberrypi: ~ $ git clon
Obriu el directori roombarobot.
pi @ raspberrypi: ~ $ cd roombarobot
Substituïu el fitxer index.html a la carpeta / var / www / html pel fitxer index.html a / home / pi / roombarobot
pi @ raspberrypi: ~ / roombarobot $ sudo cp index.html / var / www / html
Editeu el fitxer index.html
Obriu el fitxer index.html amb un editor de text.
pi @ raspberrypi: ~ / roombarobot $ sudo nano /var/www/html/index.html
Localitzeu aquestes dues línies
var host = "ws: // YOURIPADDRESS: 9093 / ws";
Canvieu "YOURIPADDRESS" a l'adreça IP estàtica que heu configurat al pas 1 i deseu el fitxer.
Exemple:
var host = "ws: //192.168.1.18: 9093 / ws";
En un altre ordinador, obriu un navegador i introduïu l'adreça IP del vostre Pi. Hauríeu de veure la pàgina web de control amb un quadre a l’esquerra, reproduint vídeo des de la càmera web i els botons de control web a la dreta.
Pas 4: configureu i proveu el codi
Aquest codi està escrit en python i requereix la biblioteca de tornados. El codi utilitza la biblioteca per configurar un servidor per escoltar les ordres de la pàgina web de control mitjançant websockets al port 9093.
Instal·leu PIP i la biblioteca Tornado
Instal·leu pip
pi @ raspberrypi: ~ $ sudo apt-get install python-pip
Instal·la la biblioteca del tornado
pi @ raspberrypi: ~ $ sudo pip install tornado
Inicieu el programa Roombabot i proveu la connexió
Inicieu el programa roombabot.py
pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py
Un cop executat, hauríeu de veure "A punt" al terminal. Obriu la pàgina web de control en un navegador i feu clic a connecta. A continuació, feu clic a qualsevol dels botons direccionals de la pàgina. També podeu utilitzar les tecles de fletxa del teclat.
Hauríeu de veure una sortida al terminal similar a aquesta.
Llestos
connexió oberta … connexió oberta … rebuda: u 8 Execució connexió avançada oberta … rebuda: l 6 Girant connexió oberta oberta … rebuda: d 2 Execució connexió inversa oberta … rebuda: r 4 Girant a la dreta
Premeu Ctrl + C per aturar el programa.
Un cop hàgiu acabat de provar l'apagat del Pi.
pi @ raspberrypi: ~ $ sudo poweroff
Errors
He notat un problema amb el botó d'aturada de la pàgina web de control. De vegades, el botó d’aturada no fa res quan s’hi fa clic o s’hi fa clic. No he sabut esbrinar què està provocant això, però hi ha una solució alternativa. Si voleu apagar el robot i el botó d’apagat no funciona, torneu a carregar la pàgina, feu clic / toqueu el botó de connexió i, a continuació, feu clic / toqueu el botó d’apagat. S’hauria d’apagar.
Pas 5: Muntatge
Com s'ha esmentat abans, no cal que utilitzeu Roomba per a aquest projecte. Qualsevol cosa amb dos motors, dues rodes i un marc funcionaria. Vaig desmuntar el Roomba i vaig treure tot, excepte els mòduls de rodes i la bateria.
Mòduls de rodes
Les rodes i motors del Roomba estan allotjats junts en un mòdul extraïble. Cada mòdul té una carcassa exterior blava que conté el motor, la caixa de canvis, la roda, el ressort de suspensió i la placa d’interfície.
Taula d'interfície
Cada placa d’interfície compta amb sis cables. Hi ha dos cables (vermell [+], negre [-]) que giren el motor, un cable de dades per a un sensor d’efecte hall, un cable per al commutador de caiguda de la roda, un cable de 5 V i un cable GND per alimentar el sensor. Haureu de desmuntar el mòdul per accedir a la placa d'interfície. Vaig retirar-ho tot al motor i vaig soldar nous cables [+] i [-] al motor (veure fotos). Depèn de vosaltres si voleu conservar els sensors o no.
Molles de suspensió
Una vegada que elimineu la porció de buit, el pes de Roomba es llença. Si no traieu els molls, Roomba s'asseurà en un angle. Originalment els vaig eliminar, però després els vaig afegir quan vaig trobar que tenia problemes per rodar la catifa. Posar la molla de nou va solucionar el problema.
Cablatge dels motors al controlador del motor
Els motors estan orientats l'un cap a l'altre. Això vol dir que per conduir el Roomba en direcció endavant, un motor haurà de girar cap endavant mentre que l'altre gira cap enrere. No vaig pensar molt en això fins que ho vaig connectar tot. Vaig acabar escrivint el codi sobre com he connectat inicialment els motors. Va ser un accident feliç, perquè sempre que el Raspberry Pi s’encén / apaga, hi ha una sortida de tensió als pins GPIO. Com tinc les coses connectades, el Roomba gira fins que el Raspberry Pi ha arrencat (uns trenta segons) i gira quan s’apaga fins que es retira l’alimentació. Si es connectés de manera diferent, podria rodar cap endavant / enrere, cosa que seria irritant. Tinc la intenció de solucionar-ho eventualment amb un senzill interruptor per al controlador del motor.
Connexió dels motors i la bateria al controlador del motor
Alimentació - - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - - -Bateria Roomba [+]
Motor 2- - - - - - - - - - - - - - - Negre- - - - - - - - - - - - - Motor esquerre [-] Motor 2- - - - - - - - - - - - - - - Vermell- - - - - - - - - - - - - - Motor esquerre [+] Motor 1- - - - - - - - - - - - - - Negre- - - - - - - - - - - - - - Motor dret [-] Motor 1- - - - - - - - - - - - - - - Vermell- - - - - - - - - - - - - Motor dret [+] GND- - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - -Bateria Roomba [-]
Cablatge del controlador del motor al Raspberry Pi
Pins del controlador del motor Color filferro (veure fotos) Pins Raspberry Pi
GND- - - - - - - - - - - - - - - - - Negre- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Blau - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Verd- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Groc - - - - - - - - - - - - GPIO 24 DIR 1- - - - - - - - - - - - - - - - Taronja - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Vermell- - - - - - - - - - - - - - -5V
Muntatge de l'electrònica
No hi ha gaire cosa que permeti muntar-ho tot. Vaig despullar el roomba del xassís. Amb la tapa retirada, podeu retallar fàcilment els separadors de plàstic existents i practicar forats per muntar l’electrònica. Hi ha ports existents per fer funcionar els cables des dels motors. Si utilitzeu la bateria existent de Roomba, ja hi ha un retall per accedir als terminals de la bateria.
Bateries
Vaig utilitzar bateries separades per al Raspberry Pi i el controlador del motor. La bateria del Pi és només una bateria de 5V que s’utilitza per augmentar els telèfons mòbils. Per al controlador del motor, he utilitzat la bateria original Roomba que s’acompanyava. Els terminals de la bateria no estan etiquetats, de manera que és millor comprovar la tensió amb un voltímetre abans de connectar-lo al controlador del motor. Per connectar els cables a la bateria de Roomba, he utilitzat quatre imants de neodimi (veure fotos). Vaig soldar dos dels imants als cables i els altres dos els vaig enganxar als terminals de la bateria. La soldadura desmagneta els imants. No obstant això, el revestiment exterior encara es pot fixar als imants dels terminals i conduir electricitat. Això fa que connectar i desconnectar la bateria sigui un pastís.
Proves
Un cop ho tingueu tot junt, verifiqueu que ho tingueu tot connectat correctament, recolzeu el robot en alguna cosa (perquè no s'allunyi) i engegueu-lo.
Inicieu la sessió i inicieu el programa roombabot.py
pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py
Aneu a la pàgina de control web i proveu-la. Si tot està connectat correctament, les rodes haurien de girar en la direcció corresponent quan es facin clic als botons / es premen les tecles de fletxa (no oblideu fer clic a connectar).
Pas 6: Inicieu el codi Python en arrencar / acabar
L'últim que hem de fer és dir-li a Raspbian que iniciï el programa python a l'arrencada. Per fer-ho, farem un script i el programarem perquè s’executi en reiniciar amb crontab.
Creeu l'script
Creeu un fitxer de script nou anomenat startrobot.sh al directori d'usuaris pi
pi @ raspberrypi: ~ $ sudo nano startrobot.sh
Copieu les línies següents al fitxer
#! / bin / sh
# startrobot.sh cd / cd / home / pi / roombarobot sudo python roombabot.py cd /
Deseu el fitxer i sortiu
Feu que el fitxer startrobot.sh sigui executable
pi @ raspberrypi: ~ $ sudo chmod 755 startrobot.sh
Proveu-lo (premeu Ctrl + C per aturar-lo)
pi @ raspberrypi: ~ $ sh startrobot.sh
Editeu el fitxer crontab
pi @ raspberrypi: ~ $ sudo crontab -e
Afegiu la línia següent a la part inferior del fitxer
# m h dom mon dow command
@reboot sh /home/pi/startrobot.sh
Guardar i sortir
El programa roombabot.py ara hauria d’iniciar-se quan es reinicia el Pi o es fa un cicle de potència.
Acabant
En aquest moment hauríeu de tenir un robot funcional que pugueu controlar mitjançant el navegador des de qualsevol dispositiu de la vostra xarxa. Ho he fet una mica més enllà des de la creació original i la configuració d'una VPN per poder accedir al robot quan estic fora de casa. Tinc intenció de fer alguns canvis addicionals en el futur. Tinc previst fer-lo autònom i, possiblement, seguir el moviment, tot i que puc fer-me càrrec dels controls quan vulgui.
Recomanat:
Motor pas a pas controlat pel motor pas a pas sense microcontrolador (V2): 9 passos (amb imatges)
Motor pas a pas controlat amb motor pas a pas sense microcontrolador (V2): en una de les meves instruccions anteriors, us vaig mostrar com controlar un motor pas a pas mitjançant un motor pas a pas sense microcontrolador. Va ser un projecte ràpid i divertit, però va venir amb dos problemes que es resoldran en aquest instructiu. Llavors, enginy
Feu un instrument MIDI controlat pel vent: 5 passos (amb imatges)
Feu un instrument MIDI controlat per vent: aquest projecte es va enviar a "Creative Electronics", un mòdul de 4t curs d'Enginyeria Electrònica de la Universitat de Màlaga, Escola de Telecomunicacions. La idea original va néixer fa molt de temps, perquè el meu company, Alejandro, té vaig passar més d'una mitja hora
Timelapse controlat pel moviment: 7 passos (amb imatges)
Timelapse controlat per moviment: els timelaps són fantàstics. Ens ajuden a fer una ullada al món en moviment lent que potser ens oblidem d’apreciar-ne la bellesa. Però de vegades un vídeo de timelapse constant pot ser avorrit o hi ha tantes coses que passen al voltant que només un angle no és
Com es construeix un robot controlat amb braç de pinça controlat mitjançant Nrf24l01 Arduino: 3 passos (amb imatges)
Com es construeix un robot controlat amb braç de pinça controlat mitjançant Nrf24l01 Arduino: la instrucció "Com construir robot controlat amb braç de pinça mitjançant Via Nrf24l01 Arduino" explicarà com construir un braç de pinça de tres graus de llibertat instal·lat en rodes de rodes controlades pel mòdul L298N de doble motor amb MEG
Braç de dibuix controlat pel so - Projecte Arduino School: 4 passos (amb imatges)
Dibuixant el braç controlat pel so - Projecte Arduino School: Aquesta és la meva primera vegada que treballo amb Arduino i treballo amb alguna cosa així, així que ho sento si he comès cap error. Vaig tenir aquesta idea quan vaig pensar en les meves aficions, que són el dibuix i la música. Així que vaig intentar combinar-los en això! Un sel