- Wymagane składniki
- Rzeczy, o których należy pamiętać o module kamery OV7670
- Schemat obwodu
- Programowanie Arduino UNO
- Jak używać czytnika portu szeregowego do czytania obrazów
- Poniżej znajdują się przykładowe obrazy pobrane z OV7670
- Środki ostrożności podczas korzystania z OV7670
Kamery zawsze dominowały w przemyśle elektronicznym, ponieważ mają wiele zastosowań, takich jak system monitorowania gości, system nadzoru, system obecności itp. Kamery, których używamy dzisiaj, są inteligentne i mają wiele funkcji, których nie było we wcześniejszych aparatach. Współczesne aparaty cyfrowe nie tylko rejestrują obrazy, ale także przechwytują opisy sceny na wysokim poziomie i analizują to, co widzą. Jest szeroko stosowany w robotyce, sztucznej inteligencji, uczeniu maszynowym itp. Przechwycone klatki są przetwarzane przy użyciu sztucznej inteligencji i uczenia maszynowego, a następnie wykorzystywane w wielu zastosowaniach, takich jak wykrywanie tablic rejestracyjnych, wykrywanie obiektów, wykrywanie ruchu, rozpoznawanie twarzy itp.
W tym samouczku połączymy najczęściej używany moduł kamery OV7670 z Arduino UNO. Moduł kamery OV7670 może być połączony z Arduino Mega z tą samą konfiguracją pinów, kodem i krokami. Interfejs modułu kamery jest trudny, ponieważ ma dużą liczbę pinów i poplątane okablowanie do wykonania. Również drut staje się bardzo ważny podczas używania modułów kamery, ponieważ wybór przewodu i długości przewodu może znacząco wpłynąć na jakość obrazu i może powodować zakłócenia.
Zrobiliśmy już wiele projektów dotyczących kamer z różnymi rodzajami mikrokontrolerów i urządzeń IoT, takich jak:
- System monitorowania gości z Raspberry Pi i kamerą Pi
- Domowy system bezpieczeństwa Raspberry Pi oparty na IOT z alertem e-mail
- Kamera monitorująca Raspberry Pi z funkcją Motion Capture
Camera OV7670 działa na 3.3V, więc staje się bardzo ważne, aby uniknąć Arduino, który daje wyjście 5V przy ich produkcji pinów GPIO. OV7670 to kamera FIFO. Ale w tym samouczku obraz lub ramki zostaną przechwycone bez FIFO. Ten samouczek będzie zawierał proste kroki i uproszczone programowanie w celu połączenia OV7670 z Arduino UNO.
Wymagane składniki
- Arduino UNO
- Moduł kamery OV7670
- Rezystory (10k, 4,7k)
- Zworki
Wymagane oprogramowanie:
- Arduino IDE
- Czytnik portu szeregowego (do analizy obrazu wyjściowego)
Rzeczy, o których należy pamiętać o module kamery OV7670
Moduł kamery OV7670 to moduł kamery FIFO dostępny od różnych producentów z różnymi konfiguracjami pinów. OV7670 zapewnia pełnoklatkowe, 8-bitowe obrazy z okienkami w szerokiej gamie formatów. Macierz obrazów może działać z prędkością do 30 klatek na sekundę (fps) w VGA. OV7670 zawiera
- Matryca czujnika obrazu (około 656 x 488 pikseli)
- Generator rozrządu
- Procesor sygnału analogowego
- Przetworniki A / D
- Generator wzorców testowych
- Cyfrowy procesor sygnału (DSP)
- Image Scaler
- Cyfrowy port wideo
- Wyjście sterujące diodą LED i błyskiem stroboskopowym
Czujnik obrazu OV7670 jest sterowany za pomocą magistrali szeregowej sterowania kamerami (SCCB), która jest interfejsem I2C (SIOC, SIOD) o maksymalnej częstotliwości taktowania 400 kHz.
Kamera jest wyposażona w sygnały uzgadniania, takie jak:
- VSYNC: Wyjście synchronizacji pionowej - niskie podczas ramki
- HREF: Odniesienie poziome - wysokie podczas aktywnych pikseli wiersza
- PCLK: Wyjście zegara pikseli - wolny zegar. Dane są ważne na zboczu narastającym
Oprócz tego ma kilka innych sygnałów, takich jak
- D0-D7: 8-bitowe wyjście cyfrowe YUV / RGB Component Video
- PWDN: Wybór trybu wyłączenia - tryb normalny i tryb wyłączenia
- XCLK: wejście zegara systemowego
- Reset: Reset sygnału
OV7670 jest taktowany z oscylatora 24 MHz. Daje to wyjście Pixel Clock (PCLK) o częstotliwości 24 MHz. FIFO zapewnia 3 Mb / s pamięci bufora klatek wideo. Generator wzorca testowego zawiera 8-słupkowy wzór pasków kolorów, wzór słupków koloru przechodzącego do szarego. Teraz zacznijmy programować Arduino UNO do testowania kamery OV7670 i pobierania ramek za pomocą czytnika portu szeregowego.
Schemat obwodu
Programowanie Arduino UNO
Programowanie rozpoczyna się od dołączenia wymaganej biblioteki niezbędnej dla OV7670. Ponieważ OV7670 działa na interfejsie I2C, zawieraNastępnie rejestry należy zmodyfikować dla OV7670. Program jest podzielony na małe funkcje dla lepszego zrozumienia.
Konfiguracji () obejmuje wszystkie wstępnych ustawień wymagany tylko robienia zdjęć. Pierwszą funkcją jest arduinoUnoInut (), która służy do inicjalizacji arduino uno. Początkowo wyłącza wszystkie globalne przerwania i ustawia konfiguracje interfejsu komunikacyjnego, takie jak zegar PWM, wybór pinów przerwania, wybór presklera, dodanie parzystości i bitów stopu.
ArduinoUnoInut ();
Po skonfigurowaniu Arduino należy skonfigurować kamerę. Aby zainicjować kamerę, mamy tylko opcje zmiany wartości rejestrów. Wartości rejestrów należy zmienić z domyślnych na niestandardowe. Dodaj również wymagane opóźnienie w zależności od częstotliwości mikrokontrolera, którego używamy. Ponieważ wolne mikrokontrolery mają krótszy czas przetwarzania, co zwiększa opóźnienie między przechwytywaniem klatek.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK nie przełącza się na HBLANK. }
Aparat jest ustawiony na robienie zdjęć QVGA, więc należy wybrać rozdzielczość. Funkcja konfiguruje rejestr do wykonywania obrazu QVGA.
setResolution ();
W tym samouczku obrazy są robione w trybie monochromatycznym, więc wartość rejestru jest ustawiona na wyświetlanie obrazu monochromatycznego. Funkcja ustawia wartości rejestrów z listy rejestrów, która jest predefiniowana w programie.
setColor ();
Poniższa funkcja to funkcja zapisu do rejestru, która zapisuje wartość szesnastkową do rejestru. Jeśli masz zaszyfrowane obrazy, spróbuj zmienić drugi termin, tj. 10 na 9/11/12. Ale przez większość czasu ta wartość działa dobrze, więc nie trzeba jej zmieniać.
writeReg (0x11, 10);
Ta funkcja służy do uzyskania rozmiaru rozdzielczości obrazu. W tym projekcie wykonujemy zdjęcia w rozmiarze 320 x 240 pikseli.
captureImg (320, 240);
Poza tym kod ma również konfiguracje I2C podzielone na kilka części. Aby uzyskać dane z kamery, konfiguracje I2C mają funkcje Start, Read, Write, Set Address, które są ważne podczas korzystania z protokołu I2C.
Kompletny kod można znaleźć wraz z filmem demonstracyjnym na końcu tego samouczka. Po prostu prześlij kod, otwórz czytnik portu szeregowego i złap ramki.
Jak używać czytnika portu szeregowego do czytania obrazów
Czytnik portów szeregowych to prosty interfejs graficzny, pobierz go stąd. To przechwytuje kodowanie base64 i dekoduje go w celu utworzenia obrazu. Wystarczy wykonać te proste kroki, aby użyć czytnika portów szeregowychKrok 1: Podłącz Arduino do dowolnego portu USB komputera
Krok 2: Kliknij „Sprawdź”, aby znaleźć swój port COM Arduino
Krok 3: Na koniec kliknij przycisk „Start”, aby rozpocząć czytanie seryjne.
Krok 4: Można również zapisać te zdjęcia, klikając „Zapisz zdjęcie”.
Poniżej znajdują się przykładowe obrazy pobrane z OV7670
Środki ostrożności podczas korzystania z OV7670
- Staraj się używać jak najkrótszych przewodów lub zworek
- Unikaj luźnego kontaktu z jakimikolwiek pinami w Arduino lub OV7670
- Zachowaj ostrożność podczas podłączania, ponieważ duża liczba przewodów może prowadzić do zwarcia
- Jeśli UNO daje wyjście 5 V do GPIO, użyj przełącznika poziomu.
- Użyj wejścia 3,3 V dla OV7670, ponieważ przekroczenie napięcia może uszkodzić moduł OV7670.
Ten projekt ma na celu przedstawienie przeglądu korzystania z modułu kamery z Arduino. Ponieważ Arduino ma mniej pamięci, przetwarzanie może nie przebiegać zgodnie z oczekiwaniami. Możesz użyć różnych kontrolerów, które mają więcej pamięci do przetwarzania.