- المكونات مطلوبة
- أشياء يجب تذكرها حول وحدة الكاميرا OV7670
- مخطط الرسم البياني
- برمجة اردوينو UNO
- كيفية استخدام قارئ المنفذ التسلسلي لقراءة الصور
- فيما يلي عينة من الصور مأخوذة من OV7670
- احتياطات عند استخدام OV7670
لطالما هيمنت الكاميرات على صناعة الإلكترونيات حيث تحتوي على الكثير من التطبيقات مثل نظام مراقبة الزوار ونظام المراقبة ونظام الحضور وما إلى ذلك. الكاميرات التي نستخدمها اليوم ذكية ولديها الكثير من الميزات التي لم تكن موجودة في الكاميرات السابقة. بينما لا تلتقط الكاميرات الرقمية اليوم الصور فحسب ، بل تلتقط أيضًا أوصافًا عالية المستوى للمشهد وتحلل ما تراه. يتم استخدامه على نطاق واسع في الروبوتات ، والذكاء الاصطناعي ، وتعلم الآلة وما إلى ذلك. تتم معالجة الإطارات الملتقطة باستخدام الذكاء الاصطناعي وتعلم الآلة ، ثم يتم استخدامها في العديد من التطبيقات مثل اكتشاف لوحة الأرقام ، واكتشاف الأشياء ، واكتشاف الحركة ، والتعرف على الوجه وما إلى ذلك.
في هذا البرنامج التعليمي ، سنقوم بواجهة وحدة الكاميرا الأكثر استخدامًا OV7670 مع Arduino UNO. يمكن توصيل وحدة الكاميرا OV7670 مع Arduino Mega بنفس تكوين الدبوس ، والرمز والخطوات. يصعب توصيل وحدة الكاميرا نظرًا لوجود عدد كبير من المسامير والأسلاك المختلطة لتنفيذها. كما يصبح السلك مهمًا جدًا عند استخدام وحدات الكاميرا حيث يمكن أن يؤثر اختيار السلك وطول السلك بشكل كبير على جودة الصورة ويمكن أن يتسبب في حدوث ضوضاء.
لقد قمنا بالفعل بتنفيذ مشاريع كبيرة على الكاميرات مع أنواع مختلفة من وحدات التحكم الدقيقة وأجهزة إنترنت الأشياء مثل:
- نظام مراقبة الزائر مع Raspberry Pi و Pi Camera
- نظام أمان Raspberry Pi Home المستند إلى IOT مع تنبيه عبر البريد الإلكتروني
- كاميرا مراقبة Raspberry Pi مع خاصية Motion Capture
تعمل الكاميرا OV7670 على 3.3 فولت ، لذلك يصبح من المهم جدًا تجنب Arduino الذي يعطي خرج 5 فولت عند دبابيس Output GPIO. OV7670 هي كاميرا FIFO. ولكن في هذا البرنامج التعليمي ، سيتم التقاط الصورة أو الإطارات بدون ميزة FIFO. سيحتوي هذا البرنامج التعليمي على خطوات بسيطة وبرمجة مبسطة لواجهة OV7670 مع Arduino UNO.
المكونات مطلوبة
- اردوينو UNO
- وحدة الكاميرا OV7670
- المقاومات (10 كيلو ، 4.7 كيلو)
- صداري
البرنامج المطلوب:
- اردوينو IDE
- قارئ المنفذ التسلسلي (لتحليل صورة الإخراج)
أشياء يجب تذكرها حول وحدة الكاميرا OV7670
OV7670 Camera Module عبارة عن وحدة كاميرا FIFO متوفرة من جهات تصنيع مختلفة بتكوينات مختلفة للدبابيس. يوفر الطرازOV7670 إطارًا كاملاً ، وصورًا ذات إطارات 8 بت في مجموعة كبيرة من التنسيقات. مجموعة الصور قادرة على العمل حتى 30 إطارًا في الثانية (fps) في VGA. يتضمن OV7670
- صفيف مستشعر الصورة (حوالي 656 × 488 بكسل)
- مولد التوقيت
- معالج الإشارة التناظرية
- محولات A / D
- مولد نموذج الاختبار
- معالج الإشارة الرقمية (DSP)
- قشارة الصورة
- منفذ فيديو رقمي
- إخراج التحكم في فلاش LED و Strobe
يتم التحكم في مستشعر الصور OV7670 باستخدام ناقل التحكم في الكاميرا التسلسلية (SCCB) وهو واجهة I2C (SIOC ، SIOD) مع أقصى تردد على مدار الساعة يبلغ 400 كيلو هرتز.
تأتي الكاميرا مع إشارات المصافحة مثل:
- VSYNC: إخراج المزامنة الرأسية - منخفض أثناء الإطار
- HREF: مرجع أفقي - مرتفع أثناء وحدات البكسل النشطة للصف
- PCLK: إخراج ساعة البكسل - ساعة تشغيل مجانية. البيانات صالحة على الحافة الصاعدة
بالإضافة إلى ذلك ، فإنه يحتوي على عدة إشارات أخرى مثل
- D0-D7: خرج رقمي لمكون فيديو YUV / RGB 8 بت
- PWDN: تحديد وضع خفض الطاقة - الوضع العادي ووضع خفض الطاقة
- XCLK: إدخال ساعة النظام
- إعادة تعيين: إعادة تعيين الإشارة
يتم تسجيل OV7670 من مذبذب 24 ميجا هرتز. هذا يعطي إخراج Pixel Clock (PCLK) من 24 ميجا هرتز. يوفر FIFO 3 ميجابت في الثانية من ذاكرة تخزين إطار الفيديو. يتميز مولد نموذج الاختبار بنمط شريط ألوان 8 أشرطة ، ونمط شريط ألوان من التلاشي إلى الرمادي. لنبدأ الآن في برمجة Arduino UNO لاختبار الكاميرا OV7670 والاستيلاء على الإطارات باستخدام قارئ المنفذ التسلسلي.
مخطط الرسم البياني
برمجة اردوينو UNO
تبدأ البرمجة بتضمين المكتبة المطلوبة اللازمة لـ OV7670. نظرًا لأن OV7670 يعمل على واجهة I2C ، فإنه يشملبعد ذلك ، يجب تعديل السجلات لـ OV7670. ينقسم البرنامج إلى وظائف صغيرة لفهم أفضل.
يتألف Setup () من جميع الإعدادات الأولية المطلوبة لالتقاط الصور فقط. الوظيفة الأولى هي arduinoUnoInut () والتي تستخدم لتهيئة اردوينو أونو. في البداية ، يقوم بتعطيل جميع المقاطعات العامة ويضبط تكوينات واجهة الاتصال مثل ساعة PWM ، واختيار دبابيس المقاطعة ، واختيار ما قبل التسريع ، وإضافة بتات التماثل والتوقف.
arduinoUnoInut () ،
بعد تكوين Arduino ، يجب تكوين الكاميرا. لتهيئة الكاميرا ، لدينا فقط خيارات لتغيير قيم التسجيل. يجب تغيير قيم التسجيل من الافتراضي إلى المخصص. أضف أيضًا التأخير المطلوب اعتمادًا على تردد الميكروكونترولر الذي نستخدمه. نظرًا لأن وحدات التحكم الدقيقة البطيئة لديها وقت معالجة أقل مما يضيف مزيدًا من التأخير بين التقاط الإطارات.
camInit باطلة (باطلة) { writeReg (0x12، 0x80) ؛ _delay_ms (100) ؛ wrSensorRegs8_8 (ov7670_default_regs) ، writeReg (REG_COM10، 32)؛ // لا يقوم PCLK بالتبديل على HBLANK. }
تم ضبط الكاميرا على التقاط صورة QVGA لذا يلزم تحديد الدقة. تعمل الوظيفة على تكوين السجل لالتقاط صورة QVGA.
setResolution () ،
في هذا البرنامج التعليمي ، يتم التقاط الصور أحادية اللون ، لذلك يتم تعيين قيمة التسجيل لإخراج صورة أحادية اللون. تحدد الوظيفة قيم التسجيل من قائمة التسجيل المحددة مسبقًا في البرنامج.
setColor () ؛
الوظيفة أدناه هي الكتابة لتسجيل الوظيفة التي تكتب القيمة السداسية العشرية للتسجيل. إذا حصلت على الصور المشوشة ، فحاول تغيير المصطلح الثاني ، أي 10 إلى 9/11/12. ولكن في معظم الأحيان ، تعمل هذه القيمة بشكل جيد ، لذا لا داعي لتغييرها.
writeReg (0x11، 10) ؛
تُستخدم هذه الوظيفة للحصول على حجم دقة الصورة. في هذا المشروع نلتقط صورًا بحجم 320 × 240 بكسل.
CaptureImg (320 ، 240) ؛
بخلاف ذلك ، يحتوي الكود أيضًا على تكوينات I2C مقسمة إلى عدة أجزاء. فقط للحصول على البيانات من الكاميرا ، تحتوي تكوينات I2C على وظيفة البدء ، والقراءة ، والكتابة ، وتعيين العنوان والتي تعد مهمة عند استخدام بروتوكول I2C.
يمكنك العثور على الكود الكامل مع فيديو توضيحي في نهاية هذا البرنامج التعليمي. ما عليك سوى تحميل الكود وفتح Serial Port Reader والاستيلاء على الإطارات.
كيفية استخدام قارئ المنفذ التسلسلي لقراءة الصور
Serial Port Reader هو واجهة مستخدم رسومية بسيطة ، قم بتنزيله من هنا. هذا يلتقط تشفير base64 ويفك تشفيره لتشكيل صورة. ما عليك سوى اتباع هذه الخطوات البسيطة لاستخدام Serial Port Readerالخطوة 1: قم بتوصيل Arduino بأي منفذ USB بجهاز الكمبيوتر الخاص بك
الخطوة 2: انقر فوق "تحقق" للعثور على منفذ Arduino COM الخاص بك
الخطوة 3: أخيرًا انقر فوق الزر "ابدأ" لبدء القراءة بشكل متسلسل.
الخطوة 4: يمكن للمرء أيضًا حفظ هذه الصور بمجرد النقر فوق "حفظ الصورة".
فيما يلي عينة من الصور مأخوذة من OV7670
احتياطات عند استخدام OV7670
- حاول استخدام الأسلاك أو وصلات العبور أقصر ما يمكن
- تجنب أي اتصال فضفاض بأي دبابيس على Arduino أو OV7670
- كن حذرًا بشأن التوصيل حيث أن عددًا كبيرًا من الأسلاك قد يؤدي إلى حدوث ماس كهربائي
- إذا كان UNO يعطي خرج 5V لـ GPIO ، فاستخدم Level Shifter.
- استخدم 3.3V Input لـ OV7670 لأن تجاوز الجهد يمكن أن يؤدي إلى تلف وحدة OV7670.
تم إنشاء هذا المشروع لإعطاء نظرة عامة على استخدام وحدة الكاميرا مع Arduino. نظرًا لأن Arduino يحتوي على ذاكرة أقل ، فقد لا تكون المعالجة كما هو متوقع. يمكنك استخدام وحدات تحكم مختلفة بها ذاكرة أكبر للمعالجة.