Transmitir un flujo de video a través de un microcontrolador

Estoy trabajando en un proyecto que actualmente funciona bien pero este año queremos expandirlo recopilando datos de él, independientemente de sus funciones actuales. Hemos configurado una aplicación de iPad para controlar un Arduino a través de Bluetooth. El siguiente paso es transmitir video a través de Bluetooth al iPad.

Con esta pregunta me gustaría centrarme en cómo un microcontrolador puede enviar un flujo de video a través de Bluetooth. Parece que no puedo encontrar ninguna manera de siquiera comenzar este proyecto.

¿Cómo interconectas la cámara con el microcontrolador?

¿Cómo envías esa transmisión a través de Bluetooth?

Es probable que no pueda transmitir a través de bluetooth, no hay suficiente ancho de banda. Cualquier transferencia de datos a través de bluetooth a un iPad es realmente difícil, ya que el tipo de flujos de datos disponibles públicamente es limitado. El video a través de wifi es una mejor opción y ya existen soluciones listas para usar.
siguiendo el consejo de sus muchachos y hablando con mi compañero, parece que ya cambió a wifi la semana pasada de todos modos. así que usando wifi, hice otra pregunta electronics.stackexchange.com/q/49045/15343
pero, ¿no puede usar una foto de 32 o un controlador de microc AVR para la transmisión de video con una cámara ttl (foto a alta velocidad)?
Cualquiera que venga aquí en busca de una respuesta debería revisar el nuevo microprocesador Curie de Intel. El Arduino 101 lo usa. Todavía no estoy seguro de si puede hacerlo, pero es la tecnología más nueva en este momento. A ~ $ 30 tiene BTLE, giroscopio y acelerómetro incorporados.

Respuestas (2)

Desafortunadamente, en mi experiencia, lo que encontrará rápidamente es que el video es desagradablemente difícil de manipular sin mucha potencia de la CPU. Comencemos desde el principio: ¿cuánto video quieres?

Hay muchas opciones aquí, pero comience poco a poco. Digamos que, en aras de la simplicidad, desea un cuadro de 640x480 de video en blanco y negro de 8 bits, a 24 cuadros por segundo.

Eso es 640*480 píxeles = 307 200 * 8 bits por píxel = 307 200 kilobytes por cuadro * 24 cuadros por segundo = 7 372 800 bytes por segundo o ~7,37 megabytes por segundo

Esa es una línea de base para el rendimiento de datos para una cámara que emite cuadros sin procesar, y eso no incluye sonido ni color. Ahora tiene algunos caminos que puede tomar: puede comenzar a codificar la transmisión de video o puede obtener una gran cantidad de ancho de banda. No conozco el rendimiento de bluetooth, así que no puedo ayudarlo allí.

Desafortunadamente, la codificación requiere una de tres cosas: mucha potencia de procesamiento, o hardware especializado, o (posiblemente) conocimiento de FPGA que tampoco tengo. La codificación reducirá los problemas de ancho de banda, pero a un costo bastante alto. Necesitaría investigar la compresión y otras cosas para averiguar si podría incluso obtener esto a través de su interfaz y aún así hacer que el arduino haga un trabajo útil.

Si desea conectar una cámara a un microcontrolador, encontrará que incluso simplemente tomar imágenes fijas puede ser una molestia en función de cómo se entregan las imágenes fijas. Había una cámara Sparkfun que proporcionaba fotogramas jpeg pero no tenía un período fijo de cuánto tiempo tardaba la codificación, y de repente comenzaba a escupir el fotograma codificado tan rápido como podía, y dado que los fotogramas eran demasiado grandes para caber La memoria RAM en el microcontrolador tenía que pasar todo el tiempo obteniendo el marco y escupiéndolo a través de cualquier interfaz que estuvieran usando para transmitir.

tl; dr: debe establecer lo que necesita y probablemente intentar y averiguar si usar el microcontrolador como intermediario es la mejor opción.

¡Buena suerte! Espero que eso ayude.

7.372.800 bytes por segundo es en realidad un poco más de 7,03 megabytes por segundo. Bluetooth solo tiene una capacidad de alrededor de 2,1 Mbit/s o 0,26 megabytes por segundo. Entonces, tiene toda la razón al recomendar una alternativa, Bluetooth no es adecuado para video.
Serían 7,03 Mebibytes , ¿no? Huzzah por los extraños prefijos binarios seminuevos... Y como comentario adicional: algo que notará sobre muchos diseños para dispositivos electrónicos que usan video es que con frecuencia son video analógico, digital todo lo demás. Esto se debe a que es mucho más fácil no tener que procesar nada y solo hacer que la persona detrás de los controles haga el trabajo duro de interpretar el video. También se debe a que normalmente no se requiere toda la información, por lo que el video analógico con pérdida está bien.
Mebibytes, eso es raro. IEEE está de acuerdo, pero Google no . Honestamente, estoy un poco desgarrado por eso, soy miembro de ambos.
La razón por la que es un problema es que había una percepción general en la comunidad de que kilo o mega, delante de "byte" significaba que eran potencias de 2. Luego, algunas personas sin escrúpulos en un grupo de marketing de discos duros se dieron cuenta de que podían vender en potencias de 10 y no ser demandado por vender menos espacio del que estaba escrito en la caja. Así comenzó la discrepancia, y debido a que el uso de "MB" en un disco duro es x10^6 bytes y no x2^20 y es técnicamente correcto según los prefijos SI, se creó un nuevo prefijo. El único punto de usarlos ahora es por motivos de claridad en situaciones como estas.
Por cierto: ¿ese ancho de banda es de 2,1 Mibits/seg? ¿O 2.1 Mbits? La razón principal del nuevo prefijo es asegurarse de que no tenga que hacer preguntas como esta, pero pasará mucho tiempo antes de que las personas comiencen a usarlos con regularidad.
Recuerdo el debate entre marketing e ingeniería relacionado con lo que llamaron 1000 bits o 1024 bits, pero no me había dado cuenta de que lo resolvieron. Son 2,1 Mbits y 0,26 Mebibytes. Es académico al menos en este caso, ya que ni siquiera estamos en la furia de la tasa aceptable para video Bluetooth.

Bluetooth es una tecnología de radio semidúplex que tiene una velocidad máxima de datos sin procesar de 1, 2 o 3 Mbps, según el esquema de modulación específico que se utilice. En la práctica, una aplicación puede obtener como máximo unos 200 KB/s de rendimiento de datos.

Incluso si reduce sus requisitos de video a un cuarto de VGA (320 × 240) a 10 fps con 8 bits/píxel (768 KB/s), aún necesitará comprimir los datos sobre la marcha en al menos 4:1 para transmitirlo en tiempo real a través de Bluetooth.

Dicho esto, si esto es algo que aún desea seguir, recomendaría buscar chips DSP como el microcontrolador que seleccione. Solo como un ejemplo, Analog Devices Blackfin ( ADSP-BF561 ) es particularmente adecuado para el procesamiento de video en tiempo real. El EZ-KIT correspondiente es una manera fácil de comenzar con el desarrollo.