- Komponen Diperlukan
- Perkara yang Perlu Diingat mengenai Modul Kamera OV7670
- Rajah Litar
- Pengaturcaraan Arduino UNO
- Cara Menggunakan Serial Port Reader untuk membaca Imej
- Berikut adalah Contoh Imej yang Diambil dari OV7670
- Langkah berjaga-jaga semasa menggunakan OV7670
Kamera selalu menguasai industri elektronik kerana mempunyai banyak aplikasi seperti sistem pemantauan pengunjung, sistem pengawasan, sistem kehadiran dan lain-lain. Kamera yang kita gunakan hari ini adalah pintar dan mempunyai banyak ciri yang tidak terdapat pada kamera sebelumnya. Walaupun kamera digital hari ini bukan sahaja menangkap gambar tetapi juga menangkap perihalan tingkat tinggi mengenai pemandangan dan menganalisis apa yang mereka lihat. Ia digunakan secara meluas dalam Robotika, Kecerdasan Buatan, Pembelajaran Mesin dan lain-lain. Bingkai yang ditangkap diproses menggunakan Kecerdasan Buatan dan Pembelajaran Mesin, dan kemudian digunakan dalam banyak aplikasi seperti pengesanan plat nombor, pengesanan objek, pengesanan gerakan, pengenalan wajah dll
Dalam tutorial ini kita akan menghubungkan antara modul kamera OV7670 yang paling banyak digunakan dengan Arduino UNO. Modul kamera OV7670 dapat dihubungkan dengan Arduino Mega dengan konfigurasi pin, kod dan langkah yang sama. Modul kamera sukar untuk dihubungkan kerana mempunyai sejumlah besar pin dan kabel yang terganggu untuk dijalankan. Juga wayar menjadi sangat penting ketika menggunakan modul kamera kerana pilihan wayar dan panjang wayar boleh mempengaruhi kualiti gambar dengan ketara dan boleh mendatangkan kebisingan.
Kami telah membuat banyak projek di Kamera dengan pelbagai jenis Mikrokontroler dan Peranti IoT seperti:
- Sistem Pemantauan Pelawat dengan Raspberry Pi dan Pi Camera
- Sistem Keselamatan Rumah Raspberry Pi berasaskan IOT dengan Makluman E-mel
- Kamera Pengawasan Raspberry Pi dengan Motion Capture
The Camera OV7670 kerja-kerja 3.3V, jadi ia menjadi sangat penting untuk mengelakkan Arduino yang memberikan output 5V di Output GPIO pin mereka. OV7670 adalah kamera FIFO. Tetapi dalam tutorial ini, gambar atau bingkai akan diambil tanpa FIFO. Tutorial ini akan mempunyai langkah mudah dan pengaturcaraan yang dipermudahkan untuk menghubungkan OV7670 dengan Arduino UNO.
Komponen Diperlukan
- Arduino UNO
- Modul Kamera OV7670
- Perintang (10k, 4.7k)
- Pelompat
Perisian yang Diperlukan:
- Arduino IDE
- Pembaca Port Serial (Untuk menganalisis Imej Keluaran)
Perkara yang Perlu Diingat mengenai Modul Kamera OV7670
Modul Kamera OV7670 adalah Modul kamera FIFO yang tersedia dari Pengilang yang berbeza dengan Konfigurasi pin yang berbeza. TheOV7670 menyediakan gambar 8-bit bingkai penuh, berjendela dalam pelbagai format. Susunan gambar mampu beroperasi sehingga 30 bingkai sesaat (fps) dalam VGA. OV7670 termasuk
- Array Sensor Imej (kira-kira 656 x 488 piksel)
- Penjana Masa
- Pemproses Isyarat Analog
- Penukar A / D
- Penjana Corak Ujian
- Pemproses Isyarat Digital (DSP)
- Penimbang Imej
- Port Video Digital
- Output Kawalan Kilat LED dan Strobe
Sensor gambar OV7670 dikendalikan menggunakan Serial Camera Control Bus (SCCB) yang merupakan antara muka I2C (SIOC, SIOD) dengan frekuensi jam maksimum 400KHz.
Kamera dilengkapi dengan isyarat berjabat tangan seperti:
- VSYNC: Output Penyegerakan Vertikal - Rendah semasa bingkai
- HREF: Rujukan Mendatar - Tinggi semasa piksel baris aktif
- PCLK: Output Jam Pixel - Jam berjalan percuma. Data berlaku semasa meningkat
Selain itu, ia mempunyai beberapa lagi isyarat seperti
- D0-D7: Output Digital Komponen Video YUV / RGB 8-bit
- PWDN: Pemilihan Mod Turunkan Daya - Mod Normal dan Mod Turun Daya
- XCLK: Input Jam Sistem
- Tetapkan semula: Tetapkan Semula Isyarat
OV7670 dicatat dari pengayun 24MHz. Ini memberikan output Pixel Clock (PCLK) 24MHz. FIFO menyediakan memori penyangga bingkai video 3Mbps. Penjana corak ujian mempunyai corak bar warna 8 bar, bar warna pudar-ke-kelabu. Sekarang mari kita mulakan pengaturcaraan Arduino UNO untuk menguji Camera OV7670 dan mengambil bingkai menggunakan pembaca port bersiri.
Rajah Litar
Pengaturcaraan Arduino UNO
Pengaturcaraan dimulakan dengan memasukkan perpustakaan yang diperlukan untuk OV7670. Oleh kerana OV7670 berjalan di antara muka I2C, ia termasukSelepas ini, daftar perlu diubah suai untuk OV7670. Program ini dibahagikan kepada fungsi kecil untuk pemahaman yang lebih baik.
The Setup () terdiri daripada semua persediaan awal diperlukan untuk menangkap imej sahaja. Fungsi pertama adalah arduinoUnoInut () yang digunakan untuk menginisialisasi arduino uno. Pada mulanya ia melumpuhkan semua gangguan global dan menetapkan konfigurasi antara muka komunikasi seperti jam PWM, pemilihan pin interrupt, pemilihan presclaer, menambah parity dan stop bit.
ArduinoUnoInut ();
Setelah mengkonfigurasi Arduino, kamera harus dikonfigurasi. Untuk menginisialisasi kamera, kami hanya mempunyai pilihan untuk mengubah nilai daftar. Nilai register perlu diubah dari default ke custom. Tambahkan juga kelewatan yang diperlukan bergantung pada frekuensi mikrokontroler yang kita gunakan. Oleh itu, mikrokontroler lambat mempunyai masa pemprosesan yang lebih sedikit menambahkan lebih banyak kelewatan antara menangkap bingkai.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK tidak beralih pada HBLANK. }
Kamera diatur untuk mengambil gambar QVGA sehingga resolusi harus dipilih. Fungsi mengkonfigurasi daftar untuk mengambil gambar QVGA.
setResolution ();
Dalam tutorial ini, gambar diambil dalam bentuk monokrom, jadi nilai daftar ditetapkan untuk menghasilkan gambar monokrom. Fungsi menetapkan nilai daftar dari daftar daftar yang telah ditentukan dalam program.
setColor ();
Fungsi di bawah adalah fungsi tulis untuk mendaftarkan yang menulis nilai hex untuk mendaftar. Sekiranya anda mendapat gambar yang tidak dikenali maka cuba ubah istilah kedua iaitu 10 hingga 9/11/12. Tetapi selalunya nilai ini berfungsi dengan baik sehingga tidak perlu mengubahnya.
tulisReg (0x11, 10);
Fungsi ini digunakan untuk mendapatkan ukuran resolusi gambar. Dalam projek ini kami mengambil gambar berukuran 320 x 240 piksel.
tangkapanImg (320, 240);
Selain daripada ini, kod ini juga mempunyai konfigurasi I2C yang dibahagikan kepada beberapa bahagian. Hanya untuk mendapatkan data dari kamera, konfigurasi I2C mempunyai fungsi Mula, Baca, Tulis, Tetapkan Alamat yang penting ketika menggunakan protokol I2C.
Anda boleh mendapatkan kod lengkap dengan video demonstrasi di akhir tutorial ini. Cukup muat naik kod dan buka Serial Port Reader dan ambil bingkai.
Cara Menggunakan Serial Port Reader untuk membaca Imej
Serial Port Reader adalah GUI ringkas, muat turun dari sini. Ini menangkap pengkodean base64 dan menyahkodnya untuk membentuk gambar. Ikuti langkah mudah ini untuk menggunakan Serial Port ReaderLangkah 1: Sambungkan Arduino anda ke mana-mana Port USB PC anda
Langkah 2: Klik "Periksa" untuk mencari Port COM Arduino anda
Langkah 3: Akhirnya klik pada butang "Mula" untuk mula membaca secara bersiri.
Langkah 4: Seseorang juga dapat menyimpan gambar ini dengan hanya mengklik "Simpan Gambar".
Berikut adalah Contoh Imej yang Diambil dari OV7670
Langkah berjaga-jaga semasa menggunakan OV7670
- Cuba gunakan wayar atau jumper sesingkat mungkin
- Elakkan daripada terkena pin pada Arduino atau OV7670
- Berhati-hati dengan penyambungan kerana sebilangan besar pendawaian boleh menyebabkan litar pintas
- Sekiranya UNO memberikan output 5V ke GPIO maka gunakan Level Shifter.
- Gunakan Input 3.3V untuk OV7670 kerana voltan melebihi kerana ini boleh merosakkan modul OV7670.
Projek ini dibuat untuk memberi gambaran keseluruhan penggunaan modul kamera dengan Arduino. Oleh kerana Arduino mempunyai memori yang lebih sedikit, maka pemprosesan mungkin tidak seperti yang diharapkan. Anda boleh menggunakan pengawal yang berbeza yang mempunyai lebih banyak memori untuk diproses.