Tabla de contenido:
- Paso 1: Instale Raspbian y configure una dirección IP estática
- Paso 2: instalar y configurar Motion
- Paso 3: Instale Apache y configure la página de control web
- Paso 4: Configure y pruebe el código
- Paso 5: Montaje
- Paso 6: Iniciar el código Python al arrancar / finalizar
Video: Robot Roomba controlado por navegador con Raspberry Pi Model 3 A +: 6 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
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
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
sí
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
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
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
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
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
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:
Construya su robot de transmisión de video controlado por Internet con Arduino y Raspberry Pi: 15 pasos (con imágenes)
Construya su robot de transmisión de video controlado por Internet con Arduino y Raspberry Pi: Soy @RedPhantom (también conocido como LiquidCrystalDisplay / Itay), un estudiante de 14 años de Israel que está aprendiendo en la Escuela Secundaria Max Shein de Ciencias y Matemáticas Avanzadas. ¡Estoy haciendo este proyecto para que todos puedan aprender y compartir
Sistema de riego controlado por WiFi 'inteligente' alimentado por energía solar: 6 pasos (con imágenes)
Sistema de riego controlado por WiFi `` inteligente '' con energía solar: este proyecto utiliza piezas solares de bricolaje estándar y piezas de 12v de eBay, junto con dispositivos Shelly IoT y algo de programación básica en openHAB para crear una red de energía de jardín inteligente y casera, totalmente solar, y riego. Aspectos destacados del sistema: Fu
Gesture Hawk: Robot controlado por gestos con la mano utilizando una interfaz basada en procesamiento de imágenes: 13 pasos (con imágenes)
Gesture Hawk: robot controlado por gestos con la mano que utiliza una interfaz basada en procesamiento de imágenes: Gesture Hawk se presentó en TechEvince 4.0 como una sencilla interfaz hombre-máquina basada en el procesamiento de imágenes. Su utilidad radica en el hecho de que no se requieren sensores adicionales o wearables excepto un guante para controlar el automóvil robótico que funciona en diferentes
Robot de transmisión de video controlado por Wifi Raspberry Pi: 8 pasos (con imágenes)
Robot de transmisión de video controlado por Wifi Raspberry Pi: ¿Alguna vez pensó en construir un robot genial con una cámara? Bueno, llegaste al lugar correcto, te mostraré paso a paso cómo construir este robot. Con esto puedes ir a cazar fantasmas por la noche controlando y viendo el video en tu
Coche RasbperryPi con cámara FPV. Control por navegador web: 31 pasos (con imágenes)
Coche RasbperryPi con cámara FPV. Control por navegador web: Construiremos un coche 4x4 - la dirección será similar a la de un tanque - para girar un lado de las ruedas girará con diferente velocidad que el otro. En el coche se colocará la cámara en un soporte especial donde podremos cambiar la posición de la cámara. El robot será c