- Kinakailangan ang Mga Bahagi
- Mga Bagay na Dapat Tandaan tungkol sa Modyul ng Camera OV7670
- Diagram ng Circuit
- Programming Arduino UNO
- Paano Gumamit ng Serial Port Reader para sa pagbabasa ng Mga Larawan
- Nasa ibaba ang Mga Sample na Larawan na Kinuha mula sa OV7670
- Pag-iingat kapag gumagamit ng OV7670
Palaging pinangungunahan ng mga camera ang industriya ng electronics dahil marami itong mga application tulad ng sistema ng pagsubaybay sa bisita, sistema ng pagsubaybay, sistema ng pagdalo atbp. Ang mga camera na ginagamit namin ngayon ay matalino at maraming mga tampok na wala sa mga naunang camera. Habang ang mga digital camera ay hindi lamang nakakakuha ng mga imahe ngunit nakakakuha rin ng mga mataas na antas na paglalarawan ng eksena at pag-aralan kung ano ang nakikita nila. Malawakang ginagamit ito sa Robotics, Artipisyal na Katalinuhan, Pag-aaral ng Makina atbp. Ang mga Nakunan na mga frame ay pinoproseso gamit ang Artipisyal na Intelihensiya at Pag-aaral ng Makina, at pagkatapos ay ginagamit sa maraming mga application tulad ng pagtuklas ng Numero ng plate, pagtuklas ng bagay, paggalaw ng paggalaw, pagkilala sa mukha atbp
Sa tutorial na ito makikipag-ugnay kami ng pinaka-malawak na ginagamit na module ng kamera na OV7670 sa Arduino UNO. Ang module ng camera na OV7670 ay maaaring ma-interfaced sa Arduino Mega na may parehong pagsasaayos ng pin, code at mga hakbang. Ang module ng camera ay mahirap i-interface sapagkat mayroon itong malaking bilang ng mga pin at jumbled na kable upang isagawa. Gayundin ang kawad ay nagiging napakahalaga kapag gumagamit ng mga module ng camera bilang ang pagpipilian ng kawad at haba ng kawad ay maaaring makaapekto nang malaki sa kalidad ng larawan at maaaring magdala ng ingay.
Nagawa na namin ang sapat na mga proyekto sa Mga Camera na may iba't ibang uri ng mga Microcontroller at IoT Device tulad ng:
- Sistema ng Pagsubaybay sa Bisita na may Raspberry Pi at Pi Camera
- Nakabatay sa IOT ang Raspberry Pi Home Security System na may Alerto sa Email
- Raspberry Pi Surveillance Camera na may Motion Capture
Gumagana ang Camera OV7670 sa 3.3V, kaya't napakahalaga na iwasan ang Arduino na nagbibigay ng 5V na output sa kanilang mga pin ng Output GPIO. Ang OV7670 ay isang FIFO camera. Ngunit sa tutorial na ito, makukuha ang larawan o mga frame nang walang FIFO. Ang tutorial na ito ay magkakaroon ng mga simpleng hakbang at pinasimple na programa upang i-interface ang OV7670 sa Arduino UNO.
Kinakailangan ang Mga Bahagi
- Arduino UNO
- OV7670 Camera Module
- Mga Resistor (10k, 4.7k)
- Mga jumper
Kinakailangan ang Software:
- Arduino IDE
- Serial Port Reader (Upang pag-aralan ang Output Image)
Mga Bagay na Dapat Tandaan tungkol sa Modyul ng Camera OV7670
Ang OV7670 Camera Module ay isang FIFO camera Module na magagamit mula sa iba't ibang Mga Tagagawa na may iba't ibang mga pagsasaayos ng pin. Nagbibigay ang TheOV7670 ng buong frame, naka-window na 8-bit na mga imahe sa isang malawak na hanay ng mga format. Ang larawang pang-imahe ay may kakayahang pagpapatakbo ng hanggang sa 30 mga frame bawat segundo (fps) sa VGA. Kasama ang OV7670
- Image Sensor Array (ng halos 656 x 488 mga pixel)
- Tagabuo ng Oras
- Proseso ng Signal ng Analog
- Mga Converter ng A / D
- Tagabuo ng pattern ng pagsubok
- Digital Signal Processor (DSP)
- Image Scaler
- Digital Video Port
- LED at Strobe Flash Control Output
Ang sensor ng imahe ng OV7670 ay kinokontrol gamit ang Serial Camera Control Bus (SCCB) na isang interface ng I2C (SIOC, SIOD) na may maximum na dalas ng orasan na 400KHz.
Ang Camera ay may kasamang mga handshaking signal tulad ng:
- VSYNC: Vertical Sync Output - Mababa sa panahon ng frame
- HREF: Pahalang na Sanggunian - Mataas sa panahon ng mga aktibong pixel ng hilera
- PCLK: Pixel Clock Output - Libreng tumatakbo na orasan. Balido ang data sa tumataas na gilid
Bilang karagdagan sa ito, mayroon itong maraming iba pang mga signal tulad ng
- D0-D7: 8-bit YUV / RGB Video Component Digital Output
- PWDN: Seleksyon ng Power Down Mode - Normal Mode at Power Down Mode
- XCLK: Input ng System Clock
- I-reset: I-reset ang Signal
Ang OV7670 ay nai-orasan mula sa isang 24MHz oscillator. Nagbibigay ito ng isang output ng Pixel Clock (PCLK) na 24MHz. Nagbibigay ang FIFO ng 3Mbps ng memorya ng buffer ng video frame. Nagtatampok ang tagabuo ng pattern ng pagsubok ng 8-bar pattern ng color bar, fade-to-grey color bar patter. Ngayon simulan nating i-program ang Arduino UNO para sa pagsubok sa Camera OV7670 at daklot ang mga frame gamit ang serial port reader.
Diagram ng Circuit
Programming Arduino UNO
Nagsisimula ang programa kasama ang pagsasama ng kinakailangang library na kinakailangan para sa OV7670. Dahil ang OV7670 ay tumatakbo sa interface ng I2C, kasama ritoPagkatapos nito, kailangang baguhin ang mga rehistro para sa OV7670. Ang programa ay nahahati sa maliit na pag-andar para sa mas mahusay na pag-unawa.
Ang Setup () ay binubuo ng lahat ng mga paunang pag-setup na kinakailangan para sa pagkuha lamang ng imahe. Ang unang pag-andar ay arduinoUnoInut () na ginagamit upang simulan ang arduino uno. Sa una ay hindi pinapagana nito ang lahat ng mga pandaigdigan na nakakagambala at itinatakda ang mga pagsasaayos ng interface ng komunikasyon tulad ng orasan ng PWM, pagpili ng mga nakakagambala na pin, presclaer na pagpipilian, pagdaragdag ng pagkakapareho at paghinto ng mga piraso.
ArduinoUnoInut ();
Matapos mai-configure ang Arduino, kailangang i-configure ang camera. Upang mapasimulan ang camera, mayroon lamang kaming mga pagpipilian upang baguhin ang mga halaga ng rehistro. Ang mga halaga ng rehistro ay kailangang mabago mula sa default patungo sa pasadya. Magdagdag din ng kinakailangang pagkaantala depende sa dalas ng microcontroller na ginagamit namin. Tulad ng, ang mabagal na mga microcontroller ay may mas kaunting oras sa pagproseso na nagdaragdag ng higit na pagkaantala sa pagitan ng pagkuha ng mga frame.
void camInit (void) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // Ang PCLK ay hindi nagpapalipat-lipat sa HBLANK. }
Nakatakda ang camera na kumuha ng isang imahe ng QVGA kaya't kailangang mapili ang resolusyon. Ang pag-andar ay nag-configure ng rehistro upang kumuha ng isang imahe ng QVGA.
setResolution ();
Sa tutorial na ito, ang mga imahe ay kinukuha sa monochrome, kaya't ang halaga ng rehistro ay nakatakda upang maglabas ng isang monochrome na imahe. Itinatakda ng pagpapaandar ang mga halaga ng rehistro mula sa listahan ng rehistro na paunang natukoy sa programa.
setColor ();
Ang pagpapaandar sa ibaba ay sumulat upang magparehistro ng pagpapaandar na nagsusulat ng halaga ng hex upang magparehistro. Kung nakuha mo ang mga pinag-agawan na imahe pagkatapos ay subukang baguhin ang pangalawang term na ie 10 hanggang 9/11/12. Ngunit sa karamihan ng oras ang halagang ito ay gumagana nang maayos kaya hindi na kailangang baguhin ito.
magsulatReg (0x11, 10);
Ang pagpapaandar na ito ay ginagamit upang makuha ang laki ng resolusyon ng imahe. Sa proyektong ito kumukuha kami ng mga larawan sa laki ng 320 x 240 na mga pixel.
captureImg (320, 240);
Maliban dito, ang code ay mayroon ding mga pagsasaayos ng I2C na nahahati sa maraming mga bahagi. Upang makuha lamang ang data mula sa camera, ang mga pagsasaayos ng I2C ay may Simula, Basahin, Isulat, Itakda ang pagpapaandar ng Address na mahalaga kapag gumagamit ng I2C protocol.
Mahahanap mo ang kumpletong code gamit ang isang demonstration video sa pagtatapos ng tutorial na ito. I-upload lamang ang code at buksan ang Serial Port Reader at kunin ang mga frame.
Paano Gumamit ng Serial Port Reader para sa pagbabasa ng Mga Larawan
Ang Serial Port Reader ay isang simpleng GUI, i-download ito mula rito. Kinukuha nito ang encode ng base64 at na-decode ito upang makabuo ng isang imahe. Sundin lamang ang mga simpleng hakbang na ito upang magamit ang Serial Port ReaderHakbang 1: Ikonekta ang Iyong Arduino sa anumang USB Port ng iyong PC
Hakbang 2: Mag-click sa "Suriin" upang makita ang iyong Arduino COM Port
Hakbang 3: Panghuli mag-click sa pindutang "Start" upang simulang basahin nang serial.
Hakbang 4: Maaari mo ring i-save ang isang larawang ito sa pamamagitan lamang ng pag-click sa "I-save ang Larawan".
Nasa ibaba ang Mga Sample na Larawan na Kinuha mula sa OV7670
Pag-iingat kapag gumagamit ng OV7670
- Subukang gumamit ng mga wire o jumper hangga't maaari
- Iwasan ang anumang maluwag na contact sa anumang mga pin sa Arduino o OV7670
- Mag-ingat tungkol sa pagkonekta ng maraming bilang ng mga kable na maaaring humantong sa maikling circuit
- Kung ang UNO ay nagbibigay ng 5V output sa GPIO pagkatapos ay gamitin ang Level Shifter.
- Gumamit ng 3.3V Input para sa OV7670 na higit sa boltahe kaysa sa ito ay maaaring makapinsala sa module ng OV7670.
Ang proyektong ito ay nilikha upang magbigay ng pangkalahatang ideya ng paggamit ng isang module ng camera na may Arduino. Dahil ang Arduino ay may mas kaunting memorya, kaya ang pagproseso ay maaaring hindi katulad ng inaasahan. Maaari kang gumamit ng iba't ibang mga tagakontrol na mayroong higit na memorya para sa pagproseso.