Mündəricat:
- Addım 1: Əsas Hesablamalar | EV -yə lüks
- Addım 2: Dəyərləri Ekranda Təqdim Etmək | Adafruit GFX Kitabxanası
- Addım 3: Lüks Dəyərlərin Oxunması və Kompensasiyası | VEML7700
- Addım 4: Arduino / C kodu
- Addım 5: Bir yerdə qoyun
Video: DIY Fotoşəkil Ölçmə Cihazı: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
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
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ı
Ə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
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
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ə:
Arduino, OBD2 və CAN Avtobusundan istifadə edərək takometr/skan ölçmə cihazı: 8 addım
Arduino, OBD2 və CAN Avtobusundan istifadə edərək takometr/skan ölçmə cihazı: Hər hansı bir Toyota Prius (və ya digər hibrid/xüsusi nəqliyyat vasitəsi) sahibləri tablosunda bir neçə yığım çatışmadığını biləcəklər! Mənim priusumda nə mühərrik dövriyyəsi, nə də temperatur göstəricisi var. Bir ifaçı olsanız, əvvəlcədən vaxt təyin etmək kimi şeyləri bilmək istəyə bilərsiniz
İşıq Anksiyete Cihazını Nəbz Ölçmə Cihazı ilə Nəfəs Alın: 18 Addım (Şəkillərlə)
Nəbz Ölçmə Cihazı ilə İşıq Anksiyete Cihazını Nəfəs Alın: Dünyanın daha da sıxlaşması ilə hər kəs getdikcə yüksək stresli bir mühitdə olur. Kollec tələbələri daha çox stres və narahatlıq riski altındadır. İmtahanlar xüsusilə tələbələr üçün yüksək stresli dövrlər və nəfəs məşqləri olan ağıllı saatlardır
DIY Arduino Batareya Ölçmə Cihazı - V2.0: 11 Addım (Şəkillərlə birlikdə)
DIY Arduino Battery Capacity Tester - V2.0: Hal -hazırda saxta Lityum və NiMH batareyaları, əsl tutumlarından daha yüksək tutumlu reklamlarla satılan hər yerdə var. Həqiqi və saxta bir batareyanı ayırmaq çətindir. Eynilə, bunu bilmək çətindir
Termistordan istifadə edən sadə və ucuz temperatur ölçmə cihazı: 5 addım
Termistor istifadə edən Sadə və Ucuz İstilik Ölçmə Aləti: NTC termistorlu termistor istifadə edən sadə və ucuz temperatur sensoru termistor haqqında daha çox məlumat əldə etmək üçün temperatur sensoru qurduğumuz bu xüsusiyyətdən istifadə edərək zamanla müqavimətini dəyişir https://en.wikipedia.org/wiki/ Termistor
DIY Arduino Batareya Ölçmə Cihazı - V1.0: 12 Addım (Şəkillərlə)
DIY Arduino Battery Capacity Tester - V1.0: [Videonu Play] Günəş layihələrimdə yenidən istifadə etmək üçün bir çox köhnə dizüstü batareyaları (18650) xilas etdim. Batareya paketindəki yaxşı hüceyrələri müəyyən etmək çox çətindir. Daha əvvəl Power Bank Instructable -dan birində, necə müəyyənləşdirəcəyimi söylədim