Агуулгын хүснэгт:

Камераа өөрөө хий: 8 алхам
Камераа өөрөө хий: 8 алхам

Видео: Камераа өөрөө хий: 8 алхам

Видео: Камераа өөрөө хий: 8 алхам
Видео: Камера-ЛАМПА со слежением и определением человека. 2024, Долдугаар сарын
Anonim
Image
Image
Камераа өөрөө хий
Камераа өөрөө хий

Энэхүү заавар нь Omnivision OV7670 дүрс мэдрэгч, Arduino микроконтроллер, хэд хэдэн холбогч утас, Processing 3 програмыг ашиглан хэрхэн монохром камер хийх талаар тайлбарласан болно.

Өнгөт дүрс олж авах туршилтын програм хангамжийг мөн танилцуулж байна.

640*480 пикселийн зураг авахын тулд "c" товчлуурыг дарна уу. "S" товчийг дарж зургийг файлд хадгална уу. Хэрэв та богино хугацааны кино бүтээхийг хүсч байвал дараалсан зургуудыг дараалан дугаарлана.

Камер нь хурдан биш (скан хийх бүрт 6.4 секунд зарцуулдаг) бөгөөд зөвхөн тогтмол гэрэлтүүлэгт ашиглахад тохиромжтой.

Таны Arduino болон PC -ийг эс тооцвол нэг аяга кофе хүрэхгүй болно.

Зураг

Холбогч утасгүй бүрэлдэхүүн хэсгүүдийг эхний зураг дээр харуулав.

Хоёрдахь зураг бол Arduino камерын програм хангамж, Processing 3 хүрээ бариулыг харуулсан дэлгэцийн зураг юм. Энэхүү оруулга нь камер хэрхэн холбогдсон болохыг харуулж байна.

Видео бичлэг дээр камер ажиллаж байгааг харуулав. "C" барих товчлуурыг дарахад богино хугацаанд анивчдаг бөгөөд дараа нь зургийг сканнердах үед идэвхждэг. Скан хийж дуусаад зураг автоматаар дэлгэцийн цонхонд гарч ирнэ. Дараа нь "s" товчлуурыг дарсны дараа зураг боловсруулах фолдерт гарч ирнэ. Хадгалагдсан гурван зураг тус бүрээр хурдан дугуй унаж видео бичлэг дуусна.

Алхам 1: Хэлхээ диаграм

Хэлхээ диаграм
Хэлхээ диаграм
Хэлхээ диаграм
Хэлхээ диаграм
Хэлхээ диаграм
Хэлхээ диаграм

Энэхүү камерын бүх хувилбаруудын схемийг 1 -р зурагт үзүүлэв.

2, 3-р зурагт холбогч утас, эд ангиуд хэрхэн холбогдож байгааг харуулав.

Хөнгөн цагаан хаалтгүйгээр зурагнууд хажуу тийшээ хэвтэж байна.

Анхааруулга

OV7670 камерын чипт холбогч утас холбохоос өмнө Arduino -г програмчлаарай. Энэ нь өмнөх програмын 5 вольтын гаралтын зүү нь 3v3 вольтын OV7670 камерын чипийг устгахаас урьдчилан сэргийлэх болно.

Алхам 2: эд ангиудын жагсаалт

Эд ангиудын жагсаалт
Эд ангиудын жагсаалт

Дараах хэсгүүдийг https://www.aliexpress.com/ дээрээс авсан болно.

  • Зөвхөн 1 OV7670 300KP VGA камерын модуль нь arduino DIY KIT -д зориулагдсан болно
  • Зөвхөн самар, боолтоор тоноглогдсон 1 камерын хаалт
  • USB кабель бүхий arduino MEGA328P 100% эх ATMEGA16U2 -д зориулсан зөвхөн UNO R3

Дараах хэсгүүдийг орон нутгаас олж авсан

  • 18 anly Arduino эрэгтэй, эмэгтэй холбогч кабель
  • 3 зөвхөн Arduinin эмэгтэй, эмэгтэй холбогч кабель
  • 1 зөвхөн мини талхны тавцан
  • Зөвхөн 4K7 ом 1/2 ватт эсэргүүцэл
  • 1 ширхэг зөвхөн хөнгөн цагаан тавиур.

Мөн танд дараах мэдээллийн хуудас хэрэгтэй болно.

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

Алхам 3: Онол

Онол
Онол

OV7670 камерын чип

OV7670 камерын чипийн үндсэн гаралт нь YUV (4: 2: 2) видео дохио болон 3 хугацааны долгионы хэлбэрээс бүрдэнэ. I2C нийцтэй автобусаар дотоод бүртгэлийг програмчлах замаар бусад гаралтын форматыг хийх боломжтой.

YUV (4: 2: 2) видео дохио (зураг 1) нь U (цэнхэр өнгөний ялгаа) ба V (улаан өнгөний ялгаа) өнгөний мэдээллээр тусгаарлагдсан монохром (хар ба цагаан) пикселийн тасралтгүй дараалал юм.

Энэхүү гаралтын форматыг YUV (4: 2: 2) гэж нэрлэдэг бөгөөд 4 байтын бүлэг тус бүр 2 өнгөт байт, 2 өнгөт байт агуулдаг.

Монохром

Монохром зураг авахын тулд бид секунд тутамд өгөгдлийн байтыг дээжлэх ёстой.

Arduino нь зөвхөн 2K санамсаргүй хандалтын санах ойтой боловч хүрээ бүр 640*2*480 = 307, 200 дата байтаас бүрдэнэ. Хэрэв бид OV7670-д хүрээ бариулагч нэмж оруулахгүй бол бүх өгөгдлийг боловсруулахын тулд компьютер руу дараалан илгээх ёстой.

Хоёр боломж байна:

Дараалсан 480 фрейм бүрийн хувьд бид Arduino руу нэг мөрийг өндөр хурдтайгаар авах боломжтой бөгөөд үүнийг компьютерт 1Mbps дээр дамжуулах боломжтой. Ийм хандлага нь OV7670 -ийг бүрэн хурдаар ажиллуулах боловч удаан хугацаа шаардагдах болно (нэг минут гаруй).

Миний хийсэн арга бол PCLK -ийг 8uS хүртэл удаашруулж, дээж бүрийг ирэхэд нь илгээх явдал юм. Энэ арга нь нэлээд хурдан (6.4 секунд).

Алхам 4: Дизайн тэмдэглэл

Дизайн тэмдэглэл
Дизайн тэмдэглэл
Дизайн тэмдэглэл
Дизайн тэмдэглэл
Дизайн тэмдэглэл
Дизайн тэмдэглэл

Тохиромжтой байдал

OV7670 камерын чип нь 3v3 вольтын төхөөрөмж юм. Мэдээллийн хуудас нь 3.5 вольтоос дээш хүчдэл нь чипийг гэмтээх болно гэдгийг харуулж байна.

5 вольтын Arduino -г OV7670 камерын чипийг устгахаас урьдчилан сэргийлэхийн тулд:

  • Arduino -аас ирж буй гадаад цаг (XCLK) дохиог хүчдэл хуваагчийн тусламжтайгаар аюулгүй түвшинд хүртэл бууруулах ёстой.
  • 5 вольтын дотоод Arduino I2C татах эсэргүүцэлийг идэвхгүй болгож, 3в3 вольтын тэжээлийн гадаад татах эсэргүүцэлээр солих шаардлагатай.
  • Зарим зүү нь өмнөх төслөөс гаралт болгон програмчлагдсан хэвээр байгаа тул Arduino-г ямар нэгэн холбогч утас холбохоос өмнө програмчилаарай !!! (Би үүнийг хэцүү аргаар сурсан … аз болоход би маш хямдхан хоёр худалдаж авсан).

Гадаад цаг

OV7670 камерын чип нь 10 МГц -ээс 24 МГц хүртэлх давтамжтай гадаад цаг шаарддаг.

Бидний 16MHz Arduino -ээс үүсгэж болох хамгийн өндөр давтамж нь 8MHz боловч энэ нь ажиллах шиг байна.

Цуваа холбоос

1Mbps (секундэд сая бит) цуваа холбоосоор 1 өгөгдлийн байтыг илгээхэд дор хаяж 10 uS (микросекунд) шаардлагатай. Энэ хугацааг дараах байдлаар бүрдүүлсэн болно.

  • 8 өгөгдлийн бит (8us)
  • 1 эхлэх бит (1uS)
  • 1 зогсолтын бит (1uS)

Дотоод цаг

OV7670 доторх дотоод пикселийн цаг (PCLK) давтамжийг CLKRC регистрийн [5: 0] битээр тохируулдаг (зураг 1 -ийг үзнэ үү). [1]

Хэрэв бид битүүдийг [5: 0] = B111111 = 63 гэж тохируулаад дээрх томъёонд хэрэглэвэл:

  • F (дотоод цаг) = F (оролтын цаг)/(Бит [5: 0} +1)
  • = 8000000/(63+1)
  • = 125000 Гц буюу
  • = 8uS

Бид зөвхөн хоёр дахь өгөгдлийн байт бүрээс дээж авч байгаа тул 8uS -ийн PCLK интервал нь 16uS -ийн дээжийг авчирдаг бөгөөд энэ нь 1 өгөгдлийн байтыг (10uS) дамжуулахад 6s -ийг үлдээх хангалттай хугацаа юм.

Хүрээний хурд

VGA видео хүрээ бүр 784*510 пикселээс бүрдэх бөгөөд зургийн элементүүдээс 640*480 пикселийг харуулдаг. YUV (4: 2: 2) гаралтын формат нь пиксел тутамд дунджаар 2 өгөгдлийн байт байдаг тул хүрээ тус бүр 784*2*510*8 uS = 6.4 секунд болно.

Энэ камер хурдан биш !!!

Хэвтээ байрлал

Хэрэв бид 640 пикселийн ялгааг хадгалахын зэрэгцээ HSTART ба HSTOP утгыг өөрчилвөл зургийг хэвтээ байдлаар зөөж болно.

Зургаа зүүн тийш зөөхөд таны HSTOP утга HSTART -аас бага байх боломжтой!

Санаа зоволтгүй … энэ бүхэн 2 -р зурагт тайлбарласны дагуу тоолуур халихтай холбоотой юм.

Бүртгүүлэх

OV7670 нь ашиг, цагаан өнгийн тэнцвэр, өртөлт гэх мэт зүйлсийг хянахад зориулагдсан 201 найман битийн бүртгэлтэй.

Нэг өгөгдлийн байт нь зөвхөн [0] -ээс [255] хүртэлх 256 утгыг зөвшөөрдөг. Хэрэв бидэнд илүү их хяналт шаардлагатай бол бид хэд хэдэн бүртгэлийг каскад хийх ёстой. Хоёр байт нь бидэнд 65536 боломж олгодог … гурван байт бидэнд 16, 777, 216 өгдөг.

Зураг 3 -т үзүүлсэн 16 битийн AEC (Автомат өртөлтийн хяналт) бүртгэл нь ийм жишээ бөгөөд дараах гурван регистрийн хэсгүүдийг нэгтгэснээр бүтээгдсэн болно.

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

Анхаарна уу … бүртгэлийн хаягийг хамтад нь бүлэглээгүй байна!

Сөрөг нөлөө

Удаан хүрээний хурд нь хэд хэдэн хүсээгүй гаж нөлөөг бий болгодог.

Зөв харуулахын тулд OV7670 нь 30 кадр / сек (секундэд фрэйм) хурдтай ажиллах төлөвтэй байна. Хүрээ бүр 6.4 секунд зарцуулагдаж байгаа тул цахим хаалт нь ердийнхөөс 180 дахин урт нээлттэй байгаа бөгөөд хэрэв бид регистрийн зарим утгыг өөрчлөхгүй бол бүх зургийг хэт ил гаргах болно.

Хэт их өртөхөөс урьдчилан сэргийлэхийн тулд би AEC (авто өртөлтийн хяналт) бүртгэлийн бүх битүүдийг тэг болгож тохируулсан. Гэсэн хэдий ч гэрэлтүүлэг тод байх үед линзний урд төвийг сахисан нягтралтай шүүлтүүр хэрэгтэй болно.

Удаан хугацааны өртөлт нь хэт ягаан туяаны өгөгдөлд нөлөөлдөг бололтой. Зөв өнгийг харуулсан бүртгэлийн хослолыг би хараахан олж амжаагүй байгаа тул үүнийг хийж байгаа ажил гэж үзье.

Тэмдэглэл

[1]

Мэдээллийн хүснэгтэд үзүүлсэн томъёо (зураг 1) зөв боловч муж нь зөвхөн битүүдийг [4: 0] харуулдаг уу?

Алхам 5: Хугацааны долгионы хэлбэр

Хугацааны долгионы хэлбэр
Хугацааны долгионы хэлбэр
Хугацааны долгионы хэлбэр
Хугацааны долгионы хэлбэр
Хугацааны долгионы хэлбэр
Хугацааны долгионы хэлбэр

"VGA Frame Timing" диаграмын зүүн доод буланд байгаа тэмдэглэлд (зураг 1):

YUV/RGB -ийн хувьд tp = 2 x TPCLK

1, 2, 3 -р зураг нь мэдээллийн хуудсыг шалгаж, Omnivision нь 2 өгөгдлийн байт бүрийг 1 пикселтэй тэнцүү гэж үздэг болохыг баталж байна.

Осциллографын долгионы хэлбэрүүд нь HREF -ийг хоосон зайнд LOW хэвээр байгаа эсэхийг шалгадаг.

Зураг 4 нь Arduino -аас XCLK гаралт 8MHz болохыг баталж байна. Бид дөрвөлжин долгион гэхээсээ илүү шөрмөсний долгионыг хардаг болсон шалтгаан нь бүх сондгой гармоникууд нь миний 20МГц -ийн дээж авах осциллографын хувьд үл үзэгдэх юм.

Алхам 6: Frame Grabber

Frame Grabber
Frame Grabber

OV7670 камерын чип дэх зургийн мэдрэгч нь 656*486 пикселийн массиваас бүрдэх бөгөөд үүний 640*480 пикселийн торыг зураг авахад ашигладаг.

HSTART, HSTOP, HREF, болон VSTRT, VSTOP, VREF регистрийн утгыг мэдрэгчийн дээгүүр байрлуулахад ашигладаг. Хэрэв зураг мэдрэгч дээр зөв байрлаагүй бол "Дизайн тэмдэглэл" хэсэгт тайлбарласны дагуу нэг буюу хэд хэдэн ирмэг дээр хар тууз гарч ирнэ.

OV7670 нь зургийн мөр бүрийг нэг пикселээр зүүн дээд булангаас эхлэн баруун доод пиксел хүртэл сканнерддаг. Arduino нь 1 -р зурагт үзүүлсэн шиг эдгээр пикселүүдийг цуваа холбоосоор дамжуулан компьютерт дамжуулдаг.

Хүрээ бариулагчдын үүрэг бол эдгээр 640*480 = 307200 пиксел тус бүрийг авч, агуулгыг "дүрс" цонхонд харуулах явдал юм.

Боловсруулах 3 нь дараах дөрвөн мөр кодыг ашиглан үүнд хүрдэг !!

Кодын мөр 1:

байт byteBuffer = шинэ байт [maxBytes+1]; // энд maxBytes = 307200

Энэхүү мэдэгдлийн үндсэн код нь дараахь зүйлийг үүсгэдэг.

  • "byteBuffer [307201]" нэртэй 307201 байтын массив
  • Нэмэлт байт нь дуусах тэмдэгтэнд зориулагдсан болно.

Кодын мөр 2:

хэмжээ (640, 480);

Энэхүү мэдэгдлийн үндсэн код нь дараахь зүйлийг үүсгэдэг.

  • "өргөн = 640;" гэж нэрлэгддэг хувьсагч.
  • "өндөр = 480" гэж нэрлэгддэг хувьсагч;
  • "пиксел [307200]" нэртэй 307200 пикселийн массив
  • пиксел массивын агуулгыг харуулсан 640*480 пикселийн "дүрс" цонх. Энэхүү "дүрс" цонхыг 60 кадр / сек хурдтайгаар тасралтгүй шинэчилж байдаг.

Кодын мөр 3:

byteCount = myPort.readBytesUntil (lf, byteBuffer);

Энэхүү мэдэгдэлд байгаа үндсэн код:

  • орж ирж буй өгөгдлийг "lf" (linefeed) тэмдэгтийг харах хүртэл буферлэнэ.
  • дараа нь локал өгөгдлийн эхний 307200 байтыг byteBuffer массив руу хаядаг.
  • Энэ нь хүлээн авсан байтын тоог (307201) "byteCount" нэртэй хувьсагч болгон хадгалдаг.

Кодын мөр 4:

пиксел = өнгө (byteBuffer );

Дараагийн гогцоонд байрлуулахдаа энэ мэдэгдэлд байгаа үндсэн код:

  • "byteBuffer " массивын агуулгыг "пиксел " массив руу хуулна
  • агуулга нь зургийн цонхонд харагдана.

Гол цус харвалт:

Frame-grabber нь дараах товчлууруудыг хүлээн зөвшөөрдөг.

  • 'C' = зураг авах
  • 'S' = зургийг файлд хадгалах.

Алхам 7: Програм хангамж

Хэрэв суулгаагүй бол дараах програм хангамжийн багц бүрийг татаж аваад суулгана уу.

  • Https://www.arduino.cc/en/main/software дээрх "Arduino"
  • Https://java.com/en/download/ [1] дээрх "Java 8"
  • Https://processing.org/download/ дээрээс "боловсруулж буй 3".

Arduino ноорог суурилуулах:

  • Бүх OV7670 холбогч утсыг салга [2]
  • USB кабелийг Arduino руу холбоно уу
  • "OV7670_camera_mono_V2.ino" (хавсаргасан) агуулгыг Arduino "ноорог" руу хуулж хадгална уу.
  • Ноорог зургийг Arduino дээрээ байршуулна уу.
  • Arduino -г салга
  • Та одоо OV7670 холбогч утсыг аюулгүйгээр холбож болно
  • USB кабелийг дахин холбоно уу.

Боловсруулалтын тоймыг суулгаж, ажиллуулж байна

  • "OV7670_camera_mono_V2.pde" (хавсаргасан) агуулгыг боловсруулах "ноорог" болгон хуулж хадгална уу.
  • Зүүн дээд талд байрлах "ажиллуулах" товчийг дарна уу … хар зургийн цонх гарч ирнэ
  • "Хар" зургийн цонхыг дарна уу
  • Зураг авахын тулд "c" товчийг дарна уу. (ойролцоогоор 6.4 секунд).
  • "S" товчлуурыг дарж зургийг боловсруулах хавтсанд хадгална уу
  • 4 ба 5 -р алхамуудыг давт
  • Хөтөлбөрөөс гарахын тулд "зогсоох" товчийг дарна уу.

Тэмдэглэл

[1]

3 -ийг боловсруулахад Java 8 шаардлагатай

[2]

Энэ бол OV7670 камерын чипийг гэмтээхгүйн тулд "ганцхан удаа" хийх аюулгүй байдлын алхам юм.

"OV7670_camera_mono.ini" зургийг таны Arduino-д байршуулах хүртэл дотоод татах эсэргүүцэл нь 5 вольтод холбогдсон бөгөөд Arduino мэдээллийн шугамын зарим хэсэг нь 5 вольтын гаралттай байж магадгүй … 3v3 вольтын OV7670 камерын чип.

Arduino програмчлагдсаны дараа энэ алхамыг давтах шаардлагагүй бөгөөд бүртгэлийн утгыг аюулгүйгээр өөрчилж болно.

Алхам 8: Өнгөт зураг авах

Өнгөт зураг авах
Өнгөт зураг авах
Өнгөт зураг авах
Өнгөт зураг авах
Өнгөт зураг авах
Өнгөт зураг авах

Дараахь програм хангамж нь зөвхөн туршилтын шинж чанартай бөгөөд зарим техник хэрэгслүүд ашигтай байх болно гэж найдаж байна. Өнгө нь урвуу харагдаж байна … Би бүртгэлийн зөв тохиргоог хараахан олж чадаагүй байна. Хэрэв та шийдэл олж чадвал үр дүнгээ оруулна уу

Хэрэв бид өнгөт зураг авах гэж байгаа бол бүх өгөгдлийн байтыг барьж, дараах томъёог ашиглах ёстой.

OV7670 нь RGB (улаан, ногоон, цэнхэр) өнгөний мэдээллийг 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)

YUV (4: 2: 2) -ийг RGB өнгө рүү хөрвүүлэхийн тулд дараах томъёог ашиглаж болно: [2]

  • R = Y + 1.402* (Cr - 128)
  • G = Y -0.344136*(Cb -128) -0.714136*(Cr -128)
  • B = Y + 1.772*(Cb -128)

Хавсаргасан програм нь монохром програм хангамжийн өргөтгөл юм.

  • "C" барих хүсэлтийг Arduino руу илгээдэг
  • Arduino нь тэгш тооны (монохром) байтыг компьютерт илгээдэг
  • Компьютер эдгээр байтуудыг массивт хадгалдаг
  • Дараа нь Arduino нь сондгой тоогоор (хрома) байтыг компьютерт илгээдэг.
  • Эдгээр байтуудыг хоёр дахь массивт хадгалдаг … одоо бидэнд бүхэл бүтэн зураг байна.
  • Дээрх томъёог одоо дөрвөн UYVY өгөгдлийн байтын бүлэг тус бүрт хэрэглэж байна.
  • Үүссэн өнгөний пикселүүдийг дараа нь “пиксел ” массивт байрлуулна
  • Компьютер нь "пиксел " массивыг сканнердах бөгөөд "дүрс" цонхонд дүрс гарч ирнэ.

Processing 3 програм хангамж нь скан хийх болон эцсийн үр дүнг товч харуулдаг.

  • Фото 1 нь U & V хромын өгөгдлийг скан 1 -ээс харуулав
  • Фото 2 нь скан 2 -ийн Y1 ба Y2 гэрэлтүүлгийн өгөгдлийг харуулж байна
  • Зураг 3 -т өнгөт зургийг харуулжээ … ганцхан зүйл буруу байна … цүнх ногоон байх ёстой !!

Энэ програмыг шийдсэний дараа би шинэ код оруулах болно …

Ашигласан материал:

[1]

www.haoyuelectronics.com/Attachment/OV7670%… (хуудас 33)

[2]

en.wikipedia.org/wiki/YCbCr (JPEG хөрвүүлэлт)

Миний бусад зааварчилгааг үзэх бол энд дарна уу.

Зөвлөмж болгож буй: