Suponiendo que puede mantener el máximo de datos para el nRF24L01 ( 2 megabits por segundo ), entonces eso significa que puedes moverte - en un mundo perfecto - 200 kilobytes por segundo (suponiendo que no hay gastos generales).
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 qué resolución quieres, pero la resolución máxima del ov7670 es 640x480, y usa 16 bits por píxel (es un poco más complicado que eso, invito a los curiosos a leer el Hoja de datos ).
Como todas nuestras calculadoras saben 640 * 480 * 2 = 614,400
Bytes: 72 veces ese 8.53K por fotograma. De hecho, tomaría un campo de juego de 3 segundos por cuadro (6 segundos si se ejecuta a 1 mbps).
Entonces, para responder a las dos primeras preguntas: el nRF24L01 no está a la altura de transmitir el video en vivo de 640x480.
Esto nos deja con su tercera pregunta: ¿Cómo reducir el tamaño de los datos de las cámaras?
Hay ( no mutuamente excluyentes) tres formas de hacer esto:
- Comprimir las imágenes
- Comprimir los datos
- Enviar imágenes más pequeñas
Vamos a desglosar cada uno de estos:
Comprimir las imágenes
Podrías, por ejemplo, enviar las imágenes como una transmisión M-JPEG. Esto ciertamente haría que la decodificación de las imágenes en el lado del teléfono sea mucho más fácil, y reduciría el tamaño de las imágenes enviadas un poco.
Pero hay un problema: debe poder mantener toda la imagen en la memoria para 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 se ajuste. 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 varias opciones que puedes hacer aquí: Huffman, Run Length Encoding, LWZ, etc. Desafortunadamente, ninguna de estas producirá una cantidad predecible de compresión. Dependerá de las imágenes que envíes.
Pero creo que es seguro decir que no obtendrás los 8.53K que necesitarías 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 otras resoluciones que podría usar:
- QVGA (320x240):
320 * 240 * 2 = 150K
por cuadro. A este ritmo, podría enviar un poco más de 1 fps
- QQVGA (160x120):
160 * 120 * 2 = 37K
por cuadro. Este es el primer tamaño de imagen que puede almacenar completamente en RAM
- QQQVGA (80x60):
80 * 60 * 2 = 9.38K
por cuadro. Con la compresión deberías poder hacer video a 24 fps
- QQQQVGA (40x30): '40 * 30 * 2 = 2.35K por cuadro. ¡En este (sello postal) de un tamaño que podría vaporizar a 30 fps 1mbps! Creo que esta es la resolución más baja compatible con la cámara.
QQVGA puede ser posible si realiza una compresión JPEG con mucha pérdida, y luego también hace algo de compresión en el flujo de datos. Vas a tener que experimentar para estar seguro.
Un Postscript
Va a ser difícil encontrar una tecnología inalámbrica más rápida que la nRF24L01 (y su tipo), sin ir a wifi (por ejemplo, Módulo Adafruit CC3000 ). Con eso, un microcontrolador con MUCHO RAM, y compresión, debería poder transmitir 24-30 fps.
Alternativamente, hay chips de controladores de cámara que hacen la compresión JPEG por usted, el vc0706 por ejemplo. Con eso conectado a una cámara, y utilizando el enlace SPI de la vc0706, debería poder usar incluso un microcontrolador trivial para transmitir los datos.
Todavía tengo que encontrarme con un módulo de cámara con vc0706 que expone los pines SPI, todos son en serie. Uno puede existir, pero no lo he encontrado todavía. Entonces, si vas por esta ruta, es posible que tengas que hacerlo tú mismo ...