جدول المحتويات:

اصنع الكاميرا الخاصة بك: 8 خطوات
اصنع الكاميرا الخاصة بك: 8 خطوات

فيديو: اصنع الكاميرا الخاصة بك: 8 خطوات

فيديو: اصنع الكاميرا الخاصة بك: 8 خطوات
فيديو: IP طريقة برمجة وضبط اعدادات كاميرة مراقبة بنظام 2024, شهر نوفمبر
Anonim
Image
Image
اصنع الكاميرا الخاصة بك
اصنع الكاميرا الخاصة بك

يشرح هذا الدليل كيفية صنع كاميرا أحادية اللون باستخدام مستشعر صورة Omnivision OV7670 ، ومتحكم Arduino ، وعدد قليل من أسلاك العبور ، وبرامج المعالجة 3.

يتم أيضًا تقديم برنامج تجريبي للحصول على صورة ملونة.

اضغط على مفتاح "c" لالتقاط صورة 640 * 480 بكسل … اضغط على مفتاح "s" لحفظ الصورة في ملف. يتم ترقيم الصور المتتالية بالتسلسل إذا كنت ترغب في إنشاء فيلم بفاصل زمني قصير.

الكاميرا ليست سريعة (تستغرق كل عملية مسح 6.4 ثانية) وهي مناسبة فقط للاستخدام في الإضاءة الثابتة.

التكلفة ، باستثناء Arduino وجهاز الكمبيوتر ، أقل من فنجان قهوة.

الصور

تظهر الأجزاء المكونة ، بدون أسلاك العبور ، في الصورة الافتتاحية.

الصورة الثانية عبارة عن لقطة شاشة تُظهر برنامج كاميرا Arduino وأداة التقاط الإطارات Processing 3. يوضح الشكل الداخلي كيفية توصيل الكاميرا.

يوضح الفيديو عمل الكاميرا. عند الضغط على مفتاح الالتقاط "c" ، يظهر وميض قصير يتبعه اندفاع من النشاط أثناء مسح الصورة ضوئيًا. تظهر الصورة تلقائيًا في نافذة العرض بمجرد اكتمال المسح. ثم يتم مشاهدة الصور لتظهر في مجلد المعالجة بعد كل ضغطة على مفتاح "s". يختتم الفيديو بالدوران بسرعة عبر كل صورة من الصور الثلاث المحفوظة.

الخطوة 1: مخطط الدائرة

مخطط الرسم البياني
مخطط الرسم البياني
مخطط الرسم البياني
مخطط الرسم البياني
مخطط الرسم البياني
مخطط الرسم البياني

يظهر مخطط الدائرة لجميع إصدارات هذه الكاميرا في الصورة 1.

توضح الصور 2 و 3 كيفية توصيل أسلاك التوصيل والمكونات.

بدون حامل الألومنيوم ، تكون الصور مستلقية على جانبها.

تحذير

قم ببرمجة Arduino قبل توصيل أي أسلاك توصيل بشريحة الكاميرا OV7670. سيمنع هذا دبابيس خرج 5 فولت من برنامج سابق من تدمير شريحة الكاميرا 3v3 volt OV7670.

الخطوة 2: قائمة الأجزاء

قائمة الاجزاء
قائمة الاجزاء

تم الحصول على الأجزاء التالية من

  • 1 فقط OV7670 300KP VGA Camera Module for arduino DIY KIT
  • 1 فقط دعامة الكاميرا كاملة بالصواميل والمسامير
  • 1 فقط UNO R3 لـ arduino MEGA328P 100٪ أصلي ATMEGA16U2 مع كابل USB

تم الحصول على الأجزاء التالية محليًا

  • 18 كابل توصيل أردوينو ذكر وأنثى
  • 3 فقط كابل توصيل أردوينين للأنثى والأنثى
  • 1 لوح خبز صغير فقط
  • 4 مقاومات فقط 4K7 أوم 1/2 واط
  • 1 فقط حامل خردة الألومنيوم.

ستحتاج أيضًا إلى أوراق البيانات التالية:

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

الخطوة الثالثة: النظرية

نظرية
نظرية

رقاقة كاميرا 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 بسرعة عالية قبل إرساله إلى جهاز الكمبيوتر بسرعة 1 ميجابت في الثانية. سيشهد مثل هذا النهج عمل OV7670 بأقصى سرعة ولكنه سيستغرق وقتًا طويلاً (أكثر من دقيقة).

النهج الذي اتبعته هو إبطاء PCLK إلى 8uS وإرسال كل عينة كما تأتي. هذا الأسلوب أسرع بشكل ملحوظ (6.4 ثانية).

الخطوة 4: ملاحظات التصميم

ملاحظات التصميم
ملاحظات التصميم
ملاحظات التصميم
ملاحظات التصميم
ملاحظات التصميم
ملاحظات التصميم

التوافق

شريحة الكاميرا OV7670 عبارة عن جهاز 3v3 فولت. تشير ورقة البيانات إلى أن الفولتية التي تزيد عن 3.5 فولت ستؤدي إلى إتلاف الشريحة.

لمنع Arduino 5 فولت من تدمير شريحة الكاميرا OV7670:

  • يجب تقليل إشارة الساعة الخارجية (XCLK) من Arduino إلى مستوى آمن عن طريق مقسم الجهد.
  • يجب تعطيل مقاومات السحب الداخلية من Arduino I2C حتى 5 فولت واستبدالها بمقاومات سحب خارجية لإمداد 3v3 فولت.
  • قم ببرمجة Arduino الخاص بك قبل توصيل أي أسلاك توصيل لأن بعض المسامير قد تظل مبرمجة كإخراج من مشروع سابق !!! (تعلمت هذا بالطريقة الصعبة … لحسن الحظ اشتريت اثنين لأنهما كانا رخيصين للغاية).

ساعة خارجية

تتطلب شريحة الكاميرا OV7670 ساعة خارجية في نطاق التردد من 10 ميجا هرتز إلى 24 ميجا هرتز.

أعلى تردد يمكن أن نولده من Arduino بتردد 16 ميجاهرتز هو 8 ميجاهرتز ولكن يبدو أن هذا يعمل.

رابط تسلسلي

يستغرق الأمر 10 وحدات يو إس (ميكرو ثانية) على الأقل لإرسال بايت واحد من البيانات عبر ارتباط تسلسلي بسرعة 1 ميجابت في الثانية (مليون بت في الثانية). يتكون هذا الوقت على النحو التالي:

  • 8 بت بيانات (8us)
  • 1 بت بدء (1uS)
  • 1 توقف بت (1uS)

الساعة الداخلية

يتم ضبط تردد ساعة البكسل الداخلي (PCLK) داخل OV7670 بواسطة بتات [5: 0] داخل السجل CLKRC (انظر الصورة 1). [1]

إذا قمنا بتعيين البتات [5: 0] = B111111 = 63 وقمنا بتطبيقها على الصيغة أعلاه ، فحينئذٍ:

  • F (ساعة داخلية) = F (ساعة الإدخال) / (بت [5: 0} +1)
  • = 8000000/(63+1)
  • = 125000 هرتز أو
  • = 8uS

نظرًا لأننا نأخذ عينات فقط من كل بايت بيانات ثانٍ ، فإن فاصل PCLK البالغ 8uS ينتج عنه عينة 16uS وهو وقت كافٍ لنقل 1 بايت بيانات (10uS) مع ترك 6uS للمعالجة.

معدل الإطار

يتكون كل إطار فيديو VGA من 784 * 510 بكسل (عناصر الصورة) يتم عرض 640 * 480 بكسل منها. نظرًا لأن تنسيق الإخراج YUV (4: 2: 2) يحتوي على متوسط 2 بايت بيانات لكل بكسل ، سيستغرق كل إطار 784 * 2 * 510 * 8 uS = 6.4 ثانية.

هذه الكاميرا ليست سريعة !!!

تحديد المواقع الأفقية

قد يتم نقل الصورة أفقيًا إذا قمنا بتغيير قيم HSTART و HSTOP مع الحفاظ على اختلاف 640 بكسل.

عند تحريك صورتك إلى اليسار ، من الممكن أن تكون قيمة HSTOP أقل من قيمة HSTART!

لا تنزعج … كل شيء يتعلق بالفيضانات المضادة كما هو موضح في الصورة 2.

السجلات

يحتوي OV7670 على 201 سجل من ثماني بتات للتحكم في أشياء مثل الكسب وتوازن اللون الأبيض والتعرض.

بايت واحد من البيانات يسمح فقط لـ 256 قيمة في النطاق من [0] إلى [255]. إذا احتجنا إلى مزيد من التحكم ، فعلينا أن نتسلسل عدة سجلات. اثنان بايت يعطينا 65536 احتمالًا … ثلاثة بايتات تعطينا 16 ، 777 ، 216.

سجل 16 بت AEC (التحكم التلقائي في التعرض) الموضح في الصورة 3 هو مثال ويتم إنشاؤه من خلال الجمع بين أجزاء من السجلات الثلاثة التالية.

  • 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" (الصورة 1) على ما يلي:

بالنسبة إلى YUV / RGB ، tp = 2 x TPCLK

تتحقق الأشكال 1 و 2 و 3 من ورقة (أوراق) البيانات وتؤكد أن Omnivision يتعامل مع كل 2 بايت من البيانات على أنه ما يعادل 1 بكسل.

تتحقق أشكال موجات الذبذبات أيضًا من بقاء HREF منخفضًا أثناء فترات الطمس.

يؤكد الشكل 4 أن إخراج XCLK من Arduino هو 8 ميجا هرتز. السبب وراء رؤيتنا لموجة جيبية ، بدلاً من موجة مربعة ، هو أن جميع التوافقيات الفردية غير مرئية لجهاز قياس الذبذبات 20 ميجا هرتز.

الخطوة 6: إطار ملتقط

إطار المختطف
إطار المختطف

يتألف مستشعر الصورة داخل شريحة كاميرا OV7670 من مصفوفة من 656 * 486 بكسل تستخدم شبكة من 640 * 480 بكسل للصورة.

تُستخدم قيم التسجيل HSTART و HSTOP و HREF و VSTRT و VSTOP و VREF لوضع الصورة فوق المستشعر. إذا لم يتم وضع الصورة بشكل صحيح فوق المستشعر ، فسترى شريطًا أسود فوق حافة واحدة أو أكثر كما هو موضح في قسم "ملاحظات التصميم".

يقوم OV7670 بمسح كل سطر من الصورة بمقدار بكسل واحد في كل مرة بدءًا من الزاوية اليسرى العلوية حتى تصل إلى أسفل البكسل الأيمن. يقوم Arduino ببساطة بتمرير هذه البكسلات إلى جهاز الكمبيوتر عبر الرابط التسلسلي كما هو موضح في الصورة 1.

تتمثل مهمة ملتقطي الإطارات في التقاط كل من هذه 640 * 480 = 307200 بكسل وعرض المحتويات في نافذة "صورة"

تحقق المعالجة 3 هذا باستخدام الأسطر الأربعة التالية من التعليمات البرمجية !!

سطر الرمز 1:

بايت byteBuffer = بايت جديد [maxBytes + 1] ؛ // حيث maxBytes = 307200

ينشئ الكود الأساسي في هذا البيان:

  • مصفوفة 307201 بايت تسمى "byteBuffer [307201]"
  • البايت الإضافي مخصص لحرف إنهاء (تغذية سطرية).

سطر الرمز 2:

الحجم (640 ، 480) ؛

ينشئ الكود الأساسي في هذا البيان:

  • متغير يسمى "العرض = 640"
  • متغير يسمى "الارتفاع = 480" ؛
  • مصفوفة 307200 بكسل تسمى "البكسل [307200]"
  • نافذة "صورة" 640 * 480 بكسل حيث يتم عرض محتويات مصفوفة البكسل . يتم تحديث نافذة "الصورة" هذه باستمرار بمعدل إطارات يبلغ 60 إطارًا في الثانية.

سطر الرمز 3:

byteCount = myPort.readBytesUntil (lf، byteBuffer) ،

الكود الأساسي في هذا البيان:

  • يخزن البيانات الواردة محليًا حتى يرى حرف "lf" (تغذية سطر).
  • وبعد ذلك يتم تفريغ أول 307200 بايت من البيانات المحلية في صفيف byteBuffer .
  • كما أنه يحفظ عدد البايتات المتلقاة (307201) في متغير يسمى "byteCount".

سطر الكود 4:

البكسل = اللون (byteBuffer ) ؛

عند وضعها في حلقة for-next-loop ، فإن الكود الأساسي في هذه العبارة:

  • ينسخ محتويات مصفوفة "byteBuffer " إلى مصفوفة "البكسل"
  • التي تظهر محتوياتها في نافذة الصورة.

ضربات المفاتيح:

يتعرف ملتقط الإطارات على ضغطات المفاتيح التالية:

  • "ج" = التقاط الصورة
  • "s" = حفظ الصورة في ملف.

الخطوة 7: البرمجيات

قم بتنزيل وتثبيت كل من حزم البرامج التالية إذا لم تكن مثبتة بالفعل:

  • "Arduino" من
  • "Java 8" من https://java.com/en/download/ [1]
  • "المعالجة 3" من

تثبيت رسم اردوينو:

  • قم بإزالة جميع أسلاك العبور OV7670 [2]
  • قم بتوصيل كابل USB بجهاز Arduino الخاص بك
  • انسخ محتويات "OV7670_camera_mono_V2.ino" (مرفق) في "رسم" اردوينو واحفظه.
  • قم بتحميل المخطط على Arduino الخاص بك.
  • افصل اردوينو
  • يمكنك الآن إعادة توصيل أسلاك العبور بأمان
  • أعد توصيل كبل 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 ، لن تكون هناك حاجة لتكرار هذه الخطوة ويمكن تغيير قيم التسجيل بأمان.

الخطوة الثامنة: الحصول على صورة ملونة

الحصول على صورة ملونة
الحصول على صورة ملونة
الحصول على صورة ملونة
الحصول على صورة ملونة
الحصول على صورة ملونة
الحصول على صورة ملونة

البرنامج التالي تجريبي بحت ويتم نشره على أمل أن تكون بعض التقنيات مفيدة. يبدو أن الألوان مقلوبة … لم أجد بعد إعدادات التسجيل الصحيحة. إذا وجدت حلا يرجى نشر النتائج الخاصة بك

إذا أردنا الحصول على صورة ملونة ، فيجب التقاط جميع وحدات بايت البيانات وتطبيق الصيغ التالية.

يستخدم OV7670 الصيغ التالية لتحويل معلومات ألوان RGB (أحمر ، أخضر ، أزرق) إلى YUV (4: 2: 2): [1]

  • ص = 0.31 * ر + 0.59 * ج + 0.11 * ب
  • يو = ب - ص
  • V = R - Y.
  • Cb = 0.563 * (B-Y)
  • Cr = 0.713 * (R-Y)

يمكن استخدام الصيغ التالية لتحويل YUV (4: 2: 2) مرة أخرى إلى لون RGB: [2]

  • R = ص + 1.402 * (كر - 128)
  • G = Y - 0.344136 * (Cb -128) - 0.714136 * (Cr -128)
  • ب = ص + 1.772 * (كب -128)

البرنامج المرفق هو مجرد امتداد للبرنامج أحادي اللون:

  • يتم إرسال طلب التقاط "c" إلى Arduino
  • يرسل Arduino البايتات المرقمة (أحادية اللون) إلى جهاز الكمبيوتر
  • يقوم الكمبيوتر الشخصي بحفظ هذه البايت في صفيف
  • يرسل Arduino بعد ذلك وحدات البايت المرقمة (الكروما) إلى جهاز الكمبيوتر.
  • يتم حفظ هذه البايتات في مصفوفة ثانية … لدينا الآن الصورة بأكملها.
  • يتم الآن تطبيق الصيغ أعلاه على كل مجموعة من أربعة بايتات بيانات UYVY.
  • يتم بعد ذلك وضع وحدات البكسل الملونة الناتجة في مصفوفة "البكسل"
  • يقوم الكمبيوتر بمسح صفيف "البكسل " وتظهر صورة في نافذة "الصورة".

يعرض برنامج المعالجة 3 لفترة وجيزة كل عملية مسح والنتائج النهائية:

  • تُظهر الصورة 1 بيانات U & V chroma من الفحص 1
  • تُظهر الصورة 2 بيانات النصوع Y1 و Y2 من المسح 2
  • الصورة 3 توضح الصورة الملونة.. هناك شيء واحد خاطئ.. الحقيبة يجب أن تكون خضراء !!

سأقوم بنشر رمز جديد بمجرد حل هذا البرنامج …

مراجع:

[1]

www.haoyuelectronics.com/Attachment/OV7670٪… (صفحة 33)

[2]

en.wikipedia.org/wiki/YCbCr (تحويل JPEG)

انقر هنا لعرض التعليمات الأخرى الخاصة بي.

موصى به: