- Gerekli Bileşenler
- Kamera Modülü OV7670 Hakkında Hatırlanması Gerekenler
- Devre şeması
- Arduino UNO'nun Programlanması
- Görüntüleri Okumak İçin Seri Port Okuyucu Nasıl Kullanılır
- OV7670'ten Alınan Örnek Görüntüler aşağıdadır
- OV7670 kullanırken alınacak önlemler
Kameralar, ziyaretçi izleme sistemi, gözetleme sistemi, katılım sistemi vb. Birçok uygulamaya sahip olduğu için elektronik endüstrisine her zaman hakim olmuştur. Bugün kullandığımız kameralar akıllıdır ve önceki kameralarda bulunmayan birçok özelliğe sahiptir. Günümüzün dijital kameraları yalnızca görüntüleri yakalamakla kalmaz, aynı zamanda sahnenin üst düzey tanımlarını da yakalar ve gördüklerini analiz eder. Robotik, Yapay Zeka, Makine Öğrenimi vb. Alanlarda yaygın olarak kullanılır. Yakalanan çerçeveler, Yapay Zeka ve Makine Öğrenimi kullanılarak işlenir ve ardından Plaka algılama, nesne algılama, hareket algılama, yüz tanıma vb. Gibi birçok uygulamada kullanılır.
Bu eğitimde en yaygın kullanılan kamera modülü OV7670 ile Arduino UNO arasında arayüz oluşturacağız. Kamera modülü OV7670, aynı pin konfigürasyonu, kodu ve adımları ile Arduino Mega ile arayüzlenebilir. Kamera modülünün arabirimi zordur çünkü çok sayıda pime ve gerçekleştirilmesi gereken karışık kablolara sahiptir. Ayrıca, telin seçimi ve telin uzunluğu resim kalitesini önemli ölçüde etkileyebileceği ve parazite neden olabileceği için kamera modülleri kullanılırken kablo çok önemli hale gelir.
Farklı türden Mikrodenetleyiciler ve IoT Cihazları ile Kameralar üzerinde çok sayıda proje yaptık, örneğin:
- Raspberry Pi ve Pi Kameralı Ziyaretçi İzleme Sistemi
- E-posta Uyarısı ile IOT tabanlı Raspberry Pi Ev Güvenlik Sistemi
- Hareket Yakalamalı Raspberry Pi Gözetleme Kamerası
Kamera OV7670 3.3V ile ilgili çalışmalar, onların Çıktı GPIO pinlere 5V çıkış verir Arduino önlemek için çok önemsiz hale gelmesi. OV7670 bir FIFO kameradır. Ancak bu eğitimde, resim veya çerçeveler FIFO olmadan alınacaktır. Bu eğitimde, OV7670 ile Arduino UNO arasında arayüz oluşturmak için basit adımlar ve basitleştirilmiş programlama olacaktır.
Gerekli Bileşenler
- Arduino UNO
- OV7670 Kamera Modülü
- Dirençler (10k, 4.7k)
- Süveter
Gerekli Yazılım:
- Arduino IDE
- Seri Port Okuyucu (Çıktı Görüntüsünü analiz etmek için)
Kamera Modülü OV7670 Hakkında Hatırlanması Gerekenler
OV7670 Kamera Modülü, farklı üreticilerin farklı pin Yapılandırmalarına sahip bir FIFO kamera Modülüdür. TheOV7670, çok çeşitli formatlarda tam çerçeve, pencereli 8 bit görüntüler sağlar. Görüntü dizisi, VGA'da saniyede 30 kareye (fps) kadar çalışabilir. OV7670 şunları içerir:
- Görüntü Sensör Dizisi (yaklaşık 656 x 488 piksel)
- Zamanlama Üreteci
- Analog Sinyal İşlemci
- A / D Dönüştürücüler
- Test Modeli Oluşturucu
- Dijital Sinyal İşlemci (DSP)
- Görüntü Ölçekleyici
- Dijital Video Bağlantı Noktası
- LED ve Strobe Flaş Kontrol Çıkışı
OV7670 görüntü sensörü, maksimum 400KHz saat frekansına sahip bir I2C arayüzü (SIOC, SIOD) olan Seri Kamera Kontrol Veriyolu (SCCB) kullanılarak kontrol edilir.
Kamera, aşağıdaki gibi el sıkışma sinyalleriyle gelir:
- VSYNC: Dikey Senkronizasyon Çıkışı - Çerçeve sırasında düşük
- HREF: Horizontal Reference - Satırın aktif pikselleri sırasında yüksek
- PCLK: Piksel Saat Çıkışı - Serbest çalışan saat. Veriler yükselen kenarda geçerlidir
Buna ek olarak, aşağıdaki gibi birkaç sinyal daha var:
- D0-D7: 8-bit YUV / RGB Video Bileşeni Dijital Çıkışı
- PWDN: Güç Kapatma Modu Seçimi - Normal Mod ve Güç Kapatma Modu
- XCLK: Sistem Saat Girişi
- Sıfırla: Sinyali Sıfırla
OV7670, 24 MHz osilatörden saat hızına sahiptir. Bu, 24 MHz'lik bir Piksel Saat (PCLK) çıkışı sağlar. FIFO, 3Mbps video kare tampon belleği sağlar. Test deseni oluşturucu, 8 çubuklu renk çubuğu desenine, solmadan griye renk çubuğu desenine sahiptir. Şimdi Kamera OV7670'i test etmek ve seri port okuyucu kullanarak çerçeveleri yakalamak için Arduino UNO'yu programlamaya başlayalım.
Devre şeması
Arduino UNO'nun Programlanması
Programlama , OV7670 için gerekli kitaplığı dahil ederek başlar . OV7670, I2C arayüzünde çalıştığı için şunları içerir:Bundan sonra, OV7670 için kayıtların değiştirilmesi gerekir. Program, daha iyi anlaşılması için küçük işlevlere ayrılmıştır.
Ayar () sadece resim yakalamak için gerekli olan tüm başlangıç ayarları içerir. İlk işlev, arduino uno'yu başlatmak için kullanılan arduinoUnoInut () ' dur. Başlangıçta tüm global kesintileri devre dışı bırakır ve PWM saati, kesme pimlerinin seçimi, ön tanımlayıcı seçimi, eşlik ve durdurma bitleri ekleme gibi iletişim arayüzü konfigürasyonlarını ayarlar.
ArduinoUnoInut ();
Arduino'yu yapılandırdıktan sonra, kamera yapılandırılmalıdır. Kamerayı başlatmak için sadece kayıt değerlerini değiştirme seçeneklerimiz var. Kayıt değerlerinin varsayılandan özele değiştirilmesi gerekir. Ayrıca kullandığımız mikrodenetleyici frekansına bağlı olarak gerekli gecikmeyi ekleyin. Yavaş mikrodenetleyiciler, yakalama kareleri arasına daha fazla gecikme ekleyerek daha az işlem süresine sahiptir.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK, HBLANK üzerinde geçiş yapmaz. }
Kamera bir QVGA görüntüsü alacak şekilde ayarlanmıştır, bu nedenle çözünürlüğün seçilmesi gerekir. Fonksiyon, kaydı QVGA görüntüsü alacak şekilde yapılandırır.
setResolution ();
Bu eğitimde, görüntüler monokrom olarak çekilmiştir, bu nedenle kayıt değeri monokrom bir resim çıkarmak için ayarlanır. Fonksiyon, programda önceden tanımlanan kayıt listesinden kayıt değerlerini ayarlar.
setColor ();
Aşağıdaki fonksiyon, kaydedilecek onaltılık değeri yazan yazmaç işlevidir . Karıştırılmış görüntüleri alırsanız, ikinci terimi, yani 10'u 9/11/12 olarak değiştirmeyi deneyin. Ancak çoğu zaman bu değer iyi çalışır, bu nedenle değiştirmeye gerek yoktur.
writeReg (0x11, 10);
Bu işlev, görüntü çözünürlüğü boyutunu elde etmek için kullanılır. Bu projede 320 x 240 piksel boyutlarında fotoğraflar çekiyoruz.
captureImg (320, 240);
Bunun dışında, kodda birkaç bölüme ayrılmış I2C konfigürasyonları da vardır. Verileri kameradan almak için, I2C yapılandırmalarında I2C protokolü kullanılırken önemli olan Başlatma, Okuma, Yazma, Adres Ayarlama işlevi bulunur.
Kodun tamamını bu eğitimin sonunda bir tanıtım videosu ile bulabilirsiniz. Sadece kodu yükleyin ve Seri Port Okuyucuyu açın ve çerçeveleri alın.
Görüntüleri Okumak İçin Seri Port Okuyucu Nasıl Kullanılır
Serial Port Reader basit bir GUI'dir, buradan indirin. Bu, base64 kodlamasını yakalar ve bir görüntü oluşturmak için kodunu çözer. Seri Port Okuyucuyu kullanmak için şu basit adımları izleyinAdım 1: Arduino'nuzu PC'nizin herhangi bir USB Portuna bağlayın
Adım 2: Arduino COM Portunuzu bulmak için "Kontrol Et" e tıklayın
Adım 3: Son olarak, seri olarak okumaya başlamak için "Başlat" düğmesine tıklayın.
Adım 4: Bu resimleri “Resmi Kaydet” e tıklayarak da kaydedebilirsiniz.
OV7670'ten Alınan Örnek Görüntüler aşağıdadır
OV7670 kullanırken alınacak önlemler
- Mümkün olduğunca kısa kablo veya jumper kullanmayı deneyin
- Arduino veya OV7670 üzerindeki herhangi bir pime gevşek temastan kaçının
- Çok sayıda kablolama kısa devreye neden olabileceğinden, bağlamada dikkatli olun
- UNO, GPIO'ya 5V çıkış veriyorsa, Seviye Değiştiriciyi kullanın.
- OV7670 için 3,3V Girişini, aşırı voltaj OV7670 modülüne zarar verebileceğinden kullanın.
Bu proje, Arduino ile bir kamera modülünün kullanımına genel bir bakış sağlamak için oluşturulmuştur. Arduino daha az belleğe sahip olduğundan, işlem beklendiği gibi olmayabilir. İşleme için daha fazla belleğe sahip farklı denetleyiciler kullanabilirsiniz.