- Componentes necessários
- Coisas para lembrar sobre o módulo de câmera OV7670
- Diagrama de circuito
- Programando Arduino UNO
- Como usar o leitor de porta serial para ler imagens
- Abaixo estão imagens de amostra tiradas do OV7670
- Precauções ao usar OV7670
As câmeras sempre dominaram a indústria de eletrônicos, pois têm muitas aplicações, como sistema de monitoramento de visitantes, sistema de vigilância, sistema de atendimento, etc. As câmeras que usamos hoje são inteligentes e têm muitos recursos que não estavam presentes nas câmeras anteriores. Enquanto as câmeras digitais de hoje não apenas capturam imagens, mas também capturam descrições de alto nível da cena e analisam o que veem. É amplamente utilizado em Robótica, Inteligência Artificial, Aprendizado de Máquina, etc. Os quadros capturados são processados usando Inteligência Artificial e Aprendizado de Máquina, e então usados em muitas aplicações como detecção de Placa de Número, detecção de objeto, detecção de movimento, reconhecimento facial etc.
Neste tutorial, faremos a interface do módulo de câmera OV7670 mais usado com o Arduino UNO. O módulo de câmera OV7670 pode ser conectado ao Arduino Mega com a mesma configuração de pinos, código e etapas. O módulo da câmera é de difícil interface porque tem um grande número de pinos e fiação desordenada para realizar. Além disso, o fio se torna muito importante ao usar módulos de câmera, pois a escolha do fio e o comprimento do fio podem afetar significativamente a qualidade da imagem e podem gerar ruído.
Já realizamos diversos projetos em câmeras com diferentes tipos de microcontroladores e dispositivos IoT, como:
- Sistema de monitoramento de visitantes com câmera Raspberry Pi e Pi
- Sistema de segurança residencial Raspberry Pi baseado em IOT com alerta de e-mail
- Câmera de vigilância Raspberry Pi com captura de movimento
A câmera OV7670 funciona em 3,3V, por isso é muito importante evitar o Arduino, que oferece saída de 5V em seus pinos GPIO de saída. O OV7670 é uma câmera FIFO. Mas neste tutorial, a imagem ou quadros serão capturados sem FIFO. Este tutorial terá etapas simples e programação simplificada para fazer a interface do OV7670 com o Arduino UNO.
Componentes necessários
- Arduino UNO
- Módulo de câmera OV7670
- Resistores (10k, 4,7k)
- Jumpers
Software necessário:
- IDE Arduino
- Leitor de porta serial (para analisar a imagem de saída)
Coisas para lembrar sobre o módulo de câmera OV7670
O módulo de câmera OV7670 é um módulo de câmera FIFO disponível em diferentes fabricantes com diferentes configurações de pinos. OOV7670 fornece imagens de 8 bits em janela full frame em uma ampla variedade de formatos. A matriz de imagem é capaz de operar em até 30 quadros por segundo (fps) em VGA. O OV7670 inclui
- Matriz do sensor de imagem (de cerca de 656 x 488 pixels)
- Gerador de tempo
- Processador de Sinal Analógico
- Conversores A / D
- Gerador de padrão de teste
- Processador de sinal digital (DSP)
- Image Scaler
- Porta de vídeo digital
- Saída de controle de LED e flash estroboscópico
O sensor de imagem OV7670 é controlado usando o Serial Camera Control Bus (SCCB), que é uma interface I2C (SIOC, SIOD) com uma freqüência máxima de clock de 400KHz.
A câmera vem com sinais de handshaking, como:
- VSYNC: Saída de sincronização vertical - baixa durante o quadro
- HREF: Referência horizontal - alta durante os pixels ativos da linha
- PCLK: Pixel Clock Output - Relógio de execução livre. Os dados são válidos na borda ascendente
Além disso, tem vários outros sinais, como
- D0-D7: Saída Digital Componente de Vídeo YUV / RGB de 8 bits
- PWDN: Seleção do modo de desligamento - modo normal e modo de desligamento
- XCLK: entrada do relógio do sistema
- Reiniciar: Reiniciar Sinal
O OV7670 tem a freqüência de um oscilador de 24 MHz. Isso dá uma saída de Clock de Pixel (PCLK) de 24MHz. O FIFO fornece 3 Mbps de memória buffer de quadro de vídeo. O gerador de padrão de teste possui padrão de barra de cores de 8 barras e padrão de barra de cores de esmaecimento para cinza. Agora vamos começar a programar o Arduino UNO para testar a câmera OV7670 e capturar quadros usando o leitor de porta serial.
Diagrama de circuito
Programando Arduino UNO
A programação começa com a inclusão da biblioteca necessária para o OV7670. Uma vez que OV7670 é executado na interface I2C, incluiDepois disso, os registros precisam ser modificados para OV7670. O programa está dividido em pequenas funções para melhor compreensão.
O Setup () compreende todas as configurações iniciais necessárias para apenas a captura de imagens. A primeira função é arduinoUnoInut () que é usada para inicializar o arduino uno. Inicialmente desabilita todas as interrupções globais e define as configurações da interface de comunicação como o relógio PWM, seleção de pinos de interrupção, seleção de presclaer, adição de paridade e bits de parada.
ArduinoUnoInut ();
Após configurar o Arduino, a câmera deve ser configurada. Para inicializar a câmera, só temos as opções para alterar os valores do registro. Os valores de registro precisam ser alterados do padrão para o personalizado. Adicione também o atraso necessário dependendo da frequência do microcontrolador que estamos usando. Como, microcontroladores lentos têm menos tempo de processamento, adicionando mais atraso entre os quadros de captura.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK não alterna em HBLANK. }
A câmera está configurada para tirar uma imagem QVGA, portanto, a resolução precisa ser selecionada. A função configura o registro para obter uma imagem QVGA.
setResolution ();
Neste tutorial, as imagens são tiradas em monocromático, portanto, o valor do registro é definido para produzir uma imagem monocromática. A função define os valores de registro da lista de registro que é predefinida no programa.
setColor ();
A função abaixo é escrita para registrar a função que escreve o valor hexadecimal para registrar. Se você obtiver as imagens embaralhadas, tente alterar o segundo termo, ou seja, 10 para 11/09/12. Mas na maioria das vezes esse valor funciona bem, então não há necessidade de alterá-lo.
writeReg (0x11, 10);
Esta função é usada para obter o tamanho da resolução da imagem. Neste projeto estamos tirando fotos no tamanho de 320 x 240 pixels.
captureImg (320, 240);
Além disso, o código também possui as configurações I2C divididas em várias partes. Apenas para obter os dados da câmera, as configurações I2C possuem as funções Iniciar, Ler, Gravar e Definir Endereço, que são importantes ao usar o protocolo I2C.
Você pode encontrar o código completo com um vídeo de demonstração no final deste tutorial. Basta fazer o upload do código e abrir o leitor de porta serial e pegar os frames.
Como usar o leitor de porta serial para ler imagens
O Serial Port Reader é uma GUI simples, faça o download aqui. Isso captura a codificação base64 e a decodifica para formar uma imagem. Basta seguir estas etapas simples para usar o leitor de porta serialEtapa 1: Conecte seu Arduino a qualquer porta USB do seu PC
Etapa 2: Clique em “Verificar” para encontrar a porta COM do Arduino
Passo 3: Por fim, clique no botão “Iniciar” para começar a ler em série.
Passo 4: Também é possível salvar essas fotos clicando em “Salvar foto”.
Abaixo estão imagens de amostra tiradas do OV7670
Precauções ao usar OV7670
- Tente usar fios ou jumpers o mais curto possível
- Evite qualquer contato frouxo com quaisquer pinos no Arduino ou OV7670
- Tenha cuidado ao conectar, pois um grande número de fiação pode causar curto-circuito
- Se o UNO fornece 5 V de saída para GPIO, use o Level Shifter.
- Use a entrada de 3,3 V para OV7670, pois a tensão excedente pode danificar o módulo OV7670.
Este projeto foi criado para dar uma visão geral do uso de um módulo de câmera com o Arduino. Como o Arduino tem menos memória, o processamento pode não ser o esperado. Você pode usar controladores diferentes que têm mais memória para processamento.