- Komponenter krävs
- Saker att komma ihåg om kameramodul OV7670
- Kretsschema
- Programmering Arduino UNO
- Hur man använder Serial Port Reader för att läsa bilder
- Nedan är exempel på bilder tagna från OV7670
- Försiktighetsåtgärder vid användning av OV7670
Kameror har alltid dominerat elektronikindustrin eftersom det har många applikationer som besökarövervakningssystem, övervakningssystem, närvarosystem etc. Kameror som vi använder idag är smarta och har många funktioner som inte fanns i tidigare kameror. Medan dagens digitala kameror inte bara tar bilder utan också fångar högnivåbeskrivningar av scenen och analyserar vad de ser. Den används i stor utsträckning inom robotik, artificiell intelligens, maskininlärning etc. De fångade ramarna bearbetas med artificiell intelligens och maskininlärning och används sedan i många applikationer som nummerplåtsdetektering, objektdetektering, rörelsedetektering, ansiktsigenkänning etc.
I denna handledning kommer vi att gränssnitt mest använda kameramodul OV7670 med Arduino UNO. Kameramodulen OV7670 kan anslutas till Arduino Mega med samma stiftkonfiguration, kod och steg. Kameramodulen är svår att koppla ihop eftersom den har ett stort antal stift och rörliga ledningar att genomföra. Tråden blir också mycket viktig när du använder kameramoduler eftersom valet av tråd och trådens längd kan påverka bildkvaliteten avsevärt och kan ge brus.
Vi har redan gjort stora projekt på kameror med olika typer av mikrokontroller och IoT-enheter som:
- Visitor Monitoring System med Raspberry Pi och Pi Camera
- IOT-baserat Raspberry Pi Home Security System med e-postvarning
- Raspberry Pi övervakningskamera med Motion Capture
Den Camera OV7670 fungerar på 3.3V, så det blir mycket viktigt att undvika Arduino vilket ger 5V utgång vid sin produktion GPIO stift. OV7670 är en FIFO-kamera. Men i denna handledning kommer bilden eller ramarna att tas utan FIFO. Denna handledning kommer att ha enkla steg och förenklad programmering för att gränssnitt OV7670 med Arduino UNO.
Komponenter krävs
- Arduino UNO
- OV7670 kameramodul
- Motstånd (10k, 4,7k)
- Tröjor
Programvara som krävs:
- Arduino IDE
- Seriell portläsare (för att analysera utmatningsbilden)
Saker att komma ihåg om kameramodul OV7670
OV7670 Kameramodul är en FIFO-kameramodul tillgänglig från olika tillverkare med olika stiftkonfigurationer. TheOV7670 ger 8-bitarsbilder i fullformat, fönster i ett brett spektrum av format. Bildmatrisen kan arbeta med upp till 30 bilder per sekund (fps) i VGA. OV7670 inkluderar
- Bildsensorarray (med cirka 656 x 488 pixlar)
- Timing Generator
- Analog signalprocessor
- A / D-omvandlare
- Testmönstergenerator
- Digital signalprocessor (DSP)
- Bildskalare
- Digital videoport
- LED och Strobe Flash Control Output
OV7670-bildsensorn styrs med Serial Camera Control Bus (SCCB) som är ett I2C-gränssnitt (SIOC, SIOD) med en maximal klockfrekvens på 400 KHz.
Kameran levereras med handskakningssignaler som:
- VSYNC: Vertikal synkroniseringsutgång - Låg under bild
- HREF: Horisontell referens - Hög under aktiva pixlar i raden
- PCLK: Pixel Clock Output - Gratis klocka. Data är giltiga på stigande kant
Utöver detta har den flera fler signaler som
- D0-D7: 8-bitars YUV / RGB videokomponent digital utgång
- PWDN: Val av avstängningsläge - normalt läge och avstängningsläge
- XCLK: System Clock Input
- Återställ: Återställ signal
OV7670 är klockad från en 24MHz oscillator. Detta ger en Pixel Clock (PCLK) -utgång på 24MHz. FIFO tillhandahåller 3 Mbps videoram buffertminne. Testmönstergeneratorn har 8-stapels färgmönster, blek-till-grå färgmönster. Låt oss nu börja programmera Arduino UNO för att testa kamera OV7670 och ta tag i ramar med hjälp av serieportläsare.
Kretsschema
Programmering Arduino UNO
Programmeringen börjar med att inkludera nödvändigt bibliotek som behövs för OV7670. Eftersom OV7670 körs på I2C-gränssnitt inkluderar denEfter detta måste registren ändras för OV7670. Programmet är uppdelat i små funktioner för bättre förståelse.
Den Setup () omfattar alla de ursprungliga inställningar som krävs för endast bild fånga. Den första funktionen är arduinoUnoInut () som används för att initialisera arduino uno. Ursprungligen inaktiverar den alla globala avbrott och ställer in kommunikationsgränssnittskonfigurationer såsom PWM-klocka, val av avbrottsstift, presclaer-val, lägg till paritet och stoppbitar.
ArduinoUnoInut ();
Efter att ha konfigurerat Arduino måste kameran konfigureras. För att initialisera kameran har vi bara möjlighet att ändra registervärdena. Registervärdena måste ändras från standard till anpassad. Lägg också till nödvändig fördröjning beroende på den mikrokontrollerfrekvens vi använder. Som långsamma mikrokontroller har mindre bearbetningstid vilket ger mer fördröjning mellan att fånga ramar.
ogiltig camInit (ogiltig) { writeReg (0x12, 0x80); _fördröja_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK växlar inte på HBLANK. }
Kameran är inställd på att ta en QVGA-bild så att upplösningen måste väljas. Funktionen konfigurerar registret för att ta en QVGA-bild.
setResolution ();
I denna handledning tas bilderna i svartvitt, så registervärdet är inställt för att mata ut en svartvit bild. Funktionen ställer in registervärdena från registerlistan som är fördefinierad i programmet.
setColor ();
Funktionen nedan är skriv till registerfunktion som skriver hex-värdet för att registrera. Om du får de krypterade bilderna kan du försöka ändra den andra termen, dvs. 10 till 9/11/12. Men för det mesta fungerar det här värdet bra så du behöver inte ändra det.
skrivReg (0x11, 10);
Denna funktion används för att få upplösningens storlek. I det här projektet tar vi bilder i storleken 320 x 240 pixlar.
captureImg (320, 240);
Annat än detta har koden också I2C-konfigurationerna uppdelade i flera delar. Bara för att få data från kameran har I2C-konfigurationerna Start, Läs, Skriv, Ange adressfunktion som är viktiga när du använder I2C-protokollet.
Du hittar den fullständiga koden med en demonstrationsvideo i slutet av denna handledning. Ladda bara upp koden och öppna Serial Port Reader och ta tag i ramarna.
Hur man använder Serial Port Reader för att läsa bilder
Serial Port Reader är en enkel GUI, ladda ner den härifrån. Detta fångar base64-koden och avkodar den för att bilda en bild. Följ bara dessa enkla steg för att använda Serial Port ReaderSteg 1: Anslut din Arduino till vilken USB-port som helst på din dator
Steg 2: Klicka på "Kontrollera" för att hitta din Arduino COM-port
Steg 3: Klicka äntligen på "Start" -knappen för att börja läsa i serie.
Steg 4: Man kan också spara dessa bilder genom att bara klicka på "Spara bild".
Nedan är exempel på bilder tagna från OV7670
Försiktighetsåtgärder vid användning av OV7670
- Försök att använda ledningar eller byglar så korta som möjligt
- Undvik lös kontakt med stiften på Arduino eller OV7670
- Var försiktig när du ansluter, eftersom ett stort antal ledningar kan leda till kortslutning
- Om UNO ger 5V-utgång till GPIO, använd sedan Level Shifter.
- Använd 3.3V-ingång för OV7670 som överskrider spänningen än detta kan skada OV7670-modulen.
Detta projekt är skapat för att ge en översikt över hur du använder en kameramodul med Arduino. Eftersom Arduino har mindre minne kan det hända att behandlingen inte är som förväntat. Du kan använda olika styrenheter som har mer minne för bearbetning.