Satura rādītājs:

Izveidojiet savu kameru: 8 soļi
Izveidojiet savu kameru: 8 soļi

Video: Izveidojiet savu kameru: 8 soļi

Video: Izveidojiet savu kameru: 8 soļi
Video: ЮЛЯ ФИНЕСС: Как я вышла с 8 этажа! Групповое изнасилование под мефедроном, психиатрическая больница 2024, Jūlijs
Anonim
Image
Image
Izveidojiet savu kameru
Izveidojiet savu kameru

Šajā pamācībā ir paskaidrots, kā izveidot vienkrāsainu kameru, izmantojot Omnivision OV7670 attēla sensoru, Arduino mikrokontrolleru, dažus pārejas vadus un programmatūru Processing 3.

Tiek piedāvāta arī eksperimentāla programmatūra krāsaina attēla iegūšanai.

Nospiediet taustiņu “c”, lai uzņemtu 640*480 pikseļu attēlu … nospiediet taustiņu “s”, lai attēlu saglabātu failā. Ja vēlaties izveidot īsu laika intervāla filmu, secīgi attēli tiek numurēti secīgi.

Kamera nav ātra (katra skenēšana ilgst 6,4 sekundes) un ir piemērota izmantošanai tikai fiksētā apgaismojumā.

Izmaksas, izņemot jūsu Arduino un datoru, ir mazākas par kafijas tasi.

Attēli

Sastāvdaļas bez džempera vadiem ir parādītas sākuma fotoattēlā.

Otrais fotoattēls ir ekrānuzņēmums, kurā redzama Arduino kameru programmatūra un Processing 3 kadru satvērējs. Ieliktnis parāda, kā kamera ir pievienota.

Video demonstrē kameru darbībā. Nospiežot uzņemšanas taustiņu “c”, attēla skenēšanas laikā mirgo īslaicīga zibspuldze, kam seko darbības pārrāvums. Kad skenēšana ir pabeigta, attēls automātiski parādās displeja logā. Pēc katras taustiņa “s” nospiešanas attēli tiek parādīti mapē Apstrāde. Video noslēdzas, ātri pārvietojoties pa katru no trim saglabātajiem attēliem.

1. darbība: shēmas shēma

Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma
Ķēdes diagramma

Shēma visām šīs kameras versijām ir parādīta 1. fotoattēlā.

Fotoattēli 2, 3 parāda, kā ir savienoti džemperi, vadi un sastāvdaļas.

Bez alumīnija kronšteina attēli atrodas uz sāniem.

Brīdinājums

Ieprogrammējiet savu Arduino PIRMS jebkādu džemperu vadu pievienošanas OV7670 kameras mikroshēmai. Tas neļaus iepriekšējās programmas 5 voltu izejas tapām iznīcināt 3V3 voltu OV7670 kameras mikroshēmu.

2. darbība: detaļu saraksts

Detaļu saraksts
Detaļu saraksts

Šādas daļas tika iegūtas vietnē

  • 1 tikai OV7670 300KP VGA kameras modulis arduino DIY KIT
  • 1 tikai kameras kronšteins ar uzgriežņiem un skrūvēm
  • 1 tikai UNO R3 arduino MEGA328P 100% oriģināls ATMEGA16U2 ar USB kabeli

Šādas daļas tika iegūtas uz vietas

  • 18 Arduino vīriešu un sieviešu džemperu kabeļi
  • 3 tikai Arduinin sieviešu un sieviešu džemperu kabeļi
  • 1 tikai mini maizes dēlis
  • 4 tikai 4K7 omu 1/2 vatu rezistori
  • 1 tikai lūžņu alumīnija statīvs.

Jums būs nepieciešamas arī šādas datu lapas:

  • https://web.mit.edu/6.111/www/f2016/tools/OV7670_20…
  • https://www.haoyuelectronics.com/Attachment/OV7670%…

3. solis: teorija

Teorija
Teorija

OV7670 kameras mikroshēma

Noklusējuma izeja no OV7670 kameras mikroshēmas ietver YUV (4: 2: 2) video signālu un 3 laika viļņu formas. Citi izvades formāti ir iespējami, ieprogrammējot iekšējos reģistrus, izmantojot I2C saderīgu kopni.

YUV (4: 2: 2) video signāls (1. fotoattēls) ir nepārtraukta vienkrāsainu (melnbaltu) pikseļu secība, kas atdalīta ar U (zilā krāsu atšķirība) un V (sarkanās krāsas atšķirība) krāsu informāciju.

Šis izvades formāts ir pazīstams kā YUV (4: 2: 2), jo katrā 4 baitu grupā ir 2 vienkrāsaini baiti un 2 krāsu baiti.

Vienkrāsains

Lai iegūtu vienkrāsainu attēlu, mums jāizvēlas katrs otrais datu baits.

Arduino ir tikai 2K brīvpiekļuves atmiņas, bet katrs kadrs satur 640*2*480 = 307, 200 datu baitus. Ja vien OV7670 nepievienosim kadru satvērēju, visi dati jānosūta datoram pa rindām apstrādei.

Ir divas iespējas:

Katram no 480 secīgajiem kadriem mēs varam uzņemt vienu līniju uz Arduino lielā ātrumā, pirms to nosūtīt uz datoru ar ātrumu 1 Mb / s. Šāda pieeja ļautu OV7670 strādāt pilnā ātrumā, taču tas prasītu ilgu laiku (krietni vairāk par minūti).

Mana pieeja ir palēnināt PCLK līdz 8uS un nosūtīt katru paraugu tā, kā tas nāk. Šī pieeja ir ievērojami ātrāka (6,4 sekundes).

4. solis: dizaina piezīmes

Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes
Dizaina piezīmes

Saderība

OV7670 kameras mikroshēma ir 3 voltu ierīce. Datu lapa norāda, ka spriegums virs 3,5 voltiem sabojās mikroshēmu.

Lai nepieļautu, ka jūsu 5 voltu Arduino iznīcina OV7670 kameras mikroshēmu:

  • Ārējā pulksteņa (XCLK) signāls no Arduino jāsamazina līdz drošam līmenim, izmantojot sprieguma dalītāju.
  • Iekšējie Arduino I2C pievilkšanas rezistori līdz 5 voltiem ir jāatspējo un jāaizstāj ar ārējiem pievilkšanas rezistoriem pie 3 V3 barošanas avota.
  • Ieprogrammējiet savu Arduino PIRMS jebkādu džemperu vadu pievienošanas, jo dažas tapas joprojām var tikt ieprogrammētas kā izeja no iepriekšēja projekta !!! (Es to iemācījos grūtā veidā … par laimi, es nopirku divus, jo tie bija tik lēti).

Ārējais pulkstenis

OV7670 kameras mikroshēmai ir nepieciešams ārējs pulkstenis frekvenču diapazonā no 10Mhz līdz 24MHz.

Augstākā frekvence, ko mēs varam radīt no 16 MHz Arduino, ir 8 MHz, taču šķiet, ka tā darbojas.

Sērijas saite

Lai nosūtītu 1 datu baitu pa 1 Mb / s (miljonu bitu sekundē) sērijas saiti, nepieciešams vismaz 10 uS (mikrosekundes). Šis laiks tiek veidots šādi:

  • 8 datu biti (8us)
  • 1 sākuma bits (1uS)
  • 1 pieturas bits (1uS)

Iekšējais pulkstenis

OV7670 iekšējā pikseļu pulksteņa (PCLK) frekvenci nosaka biti [5: 0] reģistrā CLKRC (skat. 1. fotoattēlu). [1]

Ja mēs iestatām bitus [5: 0] = B111111 = 63 un piemērojam to iepriekšminētajai formulai, tad:

  • F (iekšējais pulkstenis) = F (ievades pulkstenis)/(bits [5: 0} +1)
  • = 8000000/(63+1)
  • = 125000 Hz vai
  • = 8uS

Tā kā paraugus ņemam tikai katru otro datu baitu, PCLK intervāls 8uS rada 16uS paraugu, kas ir pietiekams laiks, lai nosūtītu 1 datu baitu (10uS), atstājot 6uS apstrādei.

Kadru ātrums

Katrā VGA video rāmī ir 784*510 pikseļi (attēla elementi), no kuriem tiek parādīti 640*480 pikseļi. Tā kā YUV (4: 2: 2) izvades formātā ir vidēji 2 datu baiti uz pikseli, katrs kadrs aizņems 784*2*510*8 uS = 6,4 sekundes.

Šī kamera NAV ātra !!!

Horizontālā pozicionēšana

Attēls var tikt pārvietots horizontāli, ja mainām HSTART un HSTOP vērtības, saglabājot 640 pikseļu atšķirību.

Pārvietojot attēlu pa kreisi, iespējams, ka jūsu HSTOP vērtība būs mazāka par HSTART vērtību!

Neuztraucieties … tas viss ir saistīts ar pretplūsmu, kā paskaidrots 2. fotoattēlā.

Reģistri

OV7670 ir 201 astoņu bitu reģistrs, lai kontrolētu tādas lietas kā pastiprinājums, baltā balanss un ekspozīcija.

Viens datu baits pieļauj tikai 256 vērtības diapazonā no [0] līdz [255]. Ja mums ir nepieciešama lielāka kontrole, mums ir jāsaskaņo vairāki reģistri. Divi baiti dod mums 65536 iespējas … trīs baiti dod mums 16, 777, 216.

Šāds piemērs ir 3. fotoattēlā redzamais 16 bitu AEC (automātiskās ekspozīcijas kontroles) reģistrs, un tas ir izveidots, apvienojot šādu trīs reģistru daļas.

  • AECHH [5: 0] = AEC [15:10]
  • AECH [7: 2] = AEC [9: 2]
  • COM1 [1: 0] = AEC [1: 0]

Jābrīdina … reģistra adreses nav sagrupētas!

Blakus efekti

Lēns kadru ātrums rada vairākas nevēlamas blakusparādības:

Pareizai ekspozīcijai OV7670 paredz strādāt ar kadru ātrumu 30 kadri sekundē (kadri sekundē). Tā kā katrs kadrs aizņem 6,4 sekundes, elektroniskais aizvars ir atvērts 180 reizes ilgāk nekā parasti, kas nozīmē, ka visi attēli tiks pārmērīgi eksponēti, ja vien nemainīsim dažas reģistra vērtības.

Lai novērstu pārmērīgu ekspozīciju, esmu iestatījis visus AEC (automātiskās ekspozīcijas kontroles) reģistra bitus uz nulli. Pat tad, ja apgaismojums ir spilgts, objektīva priekšā ir nepieciešams neitrāla blīvuma filtrs.

Šķiet, ka ilgstoša iedarbība ietekmē arī UV datus. Tā kā man vēl nav jāatrod reģistra kombinācijas, kas rada pareizas krāsas … uzskatu, ka tas ir nepabeigts darbs.

Piezīme

[1]

Datu lapā (1. fotoattēls) redzamā formula ir pareiza, bet diapazons parāda tikai bitus [4: 0]?

5. solis: laika viļņu formas

Laika viļņu formas
Laika viļņu formas
Laika viļņu formas
Laika viļņu formas
Laika viļņu formas
Laika viļņu formas

Piezīme diagrammas “VGA kadru laiks” apakšējā kreisajā stūrī (1. fotoattēls) ir šāda:

YUV/RGB gadījumā tp = 2 x TPCLK

1., 2. un 3. attēlā tiek pārbaudīta datu lapa (-as) un apstiprināts, ka Omnivision katru 2 datu baitu uzskata par 1 pikseļa ekvivalentu.

Osciloskopa viļņu formas arī pārbauda, vai HREF paliek zems tukšošanas intervālu laikā.

4. attēls apstiprina, ka XCLK izeja no Arduino ir 8 MHz. Iemesls, kāpēc mēs redzam sinusa viļņus, nevis kvadrātviļņus, ir tas, ka visas nepāra harmonikas ir neredzamas manam 20MHz paraugu ņemšanas osciloskopam.

6. solis: rāmja satvērējs

Rāmja satvērējs
Rāmja satvērējs

Attēla sensors OV7670 kameras mikroshēmā ietver 656*486 pikseļu masīvu, no kuriem 640*480 pikseļu režģis tiek izmantots fotoattēlam.

HSTART, HSTOP, HREF un VSTRT, VSTOP, VREF reģistra vērtības tiek izmantotas attēla novietošanai virs sensora. Ja attēls nav pareizi novietots virs sensora, virs vienas vai vairākām malām redzēsit melnu joslu, kā paskaidrots sadaļā “Dizaina piezīmes”.

OV7670 skenē katru attēla līniju pa vienam pikselim, sākot no augšējā kreisā stūra, līdz tā sasniedz apakšējo labo pikseļu. Arduino vienkārši pārraida šos pikseļus uz datoru, izmantojot seriālo saiti, kā parādīts 1. fotoattēlā.

Kadru satvērēju uzdevums ir uzņemt katru no šiem 640*480 = 307200 pikseļiem un parādīt saturu “attēla” logā

Apstrāde 3 to panāk, izmantojot šādas četras koda rindas !!

1. koda rinda:

baits baitsBuffer = jauns baits [maxBytes+1]; // kur maxBytes = 307200

Šī paziņojuma pamatā esošais kods rada:

  • 307201 baitu masīvs ar nosaukumu “byteBuffer [307201]”
  • Papildu baits ir paredzēts izbeigšanas (linefeed) rakstzīmei.

2. koda rinda:

izmērs (640, 480);

Šī paziņojuma pamatā esošais kods rada:

  • mainīgais ar nosaukumu “platums = 640;”
  • mainīgais ar nosaukumu “augstums = 480”;
  • 307200 pikseļu masīvs ar nosaukumu “pikseļi [307200]”
  • 640*480 pikseļu “attēla” logs, kurā tiek parādīts pikseļu masīva saturs. Šis “attēla” logs tiek nepārtraukti atsvaidzināts ar kadru ātrumu 60 kadri sekundē.

3. koda rinda:

byteCount = myPort.readBytesUntil (lf, baitsBuffer);

Pamata kods šajā paziņojumā:

  • buferē ienākošos datus lokāli, līdz tiek parādīts “lf” (linefeed) raksturs.
  • pēc tam tas izmet pirmos 307200 baitus vietējo datu baituBuffer masīvā.
  • Tas arī saglabā saņemto baitu skaitu (307201) mainīgajā, ko sauc par “baitu skaitli”.

4. koda rinda:

pikseļi = krāsa (baitsBuffer );

Ievietojot nākamo cilpu, šī paziņojuma pamatā esošais kods:

  • kopē masīva “byteBuffer ” saturu masīvā “pixels ”
  • kuru saturs parādās attēla logā.

Atslēgas:

Kadru satvērējs atpazīst šādus taustiņsitienus:

  • “C” = uzņemiet attēlu
  • “S” = saglabājiet attēlu failā.

7. solis: programmatūra

Lejupielādējiet un instalējiet katru no šīm programmatūras pakotnēm, ja tā vēl nav instalēta:

  • “Arduino” no vietnes
  • “Java 8” no vietnes https://java.com/en/download/ [1]
  • "Apstrāde 3" no vietnes

Arduino skices instalēšana:

  • Noņemiet visus OV7670 džemperu vadus [2]
  • Pievienojiet USB kabeli savam Arduino
  • Kopējiet “OV7670_camera_mono_V2.ino” (pievienots) saturu Arduino “skicē” un saglabājiet.
  • Augšupielādējiet skici savā Arduino.
  • Atvienojiet Arduino
  • Tagad jūs varat droši savienot OV7670 džempera vadus
  • Pievienojiet USB kabeli vēlreiz.

Apstrādes skices instalēšana un palaišana

  • Kopējiet “OV7670_camera_mono_V2.pde” (pievienots) saturu apstrādes “skicē” un saglabājiet.
  • Noklikšķiniet uz pogas "palaist" augšējā kreisajā stūrī … parādīsies melna attēla logs
  • Noklikšķiniet uz “melnā” attēla loga
  • Lai uzņemtu attēlu, nospiediet taustiņu “c”. (apmēram 6,4 sekundes).
  • Nospiediet taustiņu “s”, lai attēlu saglabātu apstrādes mapē
  • Atkārtojiet 4. un 5. darbību
  • Lai izietu no programmas, noklikšķiniet uz pogas “apturēt”.

Piezīmes

[1]

Apstrādei 3 nepieciešama Java 8

[2]

Šis ir “tikai vienreizējs” drošības solis, lai nesabojātu OV7670 kameras mikroshēmu.

Kamēr skice “OV7670_camera_mono.ini” nav augšupielādēta jūsu Arduino, iekšējie pievilkšanas rezistori ir savienoti ar 5 voltiem, kā arī pastāv iespēja, ka dažas Arduino datu līnijas var būt 5 voltu izejas… tas viss ir nāvējoši 3V3 voltu OV7670 kameras mikroshēma.

Kad Arduino ir ieprogrammēts, šī darbība nav jāatkārto, un reģistra vērtības var droši mainīt.

8. darbība. Krāsu attēla iegūšana

Krāsu attēla iegūšana
Krāsu attēla iegūšana
Krāsu attēla iegūšana
Krāsu attēla iegūšana
Krāsu attēla iegūšana
Krāsu attēla iegūšana

Šī programmatūra ir tikai eksperimentāla un tiek ievietota, cerot, ka daži no paņēmieniem izrādīsies noderīgi. Šķiet, ka krāsas ir apgrieztas … Man vēl nav jāatrod pareizie reģistra iestatījumi. Ja atrodat risinājumu, lūdzu, ievietojiet savus rezultātus

Ja mēs vēlamies iegūt krāsainu attēlu, jāfiksē visi datu baiti un jāpiemēro šādas formulas.

OV7670 izmanto šādas formulas, lai pārvērstu RGB (sarkana, zaļa, zila) krāsu informāciju 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)

Lai YUV (4: 2: 2) pārvērstu atpakaļ RGB krāsā, var izmantot šādas formulas: [2]

  • R = Y + 1,402* (Cr - 128)
  • G = Y -0,344136*(Cb -128) -0,714136*(Cr -128)
  • B = Y + 1,772*(Cb -128)

Pievienotā programmatūra ir vienkārši vienkrāsainas programmatūras paplašinājums:

  • Arduino tiek nosūtīts “c” uztveršanas pieprasījums
  • Arduino uz datoru nosūta pāra numurētos (vienkrāsainos) baitus
  • Dators šos baitus saglabā masīvā
  • Tālāk Arduino uz datoru nosūta nepāra numurētos (hroma) baitus.
  • Šie baiti tiek saglabāti otrajā masīvā … tagad mums ir viss attēls.
  • Iepriekš minētās formulas tagad tiek piemērotas katrai četru UYVY datu baitu grupai.
  • Rezultātā iegūtie krāsu pikseļi tiek ievietoti masīvā “pixels ”
  • Dators skenē “pikseļu ” masīvu, un logā “attēls” parādās attēls.

Programmatūra Processing 3 īsi parāda katru skenēšanu un galīgos rezultātus:

  • 1. fotoattēlā redzami U & V krāsu dati no 1. skenēšanas
  • 2. fotoattēlā redzami Y1 un Y2 spilgtuma dati no 2. skenēšanas
  • 3. fotoattēlā redzams krāsains attēls … tikai viena lieta ir nepareiza … somai jābūt zaļai !!

Kad es atrisināšu šo programmu, es ievietošu jaunu kodu …

Atsauces:

[1]

www.haoyuelectronics.com/Attachment/OV7670%… (33. lpp.)

[2]

en.wikipedia.org/wiki/YCbCr (JPEG konvertēšana)

Noklikšķiniet šeit, lai skatītu citus manus norādījumus.

Ieteicams: