- Componenti richiesti
- Cose da ricordare sul modulo fotocamera OV7670
- Schema elettrico
- Programmazione di Arduino UNO
- Come utilizzare Serial Port Reader per leggere le immagini
- Di seguito sono riportate immagini di esempio prese dall'OV7670
- Precauzioni durante l'utilizzo di OV7670
Le telecamere hanno sempre dominato l'industria elettronica in quanto ha molte applicazioni come il sistema di monitoraggio dei visitatori, il sistema di sorveglianza, il sistema di presenza ecc. Le telecamere che usiamo oggi sono intelligenti e hanno molte caratteristiche che non erano presenti nelle telecamere precedenti. Mentre le fotocamere digitali di oggi non solo catturano immagini, ma acquisiscono anche descrizioni di alto livello della scena e analizzano ciò che vedono. È ampiamente utilizzato in robotica, intelligenza artificiale, apprendimento automatico, ecc.
In questo tutorial interfacciamo il modulo fotocamera OV7670 più utilizzato con Arduino UNO. Il modulo fotocamera OV7670 può essere interfacciato con Arduino Mega con la stessa configurazione dei pin, codice e passaggi. Il modulo della telecamera è difficile da interfacciare perché ha un gran numero di pin e cavi confusi da eseguire. Anche il cavo diventa molto importante quando si utilizzano i moduli della telecamera poiché la scelta del cavo e la lunghezza del cavo possono influire in modo significativo sulla qualità dell'immagine e possono portare rumore.
Abbiamo già realizzato ampi progetti su fotocamere con diversi tipi di microcontrollori e dispositivi IoT come:
- Sistema di monitoraggio dei visitatori con Raspberry Pi e fotocamera Pi
- Sistema di sicurezza domestica Raspberry Pi basato su IOT con avviso e-mail
- Telecamera di sorveglianza Raspberry Pi con Motion Capture
La fotocamera OV7670 funziona a 3,3 V, quindi diventa molto importante evitare Arduino che fornisce un'uscita a 5 V ai pin GPIO di uscita. La OV7670 è una fotocamera FIFO. Ma in questo tutorial, l'immagine o le cornici verranno acquisite senza FIFO. Questo tutorial avrà semplici passaggi e programmazione semplificata per interfacciare OV7670 con Arduino UNO.
Componenti richiesti
- Arduino UNO
- Modulo fotocamera OV7670
- Resistori (10k, 4.7k)
- Ponticelli
Software richiesto:
- IDE Arduino
- Serial Port Reader (per analizzare l'immagine di output)
Cose da ricordare sul modulo fotocamera OV7670
Il modulo telecamera OV7670 è un modulo telecamera FIFO disponibile da diversi produttori con diverse configurazioni dei pin. L'OV7670 fornisce immagini full frame a 8 bit con finestra in un'ampia gamma di formati. L'array di immagini è in grado di funzionare fino a 30 fotogrammi al secondo (fps) in VGA. L'OV7670 include
- Array di sensori di immagine (di circa 656 x 488 pixel)
- Generatore di temporizzazione
- Processore di segnale analogico
- Convertitori A / D
- Generatore di modelli di prova
- Processore di segnale digitale (DSP)
- Image Scaler
- Porta video digitale
- Uscita di controllo flash LED e strobo
Il sensore di immagine OV7670 è controllato tramite Serial Camera Control Bus (SCCB) che è un'interfaccia I2C (SIOC, SIOD) con una frequenza di clock massima di 400 KHz.
La fotocamera è dotata di segnali di handshake come:
- VSYNC: Uscita sincronizzazione verticale - Bassa durante il frame
- HREF: Riferimento orizzontale - Alto durante i pixel attivi della riga
- PCLK: Pixel Clock Output - Orologio in esecuzione gratuito. I dati sono validi sul fronte di salita
Oltre a questo, ha molti altri segnali come
- D0-D7: uscita digitale componente video YUV / RGB a 8 bit
- PWDN: Selezione della modalità di spegnimento - Modalità normale e modalità di spegnimento
- XCLK: ingresso orologio di sistema
- Ripristina: Ripristina segnale
L'OV7670 ha un clock da un oscillatore a 24 MHz. Ciò fornisce un'uscita Pixel Clock (PCLK) di 24 MHz. Il FIFO fornisce 3Mbps di memoria frame buffer video. Il generatore di modelli di prova presenta un motivo a barre di colore a 8 barre, un motivo a barre di colore sfumato in grigio. Ora iniziamo a programmare Arduino UNO per testare la fotocamera OV7670 e catturare i frame utilizzando il lettore della porta seriale.
Schema elettrico
Programmazione di Arduino UNO
La programmazione inizia con l' inclusione della libreria richiesta necessaria per OV7670. Poiché OV7670 funziona sull'interfaccia I2C, includeSuccessivamente, i registri devono essere modificati per OV7670. Il programma è suddiviso in piccole funzioni per una migliore comprensione.
Il Setup () comprende tutte le impostazioni iniziali richiesti solo per la cattura delle immagini. La prima funzione è arduinoUnoInut () che viene utilizzata per inizializzare arduino uno. Inizialmente disabilita tutti gli interrupt globali e imposta le configurazioni dell'interfaccia di comunicazione come il clock PWM, la selezione dei pin di interrupt, la selezione del presclaer, l'aggiunta di parità e di bit di stop.
ArduinoUnoInut ();
Dopo aver configurato Arduino, la telecamera deve essere configurata. Per inizializzare la telecamera, abbiamo solo le opzioni per modificare i valori di registro. I valori del registro devono essere modificati da quello predefinito a quello personalizzato. Aggiungere anche il ritardo richiesto a seconda della frequenza del microcontrollore che stiamo utilizzando. Come, i microcontrollori lenti hanno meno tempo di elaborazione aggiungendo più ritardo tra l'acquisizione di fotogrammi.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK non si attiva HBLANK. }
La fotocamera è impostata per acquisire un'immagine QVGA, quindi è necessario selezionare la risoluzione. La funzione configura il registro per acquisire un'immagine QVGA.
setResolution ();
In questo tutorial, le immagini vengono scattate in bianco e nero, quindi il valore del registro è impostato per produrre un'immagine monocromatica. La funzione imposta i valori dei registri dall'elenco dei registri predefinito nel programma.
setColor ();
La seguente funzione è la funzione di scrittura nel registro che scrive il valore esadecimale nel registro. Se ottieni le immagini criptate, prova a cambiare il secondo termine, cioè 10 in 9/11/12. Ma la maggior parte delle volte questo valore funziona bene, quindi non è necessario modificarlo.
writeReg (0x11, 10);
Questa funzione viene utilizzata per ottenere la dimensione della risoluzione dell'immagine. In questo progetto stiamo scattando foto nella dimensione di 320 x 240 pixel.
captureImg (320, 240);
Oltre a questo, il codice ha anche le configurazioni I2C divise in più parti. Solo per ottenere i dati dalla telecamera, le configurazioni I2C hanno le funzioni Start, Read, Write, Set Address che sono importanti quando si utilizza il protocollo I2C.
Puoi trovare il codice completo con un video dimostrativo alla fine di questo tutorial. Basta caricare il codice e aprire il lettore di porte seriali e prendere i frame.
Come utilizzare Serial Port Reader per leggere le immagini
Serial Port Reader è una semplice GUI, scaricala da qui. Questo acquisisce la codifica base64 e la decodifica per formare un'immagine. Segui questi semplici passaggi per utilizzare Serial Port ReaderPassaggio 1: collega il tuo Arduino a qualsiasi porta USB del tuo PC
Passaggio 2: fare clic su "Verifica" per trovare la porta COM di Arduino
Passaggio 3: infine fare clic sul pulsante "Start" per avviare la lettura in serie.
Passaggio 4: è anche possibile salvare queste immagini facendo clic su "Salva immagine".
Di seguito sono riportate immagini di esempio prese dall'OV7670
Precauzioni durante l'utilizzo di OV7670
- Cerca di utilizzare fili o ponticelli il più corti possibile
- Evita qualsiasi contatto allentato con i pin su Arduino o OV7670
- Fare attenzione al collegamento poiché un numero elevato di cavi può causare cortocircuiti
- Se UNO fornisce 5 V in uscita a GPIO, utilizzare Level Shifter.
- Utilizzare l'ingresso 3,3 V per OV7670 poiché una tensione superiore a questa può danneggiare il modulo OV7670.
Questo progetto è stato creato per fornire una panoramica sull'utilizzo di un modulo fotocamera con Arduino. Poiché Arduino ha meno memoria, l'elaborazione potrebbe non essere quella prevista. È possibile utilizzare diversi controller che hanno più memoria per l'elaborazione.