- Potrebne komponente
- Stvari, ki si jih je treba zapomniti glede modula kamere OV7670
- Shema vezja
- Programiranje Arduino UNO
- Kako uporabljati bralnik serijskih vrat za branje slik
- Spodaj so vzorčne slike, posnete z OV7670
- Previdnostni ukrepi pri uporabi OV7670
Kamere so vedno prevladovale v elektronski industriji, saj ima veliko aplikacij, kot so sistem za spremljanje obiskovalcev, nadzorni sistem, sistem za obisk itd. Kamere, ki jih danes uporabljamo, so pametne in imajo veliko funkcij, ki jih v prejšnjih kamerah ni bilo. Medtem ko današnji digitalni fotoaparati ne zajemajo samo slik, temveč tudi zajemajo opise scene na visoki ravni in analizirajo, kar vidijo. Veliko se uporablja v robotiki, umetni inteligenci, strojnem učenju itd. Zajeti okvirji se obdelujejo z uporabo umetne inteligence in strojnega učenja, nato pa se uporabljajo v številnih aplikacijah, kot so zaznavanje registrske tablice, zaznavanje predmetov, zaznavanje obrazov itd.
V tej vadnici bomo najbolj pogosto uporabljani modul kamere OV7670 povezovali z Arduino UNO. Modul kamere OV7670 je mogoče povezati z Arduino Mega z enako konfiguracijo pinov, kodo in koraki. Modul kamere je težko vmesniški, ker ima veliko število nožic in napeljanih kablov. Tudi žica postane zelo pomembna pri uporabi modulov kamere, saj lahko izbira žice in dolžina žice bistveno vplivata na kakovost slike in lahko povzroči hrup.
Na kamerah smo že izvedli veliko projektov z različnimi vrstami mikrokrmilnikov in naprav IoT, kot so:
- Sistem za spremljanje obiskovalcev s kamero Raspberry Pi in Pi
- Domači varnostni sistem Raspberry Pi na osnovi IOT z e-poštnim opozorilom
- Nadzorna kamera Raspberry Pi z zajemom gibanja
Kamera OV7670 dela na 3.3V, tako da postane zelo pomembno, da bi se izognili Arduino, ki daje 5V izhod na svojih izhodnih GPIO sponk. OV7670 je kamera FIFO. Toda v tej vadnici bodo slika ali okvirji zajeti brez FIFO. Ta vadnica bo imela preproste korake in poenostavljeno programiranje za povezovanje OV7670 z Arduino UNO.
Potrebne komponente
- Arduino UNO
- Modul kamere OV7670
- Upori (10k, 4,7k)
- Skakalci
Potrebna programska oprema:
- Arduino IDE
- Čitalnik serijskih vrat (za analizo izhodne slike)
Stvari, ki si jih je treba zapomniti glede modula kamere OV7670
Modul kamere OV7670 je modul kamere FIFO, ki je na voljo pri različnih proizvajalcih z različnimi konfiguracijami pinov. TheOV7670 ponuja 8-bitne slike s polnim okvirjem in okni v različnih oblikah. Slikovno polje lahko deluje s hitrostjo do 30 sličic na sekundo (fps) v VGA. OV7670 vključuje
- Niz slikovnih senzorjev (približno 656 x 488 slikovnih pik)
- Časovni generator
- Analogni procesor signala
- A / D pretvorniki
- Generator preizkusnih vzorcev
- Digitalni procesor signala (DSP)
- Skeler za slike
- Vrata za digitalni video
- Izhod za nadzor bliskavice LED in Strobe
Slikovni senzor OV7670 se krmili s pomočjo serijske vodilne kamere (SCCB), ki je vmesnik I2C (SIOC, SIOD) z največjo urno frekvenco 400KHz.
Kamera ima signale za rokovanje, kot so:
- VSYNC: Izhod za navpično sinhronizacijo - nizek med kadrom
- HREF: vodoravna referenca - visoka med aktivnimi slikovnimi pikami vrstice
- PCLK: Izhod ure pikslov - prosta ura. Podatki veljajo na naraščajočem robu
Poleg tega ima še več signalov, kot so
- D0-D7: 8-bitni digitalni izhod YUV / RGB video komponent
- PWDN: izbira načina izklopa - običajni način in način izklopa
- XCLK: Vnos sistemske ure
- Ponastavi: ponastavi signal
OV7670 deluje na 24MHz oscilatorju. To daje izhodno uro Pixel Clock (PCLK) 24MHz. FIFO zagotavlja 3Mbps medpomnilnika video okvirja. Generator testnih vzorcev ima 8-barvni vzorec barvnih vzorcev, barvno vzorček zbledi do sive barve. Zdaj začnimo s programiranjem Arduino UNO za testiranje kamere OV7670 in zajem okvirjev s pomočjo bralnika serijskih vrat.
Shema vezja
Programiranje Arduino UNO
Programiranje se začne z vključitvijo potrebne knjižnice, potrebne za OV7670. Ker OV7670 deluje na vmesniku I2C, vključujePo tem je treba registre spremeniti za OV7670. Program je za boljše razumevanje razdeljen na majhne funkcije.
Setup () zajema vse začetne postavitve potrebne samo za zajemanje slike. Prva funkcija je arduinoUnoInut (), ki se uporablja za inicializiranje arduino uno. Sprva onemogoči vse globalne prekinitve in nastavi konfiguracije komunikacijskega vmesnika, kot so ura PWM, izbira prekinitvenih zatičev, izbira predsklada, dodajanje paritetnih in zaustavitvenih bitov.
ArduinoUnoInut ();
Po konfiguraciji Arduina je treba konfigurirati kamero. Za inicializacijo fotoaparata imamo samo možnosti spreminjanja vrednosti registra. Vrednosti registra je treba spremeniti iz privzetih v po meri. Dodajte tudi potrebno zakasnitev, odvisno od frekvence mikrokrmilnika, ki jo uporabljamo. Kot počasni mikrokrmilniki imajo manj časa obdelave in večjo zakasnitev med zajemanjem okvirjev.
void camInit (void) { writeReg (0x12, 0x80); _zakasnitev_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK ne preklopi na HBLANK. }
Fotoaparat je nastavljen tako, da posname sliko QVGA, zato je treba izbrati ločljivost. Funkcija konfigurira register tako, da posname sliko QVGA.
setResolution ();
V tej vadnici so slike posnete v enobarvni obliki, zato je vrednost registra nastavljena tako, da izpiše enobarvno sliko. Funkcija nastavi vrednosti registra s seznama registra, ki je vnaprej določen v programu.
setColor ();
Spodnja funkcija je funkcija za zapis v register, ki zapisuje šestnajstiško vrednost za registracijo. Če dobite kodirane slike, poskusite spremeniti drugi izraz, tj. 10 na 9/11/12. Toda večina časa ta vrednost deluje v redu, zato je ni treba spreminjati.
writeReg (0x11, 10);
Ta funkcija se uporablja za določanje ločljivosti slike. V tem projektu fotografiramo v velikosti 320 x 240 slikovnih pik.
captureImg (320, 240);
Poleg tega ima koda tudi konfiguracije I2C, razdeljene na več delov. Konfiguracije I2C imajo za začetek, branje, pisanje, nastavitev naslova funkcije, ki so pomembne pri uporabi protokola I2C, samo za pridobitev podatkov iz kamere.
Celotno kodo najdete s predstavitvenim videoposnetkom na koncu te vadnice. Samo naložite kodo in odprite bralnik serijskih vrat in primite okvirje.
Kako uporabljati bralnik serijskih vrat za branje slik
Čitalnik serijskih vrat je preprost GUI, prenesite ga od tukaj. To zajame kodiranje base64 in ga dekodira, da tvori sliko. Za uporabo bralnika serijskih vrat sledite tem preprostim korakom1. korak: Arduino priključite na katera koli vrata USB v računalniku
2. korak: Kliknite »Preveri«, da poiščete vrata Arduino COM
3. korak: Na koncu kliknite gumb »Start«, da začnete serijsko brati.
4. korak: Slike lahko shranite tudi s klikom na "Shrani sliko".
Spodaj so vzorčne slike, posnete z OV7670
Previdnostni ukrepi pri uporabi OV7670
- Poskusite uporabiti čim krajše žice ali mostičke
- Izogibajte se stiku z zatiči na Arduinu ali OV7670
- Bodite previdni pri priključitvi, saj lahko veliko število ožičenja povzroči kratek stik
- Če UNO daje 5-voltni izhod GPIO, uporabite Level Shifter.
- Uporabite 3,3 V vhod za OV7670, saj preseganje napetosti lahko poškoduje modul OV7670.
Ta projekt je ustvarjen za pregled uporabe modula kamere z Arduinom. Ker ima Arduino manj pomnilnika, obdelava morda ne bo v skladu s pričakovanji. Za obdelavo lahko uporabite različne krmilnike, ki imajo več pomnilnika.