Tartalomjegyzék:
- 1. lépés: Áramköri diagram
- 2. lépés: Alkatrészlista
- 3. lépés: Elmélet
- 4. lépés: Tervezési megjegyzések
- 5. lépés: Időzítési hullámformák
- 6. lépés: Frame Grabber
- 7. lépés: Szoftver
- 8. lépés: Színes kép készítése
Videó: Készítse el saját fényképezőgépét: 8 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Ez az oktatható utasítás elmagyarázza, hogyan lehet monokróm kamerát készíteni Omnivision OV7670 képérzékelővel, Arduino mikrokontrollerrel, néhány áthidaló vezetékkel és a Processing 3 szoftverrel.
Kísérleti szoftvert mutatnak be színes kép előállítására is.
Nyomja meg a „c” gombot 640*480 képpontos kép rögzítéséhez… nyomja meg az „s” gombot a kép fájlba mentéséhez. Ha rövid időzített filmet szeretne létrehozni, az egymást követő képek sorszámozva vannak.
A kamera nem gyors (minden szkennelés 6,4 másodpercig tart), és csak rögzített megvilágításban használható.
A költség, az Arduino és a PC nélkül, kevesebb, mint egy csésze kávé.
Képek
Az alkatrészek jumper huzalozás nélkül a nyitóképen láthatók.
A második fotó egy képernyőkép, amely az Arduino kameraszoftvert és a Processing 3 képkockázót mutatja. A betét mutatja a kamera csatlakoztatását.
A videó bemutatja a kamera működését. Amikor megnyomja a „c” rögzítés gombot, a kép beolvasása közben egy rövid villanás, majd egy sorozatnyi tevékenység következik. A kép automatikusan megjelenik a kijelzőablakban, miután a szkennelés befejeződött. A képek az „s” gomb minden egyes megnyomását követően megjelennek a Processing mappában. A videó befejezéseként gyorsan végigmászik a három mentett kép mindegyikén.
1. lépés: Áramköri diagram
A fényképezőgép összes verziójának kapcsolási rajza az 1. képen látható.
A 2., 3. fénykép bemutatja a jumper-vezetékek és az alkatrészek csatlakoztatását.
Az alumínium tartó nélkül a képek az oldalukon fekszenek.
Figyelem
Programozza Arduino -ját Mielőtt bármilyen jumper vezetéket csatlakoztatna az OV7670 kamerachiphez. Ez megakadályozza, hogy egy korábbi program 5 voltos kimeneti csapjai megsemmisítsék a 3v3 voltos OV7670 kameralapkát.
2. lépés: Alkatrészlista
A következő részeket a https://www.aliexpress.com/ webhelyről szerezték be
- 1 csak OV7670 300KP VGA kamera modul arduino DIY KIT -hez
- 1 csak a kamera tartója anyákkal és csavarokkal
- 1 csak UNO R3 arduino MEGA328P esetén 100% -ban eredeti ATMEGA16U2 USB kábellel
A következő részeket helyben szerezték be
- 18 anly Arduino férfi-női jumper kábel
- 3 csak Arduinin női-női áthidaló kábel
- 1 csak mini kenyérlap
- 4 csak 4K7 ohmos 1/2 wattos ellenállás
- 1 csak törmelékes alumínium állvány.
A következő adatlapokra is szüksége lesz:
- https://web.mit.edu/6.111/www/f2016/tools/OV7670_20…
- https://www.haoyuelectronics.com/Attachment/OV7670%…
3. lépés: Elmélet
OV7670 kamera chip
Az OV7670 kamerachip alapértelmezett kimenete YUV (4: 2: 2) videó jelet és 3 időzítési hullámformát tartalmaz. Más kimeneti formátumok is lehetségesek, ha a belső regisztereket I2C kompatibilis buszon keresztül programozzuk.
A YUV (4: 2: 2) videojel (1. fotó) monokróm (fekete -fehér) képpontok folyamatos sorozata, amelyet U (kék színkülönbség) és V (piros színkülönbség) színinformáció választ el.
Ez a kimeneti formátum YUV (4: 2: 2) néven ismert, mivel minden 4 bájtos csoport 2 monokróm és 2 színes bájtot tartalmaz.
Monokróm
A monokróm kép megszerzéséhez minden második adatbájtból kell mintát vennünk.
Egy Arduino csak 2K véletlen hozzáférésű memóriával rendelkezik, de minden keret 640*2*480 = 307, 200 adatbájtot tartalmaz. Hacsak nem adunk hozzá keretfogót az OV7670-hez, minden adatot soronként kell elküldeni a számítógépre feldolgozás céljából.
Két lehetőség van:
A 480 egymást követő képkocka mindegyikénél nagy sebességgel rögzíthetünk egy sort az Arduino -hoz, mielőtt 1Mbps sebességgel elküldenénk a számítógépre. Ilyen megközelítés esetén az OV7670 teljes sebességgel működne, de sokáig (jóval több mint egy percig) tartana.
Az általam alkalmazott megközelítés az, hogy lelassítom a PCLK -t 8uS -ra, és minden mintát elküldök, ahogy jön. Ez a megközelítés lényegesen gyorsabb (6,4 másodperc).
4. lépés: Tervezési megjegyzések
Kompatibilitás
Az OV7670 kamerachip egy 3v3 voltos eszköz. Az adatlap azt jelzi, hogy a 3,5 volt feletti feszültség károsítja a chipet.
Annak megakadályozása érdekében, hogy az 5 voltos Arduino megsemmisítse az OV7670 kamerachipet:
- Az Arduino külső órajelét (XCLK) biztonságos szintre kell csökkenteni egy feszültségosztóval.
- A belső Arduino I2C felhúzó ellenállásokat 5 voltra le kell tiltani, és külső felhúzó ellenállásokra kell cserélni a 3v3 voltos tápellátásra.
- Programozza be Arduino-ját Mielőtt bármilyen áthidaló vezetéket csatlakoztatna, mivel néhány tű még mindig programozható egy korábbi projekt kimeneteként !!! (Ezt nehezen tanultam meg … szerencsére vettem kettőt, mert olyan olcsók voltak).
Külső óra
Az OV7670 kamerachiphez 10Mhz és 24MHz frekvenciatartományban külső óra szükséges.
A 16 MHz -es Arduino -ból előállítható legmagasabb frekvencia 8 MHz, de úgy tűnik, ez működik.
Soros link
Legalább 10 uS (mikroszekundum) szükséges 1 adatbájt elküldéséhez 1Mbps (millió bit másodpercenként) soros kapcsolaton keresztül. Ez az idő a következőképpen épül fel:
- 8 adatbit (8us)
- 1 kezdő bit (1uS)
- 1 stop-bit (1uS)
Belső óra
Az OV7670 belső pixelóra (PCLK) frekvenciáját bitek [5: 0] határozzák meg a CLKRC regiszterben (lásd az 1. fényképet). [1]
Ha biteket állítunk be [5: 0] = B111111 = 63, és alkalmazzuk a fenti képletre, akkor:
- F (belső óra) = F (bemeneti óra)/(Bit [5: 0} +1)
- = 8000000/(63+1)
- = 125000 Hz vagy
- = 8uS
Mivel csak minden második adatbájtból veszünk mintát, a 8uS PCLK intervallum egy 16uS mintát eredményez, ami elegendő idő egy 1 bájt (10uS) továbbításához, így 6uS marad feldolgozásra.
Filmkocka szám
Minden VGA videókeret 784*510 képpontot (képelemeket) tartalmaz, amelyből 640*480 képpont látható. Mivel a YUV (4: 2: 2) kimeneti formátum képpontonként átlagosan 2 adatbájtot tartalmaz, minden képkocka 784*2*510*8 uS = 6,4 másodpercet vesz igénybe.
Ez a kamera NEM gyors !!!
Vízszintes pozicionálás
A kép vízszintesen mozoghat, ha megváltoztatjuk a HSTART és a HSTOP értékeket, miközben megtartjuk a 640 pixel különbséget.
Ha a képet balra mozgatja, lehetséges, hogy a HSTOP értéke kisebb lesz, mint a HSTART érték!
Ne ijedjen meg… minden a számláló túlcsordulásaihoz kapcsolódik, amint azt a 2. fotó is elmagyarázza.
Regiszterek
Az OV7670 201 nyolcbites regiszterrel rendelkezik, például az erősítés, a fehéregyensúly és az expozíció szabályozására.
Egy adatbájt csak 256 értéket engedélyez a [0] - [255] tartományban. Ha nagyobb ellenőrzésre van szükségünk, akkor több nyilvántartást kell lépcsőzetesen végrehajtanunk. Két bájt 65536 lehetőséget ad nekünk … három bájt 16, 777, 216 -ot.
Ilyen például a 3. képen látható 16 bites AEC (Automatic Exposure Control) regiszter, amely a következő három regiszter egyes részeinek kombinálásával jön létre.
- AECHH [5: 0] = AEC [15:10]
- AECH [7: 2] = AEC [9: 2]
- COM1 [1: 0] = AEC [1: 0]
Figyelmeztetés … a nyilvántartási címek nincsenek csoportosítva!
Mellékhatások
A lassú képsebesség számos nem kívánt mellékhatást okoz:
A megfelelő expozíció érdekében az OV7670 30 képkocka / másodperc (képkocka / másodperc) képkocka sebességgel dolgozik. Mivel minden képkocka 6,4 másodpercet vesz igénybe, az elektronikus redőny a szokásosnál 180-szor hosszabb ideig van nyitva, ami azt jelenti, hogy minden kép túlexponált lesz, hacsak nem módosítunk néhány regiszterértéket.
A túlzott expozíció megelőzése érdekében az összes AEC (automatikus expozíciószabályozás) regiszterbitet nullára állítottam. Ennek ellenére semleges sűrűségű szűrőre van szükség az objektív előtt, ha erős a megvilágítás.
Úgy tűnik, hogy a hosszú expozíció befolyásolja az UV -adatokat is. Mivel még nem találtam megfelelő színeket kibocsátó regiszter -kombinációkat… ezt tartsa folyamatban lévő munkának.
jegyzet
[1]
Az adatlapon (1. kép) látható képlet helyes, de a tartomány csak biteket mutat [4: 0]?
5. lépés: Időzítési hullámformák
A „VGA Frame Timing” diagram bal alsó sarkában található megjegyzés (1. fotó) a következő:
YUV/RGB esetén tp = 2 x TPCLK
Az 1., 2. és 3. ábra ellenőrzi az adatlapot és megerősíti, hogy az Omnivision minden 2 adatbájtot 1 képpontnak megfelelőként kezel.
Az oszcilloszkóp hullámformái azt is igazolják, hogy a HREF alacsony marad a leállítási időközönként.
A 4. ábra megerősíti, hogy az Arduino XCLK kimenete 8 MHz. Azért látunk szinuszhullámot, nem pedig négyzethullámot, mert az összes páratlan felharmonikus láthatatlan a 20 MHz -es mintavételi oszcilloszkópom számára.
6. lépés: Frame Grabber
Az OV7670 kamerachipen található képérzékelő 656*486 pixeles tömböt tartalmaz, amelyből 640*480 pixeles rácsot használnak a fényképhez.
A HSTART, HSTOP, HREF és VSTRT, VSTOP, VREF regiszter értékek a kép pozícionálására szolgálnak az érzékelő felett. Ha a kép nincs megfelelően elhelyezve az érzékelő felett, fekete sáv jelenik meg egy vagy több szélén, a „Tervezési megjegyzések” részben leírtak szerint.
Az OV7670 a kép minden egyes sorát egy -egy képponton keresztül szkenneli a bal felső saroktól kezdve, amíg el nem éri a jobb alsó képpontot. Az Arduino egyszerűen továbbítja ezeket a képpontokat a számítógéphez a soros kapcsolaton keresztül, amint az az 1. képen látható.
A képkockázók feladata, hogy rögzítsék mind a 640*480 = 307200 képpontot, és megjelenítsék a tartalmat egy „kép” ablakban
A 3. feldolgozás ezt a következő négy kódsor segítségével éri el !!
1. kódsor:
bájt bájtBuffer = új bájt [maxBájt+1]; // ahol maxBytes = 307200
A kijelentés mögöttes kódja a következőket hozza létre:
- egy 307201 bájtos tömb „byteBuffer [307201]”
- A plusz bájt egy befejező (sorbeviteli) karakterhez tartozik.
2. kódsor:
méret (640, 480);
A kijelentés mögöttes kódja a következőket hozza létre:
- „szélesség = 640;” nevű változó
- a „magasság = 480” nevű változó;
- egy 307200 képpontos tömb, amelyet „pixeleknek [307200]” neveznek
- egy 640*480 pixeles „kép” ablak, amelyben a pixels tömb tartalma látható. Ez a „kép” ablak folyamatosan frissül 60 képkocka / s képkockasebességgel.
3. kódsor:
byteCount = myPort.readBytesUntil (lf, byteBuffer);
Az állítás mögöttes kódja:
- helyben puffereli a bejövő adatokat, amíg meg nem látja az „lf” (linefeed) karaktert.
- ezt követően a bájtBuffer tömbbe dobja az első 307200 bájt helyi adatot.
- Emellett a fogadott bájtok számát (307201) menti a „byteCount” nevű változóba.
4. kódsor:
képpontok = szín (byteBuffer );
Ha a következő ciklusba helyezzük, az utasítás mögöttes kódja:
- másolja a „byteBuffer ” tömb tartalmát a „pixels ” tömbbe
- amelynek tartalma megjelenik a képablakban.
Kulcsvonások:
A keretfogó a következő billentyűleütéseket ismeri fel:
- „C” = rögzítse a képet
- ’S’ = a kép mentése fájlba.
7. lépés: Szoftver
Töltse le és telepítse az alábbi szoftvercsomagokat, ha még nincs telepítve:
- „Arduino” a https://www.arduino.cc/en/main/software webhelyen
- „Java 8” innen: https://java.com/en/download/ [1]
- "Processing 3" a https://processing.org/download/ címen
Az Arduino vázlat telepítése:
- Távolítsa el az összes OV7670 áthidaló vezetéket [2]
- Csatlakoztasson egy USB -kábelt az Arduino -hoz
- Másolja az „OV7670_camera_mono_V2.ino” (mellékelve) tartalmát egy Arduino „vázlatba”, és mentse.
- Töltse fel a vázlatot az Arduino készülékére.
- Húzza ki az Arduino csatlakozót
- Most már biztonságosan csatlakoztathatja újra az OV7670 áthidaló vezetékeket
- Csatlakoztassa újra az USB -kábelt.
A Processing vázlat telepítése és futtatása
- Másolja az „OV7670_camera_mono_V2.pde” (mellékelt) tartalmát egy feldolgozó „vázlatba”, és mentse.
- Kattintson a bal felső „futtatás” gombra… egy fekete képablak jelenik meg
- Kattintson a „fekete” képablakra
- Nyomja meg a „c” gombot a kép rögzítéséhez. (kb. 6,4 másodperc).
- Nyomja meg az „s” gombot a kép mentéséhez a feldolgozó mappába
- Ismételje meg a 4. és 5. lépést
- Kattintson a „stop” gombra a programból való kilépéshez.
Megjegyzések
[1]
A 3. feldolgozáshoz Java 8 szükséges
[2]
Ez az „egyszeri” biztonsági lépés, hogy elkerülje az OV7670 kamerachip károsodását.
Amíg az „OV7670_camera_mono.ini” vázlatot fel nem töltötte az Arduino készülékére, a belső felhúzó ellenállások 5 voltra vannak csatlakoztatva, ráadásul fennáll annak a lehetősége, hogy az Arduino adatvonalainak egy része 5 voltos kimenet lehet… mindezek végzetesek a 3v3 voltos OV7670 kamerachip.
Az Arduino programozása után nem szükséges megismételni ezt a lépést, és a nyilvántartási értékek biztonságosan megváltoztathatók.
8. lépés: Színes kép készítése
Az alábbi szoftver pusztán kísérleti jellegű, és abban a reményben jelenik meg, hogy néhány technika hasznosnak bizonyul. A színek megfordulnak … Még nem találtam meg a megfelelő regiszterbeállításokat. Ha talál megoldást, kérjük, tegye közzé eredményeit
Ha színes képet szeretnénk kapni, akkor minden adatbájtot rögzíteni kell, és a következő képleteket kell alkalmazni.
Az OV7670 a következő képleteket használja az RGB (piros, zöld, kék) színinformációk YUV formátumú (4: 2: 2) alakítására: [1]
- Y = 0,31*R + 0,59*G + 0,11*B
- U = B - Y
- V = R -Y
- Cb = 0,563*(B-Y)
- Cr = 0,713*(R-Y)
A YUV (4: 2: 2) RGB színre való visszaállításához a következő képletek használhatók: [2]
- R = Y + 1,402* (Cr - 128)
- G = Y -0,344136*(Cb -128) -0,714136*(Cr -128)
- B = Y + 1,772*(Cb -128)
A mellékelt szoftver egyszerűen a monokróm szoftver kiterjesztése:
- A „c” rögzítési kérelmet elküldi az Arduino -nak
- Az Arduino elküldi a páros számú (monokróm) bájtokat a számítógépre
- A PC ezeket a bájtokat tömbbe menti
- Az Arduino ezután elküldi a páratlan számú (chroma) bájtokat a számítógépre.
- Ezeket a bájtokat egy második tömb tárolja … most már a teljes kép megvan.
- A fenti képleteket most minden négy UYVY adatbájtos csoportra alkalmazzuk.
- A kapott színes képpontokat ezután a „pixels ” tömbbe helyezzük
- A számítógép beolvassa a „pixels ” tömböt, és megjelenik egy kép a „image” ablakban.
A Processing 3 szoftver röviden megjeleníti az egyes szkenneléseket és a végeredményt:
- Az 1. fénykép az 1. szkennelésből származó U & V színezési adatokat mutatja
- A 2. fotó az Y1 és Y2 fényerősség adatait mutatja a 2. szkennelésből
- A 3. fotó a színes képet mutatja … csak egy dolog nincs rendben … a táska zöld legyen !!
Új kódot teszek közzé, amint megoldottam ezt a programot …
Hivatkozások:
[1]
www.haoyuelectronics.com/Attachment/OV7670%… (33. oldal)
[2]
en.wikipedia.org/wiki/YCbCr (JPEG -konvertálás)
Kattintson ide a többi utasításom megtekintéséhez.
Ajánlott:
Készítse el saját USB ventilátorát - Angol / Francais: 3 lépés
Készítse el saját USB ventilátorát | Magyar / Francais: MAGYAR Ma olyan oldalakon láttam, hogy vásárolhatunk USB -ventilátort. De megmondtam, miért nem készítem el az enyémet? Amire szüksége van: - Ragasztószalag villanyszerelő vagy kacsaszalag - PC -ventilátor - Egy USB -kábel, amely nem szolgálja Önt - Drótvágó - Csavarhúzó - Fűzőkapocs
Készítse el saját talajnedvesség -érzékelőjét az Arduino segítségével !!!: 10 lépés
Készítse el saját talajnedvesség-érzékelőjét az Arduino-val !!!: RÓLA !!! Ebben az oktatható útmutatóban egy FC-28 talajnedvesség-érzékelőt fogunk csatlakoztatni az Arduino-val. Ez az érzékelő méri a talajban lévő víz térfogatát, és a nedvesség szintjét adja meg. Az érzékelő mindkét analóg
Készítse el saját fejű fényképezőgépét LED -es megvilágítással!: 5 lépés (képekkel)
Készítse el saját fejjel felszerelt fényképezőgépét LED -es megvilágítással! A berendezés nemcsak a fényképezni kívánt tárgy fölött tudja tartani a kamerát, hanem monitorral is rendelkezik, amely tökéletesen megfigyeli a felvételt és a LED -es megvilágítást
Készítse el saját fényképezőgépét egy palack dugóval: 3 lépés
Készítse el saját fényképezőgépét egylábas dugóval: Ez az oktatóanyag nagyon egyszerű és nagyon olcsó. A sikerhez mindössze egy 6 mm hosszú állványcsavarra (1/4 ") és egy palackdugóra van szüksége. FONTOS. Ehhez az exakt menetes csavarra van szükség, különben tönkreteszi a fényképezőgép menetét
Használja újra az eldobható fényképezőgépet, és mentse meg a bolygót! és ments meg néhány forintot: 4 lépés
Használja újra az eldobható fényképezőgépet, és mentse meg a bolygót! és ments meg egy pár forintot: Nemrég voltam a helyi fotóüzletemben (jessops), hogy beszerezzek néhány használt eldobható fényképezőgépet, mivel biztos vagyok benne, hogy tisztában vannak azzal, hogy nagyon szórakoztatják a sokkoló embereket. Csak kérdezd meg, és odaadják őket. Azt is gondoltam, hogy ezek a cégek visszakapják a kamerákat, tedd