- Būtini komponentai
- Ką reikia atsiminti apie fotoaparato modulį OV7670
- Grandinės schema
- Programavimas „Arduino UNO“
- Kaip naudoti nuosekliojo prievado skaitytuvą vaizdams skaityti
- Žemiau pateikiami pavyzdiniai vaizdai, paimti iš OV7670
- Atsargumo priemonės naudojant OV7670
Fotoaparatai visada dominavo elektronikos pramonėje, nes jame yra daugybė programų, tokių kaip lankytojų stebėjimo sistema, stebėjimo sistema, lankomumo sistema ir kt. Šiandien naudojamos kameros yra išmaniosios ir turi daug funkcijų, kurių nebuvo ankstesnėse kamerose. Šiandien skaitmeniniai fotoaparatai ne tik fiksuoja vaizdus, bet ir užfiksuoja aukšto lygio scenos aprašymus ir analizuoja tai, ką mato. Jis plačiai naudojamas robotų, dirbtinio intelekto, mašininio mokymosi ir kt. Srityje. Užfiksuoti rėmeliai apdorojami naudojant dirbtinį intelektą ir mašininį mokymąsi, o tada naudojami daugelyje programų, pavyzdžiui, valstybinių numerių, objektų, judesio, veido atpažinimo ir kt.
Šioje pamokoje mes sąveikausime su „Arduino UNO“ plačiausiai naudojamą fotoaparato modulį OV7670. Fotoaparato modulį OV7670 galima susieti su „ Arduino Mega“ su ta pačia kaiščių konfigūracija, kodu ir žingsniais. Kameros modulis yra sunkiai suderinamas, nes jis turi daug smeigtukų ir sumaišytų laidų. Taip pat viela tampa labai svarbi naudojant fotoaparato modulius, nes laido pasirinkimas ir laido ilgis gali žymiai paveikti vaizdo kokybę ir sukelti triukšmą.
Mes jau atlikome daugybę kamerų projektų su įvairiais mikrovaldikliais ir daiktų interneto įrenginiais, tokiais kaip:
- Lankytojų stebėjimo sistema su „Raspberry Pi“ ir „Pi“ kamera
- IOT pagrįsta „Raspberry Pi“ namų apsaugos sistema su el. Pašto įspėjimu
- Stebėjimo kamera „Raspberry Pi“ su judesio fiksavimu
„ Camera OV7670“ veikia esant 3.3 V įtampai, todėl tampa labai svarbu vengti „Arduino“, kuris išvesties GPIO kaiščiuose suteikia 5 V išėjimą. OV7670 yra FIFO kamera. Tačiau šioje pamokoje paveikslėlis ar rėmeliai bus patraukti be FIFO. Šioje pamokoje bus atlikti paprasti veiksmai ir supaprastintas programavimas, skirtas sąsajai OV7670 su „Arduino UNO“.
Būtini komponentai
- „Arduino UNO“
- OV7670 fotoaparato modulis
- Rezistoriai (10k, 4.7k)
- Džemperiai
Būtina programinė įranga:
- „Arduino IDE“
- Serijinio prievado skaitytuvas (norint išanalizuoti išvesties vaizdą)
Ką reikia atsiminti apie fotoaparato modulį OV7670
OV7670 fotoaparato modulis yra FIFO fotoaparato modulis, kurį gali įsigyti skirtingi gamintojai su skirtingomis kontaktų konfigūracijomis. „TheOV7670“ pateikia viso kadro 8 langų langus su įvairiais formatais. Vaizdų masyvas gali veikti iki 30 kadrų per sekundę (fps) VGA. OV7670 apima
- Vaizdo jutiklio masyvas (apie 656 x 488 taškų)
- Laiko generatorius
- Analoginis signalo procesorius
- A / D keitikliai
- Bandymo modelio generatorius
- Skaitmeninis signalo procesorius (DSP)
- Vaizdo mastelis
- Skaitmeninis vaizdo prievadas
- LED ir „Strobe“ blykstės valdymo išvestis
Vaizdo jutiklis OV7670 valdomas naudojant nuosekliąją kameros valdymo magistralę (SCCB), kuri yra I2C sąsaja (SIOC, SIOD), kurios maksimalus laikrodžio dažnis yra 400 kHz.
Fotoaparatas turi tokius rankos paspaudimo signalus kaip:
- VSYNC: Vertikalios sinchronizacijos išvestis - maža kadro metu
- HREF: Horizontali nuoroda - didelis aktyvių eilučių pikselių metu
- PCLK: „ Pixel Clock Output“ - nemokamas veikiantis laikrodis. Duomenys galioja kylant kraštui
Be to, jis turi dar keletą signalų, tokių kaip
- D0-D7: 8 bitų YUV / RGB vaizdo komponentų skaitmeninis išėjimas
- PWDN: išjungimo režimo pasirinkimas - įprastas režimas ir išjungimo režimas
- XCLK: sistemos laikrodžio įvestis
- Reset: iš naujo nustatyti signalą
OV7670 laikrodis valdomas iš 24MHz osciliatoriaus. Tai suteikia „Pixel Clock“ (PCLK) išvestį 24MHz. FIFO teikia 3Mbps vaizdo kadrų buferinės atminties. Bandymo modelio generatorius turi 8 juostų spalvų juostos modelį, išblukusį ir pilką spalvų juostos pavyzdį. Dabar pradėkime programuoti „Arduino UNO“, kad galėtume išbandyti „Camera OV7670“ ir sugriebti rėmelius naudojant nuoseklaus prievado skaitytuvą.
Grandinės schema
Programavimas „Arduino UNO“
Programavimas prasideda įtraukiant reikiamą biblioteką, reikalingą OV7670. Kadangi OV7670 veikia I2C sąsajoje, ji apimaPo to reikia keisti OV7670 registrus. Kad geriau suprastumėte, programa yra suskirstyta į mažas funkcijas.
Sąranka () apima visas pradines konfigūracijos reikalingas tik vaizdo užfiksuoti. Pirmoji funkcija yra arduinoUnoInut (), kuri naudojama inicijuojant „Arduino uno“. Iš pradžių jis išjungia visus visuotinius pertraukimus ir nustato ryšio sąsajos konfigūracijas, tokias kaip PWM laikrodis, pertraukimo kaiščių pasirinkimas, presclaer pasirinkimas, pariteto ir stop bitų pridėjimas.
ArduinoUnoInut ();
Sukonfigūravus „Arduino“, reikia sukonfigūruoti kamerą. Norėdami inicializuoti fotoaparatą, turime tik galimybes pakeisti registro reikšmes. Registro reikšmes reikia pakeisti iš numatytųjų į pasirinktines. Taip pat pridėkite reikiamą vėlavimą, priklausomai nuo naudojamo mikrovaldiklio dažnio. Kadangi lėti mikrovaldikliai turi mažiau apdorojimo laiko, o tai reiškia, kad tarp užfiksuotų kadrų yra daugiau vėlavimo.
void camInit (negaliojantis) { writeReg (0x12, 0x80); _delay_ms (100); wrSensorRegs8_8 (ov7670_default_regs); writeReg (REG_COM10, 32); // PCLK neįjungia HBLANK. }
Kamera nustatyta fotografuoti QVGA, todėl reikia pasirinkti skiriamąją gebą. Funkcija sukonfigūruoja registrą daryti QVGA vaizdą.
setResolution ();
Šioje pamokoje vaizdai daromi vienspalviais, todėl registro reikšmė nustatoma norint išgauti nespalvotą vaizdą. Funkcija nustato registro reikšmes iš registrų sąrašo, kuris yra iš anksto nustatytas programoje.
setColor ();
Žemiau pateikta funkcija yra rašymo registrui funkcija, kuri užrašo šešioliktainę reikšmę registruoti. Jei gausite šifruotus vaizdus, pabandykite pakeisti antrąjį terminą, ty nuo 10 iki 9/11/12. Tačiau dažniausiai ši vertė veikia gerai, todėl nereikia jos keisti.
writeReg (0x11, 10);
Ši funkcija naudojama norint gauti vaizdo raiškos dydį. Šiame projekte mes darome 320 x 240 taškų dydžio nuotraukas.
surinkimasImg (320, 240);
Be to, kode taip pat yra I2C konfigūracijos, suskirstytos į kelias dalis. Norint gauti duomenis iš fotoaparato, „I2C“ konfigūracijose yra funkcija Pradėti, Skaityti, Rašyti, Nustatyti adresą, kurios yra svarbios naudojant I2C protokolą.
Galite rasti visą kodą su demonstravimo video šio pamoka pabaigoje. Tiesiog įkelkite kodą ir atidarykite „Serial Port Reader“ ir paimkite rėmelius.
Kaip naudoti nuosekliojo prievado skaitytuvą vaizdams skaityti
„Serial Port Reader“ yra paprasta GUI, atsisiųskite ją iš čia. Tai užfiksuoja „base64“ kodavimą ir iššifruoja jį, kad susidarytų vaizdas. Tiesiog atlikite šiuos paprastus veiksmus, kad galėtumėte naudoti „Serial Port Reader“1 žingsnis: Prijunkite „Arduino“ prie bet kurio kompiuterio USB prievado
2 žingsnis: Spustelėkite „Tikrinti“, kad rastumėte „Arduino COM“ prievadą
3 žingsnis: Galiausiai spustelėkite mygtuką „Pradėti“, kad pradėtumėte skaityti nuosekliai.
4 žingsnis: Taip pat galite išsaugoti šias nuotraukas, tiesiog spustelėdami „Išsaugoti paveikslėlį“.
Žemiau pateikiami pavyzdiniai vaizdai, paimti iš OV7670
Atsargumo priemonės naudojant OV7670
- Stenkitės kuo trumpiau naudoti laidus ar džemperius
- Venkite laisvo kontakto su „Arduino“ ar „OV7670“ kaiščiais
- Būkite atsargūs jungdami, nes didelis laidų skaičius gali sukelti trumpąjį jungimą
- Jei UNO suteikia 5 V išėjimą GPIO, tada naudokite „Level Shifter“.
- Naudokite 3,3 V įvestį, skirtą OV7670, nes viršijusi įtampą galite pakenkti OV7670 moduliui.
Šis projektas sukurtas siekiant apžvelgti fotoaparato modulio naudojimą su „Arduino“. Kadangi „Arduino“ turi mažiau atminties, apdorojimas gali būti ne toks, kokio tikėtasi. Apdorojimui galite naudoti skirtingus valdiklius, kuriuose yra daugiau atminties.