- Componenten vereist
- Dingen om te onthouden over cameramodule OV7670
- Schakelschema
- Programmeren van Arduino UNO
- Seriële poortlezer gebruiken om afbeeldingen te lezen
- Hieronder staan voorbeeldafbeeldingen van de OV7670
- Voorzorgsmaatregelen bij gebruik OV7670
Camera's hebben altijd de elektronica-industrie gedomineerd omdat deze veel toepassingen heeft, zoals bezoekersbewakingssysteem, bewakingssysteem, aanwezigheidssysteem enz. Camera's die we tegenwoordig gebruiken zijn slim en hebben veel functies die niet aanwezig waren in eerdere camera's. Terwijl de huidige digitale camera's niet alleen beelden vastleggen, maar ook hoogwaardige beschrijvingen van de scène vastleggen en analyseren wat ze zien. Het wordt op grote schaal gebruikt in robotica, kunstmatige intelligentie, machinaal leren enz. De vastgelegde frames worden verwerkt met behulp van kunstmatige intelligentie en machinaal leren, en vervolgens gebruikt in vele toepassingen zoals nummerplaatdetectie, objectdetectie, bewegingsdetectie, gezichtsherkenning etc.
In deze tutorial zullen we de meest gebruikte cameramodule OV7670 koppelen aan Arduino UNO. De cameramodule OV7670 kan worden gekoppeld aan Arduino Mega met dezelfde pinconfiguratie, code en stappen. De cameramodule is moeilijk te koppelen omdat deze een groot aantal pinnen en verwarde bedrading heeft om uit te voeren. Ook wordt de draad erg belangrijk bij het gebruik van cameramodules, aangezien de keuze van de draad en de lengte van de draad de beeldkwaliteit aanzienlijk kan beïnvloeden en ruis kan veroorzaken.
We hebben al uitgebreide projecten gedaan op camera's met verschillende soorten microcontrollers en IoT-apparaten, zoals:
- Bezoekersbewakingssysteem met Raspberry Pi en Pi-camera
- IOT-gebaseerd Raspberry Pi-huisbeveiligingssysteem met e-mailwaarschuwing
- Raspberry Pi-bewakingscamera met bewegingsopname
De Camera OV7670 werkt op 3.3V, dus het wordt erg belangrijk om Arduino te vermijden die 5V output geeft op hun Output GPIO-pinnen. De OV7670 is een FIFO-camera. Maar in deze zelfstudie worden de afbeelding of kaders zonder FIFO gepakt. Deze tutorial bevat eenvoudige stappen en vereenvoudigd programmeren om OV7670 te koppelen aan Arduino UNO.
Componenten vereist
- Arduino UNO
- OV7670 cameramodule
- Weerstanden (10k, 4.7k)
- Truien
Software vereist:
- Arduino IDE
- Seriële poortlezer (om het uitvoerbeeld te analyseren)
Dingen om te onthouden over cameramodule OV7670
OV7670 Cameramodule is een FIFO-cameramodule die verkrijgbaar is bij verschillende fabrikanten met verschillende pinconfiguraties. TheOV7670 biedt full-frame, windowed 8-bit afbeeldingen in een breed scala aan formaten. De beeldarray kan werken met maximaal 30 frames per seconde (fps) in VGA. De OV7670 bevat
- Image Sensor Array (van ongeveer 656 x 488 pixels)
- Timing-generator
- Analoge signaalprocessor
- A / D-omvormers
- Testpatroongenerator
- Digitale signaalprocessor (DSP)
- Afbeelding scaler
- Digitale videopoort
- Uitgang voor LED- en stroboscoopflitser
De OV7670-beeldsensor wordt aangestuurd via Serial Camera Control Bus (SCCB), een I2C-interface (SIOC, SIOD) met een maximale klokfrequentie van 400 KHz.
De camera wordt geleverd met handshaking-signalen zoals:
- VSYNC: Verticale synchronisatie-uitvoer - Laag tijdens frame
- HREF: Horizontale referentie - Hoog tijdens actieve pixels van rij
- PCLK: Pixel Clock Output - Vrijlopende klok. Gegevens zijn geldig bij stijgende flank
Daarnaast heeft het nog verschillende signalen, zoals
- D0-D7: 8-bit YUV / RGB Video Component digitale uitgang
- PWDN: Selectie Power Down Mode - Normale modus en Power Down-modus
- XCLK: System Clock Input
- Reset: Reset signaal
De OV7670 wordt geklokt door een 24 MHz oscillator. Dit geeft een Pixel Clock (PCLK) output van 24 MHz. De FIFO biedt 3 Mbps videoframe-buffergeheugen. De testpatroongenerator is voorzien van een 8-balk kleurenbalkpatroon, vervagend naar grijs kleurbalkpatroon. Laten we nu beginnen met het programmeren van de Arduino UNO voor het testen van Camera OV7670 en het vastleggen van frames met de seriële poortlezer.
Schakelschema
Programmeren van Arduino UNO
Het programmeren begint met het opnemen van de benodigde bibliotheek die nodig is voor OV7670. Omdat OV7670 op I2C-interface draait, bevat hetHierna moeten de registers worden aangepast voor OV7670. Het programma is onderverdeeld in kleine functies voor een beter begrip.
De Setup () bevat alle initiële instellingen die nodig zijn om alleen afbeeldingen vast te leggen. De eerste functie is arduinoUnoInut () die wordt gebruikt om de arduino uno te initialiseren. In eerste instantie worden alle globale interrupts uitgeschakeld en worden de communicatie-interfaceconfiguraties ingesteld, zoals de PWM-klok, selectie van interruptpinnen, selectie van preslaer, toevoegen van pariteit en stopbits.
ArduinoUnoInut ();
Na het configureren van de Arduino moet de camera worden geconfigureerd. Om de camera te initialiseren hebben we alleen de mogelijkheid om de registerwaarden te wijzigen. De registerwaarden moeten worden gewijzigd van standaard naar aangepast. Voeg ook de vereiste vertraging toe, afhankelijk van de microcontrollerfrequentie die we gebruiken. Omdat langzame microcontrollers minder verwerkingstijd hebben, is er meer vertraging tussen het vastleggen van frames.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK schakelt HBLANK niet in. }
De camera is ingesteld om een QVGA-afbeelding te maken, dus de resolutie moet worden geselecteerd. De functie configureert het register om een QVGA-afbeelding te maken.
setResolution ();
In deze zelfstudie worden de afbeeldingen in zwart-wit gemaakt, dus de registerwaarde is ingesteld om een monochrome afbeelding uit te voeren. De functie stelt de registerwaarden in vanuit de registerlijst die vooraf is gedefinieerd in het programma.
setColor ();
De onderstaande functie is de functie schrijven naar register die de hexadecimale waarde schrijft om te registreren. Als u de gecodeerde afbeeldingen krijgt, probeer dan de tweede term, dwz 10, te wijzigen in 9/11/12. Maar meestal werkt deze waarde prima, dus u hoeft deze niet te wijzigen.
writeReg (0x11, 10);
Deze functie wordt gebruikt om de grootte van de beeldresolutie te verkrijgen. In dit project maken we foto's in de grootte van 320 x 240 pixels.
captureImg (320, 240);
Anders dan dit, heeft de code ook de I2C-configuraties verdeeld in verschillende delen. Om de gegevens van de camera te krijgen, hebben de I2C-configuraties de functie Start, Lezen, Schrijven en Adres instellen, die belangrijk zijn bij het gebruik van het I2C-protocol.
Aan het einde van deze tutorial vindt u de volledige code met een demonstratievideo. Upload gewoon de code en open de seriële poortlezer en pak de frames.
Seriële poortlezer gebruiken om afbeeldingen te lezen
Serial Port Reader is een eenvoudige GUI, download deze hier. Dit legt de base64-codering vast en decodeert deze om een afbeelding te vormen. Volg deze eenvoudige stappen om Serial Port Reader te gebruikenStap 1: Sluit uw Arduino aan op een USB-poort van uw pc
Stap 2: Klik op "Check" om uw Arduino COM-poort te vinden
Stap 3: Klik ten slotte op de knop "Start" om serieel te lezen.
Stap 4: Men kan deze foto's ook opslaan door simpelweg op "Afbeelding opslaan" te klikken.
Hieronder staan voorbeeldafbeeldingen van de OV7670
Voorzorgsmaatregelen bij gebruik OV7670
- Probeer zo kort mogelijke draden of jumpers te gebruiken
- Vermijd los contact met pinnen op de Arduino of OV7670
- Wees voorzichtig bij het aansluiten, aangezien een groot aantal bedrading kortsluiting kan veroorzaken
- Als de UNO 5V-uitvoer aan GPIO geeft, gebruik dan Level Shifter.
- Gebruik 3.3V Input voor OV7670 aangezien het overschrijden van de spanning de OV7670 module kan beschadigen.
Dit project is gemaakt om een overzicht te geven van het gebruik van een cameramodule met Arduino. Omdat Arduino minder geheugen heeft, is de verwerking mogelijk niet zoals verwacht. U kunt verschillende controllers gebruiken die meer geheugen hebben voor verwerking.