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

مقياس ضوء التصوير الفوتوغرافي DIY: 5 خطوات
مقياس ضوء التصوير الفوتوغرافي DIY: 5 خطوات

فيديو: مقياس ضوء التصوير الفوتوغرافي DIY: 5 خطوات

فيديو: مقياس ضوء التصوير الفوتوغرافي DIY: 5 خطوات
فيديو: فن الإضاءة | أساسيات في التصوير الفوتوغرافي والسينمائي 2024, شهر نوفمبر
Anonim
DIY التصوير الفوتوغرافي Lightmeter
DIY التصوير الفوتوغرافي Lightmeter
DIY التصوير الفوتوغرافي Lightmeter
DIY التصوير الفوتوغرافي Lightmeter

يشارك Instructable بعض الأفكار حول بناء مقياس ضوئي بسيط ورخيص الثمن.

نظرًا لأن Instructables لن تسمح لي بإدراج مقاطع الفيديو الخاصة بي ، جرب هذا الرابط:

www.youtube.com/embed/avQD10fd52s

كان الهدف بالنسبة لي هو مقياس الضوء لمرافقة كاميرا الأفلام المتوسطة Bronica ETRSi الخاصة بي.

الأشياء التي أردت إبرازها:

  • ASA واحد (100) لأنني أستخدم فيلم ASA 100 فقط تقريبًا
  • صغيرة قدر الإمكان
  • أعطني فقط التركيبات التي تستطيع Bronica إنتاجها ، مما يعني f2.8-f22 و 1 ثانية إلى 1/500 ثانية
  • لا توجد ميزات غير منطقية ، باستثناء الأوقات العادية وقيم الفتحة

الأشياء التي استخدمتها:

  • Adafruit (Vishay) VEML 7700 مقياس لوكس الرقمي (حوالي 5 دولارات)
  • وحدة تحكم Adafruit Trinket M0 الصغيرة (حوالي 9 دولارات)
  • شاشة OLED بحجم 128 × 32 (حوالي 10 دولارات)
  • زر ضغط لتشغيله مؤقتًا (بعض السنتات)
  • قطعة صغيرة من اللوح الشريطي ، لأنني أحاول عدم استخدام الكابلات ، ولكن يمكنك بالتأكيد استخدام الكابلات أيضًا

الخطوة 1: الحسابات الأساسية | لوكس إلى EV

الحسابات الأساسية | لوكس إلى EV
الحسابات الأساسية | لوكس إلى EV
الحسابات الأساسية | لوكس إلى EV
الحسابات الأساسية | لوكس إلى EV

يستخدم المستشعر الذي اشتريته ميزتين تسمحان لي باتخاذ القرار بشأنهما:

  • لإخراج قيم لوكس 16 بت بدلاً من قيم الإضاءة "الخالية من الأبعاد"
  • تخرج القيم عبر I2C

يستخدم مقياس الضوء الفوتوغرافي قيم التعرض (EV) ، يستخدم المستشعر الذي اشتريته قيم Lux ، وهو مقياس مختلف تمامًا. لذا فإن الخطوة الأولى هي الحصول على EVs من قيم Lux المقدمة للمستشعر.

نظرة سريعة على ويكيبيديا ويمكنك العثور على صيغة لقياس الحوادث وتحويل EV إلى Lux:

E = 2.5 * 2 ^ EV

حيث يتم قياس E بوحدة Lux.

نظرًا لأننا حصلنا بالفعل على قيمة Lux من المستشعر ونريد قيمة EV ، يتعين علينا إعادة تشكيل الصيغة ، مما يدفعنا إلى:

EV = log2 (E / 2.5)

لذلك هذا هو الحساب الأول الذي يجب القيام به من أجل الحصول على القيم الفوتوغرافية من مقياس الضوء.

في جدول البحث المرفق ، يمكنك رؤية جميع القيم التي سيتم استخدامها في مقياس الضوء هذا ، جنبًا إلى جنب مع قيم Lux و EV وفقًا لذلك.

الخطوة 2: عرض القيم على الشاشة | مكتبة Adafruit GFX

عرض القيم على الشاشة | مكتبة Adafruit GFX
عرض القيم على الشاشة | مكتبة Adafruit GFX
عرض القيم على الشاشة | مكتبة Adafruit GFX
عرض القيم على الشاشة | مكتبة Adafruit GFX
عرض القيم على الشاشة | مكتبة Adafruit GFX
عرض القيم على الشاشة | مكتبة Adafruit GFX

حاولت أولاً تقديم القيم في خطوات كاملة ، لأن هذا هو ما يمكنني ضبط Bronica عليه ، لكن هذا يقودني إلى مشكلة:

لنفترض أن مستشعر Lux يخرج قيمة 20480 بالضبط ، وهذا يعني أنه EV 13 بالضبط ، لذا يمكنني على سبيل المثال ضبط الكاميرا على f4 و 1 / 500th من الثانية وسيكون من الجيد أن تبدأ

بعد ذلك ، لنفترض أن مستشعر Lux سينتج 20479 Lux ، و 1 Lux تحت EV13 ، والذي من شأنه أن ينتج قيمة EV تبلغ 12 ، ولكن ليس سوى Lux بعيدًا عن EV13

لذا أود ضبط الكاميرا على f2.8 و 1/500 جزء من الثانية والتي من شأنها أن تزيد من تعريض نقطة توقف واحدة دون أن أعرف حتى مدى اقترابي من EV13.

الخلاصة: نحتاج إلى نوع من العرض التناظري للقيم لنرى على الأقل مدى قرب أو بعد المقياس عن خطوة EV التالية أو السابقة.

بعد محاولة استخدام الحروف والخط المدمجين في مكتبة GFX ، قررت استخدام رسمين مخصصين سينتقلان عبر شاشة OLED.

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

تستخدم مكتبة GFX قيم 8 بت لتقديم الرسومات ، لذلك قمت بعمل ورقة xls (انظر الصورة أعلاه).

  • كل قيمة لها نفس المقدار بالضبط من البكسل لكل قيمة
  • الأوقات وفتحات العدسة لها نفس المقدار من القيم في كل صف
  • أضفت "ب" الضرورية في بداية كل بايت و "،" في النهاية
  • ثم قمت بتصديره إلى نص عادي وفويلا: لقد تم إرفاق الرسم الثالث

تبدأ قيم الوقت بـ 1/8 من الثانية وتبدأ قيم الفتحة بـ f2.8

باستخدام جدول البحث الخاص بالخطوة السابقة ، نعلم أن هذا يمثل 160 Lux أو EV6.

ستكون القيم الأكثر قتامة عندئذ هي f22 و 1/500 جزء من الثانية

مرة أخرى من خلال جدول البحث يمكننا أن نرى أن هذا يعني 655360 Lux أو EV18

حتى الان جيدة جدا.

لذا في EV6 ، يجب أن تكون فتحة العدسة في أقصى اليسار ، والأوقات في أقصى اليمين ، والعكس بالعكس في EV18

الخطوة الثالثة: قراءة قيم Lux وتعويضها | VEML7700

قراءة وتعويض قيم لوكس | VEML7700
قراءة وتعويض قيم لوكس | VEML7700
قراءة وتعويض قيم لوكس | VEML7700
قراءة وتعويض قيم لوكس | VEML7700

أثناء التمرير عبر ورقة البيانات الخاصة باستخدام Vishay VEML7700 Adafruit للوحة الخاصة بهم ، وجدت إشعارًا مزعجًا إلى حد ما:

يعمل المستشعر فقط بشكل خطي بين 0 و 1000Lux (!)

انظر لقطة الشاشة مع الخط البرتقالي (الخطي) والخط الأزرق (خرج المستشعر الفعلي)

يبلغ ضوء الشمس (EV15) حوالي 80.000 لوكس ، مما يعني أنه بدون تعويض الجزء غير الخطي من المستشعر ، سيكون عديم الفائدة تمامًا كمقياس ضوئي.

يعرف Vishay ذلك ، لذلك قاموا بتزويد عملائهم بملف pdf آخر يسمى Designing the VEML7700 Into an Application.

في ملف pdf هذا ، يمكنك العثور على صيغة لتعويض المستشعرات غير الخطية:

LUX_CORR = 6.0135e-13 * pow (LUX، 4) -9.3924e-9 * pow (LUX، 3) + 8.1488e-5 * pow (LUX، 2) + 1.0023 * LUX

حيث LUX_CORR هي قيمة Lux المصححة و LUX هي القيمة التي يخرجها المستشعر.

هذه هي المتغيرات التي استخدمتها ، المتغيرات المستخدمة في ورقتهم.

ما يزعجني قليلاً هو أن Adafruit لم يذكر هذا بكلمة واحدة على صفحتهم أو وثائقهم أو مكتبتهم أو في أي مكان آخر.

لذا في الأيام القليلة الأولى كنت أتساءل لماذا يخرج مقياس الضوء الخاص بي فقط 20000 لوكس كحد أقصى حتى في ضوء الشمس المباشر.

إذا ألقيت نظرة على الرسم البياني الذي يحتوي على الخط الأحمر والأزرق ، يمكنك معرفة السبب: لأنه لا يمكن أن يرتفع إلى أعلى بدون صيغة التعويض.

لكن هناك تلميح آخر مخفي في توثيق المستشعر:

تعمل صيغة التعويض هذه فقط إذا قمت بتعيين المستشعر على 25 مللي ثانية ونسبة كسب 1/8.

تم ذلك بسهولة مع مكتبة Adafruits عن طريق إضافة:

veml.setGain (VEML7700_GAIN_1_8) ؛ veml.setIntegrationTime (VEML7700_IT_25MS) ،

في إعداد الفراغ الخاص بك ()

لذلك بعد ضبطه على 1/8 و 25 مللي ثانية وإضافة صيغة التعويض ، يمكنك قياس ما يصل إلى 120000 لوكس ، وهي طريقة كافية لتغطية ضوء الشمس عند 80-100 كيلو لوكس

الخطوة 4: Arduino / C-code

نظرًا لأنه يعتمد على شاشة العرض المستخدمة ووحدة التحكم المفضلة ، فلن أخوض كثيرًا في التفاصيل ، فقط بعض الأفكار والتلميحات التي يجب إضافتها ، خاصة عند استخدام مكتبات Adafruit و OLED بحجم 128 × 32 بكسل:

في الإعداد الفارغ:

قمت بتعيين جزء مكتبة VEML على:

veml.setGain (VEML7700_GAIN_1_8) ،

veml.setIntegrationTime (VEML7700_IT_25MS) ،

veml.setLowThreshold (10000) ،

veml.setHighThreshold (20000) ،

veml.interruptEnable (صحيح) ؛

في الحلقة الفارغة:

تأكد من إضافة التعويض:

int LUX_CORR = 6.0135e-13 * pow (LUX، 4) -9.3924e-9 * pow (LUX، 3) + 8.1488e-5 * pow (LUX، 2) + 1.0023 * LUX ؛

للحصول على EVs من Lux ، استخدم هذا الخط:

تعويم EV = log2 ((LUX_CORR / 2.5)) ؛

تحريك الصور النقطية

للتأكد من أن الصور النقطية تتحرك فقط عندما تكون القيم بين 160Lux و 655360Lux كما هو مذكور في الخطوة السابقة ، قم بلفها بجملة if مثل هذه:

إذا (LUX_CORR> 159 && LUX_CORR <655361)

بعد ذلك ، نحتاج إلى تعيين قيم EV للإحداثيات ، نظرًا لأن نطاق EVs عبارة عن أرقام مزدوجة ونريد نقلها من خارج الشاشة بأكثر من 128 بكسل عبر الشاشة بأكملها نحتاج إلى قيم أكبر.

نظرًا لأننا حصلنا بالفعل على رقم عائم ، فإننا نضربه في 100 ونستخدم هذا العدد الصحيح لتعيين الإحداثيات

عدد int EV_DSPL = EV * 100 ؛

و:

TIME = خريطة (EV_DSPL، 600، 1900، -260، 39) ؛ APERTURE = خريطة (EV_DSPL، 600، 1900، 39، -260) ؛

كما ترى في حالتي ، سيكون الحد الأدنى لموضع الصورة النقطية -260 بكسل والحد الأقصى 39 بكسل

ما يمكن رؤيته هنا أيضًا هو أنني قمت بتبديل الإحداثيات بحيث تتحرك الصورتان النقطيتان في الاتجاه المعاكس

بعد ذلك ، نحتاج إلى تحريك الصور النقطية وفقًا للإحداثيات من خلال:

display.drawBitmap ((TIME)، (0)، TIMES_bmp، 352، 16، 1)؛ display.drawBitmap ((APERTURE)، (15)، APERTURES_bmp، 352، 16، 1) ؛

وهذا كل ما يجب القيام به

على سبيل المكافأة ، أعرض قيم EV و Lux مباشرة عندما يخرج المستشعر قيمًا أقل من 160Lux ، فقط لأنني أردت رؤية الأشياء عند اختبارها.

الخطوة 5: ضعها معًا

نضعها معًا
نضعها معًا
نضعها معًا
نضعها معًا

نظرًا لأن كل من الشاشة والمستشعر يستخدمان I2C للتواصل ، فإن بناء الأجهزة الفعلية أمر بسيط بقدر الإمكان.

ما عليك سوى توصيل خطوط البيانات والساعة الأرضية وخطوط 3 فولت بـ Arduino وستكون جاهزًا للانطلاق.

لقد أضفت رسمًا كيف فعلت ذلك باستخدام لوحة شريطية ، ولكن كما قيل سابقًا ، يمكنك استخدام الكابلات أو حتى بناء جناح لها ، كل هذا يتوقف على وحدة التحكم والعرض الذي تستخدمه.

في رسومي ، من المفترض أن تكون النقاط البيضاء متصلة بالشاشة والمستشعر وتتصل النقاط الصفراء بـ Trinket.

سيكون الاستثناء الوحيد هو دبوس البيانات لخط I2C الذي يتصل بالشاشة ، ويتصل هذا الدبوس أيضًا بدبوس بيانات Trinkets.

اخترت عدم استخدام مفتاح تشغيل / إيقاف ولكن بدلاً من ذلك استخدم زر ضغط وخلايا زر 3 فولت لتشغيله مؤقتًا طالما أضغط على الزر. يتم تشغيله في أقل من 1/10 من الثانية ، لذا فهو سريع بما يكفي بالنسبة لي لحفظ زر وجعله أصغر.

موصى به: