สารบัญ:
- ขั้นตอนที่ 1: การคำนวณพื้นฐาน | ลักซ์ ถึง EV
- ขั้นตอนที่ 2: นำเสนอค่าบนจอแสดงผล | ห้องสมุด Adafruit GFX
- ขั้นตอนที่ 3: การอ่านและการชดเชยค่า Lux | VEML7700
- ขั้นตอนที่ 4: Arduino / C-code
- ขั้นตอนที่ 5: นำมันมารวมกัน
วีดีโอ: เครื่องวัดแสงภาพถ่าย DIY: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
คำแนะนำนี้แบ่งปันแนวคิดบางประการเกี่ยวกับการสร้างเครื่องวัดแสงเหตุการณ์ขนาดเล็กและราคาถูกที่เรียบง่าย
เนื่องจาก Instructables ไม่อนุญาตให้ฉันแทรกวิดีโอของตัวเอง ลองใช้ลิงก์นี้:
www.youtube.com/embed/avQD10fd52s
เป้าหมายสำหรับฉันคือเครื่องวัดแสงเพื่อใช้กับกล้องฟิล์มขนาดกลาง Broonica ETRSi ของฉัน
สิ่งที่ฉันต้องการให้มีคุณลักษณะ:
- ASA เดียว (100) เพราะผมแทบจะใช้ฟิล์ม ASA 100 เท่านั้น
- ให้เล็กที่สุด
- ให้เฉพาะชุดค่าผสมที่ Bronica ของฉันสามารถทำซ้ำได้ ซึ่งหมายความว่า f2.8-f22 และ 1 วินาทีถึง 1/500 วินาที
- ไม่มีคุณสมบัติไร้สาระยกเว้นเวลาธรรมดาและค่ารูรับแสง
สิ่งที่ฉันใช้:
- Adafruit(Vishay) VEML 7700 digital Lux-meter (ประมาณ 5$)
- Adafruit Trinket M0 ไมโครคอนโทรลเลอร์ (ประมาณ 9 เหรียญ)
- จอแสดงผล OLED ขนาด 128x32 (ประมาณ 10 เหรียญ)
- ปุ่มกดเพื่อเปิดเครื่องชั่วคราว (เซ็นต์บางส่วน)
- แผ่นกระดานเล็กๆ เพราะฉันพยายามที่จะไม่ใช้สายเคเบิล แต่คุณสามารถใช้สายเคเบิลได้เช่นกัน
ขั้นตอนที่ 1: การคำนวณพื้นฐาน | ลักซ์ ถึง EV
เซ็นเซอร์ที่ฉันซื้อใช้คุณสมบัติสองอย่างที่ช่วยให้ฉันตัดสินใจได้:
- ส่งออกค่า lux 16 บิตแทนค่าแสง "ไม่มีมิติ"
- ส่งออกค่าผ่านI2C
มาตรวัดแสงสำหรับการถ่ายภาพใช้ค่าแสง (EV) เซ็นเซอร์ที่ฉันซื้อใช้ค่า Lux ซึ่งเป็นมาตราส่วนที่แตกต่างกันโดยสิ้นเชิง ดังนั้นขั้นตอนแรกคือการรับ EV จากค่า Lux ที่จัดหาให้เซ็นเซอร์
ภาพรวมอย่างรวดเร็วในวิกิพีเดียและคุณสามารถหาสูตรสำหรับการวัดเหตุการณ์และแปลง EV เป็น Lux:
E =2.5 * 2^EV
โดยที่ E ถูกวัดเป็น Lux
เนื่องจากเราได้ค่า Lux จากเซ็นเซอร์แล้วและต้องการค่า EV เราจึงต้องสร้างสูตรใหม่ ซึ่งจะทำให้เราได้:
EV = บันทึก2 (E/2.5)
นั่นคือการคำนวณครั้งแรกที่ต้องทำเพื่อให้ได้ค่าภาพถ่ายจากเครื่องวัดแสง
ในตารางค้นหาที่แนบมา คุณสามารถดูค่าทั้งหมดที่จะใช้ในเครื่องวัดแสงนี้ พร้อมกับค่า Lux และ EV
ขั้นตอนที่ 2: นำเสนอค่าบนจอแสดงผล | ห้องสมุด Adafruit GFX
ครั้งแรกที่ฉันพยายามนำเสนอค่าเป็นขั้นตอนทั้งหมด เพราะนั่นคือสิ่งที่ฉันสามารถตั้งค่า Broonica ของฉันได้ แต่นั่นทำให้ฉันมีปัญหา:
สมมติว่าเซ็นเซอร์ Lux ส่งออกค่าเท่ากับ 20,808 นั่นหมายความว่า EV 13 อย่างแน่นอน ตัวอย่างเช่นฉันสามารถตั้งค่ากล้องของฉันไว้ที่ f4 และ 1/500 วินาทีและน่าจะไปได้ดี
ต่อไป สมมติว่าเซ็นเซอร์ Lux จะส่งออก 20479 Lux, 1 Lux ภายใต้ EV13 ซึ่งจะส่งออกค่า EV ที่ 12 แต่อยู่ห่างจาก EV13 เพียง Lux
ดังนั้น ฉันจะตั้งกล้องไว้ที่ f2.8 และ 1/500 วินาที ซึ่งจะเปิดรับแสงมากเกินไป 1 สต็อป โดยที่ฉันไม่รู้ด้วยซ้ำว่าฉันอยู่ใกล้กับ EV13 แค่ไหน
สรุป: เราต้องการการแสดงค่าแบบแอนะล็อกบางประเภทอย่างน้อยเพื่อดูว่ามิเตอร์อยู่ใกล้หรือไกลแค่ไหนจากขั้นตอน EV ถัดไปหรือก่อนหน้า
หลังจากลองใช้ตัวอักษรและแบบอักษรในตัวของไลบรารี GFX แล้ว ฉันตัดสินใจใช้กราฟิกแบบกำหนดเองสองตัวที่จะเคลื่อนผ่านหน้าจอ OLED
หนึ่งสำหรับค่ารูรับแสง หนึ่งสำหรับครั้ง
ไลบรารี GFX ใช้ค่า 8 บิตเพื่อนำเสนอกราฟิก ดังนั้นฉันจึงสร้างชีต xls (ดูภาพด้านบน)
- ทุกค่ามีจำนวนพิกเซลต่อค่าเท่ากันทุกประการ
- เวลาและรูรับแสงมีค่าต่อแถวเท่ากันทุกประการ
- ฉันเพิ่ม "B" ที่จำเป็นที่จุดเริ่มต้นของแต่ละไบต์และ ", " ที่ส่วนท้าย
- จากนั้นฉันก็ส่งออกเป็นข้อความธรรมดาและ voila: ฉันได้แนบกราฟิกที่สาม
ค่าเวลาเริ่มต้นที่ 1/8 วินาที และค่ารูรับแสงเริ่มต้นที่ f2.8
การใช้ตารางค้นหาของขั้นตอนก่อนหน้านี้ทำให้เราทราบว่าค่านี้หมายถึง 160 Lux หรือ EV6
ค่าที่มืดที่สุดคือ f22 และ 1/500 ของวินาที
อีกครั้งผ่านตารางค้นหาเราจะเห็นว่าหมายถึง 655360 Lux หรือ EV18
จนถึงตอนนี้ดีมาก
ดังนั้นใน EV6 กราฟิกรูรับแสงจะต้องอยู่ทางซ้ายสุด เวลาอยู่ทางขวาสุด และในทางกลับกันใน EV18
ขั้นตอนที่ 3: การอ่านและการชดเชยค่า Lux | VEML7700
ขณะเลื่อนดูแผ่นข้อมูลของ Vishay VEML7700 Adafruit ที่ใช้สำหรับบอร์ดของพวกเขา ฉันพบประกาศที่ค่อนข้างน่ารำคาญ:
เซ็นเซอร์ทำงานเชิงเส้นระหว่าง 0 ถึง 1000Lux (!) เท่านั้น
ดูภาพหน้าจอที่มีเส้นสีส้ม (เชิงเส้น) และเส้นสีน้ำเงิน (เอาต์พุตเซ็นเซอร์จริง)
แสงแดด (EV15) อยู่ที่ประมาณ 80,000 Lux ซึ่งหมายความว่าหากไม่มีการชดเชยส่วนที่ไม่เป็นเส้นตรงของเซ็นเซอร์ มันก็จะไร้ประโยชน์โดยสิ้นเชิงในฐานะเครื่องวัดแสง
Vishay รู้ดีว่าดังนั้นพวกเขาจึงให้ไฟล์ PDF อื่นแก่ลูกค้าของพวกเขาที่เรียกว่า Designing 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-Value ที่แก้ไขแล้ว และ LUX คือค่าที่เซ็นเซอร์ส่งออก
นี่คือตัวแปรที่ฉันใช้ ตัวแปรที่ใช้ในชีตต่างกัน
สิ่งที่ทำให้ฉันรำคาญเล็กน้อยคือ Adafruit ไม่ได้พูดถึงสิ่งนี้ด้วยคำเพียงคำเดียวในหน้า เอกสารประกอบ ห้องสมุด หรือที่อื่นๆ
สองสามวันแรกฉันสงสัยว่าทำไม lightmeter ของฉันให้เอาต์พุตสูงสุด 20000 Lux สูงสุดแม้ในแสงแดดโดยตรง
หากคุณดูที่กราฟที่มีเส้นสีแดงและสีน้ำเงิน คุณจะเห็นสาเหตุ: เพราะถ้าไม่มีสูตรการชดเชยจะสูงขึ้นไม่ได้
แต่มีคำใบ้อื่นซ่อนอยู่ในเอกสารของเซ็นเซอร์:
สูตรการชดเชยนี้ใช้ได้เฉพาะเมื่อคุณตั้งค่าเซ็นเซอร์ไว้ที่ 25ms และอัตราขยาย 1/8
ทำได้ค่อนข้างง่ายด้วยไลบรารี Adafruits โดยเพิ่ม:
veml.setGain(VEML7700_GAIN_1_8);veml.setIntegrationTime(VEML7700_IT_25MS);
ในการตั้งค่าโมฆะของคุณ ()
ดังนั้นหลังจากตั้งค่าเป็น 1/8 และ 25ms และเพิ่มสูตรการชดเชยแล้ว คุณสามารถวัดค่าได้สูงถึง 120000 ลักซ์ ซึ่งเพียงพอที่จะครอบคลุมแสงแดดที่ 80-100k Lux
ขั้นตอนที่ 4: Arduino / C-code
เนื่องจากขึ้นอยู่กับจอแสดงผลที่คุณใช้และตัวควบคุมที่คุณต้องการ ฉันจะไม่ลงรายละเอียดมากเกินไป มีเพียงความคิดและคำแนะนำเล็กน้อยที่ควรเพิ่ม โดยเฉพาะอย่างยิ่งเมื่อใช้ไลบรารี Adafruit และ OLED ขนาด 128x32 px:
ในการตั้งค่าโมฆะ:
ฉันตั้งค่าส่วนไลบรารี VEML เป็น:
veml.setGain(VEML7700_GAIN_1_8);
veml.setIntegrationTime(VEML7700_IT_25MS);
veml.setLowThreshold(10000);
veml.setHighThreshold(20,000);
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 ให้ใช้บรรทัดนี้:
float EV = log2((LUX_CORR/2.5));
การย้ายบิตแมป
เพื่อให้แน่ใจว่าบิตแมปจะย้ายเฉพาะเมื่อค่าอยู่ระหว่าง 160Lux และ 655360Lux ตามที่ระบุไว้ในขั้นตอนก่อนหน้า ให้รวมไว้ใน if clause เช่นนั้น:
ถ้า (LUX_CORR > 159 && LUX_CORR <655361)
ต่อไป เราต้องแมปค่า EV กับพิกัด เนื่องจากช่วงของ EV เป็นตัวเลขสองหลัก และเราต้องการย้ายค่าเหล่านี้ออกจากจอแสดงผลมากกว่า 128px ทั่วทั้งจอแสดงผล เราจึงต้องการค่าที่มากขึ้น
เนื่องจากเราได้จำนวนทศนิยมแล้ว เราก็แค่คูณมันด้วย 100 แล้วใช้จำนวนเต็มนั้นทำแผนที่พิกัด
int EV_DSPL = EV*100;
และ:
เวลา = แผนที่ (EV_DSPL, 600, 1900, -260, 39); APERTURE = แผนที่ (EV_DSPL, 600, 1900, 39, -260);
อย่างที่คุณเห็นในกรณีของฉัน ตำแหน่งต่ำสุดของบิตแมปจะเป็น -260px และสูงสุดจะเป็น39px
สิ่งที่สามารถเห็นได้ตรงนี้ก็คือ ฉันเปลี่ยนพิกัดเพื่อให้บิตแมปทั้งสองเคลื่อนที่ไปในทิศทางตรงกันข้าม
ต่อไปเราต้องย้ายบิตแมปตามพิกัดโดย:
display.drawBitmap((TIME), (0), TIMES_bmp, 352, 16, 1);display.drawBitmap((APERTURE), (15), APERTURES_bmp, 352, 16, 1);
และนั่นคือทั้งหมดที่ต้องทำ
เป็นโบนัสที่ฉันแสดงค่า EV และ Lux แบบตรงเมื่อเซ็นเซอร์ส่งออกค่าที่ต่ำกว่า 160Lux เพียงเพราะฉันต้องการเห็นสิ่งต่าง ๆ เมื่อทำการทดสอบ
ขั้นตอนที่ 5: นำมันมารวมกัน
เนื่องจากทั้งจอแสดงผลและเซ็นเซอร์ใช้ I2C ในการสื่อสาร การสร้างฮาร์ดแวร์จริงจึงเป็นเรื่องง่ายอย่างที่ควรจะเป็น
เพียงเชื่อมต่อ Data, Clock ground และสาย 3V กับ Arduino คุณก็พร้อมแล้ว
ฉันได้เพิ่มกราฟิกว่าฉันทำกับแผ่น Stripboard ได้อย่างไร แต่อย่างที่กล่าวไว้ก่อนหน้านี้ว่าคุณสามารถใช้สายเคเบิลหรือแม้แต่สร้างปีกสำหรับมันได้ ทั้งหมดนี้ขึ้นอยู่กับตัวควบคุมและจอแสดงผลที่คุณใช้
บนกราฟิกของฉัน จุดสีขาวควรจะเชื่อมต่อกับจอแสดงผลและเซ็นเซอร์ และจุดสีเหลืองเชื่อมต่อกับเครื่องประดับเล็ก
ข้อยกเว้นเพียงอย่างเดียวคือพินข้อมูลของสาย I2C ที่เชื่อมต่อกับจอแสดงผล พินนั้นยังเชื่อมต่อกับพินข้อมูลของเครื่องประดับ
ฉันเลือกที่จะไม่ใช้สวิตช์เปิด/ปิด แต่ใช้ปุ่มกดและเซลล์ปุ่ม 3V สองเซลล์แทนเพื่อเปิดเครื่องชั่วคราวตราบเท่าที่ฉันกดปุ่ม มันเพิ่มพลังภายในเวลาไม่ถึง 1/10 วินาที ดังนั้นมันจึงเร็วพอสำหรับฉันที่จะสำรองปุ่มและทำให้เล็กลง
แนะนำ:
เลนส์มาโคร DIY พร้อม AF (แตกต่างจากเลนส์มาโคร DIY อื่นๆ ทั้งหมด): 4 ขั้นตอน (พร้อมรูปภาพ)
เลนส์มาโคร DIY พร้อม AF (แตกต่างจากเลนส์มาโคร DIY อื่นๆ ทั้งหมด): ฉันเคยเห็นคนจำนวนมากทำเลนส์มาโครด้วยเลนส์คิทมาตรฐาน (ปกติคือ 18-55 มม.) ส่วนใหญ่เป็นเลนส์ที่ติดกล้องไปด้านหลังหรือถอดองค์ประกอบด้านหน้าออก มีข้อเสียสำหรับทั้งสองตัวเลือกนี้ สำหรับติดเลนส์
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
สร้างระบบ DIY Hydroponic ขนาดเล็กและสวนสมุนไพร Hydroponic DIY พร้อมการแจ้งเตือน WiFi: 18 ขั้นตอน
สร้างระบบ DIY Hydroponic ขนาดเล็กและสวนสมุนไพร Hydroponic DIY พร้อมการแจ้งเตือน WiFi: ในบทช่วยสอนนี้ เราจะแสดงวิธีสร้างระบบ #DIY #hydroponics ระบบไฮโดรโปนิกส์ DIY นี้จะรดน้ำตามรอบการรดน้ำแบบไฮโดรโปนิกส์แบบกำหนดเองโดยเปิด 2 นาทีและปิด 4 นาที นอกจากนี้ยังจะติดตามระดับน้ำในอ่างเก็บน้ำ ระบบนี้
คอนโทรลเลอร์เกม DIY จาก Arduino - คอนโทรลเลอร์เกม Arduino PS2 - เล่น Tekken ด้วย DIY Arduino Gamepad: 7 ขั้นตอน
คอนโทรลเลอร์เกม DIY จาก Arduino | คอนโทรลเลอร์เกม Arduino PS2 | การเล่น Tekken ด้วย DIY Arduino Gamepad: สวัสดีทุกคน การเล่นเกมนั้นสนุกอยู่เสมอ แต่การเล่นด้วยตัวควบคุมเกม DIY ของคุณเองนั้นสนุกกว่า ดังนั้นเราจะสร้างคอนโทรลเลอร์เกมโดยใช้ Arduino pro micro ในคำแนะนำนี้
อัพเกรดหม้อรดน้ำด้วยตนเอง DIY ด้วย WiFi ให้เป็น DIY Motion Detect Sentry Alarm ชาวไร่: 17 ขั้นตอน
อัพเกรดหม้อรดน้ำ DIY ด้วยตัวเองด้วย WiFi ให้เป็น DIY Motion Detect Sentry Alarm Planter: ในบทความนี้เราจะแสดงวิธีอัปเกรดหม้อรดน้ำ DIY ด้วยตัวเองด้วย WiFi เป็นหม้อรดน้ำ DIY ด้วยตัวเองพร้อม WiFi และ Motion Detect Sentry Alarm ถ้า คุณยังไม่ได้อ่านบทความเกี่ยวกับวิธีการสร้าง DIY Self Watering Pot ด้วย WiFi คุณสามารถค