תוכן עניינים:

מד אור צילום DIY: 5 שלבים
מד אור צילום DIY: 5 שלבים

וִידֵאוֹ: מד אור צילום DIY: 5 שלבים

וִידֵאוֹ: מד אור צילום DIY: 5 שלבים
וִידֵאוֹ: אל תיגע לבחורה באיפור בחייםםם !!!! don't do that !!! 2024, נוֹבֶמבֶּר
Anonim
מד אור צילום DIY
מד אור צילום DIY
מד אור צילום DIY
מד אור צילום DIY

מדריך זה חולק כמה רעיונות לבניית מד תאורה קטן וזול פשוט.

מכיוון ש- Instructables לא יאפשר לי להכניס סרטונים משלי, נסה את הקישור הבא:

www.youtube.com/embed/avQD10fd52s

המטרה בשבילי הייתה מטר אור שילווה את מצלמת הסרט ברונטיקה ETRSi בפורמט בינוני שלי.

דברים שרציתי שיציגו:

  • ASA יחיד (100) מכיוון שאני כמעט משתמש בסרט ASA 100 בלבד
  • קטן ככל האפשר
  • תן לי רק שילובים שברוניקה שלי יכולה לשחזר, כלומר f2.8-f22 ו -1 שניות עד 1/500 שניות
  • ללא תכונות שטויות, למעט זמנים רגילים וערכי צמצם

דברים שהשתמשתי בהם:

  • Adafruit (Vishay) VEML 7700 מד לוקס דיגיטלי (בסביבות 5 $)
  • בקר מיקרו Adafruit Trinket M0 (בסביבות 9 $)
  • צג OLED 128x32 (בסביבות 10 $)
  • לחצן הפעלה זמני (כמה אגורות)
  • פיסת לוח זעירה, כי אני מנסה לא להשתמש בכבלים, אבל אתה בהחלט יכול להשתמש גם בכבלים

שלב 1: חישובים בסיסיים | לוקס ל- EV

חישובים בסיסיים | לוקס ל- EV
חישובים בסיסיים | לוקס ל- EV
חישובים בסיסיים | לוקס ל- EV
חישובים בסיסיים | לוקס ל- EV

החיישן שקניתי משתמש בשתי תכונות המאפשרות לי להחליט עליו:

  • פלט ערכי לוקס של 16 ביט במקום ערכי אור "ללא ממד"
  • מוציא את הערכים באמצעות I2C

מד אור צילום משתמש בערכי חשיפה (EV) החיישן שקניתי משתמש בערכי לוקס, שהוא קנה מידה שונה לחלוטין. אז השלב הראשון הוא לקבל רכבי EV מערכי לוקס בתנאי שהחיישן.

הצצה מהירה בויקיפדיה ותוכל למצוא נוסחה למדידת אירועים ולהמיר EV ל- Lux:

E = 2.5 * 2^EV

כאשר E נמדד בלוקס.

מכיוון שכבר קיבלנו את ערך הלוק מהחיישן ורוצים את ערך ה- EV, עלינו ליצור מחדש את הנוסחה, מה שגורם לנו:

EV = log2 (E/2.5)

אז זהו החישוב הראשון שצריך לעשות על מנת להוציא ערכי צילום ממד האור.

בטבלת החיפוש המצורפת אתה יכול לראות את כל הערכים שישמשו במד אור זה, יחד עם ערכי Lux ו- EV בהתאם.

שלב 2: הצגת הערכים בתצוגה | ספריית GFX של Adafruit

הצגת הערכים בתצוגה | ספריית GFX של Adafruit
הצגת הערכים בתצוגה | ספריית GFX של Adafruit
הצגת הערכים בתצוגה | ספריית GFX של Adafruit
הצגת הערכים בתצוגה | ספריית GFX של Adafruit
הצגת הערכים בתצוגה | ספריית GFX של Adafruit
הצגת הערכים בתצוגה | ספריית GFX של Adafruit

ניסיתי להציג לראשונה את הערכים בשלבים שלמים, כי לזה אני יכול להגדיר את הברוניקה שלי, אבל זה הוביל אותי לבעיה:

נניח שלחיישן חיישן הלוק יש ערך של 20480 בדיוק, המשמעות היא בדיוק EV 13 שלו כך שאוכל למשל להגדיר את המצלמה שלי על f4 ו -1/500th מהשנייה ויהיה טוב ללכת

לאחר מכן, נניח שחיישן הלוק יפיק 20479 לוקס, 1 לוקס תחת EV13, שיפיק ערך EV של 12, אך הוא רק לוקס רחוק מ- EV13

אז הייתי מגדיר את המצלמה שלי על f2.8 ו 1/500 השניה מה שיחשוף עודף תחנה אחת מבלי שאדע עד כמה אני קרוב ל- EV13.

מסקנה: אנו זקוקים לתצוגה אנלוגית כלשהי של הערכים בכדי לפחות לראות עד כמה המטר קרוב או רחוק משלב ה- EV הבא או הקודם.

לאחר שניסיתי להשתמש באותיות ובגופן המובנים של ספריית GFX החלטתי להשתמש בשתי גרפיקות מותאמות אישית שינועו על פני מסך OLED.

אחד לערכי הצמצם, אחד לזמנים.

ספריית GFX משתמשת בערכים של 8 ביט להצגת גרפיקה, אז הכנתי גיליון xls (ראו תמונה למעלה).

  • לכל ערך יש אותה כמות פיקסלים בדיוק בערך
  • לזמנים ולצמצמים יש אותה כמות ערכים בדיוק בשורה
  • הוספתי את ה- "B" הדרוש בתחילת כל בייט ואת ה "," בסוף
  • לאחר מכן ייצאתי אותו לטקסט רגיל וואלה: קיבלתי את הגרפיקה השלישית המצורפת

ערכי הזמן מתחילים ב- 1/8 השניה וערכי הצמצם מתחילים ב- f2.8

באמצעות טבלת החיפוש של השלב הקודם אנו יודעים שזה מייצג 160 לוקס או EV6.

הערכים האפלים ביותר יהיו אז f22 ו 1/500 השנייה

שוב באמצעות טבלת החיפוש אנו יכולים לראות שזה אומר 655360 לוקס או EV18

בינתיים הכל טוב.

אז ב- EV6 גרפיקת הצמצם צריכה להיות בצד שמאל ביותר, הזמנים בצד ימין הקיצוני, ולהיפך ב- EV18

שלב 3: קריאה ופיצוי של ערכי הלוקס | VEML7700

קריאה ופיצוי ערכי לוקס | VEML7700
קריאה ופיצוי ערכי לוקס | VEML7700
קריאה ופיצוי ערכי לוקס | VEML7700
קריאה ופיצוי ערכי לוקס | VEML7700

תוך כדי גלילה בגליון הנתונים של השימושים של Vishay VEML7700 Adafruit ללוח שלהם, מצאתי הודעה מטרידה למדי:

החיישן עובד לינארי בלבד בין 0 ל -1000 לוקס (!)

ראה את צילום המסך עם הקו הכתום (הלינארי) והקו הכחול (פלט חיישן בפועל)

אור השמש (EV15) הוא בסביבות 80.000 לוקס, כלומר ללא פיצוי של החלק הלא ליניארי של החיישן הוא יהיה חסר תועלת כמד אור.

Vishay יודע את זה, ולכן הם סיפקו ללקוחותיהם קובץ pdf נוסף בשם עיצוב VEML7700 לתוך יישום.

בקובץ 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 לוקס מקסימלי אפילו באור שמש ישיר.

אם תסתכל על הגרף עם הקו האדום והכחול אתה יכול לראות מדוע: כי הוא לא יכול לעלות גבוה יותר ללא נוסחת הפיצוי.

אך יש תיעוד נוסף החבוי בתיעוד החיישן:

נוסחת פיצוי זו פועלת רק אם אתה מגדיר את החיישן ל- 25ms ויחס רווח של 1/8.

זה נעשה די בקלות עם ספריית Adafruits על ידי הוספת:

veml.setGain (VEML7700_GAIN_1_8); veml.setIntegrationTime (VEML7700_IT_25MS);

בהגדרת הריק שלך ()

אז לאחר הגדרת 1/8 ו- 25ms והוספת נוסחת הפיצוי תוכל למדוד עד 120000 לוקס, מספיק כדי לכסות את אור השמש ב 80-100k לוקס

שלב 4: קוד Arduino / C

מכיוון שזה תלוי בתצוגה המשומשת ובבקר המועדף עליך, לא אפרט יותר מדי, רק כמה מחשבות ורמזים להוסיף, במיוחד בעת שימוש בספריות Adafruit ו- OLED 128x32 px:

בהגדרת הריק:

הגדרתי את החלק של ספריית VEML ל:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (true);

בלולאת הריק:

הקפד להוסיף את הפיצוי:

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

כדי לקבל רכבי EV מ- Lux השתמש בשורה זו:

float 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 ולוקס ישרים כאשר החיישן מוציא ערכים מתחת ל -160 לוקס, רק כי רציתי לראות דברים בעת בדיקה.

שלב 5: להרכיב אותו

לשים את זה ביחד
לשים את זה ביחד
לשים את זה ביחד
לשים את זה ביחד

מכיוון ששניהם, הצג והחיישן משתמשים ב- I2C כדי לתקשר, בניית החומרה בפועל היא פשוטה ככל שניתן.

פשוט חבר את קווי ה- Data, Clock ground ו- 3V עם ה- Arduino ואתה מוכן לצאת לדרך.

הוספתי גרפיקה כיצד עשיתי זאת עם לוח חשבונות, אך כפי שנאמר קודם לכן אתה יכול להשתמש בכבלים או אפילו לבנות כנף עבורו, הכל תלוי באיזה בקר ותצוגה אתה משתמש.

בגרפיקה שלי, הנקודות הלבנות אמורות להיות מחוברות לתצוגה ולחיישן והנקודות הצהובות מתחברות ל- Trinket.

היציאה היחידה תהיה סיכת הנתונים של קו I2C המתחבר לתצוגה, סיכה זו מתחברת גם לסיכת הנתונים Trinkets.

בחרתי לא להשתמש במתג הפעלה/כיבוי, אלא להשתמש בלחצן ושני תאי כפתור 3V כדי להפעיל אותו באופן זמני כל עוד אני לוחץ על הכפתור. הוא מופעל תוך פחות מ -1/10 שנייה, כך שזה מספיק מהיר בכדי לחסוך כפתור ולהקטין אותו.

מוּמלָץ: