Compré este módulo: Módulo de cámara OV7670 + AL422B(FIFO) y quiero enviar el video en vivo de la cámara por este NRF24L01 pero tengo varias preguntas.
¿Es adecuado el módulo RF (NRF24L01) para este trabajo?
Creo que la velocidad de datos del NRF24L01 no es suficiente para la cámara. ¿cual es tu opinion?
Si está de acuerdo conmigo, en su opinión, ¿cómo puedo resolver este problema? (En otras palabras, ¿puedo reducir el tamaño de los datos de la cámara (video)?)
Debo enviar el video por NRF24L01 por 1Mbps o más. además, estoy usando STM32F103RET6 para este trabajo.
Suponiendo que pueda mantener la tasa de datos máxima para el nRF24L01 ( 2 megabits por segundo ), eso significa que puede moverse, en un mundo perfecto, 200 kilobytes por segundo (suponiendo que no haya sobrecarga).
Entonces, dado esto, y su mínimo deseado de 24 fps, puede calcular cuántos bytes necesita que tenga cada imagen: 200K / 24 = 8.53K
por cuadro
Ahora no has dicho que resolución quieres, pero la resolución máxima del ov7670 es de 640x480, y usa 16bits por píxel (es un poco más complicado que eso, invito a los curiosos a leer la Hoja de Datos ) .
Como todas nuestras calculadoras conocen 640 * 480 * 2 = 614,400
Bytes: 72 veces más que 8.53K por cuadro. De hecho, tomaría aproximadamente 3 segundos por cuadro (6 segundos si se ejecuta a 1 Mbps).
Entonces, para responder a sus dos primeras preguntas: el nRF24L01 no está a la altura de la tarea de transmitir video en vivo de 640x480.
Esto nos deja con su tercera pregunta: ¿ Cómo se reduce el tamaño de los datos de las cámaras?
Hay ( no mutuamente excluyentes) tres formas de hacer esto:
Desglosemos cada uno de estos:
Comprimir las imágenes
Podría, por ejemplo, enviar las imágenes como un flujo M-JPEG. Esto ciertamente facilitaría mucho la decodificación de las imágenes en el lado del teléfono y reduciría bastante el tamaño de las imágenes enviadas.
Pero hay un problema: debe poder mantener la imagen completa en la memoria para poder realizar la compresión JPEG (y, por lo tanto, M-JPEG). Su ST32F103RET6 tiene 64K de RAM (IIRC), por lo que no hay forma de que quepa. Y no estoy seguro de un esquema de compresión con pérdida que pueda usar que no necesite toda la imagen a la vez.
Comprimir los datos
Ahora hay una serie de opciones que podría hacer aquí: Huffman, codificación de longitud de ejecución, LWZ, etc. Desafortunadamente, ninguno de estos producirá una cantidad predecible de compresión. Va a depender de las imágenes que envíes.
Pero creo que es seguro decir que no obtendrá los 8.53K que necesitaría para 24 fps.
Enviar imágenes más pequeñas
El OV7670 es bastante flexible cuando se trata de resoluciones. Así que echemos un vistazo a algunas otras resoluciones que podrías usar:
320 * 240 * 2 = 150K
por fotograma. A este ritmo podrías enviar algo más de 1 fps160 * 120 * 2 = 37K
por cuadro. Este es el primer tamaño de imagen que puede almacenar completamente en RAM80 * 60 * 2 = 9.38K
por cuadro. Con compresión, debería poder hacer videos de 24 fpsQQVGA puede ser posible si realiza una compresión JPEG con mucha pérdida y, a continuación, también comprime un poco el flujo de datos. Vas a tener que experimentar para estar seguro.
una posdata
Será difícil encontrar una tecnología inalámbrica más rápida que el nRF24L01 (y sus similares), sin tener que recurrir a wifi (por ejemplo, el módulo Adafruit CC3000 ). Con eso, un microcontrolador con MUCHA RAM y compresión, debería poder transmitir 24-30 fps.
Alternativamente, hay chips de controlador de cámara que hacen la compresión JPEG por usted, por ejemplo, el vc0706. Con eso conectado a una cámara, y usando el enlace SPI de vc0706, debería poder usar incluso un microcontrolador trivial para transmitir los datos.
Todavía tengo que conocer un módulo de cámara con vc0706 que expone los pines SPI, todos son seriales. Uno puede existir, pero no lo he encontrado todavía. Entonces, si sigues esta ruta, es posible que tengas que hacerlo tú mismo...
Gustavo Litovsky
Andy alias
Roh
Gustavo Litovsky
Roh
Juan U.
Juan U.
Felipe_Ribas
Roh
Felipe_Ribas
Roh
Felipe_Ribas