- Componentes requeridos
- Cosas para recordar sobre el módulo de cámara OV7670
- Diagrama de circuito
- Programación de Arduino UNO
- Cómo utilizar el lector de puerto serie para leer imágenes
- A continuación se muestran imágenes de muestra tomadas del OV7670
- Precauciones al utilizar OV7670
Las cámaras siempre han dominado la industria de la electrónica, ya que tiene muchas aplicaciones como sistema de monitoreo de visitantes, sistema de vigilancia, sistema de asistencia, etc. Las cámaras que usamos hoy en día son inteligentes y tienen muchas características que no estaban presentes en las cámaras anteriores. Mientras que las cámaras digitales actuales no solo capturan imágenes, sino que también capturan descripciones de alto nivel de la escena y analizan lo que ven. Se utiliza ampliamente en robótica, inteligencia artificial, aprendizaje automático, etc. Los fotogramas capturados se procesan mediante inteligencia artificial y aprendizaje automático, y luego se utilizan en muchas aplicaciones como detección de matrículas, detección de objetos, detección de movimiento, reconocimiento facial, etc.
En este tutorial interactuaremos el módulo de cámara OV7670 más utilizado con Arduino UNO. El módulo de cámara OV7670 se puede interconectar con Arduino Mega con la misma configuración de pines, código y pasos. El módulo de la cámara es difícil de conectar porque tiene una gran cantidad de pines y cableado desordenado para realizar. Además, el cable se vuelve muy importante cuando se utilizan módulos de cámara, ya que la elección del cable y la longitud del cable pueden afectar significativamente la calidad de la imagen y generar ruido.
Ya hemos realizado amplios proyectos en Cámaras con diferentes tipos de Microcontroladores y Dispositivos IoT como:
- Sistema de monitoreo de visitantes con cámara Raspberry Pi y Pi
- Sistema de seguridad para el hogar Raspberry Pi basado en IOT con alerta por correo electrónico
- Cámara de vigilancia Raspberry Pi con captura de movimiento
La cámara OV7670 funciona con 3.3V, por lo que es muy importante evitar Arduino, que da una salida de 5V en sus pines GPIO de salida. La OV7670 es una cámara FIFO. Pero en este tutorial, la imagen o los marcos se tomarán sin FIFO. Este tutorial tendrá pasos simples y una programación simplificada para interconectar OV7670 con Arduino UNO.
Componentes requeridos
- Arduino UNO
- Módulo de cámara OV7670
- Resistencias (10k, 4.7k)
- Jerséis
Software requerido:
- IDE de Arduino
- Lector de puerto serie (para analizar la imagen de salida)
Cosas para recordar sobre el módulo de cámara OV7670
El módulo de cámara OV7670 es un módulo de cámara FIFO disponible de diferentes fabricantes con diferentes configuraciones de pines. El OV7670 proporciona imágenes de 8 bits con ventana y fotograma completo en una amplia gama de formatos. La matriz de imágenes puede funcionar a hasta 30 fotogramas por segundo (fps) en VGA. El OV7670 incluye
- Matriz de sensores de imagen (de aproximadamente 656 x 488 píxeles)
- Generador de tiempo
- Procesador de señales analógicas
- Convertidores A / D
- Generador de patrones de prueba
- Procesador de señal digital (DSP)
- Escalador de imagen
- Puerto de video digital
- Salida de control de flash LED y estroboscópico
El sensor de imagen OV7670 se controla mediante el bus de control de cámara en serie (SCCB), que es una interfaz I2C (SIOC, SIOD) con una frecuencia de reloj máxima de 400 KHz.
La cámara viene con señales de protocolo de enlace como:
- VSYNC: Salida de sincronización vertical: baja durante el cuadro
- HREF: Referencia horizontal: alta durante los píxeles activos de la fila
- PCLK: Salida de reloj de píxeles : reloj de funcionamiento gratuito. Los datos son válidos en el flanco ascendente
Además de esto, tiene varias señales más como
- D0-D7: Salida digital de componente de video YUV / RGB de 8 bits
- PWDN: Selección del modo de apagado: modo normal y modo de apagado
- XCLK: entrada de reloj del sistema
- Restablecer: Restablecer señal
El OV7670 se sincroniza desde un oscilador de 24MHz. Esto da una salida de reloj de píxeles (PCLK) de 24 MHz. El FIFO proporciona 3 Mbps de memoria intermedia de cuadros de video. El generador de patrones de prueba presenta un patrón de barra de color de 8 barras, patrón de barra de color que se desvanece a gris. Ahora comencemos a programar el Arduino UNO para probar la cámara OV7670 y capturar fotogramas usando un lector de puerto serie.
Diagrama de circuito
Programación de Arduino UNO
La programación comienza con la inclusión de la biblioteca necesaria para OV7670. Dado que OV7670 se ejecuta en la interfaz I2C, incluyeDespués de esto, los registros deben modificarse para OV7670. El programa se divide en pequeñas funciones para una mejor comprensión.
La configuración () comprende todas las configuraciones iniciales necesarias solo para la captura de imágenes. La primera función es arduinoUnoInut () que se usa para inicializar el arduino uno. Inicialmente deshabilita todas las interrupciones globales y establece las configuraciones de la interfaz de comunicación como el reloj PWM, selección de pines de interrupción, selección de presclaer, adición de paridad y bits de parada.
ArduinoUnoInut ();
Después de configurar el Arduino, la cámara debe configurarse. Para inicializar la cámara, solo tenemos las opciones para cambiar los valores de registro. Los valores de registro deben cambiarse de los predeterminados a los personalizados. También agregue el retardo requerido dependiendo de la frecuencia del microcontrolador que estemos usando. Como, los microcontroladores lentos tienen menos tiempo de procesamiento, lo que agrega más demora entre la captura de cuadros.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK no cambia en HBLANK. }
La cámara está configurada para tomar una imagen QVGA, por lo que es necesario seleccionar la resolución. La función configura el registro para tomar una imagen QVGA.
setResolution ();
En este tutorial, las imágenes se toman en monocromo, por lo que el valor de registro se establece para generar una imagen monocromática. La función establece los valores de registro de la lista de registros predefinidos en el programa.
setColor ();
La siguiente función es escribir para registrar la función que escribe el valor hexadecimal para registrar. Si obtiene las imágenes codificadas, intente cambiar el segundo término, es decir, 10 a 9/11/12. Pero la mayoría de las veces este valor funciona bien, por lo que no es necesario cambiarlo.
writeReg (0x11, 10);
Esta función se utiliza para obtener el tamaño de resolución de la imagen. En este proyecto estamos tomando fotografías en el tamaño de 320 x 240 píxeles.
captureImg (320, 240);
Aparte de esto, el código también tiene las configuraciones I2C divididas en varias partes. Solo para obtener los datos de la cámara, las configuraciones I2C tienen la función Iniciar, Leer, Escribir, Establecer dirección, que son importantes cuando se usa el protocolo I2C.
Puede encontrar el código completo con un video de demostración al final de este tutorial. Simplemente cargue el código, abra el lector de puerto serie y tome los marcos.
Cómo utilizar el lector de puerto serie para leer imágenes
Serial Port Reader es una GUI simple, descárguela desde aquí. Esto captura la codificación base64 y la decodifica para formar una imagen. Simplemente siga estos sencillos pasos para usar Serial Port ReaderPaso 1: conecte su Arduino a cualquier puerto USB de su PC
Paso 2: Haga clic en "Comprobar" para encontrar su puerto COM de Arduino
Paso 3: Finalmente, haga clic en el botón "Inicio" para comenzar a leer en serie.
Paso 4: También se pueden guardar estas imágenes haciendo clic en "Guardar imagen".
A continuación se muestran imágenes de muestra tomadas del OV7670
Precauciones al utilizar OV7670
- Trate de usar cables o puentes lo más cortos posible
- Evite cualquier contacto suelto con los pines de Arduino u OV7670
- Tenga cuidado con la conexión, ya que una gran cantidad de cables puede provocar un cortocircuito
- Si UNO da una salida de 5V a GPIO, entonces use Level Shifter.
- Use la entrada de 3.3V para OV7670 ya que un voltaje superior a esto puede dañar el módulo OV7670.
Este proyecto se creó para brindar una descripción general del uso de un módulo de cámara con Arduino. Dado que Arduino tiene menos memoria, el procesamiento puede no ser el esperado. Puede usar diferentes controladores que tengan más memoria para procesar.