Obsah:
- Krok 1: Schéma zapojenia
- Krok 2: Zoznam dielov
- Krok 3: Teória
- Krok 4: Poznámky k návrhu
- Krok 5: Načasovanie priebehov
- Krok 6: Uchopovač rámu
- Krok 7: Softvér
- Krok 8: Získanie farebného obrázku
Video: Vytvorte si vlastný fotoaparát: 8 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
Tento návod vysvetľuje, ako vytvoriť monochromatickú kameru pomocou obrazového snímača Omnivision OV7670, mikrokontroléra Arduino, niekoľkých prepojovacích káblov a softvéru Processing 3.
Prezentovaný je aj experimentálny softvér na získanie farebného obrázku.
Stlačením klávesu „c“nasnímate obrázok s rozlíšením 640*480 pixelov… stlačením klávesu „s“obrázok uložíte do súboru. Ak chcete vytvoriť krátky časozberný film, nasledujúce obrázky sú postupne očíslované.
Fotoaparát nie je rýchly (každé skenovanie trvá 6,4 sekundy) a je vhodný len na použitie pri pevnom osvetlení.
Náklady, bez vášho Arduina a počítača, sú nižšie ako šálka kávy.
snímky
Súčasti, bez prepojovacieho prepojenia, sú zobrazené na úvodnej fotografii.
Druhá fotografia je snímka obrazovky zobrazujúca softvér fotoaparátu Arduino a zachytávač snímok Processing 3. Vložka ukazuje, ako je kamera pripojená.
Video ukazuje kameru v prevádzke. Po stlačení klávesu snímania „c“krátko nasníma obrázok a potom nasleduje skenovanie. Po dokončení skenovania sa obrázok automaticky zobrazí v zobrazovacom okne. Po každom stlačení klávesu „s“sa obrázky zobrazia v priečinku Processing. Video sa končí rýchlym cyklom prechádzania každým z troch uložených obrázkov.
Krok 1: Schéma zapojenia
Schéma zapojenia pre všetky verzie tohto fotoaparátu je zobrazená na fotografii 1.
Fotografie 2, 3 ukazujú, ako sú prepojené prepojovacie vodiče a komponenty.
Bez hliníkového držiaka ležia obrázky na boku.
Pozor
Naprogramujte si Arduino PRED pripevnením akýchkoľvek prepojovacích káblov na čip kamery OV7670. Tým sa zabráni tomu, aby 5 -voltové výstupné piny z predchádzajúceho programu zničili čip fotoaparátu OV7670 s napätím 3 V3 V.
Krok 2: Zoznam dielov
Nasledujúce diely boli získané z
- 1 iba OV7670 300KP kamerový modul VGA pre arduino DIY KIT
- 1 iba držiak fotoaparátu s maticami a skrutkami
- 1 iba UNO R3 pre arduino MEGA328P 100% originál ATMEGA16U2 s káblom USB
Nasledujúce časti boli získané lokálne
- 18 prepojovacích káblov Arduino pre mužov a ženy
- 3 iba prepojovacie káble Arduinin žena-žena
- 1 iba malá doska na pečenie
- 4 iba odpory 4K7 ohm 1/2 wattu
- 1 iba hliníkový stojan na šrot.
Budete tiež potrebovať nasledujúce technické listy:
- https://web.mit.edu/6.111/www/f2016/tools/OV7670_20…
- https://www.haoyuelectronics.com/Attachment/OV7670%…
Krok 3: Teória
Čip kamery OV7670
Predvolený výstup z kamerového čipu OV7670 obsahuje video signál YUV (4: 2: 2) a 3 časové krivky. Ďalšie výstupné formáty sú možné programovaním vnútorných registrov prostredníctvom zbernice kompatibilnej s I2C.
Videosignál YUV (4: 2: 2) (foto 1) je súvislou sekvenciou monochromatických (čiernobielych) pixelov oddelených informáciami o farbách U (rozdiel modrej farby) a V (rozdiel farby farby).
Tento výstupný formát je známy ako YUV (4: 2: 2), pretože každá skupina 4 bajtov obsahuje 2 monochromatické bajty a 2 farebné bajty.
Monochromatický
Aby sme získali monochromatický obraz, musíme vzorkovať každý druhý dátový bajt.
Arduino má iba 2 kB pamäte s ľubovoľným prístupom, ale každý rámec obsahuje 640*2*480 = 307 200 dátových bajtov. Pokiaľ do OV7670 nepridáme zachytávač snímok, všetky údaje sa musia odoslať do počítača na spracovanie po riadkoch.
Sú dve možnosti:
Pre každý zo 480 po sebe nasledujúcich rámcov dokážeme zachytiť jeden riadok do Arduina vysokou rýchlosťou a potom ho odoslať do počítača rýchlosťou 1 Mbps. Takýto prístup by znamenal, že OV7670 pracuje na plné otáčky, ale bude to trvať dlho (viac ako minútu).
Prístup, ktorý som zvolil, je spomaliť PCLK na 8uS a odoslať každú vzorku tak, ako príde. Tento prístup je výrazne rýchlejší (6,4 sekundy).
Krok 4: Poznámky k návrhu
Kompatibilita
Čip kamery OV7670 je zariadenie 3v3 voltov. Dátový list naznačuje, že napätie nad 3,5 V poškodí čip.
Aby ste zabránili 5 -voltovému Arduinu v zničení kamerového čipu OV7670:
- Signál externých hodín (XCLK) z Arduina musí byť znížený na bezpečnú úroveň pomocou deliča napätia.
- Vnútorné výsuvné odpory Arduino I2C na 5 voltov musia byť deaktivované a nahradené externými výsuvnými odpormi na zdroj 3v3 voltu.
- Naprogramujte si Arduino PRED pripojením akýchkoľvek prepojovacích káblov, pretože niektoré kolíky môžu byť stále naprogramované ako výstup z predchádzajúceho projektu !!! (Naučil som sa to tvrdo … našťastie som kúpil dve, pretože boli také lacné).
Externé hodiny
Čip kamery OV7670 vyžaduje externé hodiny vo frekvenčnom rozsahu 10 MHz až 24 MHz.
Najvyššia frekvencia, ktorú môžeme generovať zo 16 MHz Arduino, je 8 MHz, ale zdá sa, že to funguje.
Sériový odkaz
Na odoslanie 1 dátového bajtu cez sériové prepojenie 1 Mbps (milión bitov za sekundu) trvá najmenej 10 us (mikrosekúnd). Tento čas je zostavený nasledovne:
- 8 dátových bitov (8us)
- 1 štartovací bit (1uS)
- 1 stop-bit (1uS)
Vnútorné hodiny
Frekvencia interných pixelových hodín (PCLK) v OV7670 je nastavená bitmi [5: 0] v registri CLKRC (pozri fotografiu 1). [1]
Ak nastavíme bity [5: 0] = B111111 = 63 a použijeme ho na vyššie uvedený vzorec, potom:
- F (vnútorné hodiny) = F (vstupné hodiny)/(Bit [5: 0} +1)
- = 8000000/(63+1)
- = 125 000 Hz alebo
- = 8uS
Pretože vzorkujeme iba každý druhý dátový bajt, interval PCLK 8uS má za následok 16uS vzorku, čo je dostatočný čas na prenos 1 dátového bajtu (10uS), pričom 6uS zostáva na spracovanie.
Snímok za sekundu
Každý video rámec VGA obsahuje 784*510 pixelov (obrazové prvky), z ktorých je zobrazených 640*480 pixelov. Pretože výstupný formát YUV (4: 2: 2) má v priemere 2 dátové bajty na pixel, každý snímok bude trvať 784*2*510*8 uS = 6,4 sekundy.
Táto kamera NIE je rýchla !!!
Horizontálne polohovanie
Obraz zmeníme horizontálne, ak zmeníme hodnoty HSTART a HSTOP pri zachovaní rozdielu 640 pixelov.
Pri posúvaní obrázka doľava je možné, že hodnota HSTOP bude nižšia ako hodnota HSTART!
Nebojte sa … to všetko súvisí s pretečením počítadla, ako je vysvetlené na fotografii 2.
Registre
OV7670 má 201 osembitových registrov na ovládanie vecí, ako sú zisk, vyváženie bielej a expozícia.
Jeden dátový bajt umožňuje iba 256 hodnôt v rozsahu [0] až [255]. Ak požadujeme väčšiu kontrolu, musíme kaskádovať niekoľko registrov. Dva bajty nám poskytujú 65 536 možností … tri bajty nám dávajú 16, 777, 216.
16 -bitový register AEC (automatické ovládanie expozície) zobrazený na fotografii 3 je takýmto príkladom a je vytvorený kombináciou častí nasledujúcich troch registrov.
- AECHH [5: 0] = AEC [15:10]
- AECH [7: 2] = AEC [9: 2]
- COM1 [1: 0] = AEC [1: 0]
Upozorňujeme, že adresy registrov nie sú zoskupené!
Vedľajšie účinky
Pomalá snímková frekvencia prináša množstvo nežiaducich vedľajších účinkov:
Pre správnu expozíciu OV7670 očakáva, že bude pracovať so snímkovou frekvenciou 30 fps (snímok za sekundu). Pretože každý záber trvá 6,4 sekundy, elektronická uzávierka sa otvorí 180-krát dlhšie ako normálne, čo znamená, že všetky obrázky budú preexponované, pokiaľ nezmeníme niektoré hodnoty registra.
Aby sa zabránilo nadmernej expozícii, nastavil som všetky bity registra AEC (automatické ovládanie expozície) na nulu. Aj napriek tomu je pri jasnom osvetlení pred objektívom potrebný filter s neutrálnou hustotou.
Zdá sa, že dlhodobá expozícia má vplyv aj na údaje o UV žiarení. Keďže som ešte nenašiel kombinácie registrov, ktoré produkujú správne farby …, považujte to za prebiehajúcu prácu.
Poznámka
[1]
Vzorec uvedený v údajovom liste (foto 1) je správny, ale rozsah zobrazuje iba bity [4: 0]?
Krok 5: Načasovanie priebehov
Poznámka v ľavom dolnom rohu diagramu „Časovanie rámca VGA“(foto 1) znie:
Pre YUV/RGB tp = 2 x TPCLK
Obrázky 1, 2 a 3 overujú dátové listy a potvrdzujú, že spoločnosť Omnivision považuje každé 2 dátové bajty za ekvivalent 1 pixelu.
Krivky osciloskopu tiež overujú, či HREF zostáva počas intervalov zatemnenia NÍZKY.
Obr.4 potvrdzuje, že výstup XCLK z Arduina je 8 MHz. Dôvod, prečo vidíme sínusovú vlnu, a nie štvorcovú vlnu, je ten, že všetky nepárne harmonické sú pre môj 20MHz vzorkovací osciloskop neviditeľné.
Krok 6: Uchopovač rámu
Obrazový snímač v čipe kamery OV7670 obsahuje pole 656 x 486 pixelov, z ktorých je na fotografiu použitá mriežka 640 x 480 pixelov.
Na umiestnenie obrazu nad snímač sa používajú hodnoty registra HSTART, HSTOP, HREF a VSTRT, VSTOP, VREF. Ak nie je obrázok umiestnený správne nad senzorom, uvidíte čierny pás na jednom alebo viacerých okrajoch, ako je vysvetlené v časti „Poznámky k návrhu“.
OV7670 skenuje každý riadok obrázku po jednom pixeli od ľavého horného rohu, kým nedosiahne pravý dolný pixel. Arduino jednoducho odovzdá tieto pixely do počítača pomocou sériového prepojenia, ako je to znázornené na fotografii 1.
Úlohou snímačov rámov je zachytiť každý z týchto 640*480 = 307200 pixelov a zobraziť obsah v okne „obrázok“
Processing 3 to dosahuje pomocou nasledujúcich štyroch riadkov kódu !!
Riadok kódu 1:
byte byteBuffer = nový bajt [maxBytes+1]; // kde maxBytes = 307200
Základný kód v tomto vyhlásení vytvára:
- pole 307201 bajtov s názvom „byteBuffer [307201]“
- Extra bajt je pre znak ukončenia (linefeed).
Riadok kódu 2:
veľkosť (640, 480);
Základný kód v tomto vyhlásení vytvára:
- premenná nazývaná „šírka = 640;“
- premenná nazývaná „výška = 480“;
- pole 307200 pixelov s názvom „pixely [307200]“
- okno „obrazu“640*480 pixelov, v ktorom je zobrazený obsah poľa . Toto okno „obrázka“sa neustále obnovuje pri snímkovej frekvencii 60 fps.
Kódový riadok 3:
byteCount = myPort.readBytesUntil (lf, byteBuffer);
Základný kód v tomto vyhlásení:
- ukladá prichádzajúce údaje lokálne do pamäte, kým neuvidí znak „lf“(linefeed).
- potom zalomí prvých 307200 bajtov lokálnych údajov do poľa byteBuffer .
- Uloží tiež počet prijatých bajtov (307201) do premennej s názvom „byteCount“.
Kódový riadok 4:
pixely = farba (byteBuffer );
Keď sa umiestni do slučky for-next-loop, základný kód v tomto vyhlásení:
- skopíruje obsah poľa „byteBuffer “do poľa „pixely “
- ktorých obsah sa zobrazí v okne obrázka.
Klávesové skratky:
Drapák snímky rozpoznáva nasledujúce stlačenia klávesov:
- ‘C’ = nasnímajte obrázok
- ‘S’ = uložte obrázok do súboru.
Krok 7: Softvér
Stiahnite a nainštalujte si každý z nasledujúcich softvérových balíkov, ak ešte nie sú nainštalované:
- „Arduino“z
- „Java 8“z https://java.com/en/download/ [1]
- „Processing 3“from
Inštalácia náčrtu Arduino:
- Odstráňte všetky prepojovacie káble OV7670 [2]
- Pripojte kábel USB k svojmu Arduinu
- Skopírujte obsah „OV7670_camera_mono_V2.ino“(priložený) do „skice“Arduina a uložte.
- Nahrajte skicu do svojho Arduina.
- Odpojte Arduino
- Teraz môžete bezpečne znova pripojiť prepojovacie vodiče OV7670
- Znova pripojte kábel USB.
Inštalácia a spustenie náčrtu Spracovanie
- Skopírujte obsah „OV7670_camera_mono_V2.pde“(priložený) do „skice“spracovania a uložte.
- Kliknite na tlačidlo „spustiť“vľavo hore … zobrazí sa čierne okno s obrázkom
- Kliknite na „čierne“okno s obrázkom
- Na zachytenie obrázku stlačte kláves „c“. (približne 6,4 sekundy).
- Stlačením klávesu „s“uložíte obrázok do priečinka na spracovanie
- Zopakujte kroky 4 a 5
- Program ukončíte kliknutím na tlačidlo „zastaviť“.
Poznámky
[1]
Processing 3 vyžaduje Java 8
[2]
Toto je bezpečnostný krok „iba raz“, aby ste predišli poškodeniu čipu kamery OV7670.
Kým nie je do vášho Arduina nahraný náčrt „OV7670_camera_mono.ini“, vnútorné výsuvné odpory budú pripojené na 5 voltov a navyše existuje možnosť, že niektoré dátové linky Arduino môžu mať 5 voltové výstupy … pričom všetky sú pre ne smrteľné. čip kamery OV7670 3v3 volty.
Akonáhle je Arduino naprogramované, nie je potrebné tento krok opakovať a hodnoty registra je možné bezpečne zmeniť.
Krok 8: Získanie farebného obrázku
Nasledujúci softvér je čisto experimentálny a je publikovaný v nádeji, že niektoré z techník budú užitočné. Zdá sa, že farby sú obrátené … Ešte som nenašiel správne nastavenia registra. Ak nájdete riešenie, pošlite svoje výsledky
Ak máme získať farebný obrázok, musia byť zachytené všetky dátové bajty a použité nasledujúce vzorce.
OV7670 používa nasledujúce vzorce na prevod informácií o farbe RGB (červená, zelená, modrá) na YUV (4: 2: 2): [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)
Na prevod YUV (4: 2: 2) späť na farbu RGB je možné použiť nasledujúce vzorce: [2]
- R = Y + 1,402* (Cr - 128)
- G = Y -0,344136*(Cb -128) -0,714136*(Cr -128)
- B = Y + 1,772*(Cb -128)
Pripojený softvér je jednoducho rozšírením monochromatického softvéru:
- Arduinu je odoslaná požiadavka na zachytenie „c“
- Arduino odosiela párne očíslované (monochromatické) bajty do počítača
- Počítač tieto bajty uloží do poľa
- Potom Arduino odošle nepárne číslované (chroma) bajty do počítača.
- Tieto bajty sú uložené do druhého poľa … teraz máme celý obrázok.
- Vyššie uvedené vzorce sa teraz aplikujú na každú skupinu štyroch dátových bajtov UYVY.
- Výsledné farebné pixely sa potom umiestnia do poľa „pixely “
- Počítač naskenuje pole „pixelov “a v okne „obrázok“sa zobrazí obrázok.
Softvér Processing 3 stručne zobrazí každé skenovanie a konečné výsledky:
- Fotografia 1 zobrazuje údaje o chromatickosti U & V zo skenovania 1
- Na fotografii 2 sú uvedené údaje o svietivosti Y1 a Y2 zo skenovania 2
- Fotografia 3 zobrazuje farebný obrázok … len jedna vec nie je v poriadku … taška by mala byť zelená !!
Keď vyriešim tento program, uverejním nový kód …
Referencie:
[1]
www.haoyuelectronics.com/Attachment/OV7670%… (strana 33)
[2]
en.wikipedia.org/wiki/YCbCr (konverzia JPEG)
Kliknutím sem zobrazíte ďalšie moje pokyny.
Odporúča:
Vytvorte si svoj vlastný snímač pôdnej vlhkosti s Arduinom !!!: 10 krokov
Vytvorte si svoj vlastný snímač pôdnej vlhkosti s Arduino !!!: O !!! V tomto návode sa chystáme prepojiť snímač pôdnej vlhkosti FC-28 s Arduino. Tento senzor meria objemový obsah vody v pôde a ako výstup nám poskytuje úroveň vlhkosti. Senzor je vybavený analo
Vytvorte si vlastný adaptér Rock Band Ekit (bez staršieho adaptéra), nedeštruktívne!: 10 krokov
Vytvorte si svoj vlastný adaptér Rock Band Ekit (bez staršieho adaptéra), nedeštruktívne!: Potom, čo som počul populárneho hostiteľa podcastov, ako sa zmieňuje o tom, že jeho káblový USB starý adaptér umiera, išiel som hľadať riešenie pre domácich majstrov, ako pripojiť lepší/vlastný eKit k RB. . Ďakujem pánovi DONINATOROVI na Youtube, ktorý natočil video s podrobnosťami o jeho podobnom
Vytvorte si vlastný zosilňovač slúchadiel V1: 8 krokov
Vytvorte si vlastný zosilňovač slúchadiel V1: Nikdy som o slúchadlových zosilňovačoch veľmi neuvažoval, kým som ich nevyskúšal. Myslel som si, že je to celé tak trochu gýč. Prečo by ste na ovládanie reproduktorov vo svojich slúchadlách potrebovali samostatný zosilňovač! Až keď vyskúšate slúchadlový zosilňovač, pochopíte
Vytvorte si vlastný pripojený termostat na vykurovanie a ušetrite na vykurovaní: 53 krokov (s obrázkami)
Vytvorte si vlastný pripojený termostat na vykurovanie a ušetrite na vykurovaní: Aký je účel? Zvýšte komfort vykurovaním domu presne tak, ako chcete. Ušetrite a znížte emisie skleníkových plynov vykurovaním domu iba vtedy, keď potrebujete Udržujte kontrolu nad kúrením, nech ste kdekoľvek Buďte hrdí, že ste to urobili
Použite silu a vytvorte si vlastný svetelný meč (čepeľ): 9 krokov (s obrázkami)
Použite silu a vyrobte si vlastný svetelný meč (čepeľ): Táto inštrukcia je určená výhradne na výrobu čepele pre svetelný meč Ben Solo Legacy zakúpený v spoločnosti Galaxy's Edge od spoločnosti Disneyland v Anaheime, CA, avšak podobné kroky je možné vykonať aj pri výrobe vlastnej čepele pre iný svetelný meč. Sledujte ďalej