Mündəricat:

DIY Fotoşəkil Ölçmə Cihazı: 5 addım
DIY Fotoşəkil Ölçmə Cihazı: 5 addım

Video: DIY Fotoşəkil Ölçmə Cihazı: 5 addım

Video: DIY Fotoşəkil Ölçmə Cihazı: 5 addım
Video: 40 отборных автотоваров с Aliexpress, которые упростят жизнь любому автовладельцу #2 2024, Noyabr
Anonim
DIY Fotoşəkil Ölçmə Cihazı
DIY Fotoşəkil Ölçmə Cihazı
DIY Fotoşəkil Ölçmə Cihazı
DIY Fotoşəkil Ölçmə Cihazı

Bu Təlimat sadə və kiçik bir işıq sayğacının qurulması ilə bağlı bəzi fikirləri bölüşür.

Instructables öz videolarımı daxil etməyimə icazə vermədiyi üçün bu linki sınayın:

www.youtube.com/embed/avQD10fd52s

Mənim məqsədim Bronica ETRSi orta formatlı film kameramı müşayiət etmək üçün işıq metr idi.

Xüsusi olmasını istədiyim şeylər:

  • tək ASA (100), çünki demək olar ki, yalnız ASA 100 filmindən istifadə edirəm
  • mümkün qədər kiçik
  • yalnız Bronicamın çoxalda biləcəyi birləşmələri verin, bu da f2.8-f22 və 1sn/1/500-cü saniyə deməkdir
  • düz vaxtlar və diyafram dəyərləri istisna olmaqla, mənasız xüsusiyyətlər yoxdur

İstifadə etdiyim şeylər:

  • Adafruit (Vishay) VEML 7700 rəqəmsal Lux metr (təxminən 5 dollar)
  • Adafruit Trinket M0 mikro nəzarətçi (təxminən 9 dollar)
  • 128x32 OLED ekran (təxminən 10 dollar)
  • müvəqqəti olaraq açmaq üçün bir düymə (bəzi qəpik)
  • Kiçik bir zolaq taxtası, çünki kabellərdən istifadə etməməyə çalışıram, amma siz də kabellərdən istifadə edə bilərsiniz

Addım 1: Əsas Hesablamalar | EV -yə lüks

Əsas Hesablamalar | EV -yə lüks
Əsas Hesablamalar | EV -yə lüks
Əsas Hesablamalar | EV -yə lüks
Əsas Hesablamalar | EV -yə lüks

Aldığım sensor, qərar verməyimə imkan verən iki xüsusiyyətdən istifadə edir:

  • "Ölçüsüz" işıq dəyərləri yerinə 16 bit lüks dəyərlər çıxarır
  • dəyərləri I2C vasitəsilə çıxarır

Fotoqrafik işıq sayğacı aldığım sensordan tam fərqli bir ölçü olan Lux dəyərlərindən istifadə edir. Beləliklə, ilk addım EV -lərin sensorla birlikdə Lux dəyərlərindən alınmasıdır.

Vikipediyaya qısa bir baxış və hadisəni ölçmək üçün bir formula tapa bilərsiniz və EV -ni Lüksə çevirə bilərsiniz:

E = 2.5 * 2^EV

burada E Lux -da ölçülür.

Sensordan artıq Lux dəyərini aldığımız və EV dəyərini istədiyimiz üçün bizi əldə edən formulu yenidən formalaşdırmalıyıq:

EV = log2 (E/2.5)

İşıqölçəndən fotoşəkil dəyərlərini çıxarmaq üçün edilməli olan ilk hesablama budur.

Əlavə edilmiş axtarış cədvəlində, Lux və EV dəyərləri ilə birlikdə bu işıq ölçmə cihazında istifadə ediləcək bütün dəyərləri görə bilərsiniz.

Addım 2: Dəyərləri Ekranda Təqdim Etmək | Adafruit GFX Kitabxanası

Ekranda Dəyərlərin Təqdim Edilməsi | Adafruit GFX Kitabxanası
Ekranda Dəyərlərin Təqdim Edilməsi | Adafruit GFX Kitabxanası
Ekranda Dəyərlərin Təqdim Edilməsi | Adafruit GFX Kitabxanası
Ekranda Dəyərlərin Təqdim Edilməsi | Adafruit GFX Kitabxanası
Ekranda Dəyərlərin Təqdim Edilməsi | Adafruit GFX Kitabxanası
Ekranda Dəyərlərin Təqdim Edilməsi | Adafruit GFX Kitabxanası

Əvvəlcə dəyərləri bütün addımlarla təqdim etməyə çalışdım, çünki Bronicamı təyin edə biləcəyim şey budur, amma bu məni bir problemə gətirib çıxarır:

Gəlin Lux sensorunun tam olaraq 20480 dəyərini çıxardığını düşünək, bu onun tam EV 13 deməkdir, buna görə də məsələn, kameramı f4 və saniyənin 1/500 hissəsinə qoya bilərəm və getmək yaxşı olardı

Daha sonra, Lux sensorunun EV13 altında 20479 Lux, 1 Lux çıxardığını, EV dəyərinin 12 olacağını, ancaq EV13 -dən uzaq bir Lux olduğunu fərz edək

Buna görə kameramı f2.8 və saniyənin 1/500 hissəsinə qurardım ki, EV13 -ə nə qədər yaxın olduğumu belə bilmədən 1 dayanacaq həddindən artıq pozulsun.

Nəticə: sayğacın bir sonrakı və ya əvvəlki EV addımından nə qədər yaxın və ya uzaq olduğunu görmək üçün dəyərlərin bir növ analoji görüntüsünə ehtiyacımız var.

GFX kitabxanasının daxili hərflərini və şriftini istifadə etməyə çalışdıqdan sonra OLED ekranı boyunca hərəkət edəcək iki xüsusi qrafikdən istifadə etmək qərarına gəldim.

Biri diyafram dəyərləri üçün, biri zamanlar üçün.

GFX Kitabxanası qrafikləri təqdim etmək üçün 8 bitlik dəyərlərdən istifadə edir, buna görə də xls vərəqi hazırladım (yuxarıdakı şəklə bax).

  • hər bir dəyər, hər bir dəyər üçün eyni miqdarda pikselə malikdir
  • dəfə və diyaframlar hər satırda eyni miqdarda dəyərə malikdir
  • Lazım olan "B" hər baytın əvvəlinə və sonunda "," əlavə etdim
  • Daha sonra düz bir mətnə və voilaya ixrac etdim: üçüncü qrafiki əlavə etdim

Zaman dəyərləri saniyənin 1/8 hissəsindən başlayır və diyafram dəyərləri f2.8 ilə başlayır

Əvvəlki addımdakı axtarış cədvəlindən istifadə edərək bilirik ki, bu 160 Lux və ya EV6 -nı təmsil edir.

Ən qaranlıq dəyərlər f22 və saniyənin 1/500 hissəsi olardı

Yenə axtarış cədvəli vasitəsi ilə 655360 Lux və ya EV18 deməkdir

İndiyə qədər çox yaxşıdır.

Beləliklə, EV6 -da diyafram qrafiki ən solda, vaxtlar ən sağda və əksinə EV18 -də olmalıdır.

Addım 3: Lüks Dəyərlərin Oxunması və Kompensasiyası | VEML7700

Lüks Dəyərlərin Oxunması və Kompensasiyası | VEML7700
Lüks Dəyərlərin Oxunması və Kompensasiyası | VEML7700
Lüks Dəyərlərin Oxunması və Kompensasiyası | VEML7700
Lüks Dəyərlərin Oxunması və Kompensasiyası | VEML7700

Vishay VEML7700 Adafruit -in lövhəsi üçün istifadə etdiyi məlumat cədvəlini gəzərkən olduqca narahat bir bildiriş gördüm:

Sensor yalnız 0 ilə 1000Lux arasında xətti işləyir (!)

narıncı (xətti) və mavi (faktiki sensor çıxışı) xətti olan ekran görüntüsünə baxın

Günəş işığı (EV15) təxminən 80.000 Lux-dır, yəni sensorun xətti olmayan hissəsini kompensasiya etmədən işıq sayğacı kimi tamamilə yararsız olacaq.

Vişay bunu bilir, buna görə də müştərilərinə VEML7700 -ü Tətbiqə Dizayn adlı başqa bir pdf təqdim etdilər.

Bu pdf-də sensorların xətasızlığını kompensasiya etmək üçün bir formula tapa bilərsiniz:

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

Burada LUX_CORR düzəldilmiş Lux-Value və LUX sensorun çıxış etdiyi dəyərdir.

Bunlar istifadə etdiyim dəyişənlərdir, vərəqlərindəki fərqli istifadə olunanlardır.

Məni bir az narahat edən odur ki, Adafruit bunu səhifələrində, sənədlərində, kitabxanalarında və ya başqa bir yerdə bir sözlə qeyd etmir.

İlk günlərdə işıq sayğacımın nə üçün birbaşa günəş işığında belə 20000 Lux maksimum istehsal etdiyini düşünürdüm.

Qırmızı və mavi xətti olan qrafikə nəzər salsanız bunun səbəbini görə bilərsiniz: çünki kompensasiya formulu olmadan daha yüksəklərə gedə bilməz.

Sensorun sənədlərində başqa bir işarə də var:

Bu kompensasiya düsturu yalnız sensoru 25 ms və qazanc nisbətini 1/8 olaraq təyin etsəniz işləyir.

Əlavə etməklə Adafruits kitabxanası ilə olduqca asan işlər görülür:

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

boş yerinizdə ()

Beləliklə, 1/8 və 25 ms-ə qoyduqdan və kompensasiya düsturunu əlavə etdikdən sonra 80-100k Lux-da günəş işığını örtmək üçün 120000 lüksə qədər ölçə bilərsiniz

Addım 4: Arduino / C kodu

İstifadə etdiyiniz ekrandan və seçdiyiniz nəzarətçidən asılı olaraq, xüsusilə Adafruit kitabxanalarından və 128x32 px OLED -dən istifadə edərkən əlavə etmək üçün bir neçə fikir və göstəriş verməyəcəyəm:

boşluq quruluşunda:

VEML kitabxana hissəsini təyin etdim:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (doğru);

boşluq döngəsində:

kompensasiya əlavə etdiyinizə əmin olun:

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

Lüks avtomobillər almaq üçün bu xətdən istifadə edin:

float EV = log2 ((LUX_CORR/2.5));

bitmapləri hərəkət etdirmək

bitmaplərin yalnız bir əvvəlki addımda ifadə edildiyi kimi dəyərlər 160Lux və 655360Lux arasında olduqda hərəkət etməsini təmin etmək üçün bunu belə bir ifla bəndinə sarın:

əgər (LUX_CORR> 159 && LUX_CORR <655361)

Daha sonra EV dəyərlərini koordinatlara uyğunlaşdırmalıyıq, çünki EV -lərin diapazonu ikiqat rəqəmdir və onları daha böyük dəyərlərə ehtiyac duyduğumuz bütün ekranda 128px üzərində ekrandan çıxarmaq istəyirik.

Artıq bir float nömrəsi əldə etdiyimiz üçün bunu 100 -ə vururuq və koordinatları xəritələşdirmək üçün bu tam ədəddən istifadə edirik

int EV_DSPL = EV*100;

və:

ZAMAN = xəritə (EV_DSPL, 600, 1900, -260, 39); APERTURE = xəritə (EV_DSPL, 600, 1900, 39, -260);

Gördüyüm kimi, bitmapin minimum mövqeyi -260px, maksimum isə 39px olardı

Burada da görülə bilən şey, iki bitmapin əks istiqamətdə hərəkət etməsi üçün koordinatları dəyişdirməyimdir

Sonra, bitmapləri koordinatlara görə hərəkət etdirməliyik:

display.drawBitmap ((TIME), (0), TIMES_bmp, 352, 16, 1); display.drawBitmap ((APERTURE), (15), APERTURES_bmp, 352, 16, 1);

Və edilməli olanların hamısı budur

Bir bonus olaraq, sensor 160Lux altında dəyərlər çıxardıqda düz EV və Lux dəyərlərini göstərirəm, çünki bunu sınayarkən bir şey görmək istədim.

Addım 5: Bir yerdə qoyun

Birlikdə qoyulması
Birlikdə qoyulması
Birlikdə qoyulması
Birlikdə qoyulması

Hər ikisi də, ekran və sensor ünsiyyət qurmaq üçün I2C istifadə edir, həqiqi aparatı qurmaq mümkün olduğu qədər sadədir.

Yalnız Arduino ilə Data, Clock torpaq və 3V xətlərini bağlayın və getməyə hazırsınız.

Bir lövhə ilə necə etdiyimi bir qrafik əlavə etdim, amma daha əvvəl deyildiyi kimi, kabellərdən istifadə edə və ya hətta bir qanad qura bilərsiniz, hamısı istifadə etdiyiniz nəzarətçi və ekrandan asılıdır.

Qrafikimdə ağ nöqtələrin displeyə və sensora, sarı nöqtələrin isə bibloya bağlandığı güman edilir.

Yeganə istisna, ekrana qoşulan I2C xəttinin məlumat pinidir, bu pin də Trinkets məlumat pininə bağlanır.

Açma/söndürmə düyməsini istifadə etməməyi seçdim, ancaq düyməni basdığım müddətcə onu müvəqqəti olaraq açmaq üçün bir düymə və iki 3V düymə hüceyrəsindən istifadə etdim. Saniyənin 1/10 hissəsinin altında güclənir, belə ki, bir düyməni ehtiyatda saxlamağım və kiçiltməyim üçün kifayət qədər sürətlidir.

Tövsiyə: