Obsah:

Vytvorte si vlastný fotoaparát: 8 krokov
Vytvorte si vlastný fotoaparát: 8 krokov

Video: Vytvorte si vlastný fotoaparát: 8 krokov

Video: Vytvorte si vlastný fotoaparát: 8 krokov
Video: ЮЛЯ ФИНЕСС: Как я вышла с 8 этажа! Групповое изнасилование под мефедроном, психиатрическая больница 2024, Júl
Anonim
Image
Image
Vytvorte si vlastný fotoaparát
Vytvorte si vlastný fotoaparát

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
Schéma zapojenia
Schéma zapojenia
Schéma zapojenia
Schéma zapojenia
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

Zoznam položiek
Zoznam položiek

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

Teória
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

Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
Poznámky k návrhu
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

Načasovanie priebehov
Načasovanie priebehov
Načasovanie priebehov
Načasovanie priebehov
Načasovanie priebehov
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

Rámový drapák
Rámový drapák

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

Získanie farebného obrázku
Získanie farebného obrázku
Získanie farebného obrázku
Získanie farebného obrázku
Získanie farebného obrázku
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: