Tabla de contenido:

Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +: 6 pasos (con imágenes)
Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +: 6 pasos (con imágenes)

Video: Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +: 6 pasos (con imágenes)

Video: Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +: 6 pasos (con imágenes)
Video: TODO ESTO PUEDES HACER CON UNA RASPBERRY PI 😈💻 2024, Noviembre
Anonim
Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +
Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +
Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +
Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +

Visión general

Este Instructable se centrará en cómo darle a un Roomba muerto un nuevo cerebro (Raspberry Pi), ojos (cámara web) y una forma de controlar todo desde un navegador web.

Hay muchos trucos de Roomba que permiten el control a través de la interfaz en serie. No he tenido la suerte de encontrarme con un Roomba que tenga firmware actual o una placa base que funcione. O el Roomba es demasiado viejo o el Roomba está muerto. Encontré el Roomba que usé para este proyecto en una tienda de segunda mano local por $ 5. Todavía tenía una batería decente, pero una placa base muerta. (También encontré la cámara web en la misma tienda de segunda mano por alrededor de $ 5). Todo lo que estoy usando del Roomba original son los motores, el chasis y la batería. No es necesario que utilice un Roomba para este proyecto. Puede usar diferentes motores, ruedas y chasis si lo desea. Solo me apetece convertir un pedazo de basura en algo utilizable.

Para esta construcción utilicé la Raspberry Pi Model 3 A + y un controlador de motor Riorand. Estoy usando código del robot controlado por navegador de Dexter Industries que modifiqué. La versión de Dexter Industries configura el Pi como un servidor websocket que le permite controlar su robot (plataforma brick pi) desde un archivo html de cliente que ejecuta otra computadora.

Cambié el código, use los pines GPIO y agregué una forma para que la Pi se apague cuando se hace clic en un botón / cuando se presiona la tecla de escape en el navegador. También hice algunos cambios en la página web de control para permitir ver un flujo de movimiento a través de un iframe, mientras controlaba el robot, todo dentro de una sola página. Configuré el Pi con una IP estática para alojar el archivo del cliente para poder conectarme usando cualquier computadora o dispositivo en mi red.

Estoy documentando el proceso aquí con la esperanza de mostrar cómo crear un robot base simple y económico.

Piezas utilizadas

Raspberry Pi 3 A + (Adafruit Link) $ 30

Controlador de controlador de motor dual Riorand H-Bridge (Amazon Link) $ 22

Batería de 12V para motores (Amazon Link) $ 19

Batería de 5V para Raspberry Pi (Amazon Link) $ 10

Tarjeta Micro SD de 8GB (Amazon Link) $ 5

Cables de puente (enlace de Amazon) $ 7

Roomba serie 500

. Todo junto poco menos de $ 100.

Paso 1: Instale Raspbian y configure una dirección IP estática

Instale Raspbian y configure una dirección IP estática
Instale Raspbian y configure una dirección IP estática

Usé Raspbian Stretch Lite. No vi la necesidad del escritorio, pero puede instalar la versión de escritorio si lo prefiere.

Voy a asumir que ya sabes cómo instalar Raspbian. Si necesita ayuda, puede encontrar la guía de la Fundación Raspberry Pi aquí.

Una vez que tenga Raspbian en funcionamiento, inicie sesión y ejecute el programa raspi-config.

pi @ raspberrypi: ~ $ sudo raspi-config

Configura tu conexión WiFi en raspi-config

Seleccione

2 opciones de red

Seleccione

N2 Wi-Fi

Seleccione un país, ingrese su SSID e ingrese su frase de contraseña

Configurar SSH en raspi-config

Una vez que hice la configuración inicial, usé SSH para configurar todo sin cabeza. (Puede omitir esto si usa un monitor. Me resultó más fácil realizar cambios en el código sin tener que detener el robot y conectarlo a un monitor).

De vuelta al menú principal de raspi-config

Seleccione

5 opciones de interfaz

Seleccione

P2 SSH

Seleccione

De vuelta en el menú principal de raspi-config, seleccione

Verifique que esté conectado a su red

pi @ raspberrypi: ~ $ ifconfig

Debería recibir un resultado similar a este. (Anote la dirección IP; es posible que la necesite más adelante, por ejemplo, 192.168.1.18)

wlan0: banderas = 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) Paquetes RX 44396 bytes 5847726 (5.5 MiB) Errores RX 0 descartado 0 desbordamientos 0 trama 0 paquetes TX 30530 bytes 39740576 (37.8 MiB) Errores TX 0 descartado 0 desbordamientos 0 portadora 0 colisiones 0

Verifique que pueda conectarse a Internet.

pi @ raspberrypi: ~ $ ping google.com

Debería recibir un resultado similar a este.

PING google.com (216.58.194.110) 56 (84) bytes de datos.

64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 tiempo = 18.2 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 tiempo = 19,4 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 tiempo = 23,6 ms 64 bytes de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 tiempo = 30.2 ms ^ C --- estadísticas de ping de google.com --- 4 paquetes transmitidos, 4 recibidos, 0% de pérdida de paquetes, tiempo 3004ms rtt min / avg / max / mdev = 18.209 / 22,901 / 30,267 / 4,715 ms

Configurar una IP estática

Para poder conectarse constantemente a su robot utilizando la misma dirección en su red, querrá configurar una IP estática.

Obtenga su dirección de red actual, por ejemplo, 192.168.1.18

Estoy usando la dirección que DHCP asignó automáticamente cuando el Pi se conectó a mi red. Puede cambiar esto a lo que quiera siempre que coincida con su red y no entre en conflicto con ninguna otra dirección asignada.

Abra dhcp.conf en un editor de texto. (Yo uso nano)

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

Desplácese hacia abajo hasta #Ejemplo de configuración de IP estática y cambie las siguientes líneas.

#interface eth0

#static ip_address = 192.168.11.13 #enrutadores estáticos = 192.168.11.1 #static domain_name_servers = 192.168.11.1 8.8.8.8

Cambie para que coincida con su red y elimine el # al principio de cada línea.

Ejemplo:

interfaz wlan0

static ip_address = 192.168.1.18 enrutadores estáticos = 192.168.1.1 static domain_name_servers = 192.168.1.1 8.8.8.8

Guardar y Salir.

Reinicie y conéctese al Pi a través de SSH

pi @ raspberrypi: ~ $ sudo reiniciar

Conéctese desde otra computadora usando SSH. Los usuarios de Windows pueden usar PuTTY o el Subsistema de Windows para Linux (Windows10).

ian @ computadora: ~ $ ssh [email protected]

Ingrese su contraseña (la predeterminada es frambuesa).

contraseña de [email protected]:

Ahora debería estar en el símbolo del sistema de su Pi.

pi @ raspberrypi: ~ $

Paso 2: instalar y configurar Motion

Instalar y configurar Motion
Instalar y configurar Motion

Motion es un programa que se utiliza en muchos proyectos de cámaras de seguridad / cámaras web. Motion tiene muchas características. Sin embargo, lo estamos configurando para que simplemente transmita video desde la cámara web al puerto 8081.

Pruebe su webcam

Conecte su cámara web y enumere los dispositivos USB conectados (es posible que deba reiniciar después de conectarse).

pi @ raspberrypi: ~ $ lsusb

Debería obtener una salida similar a esta. Tenga en cuenta el Logitech C210.

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

Bus 001 Dispositivo 001: ID 1d6b: 0002 Concentrador raíz de Linux Foundation 2.0

Si su cámara no aparece, es posible que no sea compatible o que necesite instalar controladores adicionales.

Instalar Motion

Actualizar paquetes.

pi @ raspberrypi: ~ $ sudo apt-get update

Instale Motion.

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

Una vez que Motion esté instalado, edite el archivo de configuración.

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

Cambie las siguientes líneas para que coincidan a continuación.

demonio en

ancho 640 alto 480 framerate 100 output_pictures desactivado ffmpeg_output_movies desactivado text_right stream_port 8081 stream_quality 100 stream_localhost desactivado webcontrol_localhost desactivado

Inicie el demonio de movimiento en el arranque

Abra el archivo / etc / default / motion.

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

Cambiar a

start_motion_daemon = sí

Guarda el archivo y cierra

Reiniciar

pi @ raspberrypi: ~ $ sudo reiniciar

Después de que el Pi se haya reiniciado, abra el navegador y verifique que tiene transmisión de video en el navegador en el puerto 8081

Ejemplo:

192.168.1.18:8081

Solución de problemas del demonio de movimiento

Tuve problemas para que el demonio de movimiento se iniciara en el arranque mientras probaba diferentes opciones en el archivo motion.conf.

Si inicia el movimiento antes del demonio de movimiento en Raspian Stretch, probablemente tendrá problemas para que se inicie en el arranque más adelante. Ejecutar "sudo motion" sin configurar el demonio para que lo haga primero crea el directorio / var / log / motion sin otorgar permiso de escritura al usuario.

Paso 3: Instale Apache y configure la página de control web

Instalar Apache y configurar la página de control web
Instalar Apache y configurar la página de control web

Apache es el servidor web de la página web de control del robot. Vamos a reemplazar el archivo index.html predeterminado de Apache con un archivo descargado de github. También cambiará un par de líneas de código para mostrar el flujo de video en movimiento y asignar dónde enviar los comandos para controlar el robot.

Instalar Apache y Git

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

Una vez instalados apache y git, descargue los archivos.

pi @ raspberrypi: ~ $ git clon

Abra el directorio roombarobot.

pi @ raspberrypi: ~ $ cd roombarobot

Reemplace el archivo index.html en la carpeta / var / www / html con el archivo index.html en / home / pi / roombarobot

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

Edite el archivo index.html

Abra el archivo index.html con un editor de texto.

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

Localiza estas dos líneas

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

Cambie "YOURIPADDRESS" a la dirección IP estática que configuró en el Paso 1 y guarde el archivo.

Ejemplo:

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

En otra computadora, abra un navegador e ingrese la dirección IP de su Pi. Debería ver la página web de control con un cuadro a la izquierda, la transmisión de video desde su cámara web y los botones de control web a la derecha.

Paso 4: Configure y pruebe el código

Configurar y probar el código
Configurar y probar el código

Este código está escrito en python y requiere la biblioteca tornado. El código usa la biblioteca para configurar un servidor para escuchar los comandos de la página web de control a través de websockets en el puerto 9093.

Instale PIP y la biblioteca Tornado

Instalar pip

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

Instalar biblioteca tornado

pi @ raspberrypi: ~ $ sudo pip install tornado

Inicie el programa Roombabot y pruebe la conexión

Inicie el programa roombabot.py

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

Una vez que se esté ejecutando, debería ver "Listo" en la terminal. Abra la página web de control en un navegador y haga clic en conectar. Luego, haga clic en cualquiera de los botones de dirección de la página. También puede usar las teclas de flechas en su teclado.

Debería ver una salida en el terminal similar a esta.

Listo

conexión abierta … conexión abierta … recibida: u 8 Corriendo Conexión hacia adelante abierta … recibida: l 6 Girando a la izquierda Conexión abierta … recibida: d 2 Corriendo Conexión inversa abierta … recibida: r 4 Girando a la derecha

Presione ctrl + c para detener el programa.

Una vez que haya terminado de probar, apague la Pi.

pi @ raspberrypi: ~ $ sudo poweroff

Insectos

He notado un problema con el botón de apagado en la página web de control. A veces, el botón de apagado no hace nada cuando se hace clic o se toca. No he podido averiguar qué está causando esto, pero hay una solución. Si desea apagar el robot y el botón de apagado no funciona, vuelva a cargar la página, haga clic / toque el botón de conexión y luego haga clic / toque el botón de apagado. Debería apagarse.

Paso 5: Montaje

Montaje
Montaje
Montaje
Montaje
Montaje
Montaje
Montaje
Montaje

Como se mencionó anteriormente, no es necesario que utilice un Roomba para este proyecto. Cualquier cosa con dos motores, dos ruedas y un marco funcionaría. Desmonté el Roomba y quité todo excepto los módulos de rueda y la batería.

Módulos de ruedas

Las ruedas y los motores del Roomba están alojados juntos en un módulo extraíble. Cada módulo tiene una carcasa exterior azul que contiene el motor, la caja de cambios, la rueda, el resorte de suspensión y la placa de interfaz.

Tablero de interfaz

Cada placa de interfaz tiene seis cables conectados. Hay dos cables (rojo [+], negro [-]) que hacen girar el motor, un cable de datos para un sensor de efecto Hall, un cable para el interruptor de caída de la rueda, un cable de 5 V y un cable GND para alimentar el sensor. Tendrá que desmontar el módulo para acceder a la placa de interfaz. Quité todo de nuevo al motor y soldé cables nuevos [+] y [-] al motor (ver fotos). Depende de usted si desea conservar los sensores o no.

Resortes de suspensión

Una vez que quita la parte de la aspiradora, el peso del Roomba se deshace. Si no quita los resortes, el Roomba se sentará en ángulo. Originalmente los quité, pero luego los volví a agregar cuando descubrí que tenía problemas para rodar sobre la alfombra. Volver a colocar el resorte solucionó el problema.

Cableado de motores al controlador de motor

Los motores están enfrentados entre sí. Eso significa que para impulsar el Roomba hacia adelante, un motor tendrá que girar hacia adelante mientras que el otro gira hacia atrás. No pensé mucho en esto hasta que conecté todo. Terminé escribiendo el código sobre cómo conecté inicialmente los motores. Este fue un feliz accidente porque cada vez que la Raspberry Pi se enciende / apaga, hay una salida de voltaje a los pines GPIO. De la forma en que tengo las cosas conectadas, el Roomba gira hasta que la Raspberry Pi se ha iniciado (unos treinta segundos) y gira cuando se apaga hasta que se corta la energía. Si se conecta de manera diferente, podría rodar hacia adelante / hacia atrás, lo que sería irritante. Planeo arreglar esto eventualmente con un simple interruptor para el controlador del motor.

Cableado de los motores y la batería al controlador del motor

Alimentación- - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - -Batería Roomba [+]

Motor 2- - - - - - - - - - - - - - - Negro- - - - - - - - - - - - - -Motor izquierdo [-] Motor 2- - - - - - - - - - - - - - - Rojo- - - - - - - - - - - - - - -Motor izquierdo [+] Motor 1- - - - - - - - - - - - - - Negro- - - - - - - - - - - - - -Motor derecho [-] Motor 1- - - - - - - - - - - - - - - Rojo- - - - - - - - - - - - - -Motor derecho [+] GND- - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - Batería Roomba [-]

Cableado del controlador del motor a la Raspberry Pi

Pines del controlador del motor Color del cable (ver fotos) Pines Raspberry Pi

GND- - - - - - - - - - - - - - - - Negro- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Azul - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - Verde- - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Amarillo - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Naranja - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Rojo- - - - - - - - - - - - - - -5V

Montaje de la electrónica

No se necesita mucho para armar todo. Le quité el chasis al roomba. Con la cubierta retirada, puede recortar fácilmente los separadores de plástico existentes y perforar orificios para montar los componentes electrónicos. Hay puertos existentes para pasar los cables de los motores. Si está utilizando la batería Roomba de serie, ya hay un corte para acceder a los terminales de la batería.

Pilas

Usé baterías separadas para la Raspberry Pi y el controlador del motor. La batería del Pi es solo una batería de 5V que se usa para impulsar los teléfonos celulares. Para el controlador del motor utilicé la batería Roomba original que venía con él. Los terminales de la batería no están etiquetados, por lo que es mejor verificar el voltaje con un voltímetro antes de conectarlo al controlador del motor. Para conectar los cables a la batería del Roomba, utilicé cuatro imanes de neodimio (ver fotos). Soldé dos de los imanes a los cables y los otros dos los pegué a los terminales de la batería. La soldadura desmagnetiza los imanes. Sin embargo, el revestimiento exterior todavía puede adherirse a los imanes de los terminales y conducir la electricidad. Esto hace que conectar y desconectar la batería sea pan comido.

Pruebas

Una vez que tenga todo junto, verifique que tenga todo cableado correctamente, apoye su robot en algo (para que no se mueva) y enciéndalo.

Inicie sesión e inicie el programa roombabot.py

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

Vaya a la página de control web y pruébelo. Si todo está cableado correctamente, las ruedas deben girar en la dirección correspondiente cuando se hace clic en los botones / se presionan las teclas de flecha (no olvide hacer clic en conectar).

Paso 6: Iniciar el código Python al arrancar / finalizar

Iniciar el código Python al arrancar / finalizar
Iniciar el código Python al arrancar / finalizar
Iniciar el código Python al arrancar / finalizar
Iniciar el código Python al arrancar / finalizar

Lo último que tenemos que hacer es decirle a Raspbian que inicie el programa Python al arrancar. Para hacer esto, crearemos un script y lo programaremos para que se ejecute al reiniciar usando crontab.

Crea el guion

Cree un nuevo archivo de script llamado startrobot.sh en el directorio de usuario pi

pi @ raspberrypi: ~ $ sudo nano startrobot.sh

Copie las siguientes líneas en el archivo

#! / bin / sh

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

Guarda el archivo y cierra

Hacer ejecutable el archivo startrobot.sh

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

Pruébelo (presione ctrl + c para detener)

pi @ raspberrypi: ~ $ sh startrobot.sh

Edite el archivo crontab

pi @ raspberrypi: ~ $ sudo crontab -e

Agregue la siguiente línea al final del archivo

# m h dom mon dow comando

@reboot sh /home/pi/startrobot.sh

Guardar y Salir

El programa roombabot.py ahora debería iniciarse cuando la Pi se reinicia o se apaga y enciende.

Terminando

En este punto, debe tener un robot funcional que pueda controlar usando el navegador desde cualquier dispositivo en su red. He llevado esto un poco más lejos desde la construcción original y configuré una VPN para poder acceder al robot cuando estoy fuera de casa. Tengo la intención de realizar algunos cambios adicionales en el futuro. Planeo hacerlo autónomo y posiblemente seguir el movimiento sin dejar de poder tomar los controles cuando quiera.

Recomendado: