- Erforderliche Komponenten
- Dinge, die Sie beim Kameramodul OV7670 beachten sollten
- Schaltplan
- Programmieren von Arduino UNO
- Verwendung des Serial Port Readers zum Lesen von Bildern
- Unten finden Sie Beispielbilder aus dem OV7670
- Vorsichtsmaßnahmen bei der Verwendung von OV7670
Kameras haben die Elektronikindustrie schon immer dominiert, da sie viele Anwendungen wie Besucherüberwachungssysteme, Überwachungssysteme, Anwesenheitssysteme usw. haben. Kameras, die wir heute verwenden, sind intelligent und verfügen über viele Funktionen, die in früheren Kameras nicht vorhanden waren. Während heutige Digitalkameras nicht nur Bilder erfassen, sondern auch allgemeine Beschreibungen der Szene erfassen und analysieren, was sie sehen. Es wird häufig in der Robotik, der künstlichen Intelligenz, dem maschinellen Lernen usw. verwendet. Die erfassten Bilder werden mithilfe der künstlichen Intelligenz und des maschinellen Lernens verarbeitet und dann in vielen Anwendungen wie der Kennzeichenerkennung, Objekterkennung, Bewegungserkennung, Gesichtserkennung usw. verwendet.
In diesem Tutorial werden wir das am häufigsten verwendete Kameramodul OV7670 mit Arduino UNO verbinden. Das Kameramodul OV7670 kann mit der gleichen Pin-Konfiguration, dem gleichen Code und den gleichen Schritten an Arduino Mega angeschlossen werden. Das Kameramodul ist schwer anzuschließen, da es eine große Anzahl von Stiften und durcheinandergebrachten Kabeln aufweist. Auch das Kabel wird bei der Verwendung von Kameramodulen sehr wichtig, da die Wahl des Kabels und die Länge des Kabels die Bildqualität erheblich beeinträchtigen und Rauschen verursachen können.
Wir haben bereits zahlreiche Projekte für Kameras mit verschiedenen Arten von Mikrocontrollern und IoT-Geräten durchgeführt, z.
- Besucherüberwachungssystem mit Raspberry Pi und Pi Kamera
- IOT-basiertes Raspberry Pi Home Security System mit E-Mail-Benachrichtigung
- Raspberry Pi Überwachungskamera mit Motion Capture
Die Kamera OV7670 arbeitet mit 3,3 V, daher ist es sehr wichtig, Arduino zu vermeiden, das an den GPIO-Ausgangs-Pins 5 V-Ausgang liefert. Die OV7670 ist eine FIFO-Kamera. In diesem Tutorial werden die Bilder oder Bilder jedoch ohne FIFO aufgenommen. Dieses Tutorial enthält einfache Schritte und eine vereinfachte Programmierung für die Schnittstelle von OV7670 mit Arduino UNO.
Erforderliche Komponenten
- Arduino UNO
- OV7670 Kameramodul
- Widerstände (10k, 4,7k)
- Jumper
Erforderliche Software:
- Arduino IDE
- Serial Port Reader (Zur Analyse des Ausgabebilds)
Dinge, die Sie beim Kameramodul OV7670 beachten sollten
Das OV7670-Kameramodul ist ein FIFO-Kameramodul, das von verschiedenen Herstellern mit unterschiedlichen Pin-Konfigurationen erhältlich ist. TheOV7670 bietet 8-Bit-Bilder mit Vollbild und Fenster in einer Vielzahl von Formaten. Das Bildarray kann mit bis zu 30 Bildern pro Sekunde (fps) in VGA betrieben werden. Der OV7670 enthält
- Bildsensor-Array (von ungefähr 656 x 488 Pixel)
- Timing-Generator
- Analoger Signalprozessor
- A / D-Wandler
- Testmustergenerator
- Digitaler Signalprozessor (DSP)
- Bildskalierer
- Digitaler Videoanschluss
- LED- und Strobe-Flash-Steuerausgang
Der Bildsensor OV7670 wird über den Serial Camera Control Bus (SCCB) gesteuert, eine I2C-Schnittstelle (SIOC, SIOD) mit einer maximalen Taktfrequenz von 400 kHz.
Die Kamera verfügt über Handshake-Signale wie:
- VSYNC: Vertikaler Synchronisationsausgang - Niedrig während des Frames
- HREF: Horizontale Referenz - Hoch während aktiver Pixel der Zeile
- PCLK: Pixel Clock Output - Freilaufende Uhr. Daten sind bei steigender Flanke gültig
Darüber hinaus hat es mehrere weitere Signale wie
- D0-D7: 8-Bit-Digitalausgang für YUV / RGB-Videokomponenten
- PWDN: Auswahl des Ausschaltmodus - Normalmodus und Ausschaltmodus
- XCLK: Systemtakteingang
- Zurücksetzen: Signal zurücksetzen
Der OV7670 wird von einem 24-MHz-Oszillator getaktet. Dies ergibt einen Pixel Clock (PCLK) -Ausgang von 24 MHz. Das FIFO bietet 3 Mbit / s Videobildpufferspeicher. Der Testmustergenerator verfügt über ein 8-Balken-Farbbalkenmuster und ein Farbbalkenmuster. Beginnen wir nun mit der Programmierung des Arduino UNO zum Testen der Kamera OV7670 und zum Erfassen von Frames mithilfe eines Lesegeräts für die serielle Schnittstelle.
Schaltplan
Programmieren von Arduino UNO
Die Programmierung beginnt mit der Aufnahme der für OV7670 erforderlichen Bibliothek. Da OV7670 auf der I2C-Schnittstelle ausgeführt wird, enthält esDanach müssen die Register für OV7670 geändert werden. Das Programm ist zum besseren Verständnis in kleine Funktionen unterteilt.
Das Setup () enthält alle anfänglichen Setups, die nur für die Bildaufnahme erforderlich sind. Die erste Funktion ist arduinoUnoInut (), mit der das arduino uno initialisiert wird. Zu Beginn werden alle globalen Interrupts deaktiviert und die Kommunikationsschnittstellenkonfigurationen wie PWM-Takt, Auswahl der Interrupt-Pins, Auswahl des Presclaers, Hinzufügen von Paritäts- und Stoppbits festgelegt.
ArduinoUnoInut ();
Nach der Konfiguration des Arduino muss die Kamera konfiguriert werden. Um die Kamera zu initialisieren, haben wir nur die Möglichkeit, die Registerwerte zu ändern. Die Registerwerte müssen vom Standard auf den benutzerdefinierten Wert geändert werden. Fügen Sie außerdem die erforderliche Verzögerung hinzu, abhängig von der von uns verwendeten Mikrocontrollerfrequenz. Langsame Mikrocontroller haben weniger Verarbeitungszeit, was zu einer längeren Verzögerung zwischen den Aufnahmebildern führt.
void camInit (void) { writeReg (0x12, 0x80); Verzögerung (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK schaltet HBLANK nicht um. }}
Die Kamera ist so eingestellt, dass sie ein QVGA-Bild aufnimmt, daher muss die Auflösung ausgewählt werden. Die Funktion konfiguriert das Register für die Aufnahme eines QVGA-Bildes.
setResolution ();
In diesem Lernprogramm werden die Bilder in Schwarzweiß aufgenommen, sodass der Registerwert so eingestellt ist, dass ein Schwarzweißbild ausgegeben wird. Die Funktion setzt die Registerwerte aus der im Programm vordefinierten Registerliste.
setColor ();
Die folgende Funktion ist eine Funktion zum Schreiben in das Register, die den zu registrierenden Hex-Wert schreibt. Wenn Sie die verschlüsselten Bilder erhalten, versuchen Sie, den zweiten Term, dh 10, auf 9/11/12 zu ändern. Meistens funktioniert dieser Wert jedoch einwandfrei, sodass Sie ihn nicht ändern müssen.
writeReg (0x11, 10);
Diese Funktion wird verwendet, um die Bildauflösungsgröße zu ermitteln. In diesem Projekt machen wir Bilder in der Größe von 320 x 240 Pixel.
CaptureImg (320, 240);
Abgesehen davon enthält der Code auch die I2C-Konfigurationen, die in mehrere Teile unterteilt sind. Um die Daten von der Kamera abzurufen, verfügen die I2C-Konfigurationen über die Funktionen Start, Lesen, Schreiben, Adresse festlegen, die bei Verwendung des I2C-Protokolls wichtig sind.
Den vollständigen Code mit einem Demonstrationsvideo finden Sie am Ende dieses Tutorials. Laden Sie einfach den Code hoch, öffnen Sie den Serial Port Reader und greifen Sie nach den Frames.
Verwendung des Serial Port Readers zum Lesen von Bildern
Serial Port Reader ist eine einfache Benutzeroberfläche. Laden Sie sie hier herunter. Dadurch wird die Base64-Codierung erfasst und dekodiert, um ein Bild zu erstellen. Befolgen Sie einfach diese einfachen Schritte, um den Serial Port Reader zu verwendenSchritt 1: Schließen Sie Ihr Arduino an einen beliebigen USB-Anschluss Ihres PCs an
Schritt 2: Klicken Sie auf "Überprüfen", um Ihren Arduino COM-Anschluss zu finden
Schritt 3: Klicken Sie abschließend auf die Schaltfläche „Start“, um mit dem seriellen Lesen zu beginnen.
Schritt 4: Sie können diese Bilder auch speichern, indem Sie einfach auf „Bild speichern“ klicken.
Unten finden Sie Beispielbilder aus dem OV7670
Vorsichtsmaßnahmen bei der Verwendung von OV7670
- Versuchen Sie, so kurze Drähte oder Jumper wie möglich zu verwenden
- Vermeiden Sie losen Kontakt mit Stiften von Arduino oder OV7670
- Seien Sie vorsichtig beim Anschließen, da eine große Anzahl von Kabeln zu einem Kurzschluss führen kann
- Wenn das UNO GPIO mit 5 V versorgt, verwenden Sie den Level Shifter.
- Verwenden Sie den 3,3-V-Eingang für OV7670, da eine Überschreitung der Spannung das OV7670-Modul beschädigen kann.
Dieses Projekt wurde erstellt, um einen Überblick über die Verwendung eines Kameramoduls mit Arduino zu geben. Da Arduino weniger Speicher hat, ist die Verarbeitung möglicherweise nicht wie erwartet. Sie können verschiedene Controller verwenden, die mehr Speicher für die Verarbeitung haben.