- Componente necesare
- Lucruri de reținut despre modulul de cameră OV7670
- Diagrama circuitului
- Programare Arduino UNO
- Cum se utilizează Serial Port Reader pentru citirea imaginilor
- Mai jos sunt exemple de imagini preluate de pe OV7670
- Precauții la utilizarea OV7670
Camerele au dominat întotdeauna industria electronică, deoarece are o mulțime de aplicații, cum ar fi sistemul de monitorizare a vizitatorilor, sistemul de supraveghere, sistemul de prezență etc. Camerele pe care le folosim astăzi sunt inteligente și au o mulțime de caracteristici care nu erau prezente în camerele anterioare. În timp ce camerele digitale de astăzi nu doar captează imagini, ci captează și descrieri la nivel înalt ale scenei și analizează ceea ce văd. Este utilizat pe scară largă în robotică, inteligență artificială, învățare automată etc. Cadrele capturate sunt procesate folosind inteligența artificială și învățarea automată și apoi sunt utilizate în multe aplicații precum detectarea plăcilor numerice, detectarea obiectelor, detectarea mișcării, recunoașterea facială etc.
În acest tutorial vom interfața cel mai utilizat modul de cameră OV7670 cu Arduino UNO. Modulul camerei OV7670 poate fi interfațat cu Arduino Mega cu aceeași configurație pin, cod și pași. Modulul camerei este greu de interfațat, deoarece are un număr mare de pini și cabluri amestecate de realizat. De asemenea, firul devine foarte important atunci când se utilizează modulele camerei, deoarece alegerea firului și lungimea firului pot afecta în mod semnificativ calitatea imaginii și pot aduce zgomot.
Am făcut deja proiecte ample pe camere cu diferite tipuri de microcontrolere și dispozitive IoT, cum ar fi:
- Sistem de monitorizare a vizitatorilor cu cameră Raspberry Pi și Pi
- Sistem de securitate la domiciliu Raspberry Pi bazat pe IOT cu alertă prin e-mail
- Cameră de supraveghere Raspberry Pi cu captură de mișcare
Camera OV7670 funcționează pe 3.3V, astfel încât devine foarte importantă pentru a evita Arduino care dă ieșire 5V la ieșire pini lor GPIO. OV7670 este o cameră FIFO. Dar în acest tutorial, imaginea sau cadrele vor fi capturate fără FIFO. Acest tutorial va avea pași simpli și o programare simplificată pentru interfața OV7670 cu Arduino UNO.
Componente necesare
- Arduino UNO
- OV7670 Modul de cameră
- Rezistoare (10k, 4.7k)
- Jumpers
Software necesar:
- IDE Arduino
- Cititor port serial (Pentru a analiza imaginea de ieșire)
Lucruri de reținut despre modulul de cameră OV7670
OV7670 Camera Module este un modul de cameră FIFO disponibil de la diferiți producători cu diferite configurații cu pini. OV7670 oferă imagini pe 8 biți cu cadru complet, cu ferestre, într-o gamă largă de formate. Tabloul de imagini este capabil să funcționeze până la 30 de cadre pe secundă (fps) în VGA. OV7670 include
- Aranjament senzor imagine (de aproximativ 656 x 488 pixeli)
- Generator de sincronizare
- Procesor analogic de semnal
- Convertoare A / D
- Generator de modele de testare
- Procesor de semnal digital (DSP)
- Scaler de imagine
- Port video digital
- Ieșire de control cu bliț LED și stroboscop
Senzorul de imagine OV7670 este controlat folosind Serial Camera Control Bus (SCCB), care este o interfață I2C (SIOC, SIOD) cu o frecvență maximă de ceas de 400KHz.
Camera vine cu semnale de strângere a mâinii, cum ar fi:
- VSYNC: Ieșire de sincronizare verticală - Scăzută în timpul cadrului
- HREF: Referință orizontală - ridicat în timpul pixelilor activi ai rândului
- PCLK: Pixel Clock Output - Ceas de rulare gratuit. Datele sunt valabile în creștere
În plus, are mai multe semnale, cum ar fi
- D0-D7: ieșire digitală componentă video YUV / RGB pe 8 biți
- PWDN: Selectarea modului de oprire - Mod normal și modul de oprire
- XCLK: Intrare ceas sistem
- Resetare: Resetare semnal
OV7670 este tactat de la un oscilator de 24 MHz. Aceasta oferă o ieșire Pixel Clock (PCLK) de 24 MHz. FIFO oferă 3 Mbps de memorie tampon pentru cadre video. Generatorul de modele de testare prezintă un model de bare de culoare cu 8 bare, un model de bară de culoare fade-to-gri. Acum să începem să programăm Arduino UNO pentru testarea camerei OV7670 și pentru apucarea cadrelor folosind cititorul de port serial.
Diagrama circuitului
Programare Arduino UNO
Programarea începe cu includerea bibliotecii necesare necesare pentru OV7670. Deoarece OV7670 rulează pe interfața I2C, acesta includeDupă aceasta, registrele trebuie modificate pentru OV7670. Programul este împărțit în mici funcții pentru o mai bună înțelegere.
Setup () cuprinde toate setările inițiale necesare numai de captură a imaginii. Prima funcție este arduinoUnoInut () care este utilizată pentru a inițializa arduino uno. Inițial, dezactivează toate întreruperile globale și setează configurațiile interfeței de comunicații, cum ar fi ceasul PWM, selecția pinilor de întrerupere, selecția presclaerului, adăugarea de paritate și biți de oprire.
ArduinoUnoInut ();
După configurarea Arduino, camera trebuie configurată. Pentru a inițializa camera, avem doar opțiunile de a modifica valorile registrului. Valorile registrului trebuie schimbate de la valoarea implicită la cea personalizată. Adăugați, de asemenea, întârzierea necesară în funcție de frecvența microcontrolerului pe care o folosim. De asemenea, microcontrolerele lente au un timp de procesare mai mic, adăugând mai multă întârziere între cadrele de captare.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK nu comută pe HBLANK. }
Camera este setată să facă o imagine QVGA, astfel încât să fie selectată rezoluția. Funcția configurează registrul pentru a face o imagine QVGA.
setResolution ();
În acest tutorial, imaginile sunt luate în monocrom, deci valoarea registrului este setată pentru a afișa o imagine monocromă. Funcția setează valorile registrului din lista de registre care este predefinită în program.
setColor ();
Funcția de mai jos este funcția write to register care scrie valoarea hexagonală pentru înregistrare. Dacă obțineți imaginile amestecate, încercați să schimbați al doilea termen, adică 10 - 9/11/12. Dar de cele mai multe ori această valoare funcționează bine, deci nu este nevoie să o modificați.
writeReg (0x11, 10);
Această funcție este utilizată pentru a obține dimensiunea rezoluției imaginii. În acest proiect facem fotografii în mărime de 320 x 240 pixeli.
captureImg (320, 240);
În afară de aceasta, codul are și configurațiile I2C împărțite în mai multe părți. Doar pentru a obține datele de la cameră, configurațiile I2C au funcția Start, Read, Write, Set Address, care sunt importante atunci când se utilizează protocolul I2C.
Puteți găsi codul complet cu un videoclip demonstrativ la sfârșitul acestui tutorial. Încărcați codul și deschideți Serial Port Reader și apucați cadrele.
Cum se utilizează Serial Port Reader pentru citirea imaginilor
Serial Port Reader este un GUI simplu, descărcați-l de aici. Aceasta captează codificarea base64 și o decodifică pentru a forma o imagine. Urmați acești pași simpli pentru a utiliza Serial Port ReaderPasul 1: Conectați-vă Arduino la orice port USB al computerului
Pasul 2: Faceți clic pe „Verificați” pentru a găsi portul Arduino COM
Pasul 3: În cele din urmă, faceți clic pe butonul „Start” pentru a începe citirea în serie.
Pasul 4: Se pot salva aceste imagini făcând doar clic pe „Salvare imagine”.
Mai jos sunt exemple de imagini preluate de pe OV7670
Precauții la utilizarea OV7670
- Încercați să utilizați fire sau jumperi cât mai scurte posibil
- Evitați orice contact liber la orice pini de pe Arduino sau OV7670
- Aveți grijă la conectare, deoarece un număr mare de cabluri poate duce la scurtcircuit
- Dacă UNO dă ieșire de 5V la GPIO, atunci utilizați Level Shifter.
- Utilizați intrarea de 3,3 V pentru OV7670, deoarece tensiunea depășind acest lucru poate deteriora modulul OV7670.
Acest proiect este creat pentru a oferi o imagine de ansamblu asupra utilizării unui modul de cameră cu Arduino. Deoarece Arduino are mai puțină memorie, este posibil ca procesarea să nu fie așa cum era de așteptat. Puteți utiliza diferite controlere care au mai multă memorie pentru procesare.