Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Robot de vigilancia Roomberry:Roomba + Pi Zero + cámara

Roomberry es un robot de vigilancia basado en Roomba usando una Raspberry Pi Zero W y un módulo de cámara. Hace años comencé a hacer algunas pruebas para controlar un Roomba de forma remota usando un Arduino One con un módulo RN-VX WiFly.

El mes pasado decidí revitalizar la idea pero con un nuevo objetivo:convertir el Roomba en un robot de vigilancia con capacidad para tomar fotos y videos. La primera idea fue seguir usando Arduino como microcontrolador empleando un módulo Arducam para capturar imágenes. Sin embargo, rápidamente descubrí que la capacidad de procesamiento de imágenes de Arduino era demasiado limitada para mis intereses. La segunda opción fue cambiar de plataforma y usar una Raspberry Pi Zero W con módulo de cámara. Esta alternativa significó algunos desafíos, especialmente en cuanto a potencia, pero también ofreció más posibilidades. En esta publicación explicaré cómo construir Roomberry, un robot de vigilancia basado en Roomba usando una Raspberry Pi Zero W y un módulo de cámara.

Una demostración de las capacidades de Roomberry y la interfaz web desarrollado para interactuar con él se puede ver en el siguiente video.

iRobot Roomba

Roomba de iRobot ofrece una interfaz abierta (OI) para interactuar con el robot a través de un conector mini DIN. El OI es una interfaz de software diseñada para Roomba creator 2 (una adaptación de la serie 600). Sin embargo, también es totalmente compatible con las series 500 y 700. No obstante, existen algunos errores según la plataforma y la versión de firmware utilizada. La interfaz del software le permite manipular el comportamiento de Roomba y leer sus sensores. En este documento se puede encontrar una descripción completa de sus capacidades.

Conector mini DIN

El conector mini DIN de Roomba se encuentra en el lado frontal derecho del Roomba serie 700 y tiene 7 pines. Su posición varía ligeramente en la serie 600, cuya ubicación está en la parte trasera derecha del Roomba, debajo de una protección de plástico que se quita a presión. Mini DIN 7 Los conectores macho son complicados de comprar, sin embargo, el mini conector macho DIN de 8 pines más común también es compatible.

Para asegurar una conexión / desconexión suave y confiable del puerto, soldé un cable de 5 pines (diseñado para tiras de LED) con un conector hembra a un conector macho mini DIN de 8 pines usando los pines 1-2 (potencia), 6-7 (tierra), 3 (RxD), 4 (TxD) y 5 (BRC). Sin embargo, como se comenta más adelante, la conexión de alimentación / tierra finalmente no fue necesaria. El cable resultante se puede ver en las siguientes imágenes.


Puerto serial de Roomba

Para usar la OI, los comandos debe enviarse a través de una comunicación en serie bidireccional creado en mini DIN 7 pines 3 (RxD) y 4 (TxD). Este puerto UART funciona en niveles TTL (0 - 5 V). Este voltaje está perfectamente bien para microcontroladores que utilizan lógica de 5 V, como la mayoría de las placas Arduino. Sin embargo, no es bueno para aquellos con niveles lógicos de voltaje más bajos (como la Raspberry Pi).

En teoría, el pin 3 (RxD) tomará 3.3 V como nivel lógico alto. Pero el Roomba emitirá 5V en su pin 4 (TxD), lo que puede dañar el Raspberry Pi Zero. Para mantener el hardware seguro, un cambiador de nivel lógico debería ser usado. La forma más sencilla de hacer esto es con un divisor de resistencia, como ya se implementó en mi proyecto anterior Calduino, pero es posible que esto no funcione a altas velocidades (el puerto serie de Roomba funciona a 115200 baudios).

En lugar de eso, es preferible un cambiador de nivel activo. Si desea construir su propio circuito, use el transistor de efecto de campo AN10441 como se explica aquí. Una opción mucho más sencilla es utilizar uno de los convertidores de nivel lógico bidireccional existentes, como este de Adafruit. Este dispositivo puede gestionar hasta 4 señales y reducirlas de forma segura de 5 V a 3,3 V. Al mismo tiempo, aumenta las señales de 3.3V a 5V.

Encendido de Raspberry Pi desde Roomba

Hay algunas alternativas para suministrar energía a través de la batería de Roomba:

Alimentación desde el Mini DIN 7

El mini DIN 7 proporciona una conexión directa no regulada en los pines 1/2 (Vcc) - 6/7 (Gnd) a la batería de Roomba. La conexión está limitada a 200 mA a través de un fusible reiniciable PTC . Ofrece un voltaje entre 20.5 y 10V, limitado a 0.2A con una potencia de 2W. El consumo continuo de estos dos pines juntos no debe exceder los 200 mA. Dibujar un pico superior a 500 mA restablecerá el fusible.

Una Raspberry Pi Zero W debería poder funcionar con este suministro. La Raspberry Pi Foundation califica el consumo de corriente activo típico de placa desnuda en 150 mA. Este punto de referencia lo sitúa entre 120 mA en inactivo estado y 180 mA bajo estrés (reproducción de video FullHD, por ejemplo). Sin embargo, aquí no se considera el consumo extra de la cámara. Según mis medidas, la cámara (yo uso este, con el mismo sensor que la cámara oficial Pi de la versión 1) aumenta el consumo de energía a más de 300 mA, con picos de 450 mA. Durante mi prueba, el fusible se disparó varias veces mientras grababa videos.

Como conclusión, el termofusible existente descarta el uso de esta conexión para alimentar la Raspberry Pi Zero W. No he podido averiguar si es posible y seguro quitar el fusible de la placa sin dañar otros componentes.

Alimentación desde un banco de energía externo

Hay algunas alternativas para evitar este límite de fusibles. Por un lado, la solución más sencilla sería utilizar un banco de energía para proporcionar energía externa a la Raspberry Pi Zero. Sin embargo, requerirá que el usuario lo cargue periódicamente. Otra opción sería diseñar una conexión en serie entre la fuente de alimentación mini DIN 7 y el banco de energía. Con un par de componentes electrónicos, debería ser posible usar la batería del Roomba para cargar el banco de energía. Para simplificar mi diseño, decidí evitar el uso de fuentes de energía adicionales.

Energía de la batería

Finalmente decidí omitir el fusible creando una conexión directa a la batería . La contraparte de esta opción es que tendrás que desmontar parcialmente el robot . En Roomba serie 600 hay dos almohadillas grandes directamente conectadas al paquete de baterías debajo del botón de acoplamiento. En Roomba serie 700/800 tendrás que desmontar un par de componentes más. Echa un vistazo al siguiente vídeo hasta el minuto 6 para ver, paso a paso, cómo acceder a la placa base de tu robot . Una vez hecho esto, solo suelde un par de cables a la almohadilla de la batería como se muestra en las siguientes imágenes.


Estos cables proporcionarán una conexión directa a la batería no limitada por ningún fusible. Suministran entre 20,5 y 10 V, según el nivel de carga de la batería. Sin embargo, la Raspberry Pi Zero W necesita una fuente de alimentación regulada de 5 V. Para reducir el voltaje un paso hacia abajo se utiliza. Hay muchas opciones para hacer esto que van desde el uso de un regulador lineal barato (como el 7805 TO-220) con un par de condensadores para instalar un regulador de conmutación .

Debido a su mayor eficiencia , y considerando que siempre estará conectado, aconsejaría usar / comprar un de buena calidad (evite las imitaciones de China) regulador de conmutación reductor . He usado el regulador reductor Pololu D24V5F5 que toma una entrada de hasta 36 V y la reduce a 5 V para una corriente de salida máxima de 500 mA. Su eficiencia está valorada entre el 85% y el 90% y tiene una deserción muy baja. También puede usar un UBEC (Circuito de eliminación de batería universal), como el que se usa comúnmente en el mundo RC. Coloqué mi regulador de voltaje en un espacio libre situado en el centro - lado derecho del robot.

Las conexiones estaban debidamente protegidas con termorretráctil y el módulo D24V5F5 estaba cubierto con plástico aislante (no tomé ninguna foto de esto). Soldé la salida del módulo a un cable micro-USB, lo que me permite conectarlo directamente a la entrada de energía Raspberry Pi Zero W.


Con una herramienta de perforación giratoria y papel de lija, creé una pequeña muesca en la cubierta superior del Roomba para permitir una salida limpia del cable micro USB, como se puede ver en la siguiente imagen.

Modos Roomba OI

Roomba OI tiene cuatro modos de funcionamiento:Apagado, Pasivo, Seguro y Completo.

Modo desactivado :Después de un cambio de batería o cuando se enciende por primera vez, el OI está en modo apagado. En este estado, el Roomba escucha el puerto a la velocidad en baudios predeterminada (115200) esperando el comando anstart. Los comandos para restablecer y detener se pueden enviar en cualquier momento y también pondrán a OI en modo apagado.

Modo pasivo: Una vez que se envía un comando de inicio, Roomba entra en modo pasivo . En este estado, puede solicitar y recibir datos del sensor utilizando cualquiera de los comandos del sensor. Sin embargo, no puede cambiar los parámetros de comando actuales para los actuadores (motores, altavoz, luces, controladores de lado bajo, salidas digitales). Roomba entrará en modo pasivo también si se envía uno de los comandos del modo de limpieza (Spot, Clean, Seek Dock, etc.).

Mientras esté en modo pasivo, Roomba entrará en modo desactivado después de cinco minutos de inactividad para ahorrar energía y conservar la batería. De acuerdo con la documentación de iRobot, la suspensión se puede desactivar simplemente pulsando el pin BRC bajo periódicamente antes de que expiren estos cinco minutos. Cada pulso debe reiniciar este contador de cinco minutos. En las pruebas que he realizado (con un Roomba 780), bajar el BRC solo despertará al robot, pero no evitará que pase al modo de ahorro de energía. El robot emitirá un pitido cuando se despierte (si no se está cargando en la estación de carga).

Modo seguro :Roomba entrará en Modo seguro si se envía el comando Safe. El modo seguro le brinda control total del robot y apaga todos los motores y LED. Sin embargo, si no se cumple una condición relacionada con la seguridad, el robot pasará automáticamente al modo pasivo . Esas condiciones de seguridad son:detección de un acantilado mientras se avanza, caída de la rueda y conexión del cargador. En este modo, Roomba no se cargará (aunque esté en la base) y no ahorrará energía al cambiar al modo apagado después de 5 minutos de inactividad. Este punto es muy importante:puede terminar agotando la batería del robot y dañándola si no cambia al modo pasivo o apagado.

Modo completo :Cuando envía un comando completo a la OI, Roomba ingresa al modo completo . El robot se comportará exactamente como en el modo seguro, pero no tendrá en cuenta las condiciones relacionadas con la seguridad comentadas anteriormente, ¡así que tenga en cuenta los riesgos!

Precauciones con la batería :Como se comentó, en el modo pasivo, Roomba dormirá después de 5 minutos de inactividad para conservar la energía de la batería. En los modos Seguro y Completo, Roomba nunca dormirá, y si se deja en este estado durante un período prolongado de tiempo, descargará profundamente la batería, incluso si está enchufado al cargador. El cargador alimentará Roomba en todos los modos, pero no cargará la batería en modo Seguro o Completo. Es importante volver a poner Roomba en modo pasivo o apagado una vez que se realiza un trabajo y / o cuando el nivel de la batería es bajo para protegerlo.

Raspberry Pi Zero W

La Raspberry Pi Zero W es una versión actualizada de Raspberry Pi Zero con LAN inalámbrica y Bluetooth . El modelo incluye una CPU de un solo núcleo de 1 GHz, 512 MB de RAM, mini-HDMI, un puerto micro-USB OTG, micro-USB para alimentación, encabezado de 40 pines, video compuesto, encabezados de reinicio, un conector de cámara, así como las nuevas funciones inalámbricas. Utiliza el chip inalámbrico Cypress CYW43438 que admite Wi-Fi 802.11b / g / n (solo 2,4 GHz) y Bluetooth 4.0 (el mismo chip que Raspberry Pi 3 Modelo B). Lo compré en Pimoroni con cabeceras (sin soldar) y adaptadores por 16 €.

Cámara

El conector de la cámara CSI Raspberry Pi Zero W es más pequeño que el del Pi 3. Si ya tiene una cámara, tendrá que comprar un adaptador para usarla. De lo contrario, recomendaría comprar este módulo de cámara, que incorpora un sensor de 5MP (igual que la cámara oficial Pi de la versión 1) y puede grabar video a 1080p. Cuesta 18 €. Elegí la cámara gran angular con corte IR. Sé que no podré ver nada por la noche, pero el uso de LED IR aumentará el consumo de energía, que quería mantener bajo. Siempre puede utilizar las luces Philips HUE para controlar de forma remota las luces de su hogar.

Encendido de Raspberry Pi Zero W

Hay un par de consideraciones que deben hacerse con respecto a la fuente de alimentación de Pi Zero. En primer lugar, y a diferencia de los modelos más grandes, el Pi Zero no tiene regulación ni fusible para protegerlo de sobretensión o picos de corriente. Significa que debes suministrar una fuente de energía estable con 5 V. La fuente de alimentación se puede conectar al micro USB del lado derecho (Pwr In) o al pin de 5V en el encabezado GPIO. Ambos son de la misma línea. Asegúrese de que si se aplica un voltaje incorrecto o se produce un pico de corriente en la línea, probablemente dañará tu Raspberry Pi permanentemente .

Como ya se ha comentado, se han medido picos de consumo de 400 mA con la cámara conectada durante la ejecución de las pruebas de esfuerzo. La Fundación Raspberry Pi recomienda una fuente de alimentación de al menos 1,2 A. Sin embargo, los 0,5 A proporcionados por el regulador buck han sido suficientes para mí. Hasta ahora no encontré ningún problema relacionado con la fuente de alimentación.

Reducción del consumo de energía

Teniendo en cuenta que la Raspberry funcionará con la batería de Roomba, será interesante reducir el consumo de energía cuanto más se pueda. Por ejemplo, sabiendo que el Pi Zero funcionará sin cabeza (sin un monitor conectado) y solo se podrá acceder a él a través de SSH, no es necesario encender los circuitos de la pantalla. La desactivación del puerto HDMI puede ahorrar hasta 25 mA. Para hacerlo, simplemente ejecute / usr / bin / tvservice -o (o con -p para volver a habilitarlo). He colocado un breve script en /etc/rc.local que comprueba si el cable HDMI está conectado o no y deshabilita el puerto HDMI en consecuencia.

# Obtenga el tipo de salida de video actual y elimine los bits sin importancia
video =“$ (tvservice -s | sed“ s /^.*\[\([^] * \). * $ / \ 1 / ”)“

si ["$ video"! ="HDMI"]; luego
printf “HDMI no detectado. Apagando. \ N ”
tvservice -off> / dev / null
else
printf“ HDMI detectado. \ N ”
fi

Otra forma de reducir el consumo de energía es deshabilitando los LED del Pi. La Raspberry Pi Zero tiene solo uno, el LED de actividad, que parpadea cada vez que se accede a la tarjeta SD. Su consumo es de aproximadamente 5 mA. Para deshabilitarlo totalmente, agregue estas líneas en su archivo /etc/rc.local:

# Establezca el disparador LED Pi Zero ACT en "ninguno"
echo none | sudo tee / sys / class / leds / led0 / trigger

# Apague el LED Pi Zero ACT
echo 1 | sudo tee / sys / class / leds / led0 / brillo

También puede hacer esto editando el archivo /etc/config.txt:

# Desactive el LED ACT en el Pi Zero

dtparam =act_led_trigger =none
dtparam =act_led_activelow =on

No estoy seguro de si esto se traducirá en una reducción real del consumo, pero como no se utilizará, puede desactivar el módulo bluetooth del Pi Zero agregando la siguiente línea a / etc / config .txt:

# Desactiva bluetooth en el Pi Zero

dtoverlay =pi3-disable-bt

Finalmente, intente reducir el software instalado y en ejecución en Pi Zero. Por ejemplo, use Raspbian lite en lugar de la versión de escritorio y no instale software adicional a menos que realmente lo necesite. Cuantos más procesos se ejecuten en su máquina, mayor consumo tendrá.

Otras consideraciones

Edificio Roomberry

Una vez que se hayan descrito todas las piezas, veamos cómo construir y ejecutar Roomberry, su interfaz Raspberry con Roomba.

Mi objetivo era encapsular los componentes (Raspberry Pi Zero, módulo de cámara, conversor de nivel lógico y botón de conmutación) en una carcasa estable con fácil acceso a todos los puertos y tarjeta SD. La única opción que encontré, excluyendo la impresión de mi propio diseño 3D, fue esta. Este estuche satisface todos los requisitos y me permite adjuntar un HAT (hardware adjunto en la parte superior), una placa complementaria con el par de componentes electrónicos necesarios. La siguiente imagen muestra el esquema de PCB. Tenga en cuenta que los pines Run se encuentran en el Pi Zero y no en el HAT. Para construirlo bastará con un trozo de placa PCB de 12 x 10 pines. Para cortar la PCB he utilizado una herramienta rotativa.

El convertidor de nivel lógico necesitará tanto voltaje alto como bajo, que se puede obtener de GPIO (el Pi Zero incluye un convertidor reductor de 5 a 3.3 V llamado PAM2306AYPKE). He colocado el botón de cambio en medio del Pi Zero, ya que era una extensión del HAT. Al hacerlo, el vástago del botón resalta la carcasa para que se pueda presionar externamente. Tendrás que perforar un par de agujeros en el estuche:uno para el botón de vapor y otro (y más grande) para la cámara. Además, tuve que lijar con cuidado el espacio de la carcasa diseñado para el conector CSI para dejar espacio para un giro de 180 grados del cable. Las siguientes imágenes muestran los resultados:


Configuración de Raspbian Stretch

Antes de conectar Roomberry al conector mini DIN 7 del Roomba, se deben realizar algunos pasos de configuración. Suponiendo que Raspberry Pi Zero W está ejecutando la última versión de Raspbian y ya está configurado sin cabeza.

Conecte la fuente de alimentación micro USB construido previamente al Pi Zero. Después de unos segundos, el sistema debería estar listo y funcionando. Abra una conexión SSH a su pi Zero.

De forma predeterminada, el puerto serie de Pi está configurado para usarse para entrada / salida de consola . Para comunicarse con Roomba a través de este puerto, es necesario deshabilitar el inicio de sesión de la consola serie. Puede hacerlo con raspi-config eligiendo el menú 5 - Opciones de interfaz y P6 - Serial. Responda No a la pregunta "¿Le gustaría iniciar sesión en el shell para ser accesible a través de la serie?" y a "¿Desea que se habilite el hardware del puerto serie?". No reinicie el sistema todavía. Alternativamente, también puede comentar la definición de la consola y agregar al final del archivo / boot / config la siguiente línea:

# Buscar y comentar la definición de la consola
# console =serial0,115200
...
enable_uart =1

Si aún no lo ha hecho, habilite el módulo de cámara . Nuevamente, puede hacerlo a través de raspi-config eligiendo el menú 5 y la opción P1. Por otro lado, también puede editar el archivo / boot / config e incluir estos cambios (no es necesario desactivar el LED de la cámara, pero se recomienda para ahorrar energía):

start_x =1
gpu_mem =128
disable_camera_led =1

No estoy seguro de cuál es la cantidad óptima de RAM para asignar como gpu_memory cuando se utiliza el módulo de la cámara. Hasta ahora no he encontrado ningún error de "Sin recursos" mientras operaba con la cámara, así que supongo que 128 Mb es una buena opción.

Desactivar todos los intercambios y el directorio mount / tmp en el disco RAM con 50 megabytes de espacio. Esta ubicación se utilizará para almacenar archivos efímeros, como instantáneas de la cámara y archivos de estado de Roomba. Aumente el tiempo de confirmación en etc / fstab a 30 minutos e incluya la opción noatime en la partición SD. Encuentra los comandos en esta publicación.

Ahora es el momento de probar si todo funciona correctamente. Baje su Pi y conecte el puerto serie a Roomba. Coloque el Roomba en la base de carga . Inicie el sistema y compruebe que todo funciona como se esperaba (y que el robot no está haciendo nada extraño).

Prueba de lectura desde el puerto serie :He usado minicom para leer los datos enviados por Roomba. Para instalarlo, simplemente escriba:

sudo apt-get minicom

Conéctese con el puerto serie de Roomba haciendo:

minicom –b 115200 -o -D / dev / serial0

Si su Roomba se está cargando, debería ver un texto similar a la siguiente imagen que informa el estado de carga del Roomba cada segundo. Presione CTRL + A y X para salir de minicom.

Read More Detail  :Roomberry Surveillance Robot:Roomba + Pi Zero + Camera


Proceso de manufactura

  1. Cómo hacer una plataforma de robot Arduino + Raspberry Pi
  2. Lector de libros BrickPi
  3. Robot de caja de CD Raspberry Pi
  4. Robot de alarma rodante
  5. Crea un robot Creeper de Minecraft
  6. Arquímedes:El búho robot con IA
  7. Robot de vigilancia Roomberry:Roomba + Pi Zero + cámara
  8. Abrir CV Robot
  9. Robot ROS
  10. Robot Pi simple
  11. Robot trepa paredes para tareas de vigilancia, inspección y mantenimiento