Taula de continguts:

Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +: 6 passos (amb imatges)
Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +: 6 passos (amb imatges)

Vídeo: Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +: 6 passos (amb imatges)

Vídeo: Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +: 6 passos (amb imatges)
Vídeo: Лучший бюджетный робот-пылесос - Xiaomi mi robot vacuum-mop, обзор, отзыв, тест работы. 2024, Juliol
Anonim
Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +
Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +
Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +
Robot Roomba controlat pel navegador amb el Raspberry Pi Model 3 A +

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

Instal·leu Raspbian i configureu una adreça IP estàtica
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

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

Instal·leu i configureu Motion
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

Instal·leu Apache i configureu la pàgina de control web
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

Configureu i proveu el codi
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

muntatge
muntatge
muntatge
muntatge
muntatge
muntatge
muntatge
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

Inici del codi Python en arrencar / acabar
Inici del codi Python en arrencar / acabar
Inici del codi Python en arrencar / acabar
Inici del 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: