- Komponenter, der kræves
- Ting at huske ved kameramodul OV7670
- Kredsløbsdiagram
- Programmering Arduino UNO
- Sådan bruges Serial Port Reader til læsning af billeder
- Nedenfor er eksempler på billeder taget fra OV7670
- Forholdsregler ved brug af OV7670
Kameraer har altid domineret elektronikindustrien, da det har mange applikationer såsom besøgendeovervågningssystem, overvågningssystem, tilstedeværelsessystem osv. Kameraer, som vi bruger i dag, er smarte og har mange funktioner, der ikke var til stede i tidligere kameraer. Mens dagens digitale kameraer ikke kun tager billeder, men også fanger beskrivelser på højt niveau af scenen og analyserer, hvad de ser. Det bruges i vid udstrækning i robotteknologi, kunstig intelligens, maskinindlæring osv. De indfangede rammer behandles ved hjælp af kunstig intelligens og maskinindlæring og bruges derefter i mange applikationer som nummerpladedetektering, objektdetektion, bevægelsesdetektering, ansigtsgenkendelse osv
I denne vejledning vil vi interface det mest anvendte kameramodul OV7670 med Arduino UNO. Kameramodulet OV7670 kan forbindes med Arduino Mega med samme pin-konfiguration, kode og trin. Kameramodulet er svært at interface, fordi det har et stort antal stifter og sammenblandede ledninger, der skal udføres. Ledningen bliver også meget vigtig, når du bruger kameramoduler, da valget af ledning og ledningens længde kan påvirke billedkvaliteten betydeligt og kan medføre støj.
Vi har allerede lavet rigelige projekter på kameraer med forskellige slags mikrocontrollere og IoT-enheder såsom:
- Besøgsovervågningssystem med Raspberry Pi og Pi Camera
- IOT-baseret Raspberry Pi Home Security System med e-mail-alarm
- Raspberry Pi-overvågningskamera med Motion Capture
Den Kamera OV7670 værker på 3.3V, så det bliver meget vigtigt at undgå Arduino som giver 5V output ved deres Output GPIO pins. OV7670 er et FIFO-kamera. Men i denne vejledning bliver billedet eller rammerne taget uden FIFO. Denne vejledning har enkle trin og forenklet programmering til interface OV7670 med Arduino UNO.
Komponenter, der kræves
- Arduino UNO
- OV7670 kameramodul
- Modstande (10k, 4,7k)
- Jumpere
Nødvendig software:
- Arduino IDE
- Seriel portlæser (til analyse af outputbillede)
Ting at huske ved kameramodul OV7670
OV7670 kameramodul er et FIFO-kameramodul, der fås fra forskellige producenter med forskellige pin-konfigurationer. TheOV7670 giver 8-bit billeder med fuld ramme, vinduer i en bred vifte af formater. Billedarrayet kan fungere med op til 30 billeder pr. Sekund (fps) i VGA. OV7670 inkluderer
- Billedsensorarray (på ca. 656 x 488 pixels)
- Timing Generator
- Analog signalprocessor
- A / D-konvertere
- Testmønstergenerator
- Digital signalprocessor (DSP)
- Billedskaler
- Digital videoport
- LED og strobe flash kontrol output
OV7670-billedsensoren styres ved hjælp af Serial Camera Control Bus (SCCB), som er en I2C-grænseflade (SIOC, SIOD) med en maksimal tidsfrekvens på 400 KHz.
Kameraet leveres med håndtrykssignaler som:
- VSYNC: Lodret synkroniseringsoutput - Lav under ramme
- HREF: Horisontal reference - Høj under aktive pixels i række
- PCLK: Pixel Clock Output - Gratis kørende ur. Data er gyldige ved stigende kant
Ud over dette har den flere flere signaler som f.eks
- D0-D7: 8-bit YUV / RGB videokomponent digital udgang
- PWDN: Valg af slukningstilstand - Normal tilstand og Sluk-tilstand
- XCLK: System Clock Input
- Nulstil: Nulstil signal
OV7670 er uret fra en 24MHz oscillator. Dette giver et Pixel Clock (PCLK) output på 24MHz. FIFO giver 3 Mbps hukommelse til videobillede. Testmønstergeneratoren har 8-bar farvelinjemønster, fade-til-grå farvemønster. Lad os nu begynde at programmere Arduino UNO til test af kamera OV7670 og gribe rammer ved hjælp af seriel portlæser.
Kredsløbsdiagram
Programmering Arduino UNO
Programmeringen starter med at inkludere det nødvendige bibliotek, der er nødvendigt for OV7670. Da OV7670 kører på I2C-interface, inkluderer denHerefter skal registre ændres til OV7670. Programmet er opdelt i små funktioner for bedre forståelse.
Den Setup () omfatter alle de indledende opsætninger, der kræves for kun billedoptagelse. Den første funktion er arduinoUnoInut (), som bruges til at initialisere arduino uno. Oprindeligt deaktiverer det alle globale afbrydelser og indstiller kommunikationsinterfacekonfigurationerne, såsom PWM-uret, valg af afbrydestifter, presclaer-valg, tilføjelse af paritet og stopbits.
ArduinoUnoInut ();
Efter konfiguration af Arduino skal kameraet konfigureres. For at initialisere kameraet har vi kun mulighederne for at ændre registerværdierne. Registerværdierne skal ændres fra standard til brugerdefineret. Tilføj også den nødvendige forsinkelse afhængigt af den mikrocontrollerfrekvens, vi bruger. Som langsom mikrokontrollere har mindre behandlingstid og tilføjer mere forsinkelse mellem optagelsesrammer.
ugyldigt camInit (ugyldigt) { writeReg (0x12, 0x80); _forsink_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK skifter ikke til HBLANK. }
Kameraet er indstillet til at tage et QVGA-billede, så opløsningen skal vælges. Funktionen konfigurerer registret til at tage et QVGA-billede.
setResolution ();
I denne vejledning tages billederne i monokrom, så registerværdien er indstillet til at udsende et monokromt billede. Funktionen indstiller registerværdierne fra registerlisten, som er foruddefineret i programmet.
setColor ();
Nedenstående funktion er skriv til register-funktion, der skriver den hex-værdi, der skal registreres. Hvis du får de krypterede billeder, så prøv at ændre den anden periode dvs. 10 til 9/11/12. Men det meste af tiden fungerer denne værdi fint, så det er ikke nødvendigt at ændre den.
skrivReg (0x11, 10);
Denne funktion bruges til at få størrelsen på billedopløsningen. I dette projekt tager vi billeder i størrelsen 320 x 240 pixels.
captureImg (320, 240);
Bortset fra dette har koden også I2C-konfigurationerne opdelt i flere dele. Bare for at hente data fra kameraet har I2C-konfigurationerne Start, Læs, Skriv, Indstil adresse-funktion, som er vigtige, når du bruger I2C-protokol.
Du kan finde den komplette kode med en demonstrationsvideo i slutningen af denne vejledning. Upload bare koden, og åbn den serielle portlæser, og tag fat i rammerne.
Sådan bruges Serial Port Reader til læsning af billeder
Serial Port Reader er en simpel GUI, download den herfra. Dette fanger base64-kodningen og afkoder den for at danne et billede. Følg disse enkle trin for at bruge Serial Port ReaderTrin 1: Tilslut din Arduino til en hvilken som helst USB-port på din pc
Trin 2: Klik på "Check" for at finde din Arduino COM-port
Trin 3: Klik endelig på "Start" -knappen for at begynde at læse serielt.
Trin 4: Man kan også gemme disse billeder ved blot at klikke på "Gem billede".
Nedenfor er eksempler på billeder taget fra OV7670
Forholdsregler ved brug af OV7670
- Prøv at bruge ledninger eller jumpere så korte som muligt
- Undgå enhver løs kontakt med stifter på Arduino eller OV7670
- Vær forsigtig med at tilslutte, da et stort antal ledninger kan føre til kortslutning
- Hvis UNO giver 5V output til GPIO, skal du bruge Level Shifter.
- Brug 3.3V-indgang til OV7670, som overstiger spænding, end dette kan beskadige OV7670-modulet.
Dette projekt er oprettet for at give et overblik over brugen af et kameramodul med Arduino. Da Arduino har mindre hukommelse, er behandlingen muligvis ikke som forventet. Du kan bruge forskellige controllere, der har mere hukommelse til behandling.