สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ขณะที่ฉันสร้างแสงแฟรี่ ฉันตระหนักว่าค่า PWM นั้นไม่เป็นสัดส่วนกับความสว่างของ LED แบบเชิงเส้น พูดง่ายๆ ถ้าค่า PWM เป็นสองเท่า ความสว่างจะไม่เป็นสองเท่า โดยเฉพาะอย่างยิ่งเมื่อ PWM ใกล้เคียงกับค่าสูงสุด การเปลี่ยนแปลงใด ๆ ที่ตาฉันมองไม่เห็น ฉันคิดว่าควรเป็นปัญหาการปรับเทียบอย่างง่าย! และนั่นคือวิธีที่ฉันทำโครงการนี้! แนวคิดคือการวัดความสว่างของ LED ด้วยอุปกรณ์บางอย่าง (เซ็นเซอร์วัดความส่องสว่างหรือโฟโตรีซีสเตอร์) และหาความสัมพันธ์ระหว่างค่า PWM กับความสว่าง จากนั้นในภายหลัง ถ้าฉันตั้งค่าความสว่างเป็น 50% Arduino จะคำนวณ PWM ที่สอดคล้องกันและทำให้ LED หรี่ลงตามลำดับ
ดังนั้น ฉันจึงต้องมีเซ็นเซอร์วัดความส่องสว่างและ LED เพื่อวัดความสว่าง โดยใช้การ์ด SD ฉันจะบันทึกข้อมูลสำหรับขั้นตอนการติดตั้งในภายหลัง การฟิตติ้งจะทำใน Excel (หรือโปรแกรมอื่นๆ) เอาต์พุตจะถูกใช้ในโค้ด Arduino และนั่นแหล่ะ! ควรทำครั้งเดียว จากนั้นคุณสามารถใช้พารามิเตอร์การปรับเทียบได้ตลอดไป!
ขั้นตอนที่ 1: อะไหล่
1- WEMOS mini D1: Aliexpress 3 €
2- TSL 2561 (เซ็นเซอร์ความสว่าง): Aliexpress 3€
3- โมดูลการ์ด SD: Aliexpress 1 €
4- LED
5- ตัวต้านทาน 220 โอห์ม
6- สาย
ค่าใช้จ่ายทั้งหมด: 8 -10 €
ขั้นตอนที่ 2: การเดินสายไฟ
ไม่ควรเปลี่ยนโมดูลการ์ด SD และสายเซ็นเซอร์ความส่องสว่าง (ส่วนใหญ่) ไฟ LED ควรเชื่อมต่อกับพิน PWM
ขั้นตอนที่ 3: รหัส
ฉันรวมรหัสสามส่วน:
การ์ด SD: ตัวอย่างที่ใช้ >SD > ReadWrite ใน Arduino IDE
TSL 2561: ใช้ตัวอย่าง Adafruit TSL2561 Library (sensorapi); คุณจะพบในตัวอย่าง หากคุณติดตั้งไลบรารี่ (ฉันคิดว่าคุณรู้วิธีติดตั้งไลบรารีใน Arduino IDE)
LED เฟด: ตัวอย่างที่ใช้ > แอนะล็อก > เฟด
รหัสหลังจากเริ่มต้นโมดูลจะหรี่ไฟ LED และอ่านความสว่างและบันทึกลงในการ์ด SD ด้วยวิธีนี้ฉันจะรวบรวมข้อมูลสำหรับการสอบเทียบ
ฉันเปลี่ยนแต่ละรหัสตามความต้องการของฉัน รหัสสุดท้ายที่แนบมา
สัญญาณควรมีลักษณะเหมือนภาพที่แนบมา น่าเสียดายที่ฉันลืมถ่ายรูป ดังนั้นฉันจึงทำซ้ำใน excel เพื่อแสดงให้คุณเห็นว่าควรเป็นอย่างไร
หมายเหตุ: ฉันใช้ wemo mini D1 แทน Arduino ด้วยเหตุผลบางอย่างที่ฉันไม่รู้ PWM อยู่ระหว่าง 0 ถึง 1023 ใน Arduino ควรอยู่ระหว่าง 0-255 หากคุณต้องการใช้รหัสสำหรับ Arduino คุณควรดูแลมัน (บรรทัดที่ 90)
ขั้นตอนที่ 4: ติดตั้งและใช้งาน
หลังจากรวบรวมข้อมูลแล้ว ฉันเปิดไฟล์ใน excel และลงจุดข้อมูล (ดูรูป) คอลัมน์แรกคือค่า PWM และคอลัมน์ที่สองคือลักซ์ (การอ่านของเซ็นเซอร์ หน่วยไม่สำคัญ) ดังนั้น พล็อตลักซ์ (แกน y) กับ PWM (แกน x) อย่างที่คุณเห็นความสว่างเป็นสัดส่วนเชิงเส้นตรงกับค่า PWM ฉันติดตั้งเส้นกับมัน
เพื่อให้พอดีกับบรรทัดดังนี้:
1- พล็อตข้อมูล (แทรก > พล็อตกระจาย) ฉันถือว่าคุณรู้วิธี
2- คลิกขวาที่ข้อมูลที่พล็อต
3- คลิกที่เส้นแนวโน้ม
4- (ใน excel 2013) ทางด้านขวาแผงจะปรากฏขึ้น เลือกเชิงเส้น ที่ด้านล่าง เลือก "แสดงสมการบนแผนภูมิ"
ความสัมพันธ์เชิงเส้นแตกต่างจากการรับรู้ของฉัน ดังนั้นฉันคิดว่าควรมีความสัมพันธ์แบบลอการิทึมระหว่างการรับรู้ของฉันกับความสว่าง (นี่เป็นวิธีที่ง่ายที่สุดในความคิดของฉัน!) ดังนั้นฉันจึงเอาความชันของความพอดี การสกัดกั้นไม่สำคัญเพราะขึ้นอยู่กับมลภาวะทางแสงโดยรอบ! ฉันเพิ่ม 1 แทน เนื่องจาก Log10(0) เป็นอนันต์ ดังนั้นฉันต้องการการสกัดกั้นเพื่อแก้ปัญหา ในกรณีของฉันสมการจะมีลักษณะดังนี้:
y =Log10(0.08 x +1) y คือความสว่าง และ x คือค่า PWM (0-1023)
ฉันปรับสมการให้เป็นค่าสูงสุด แล้วรังเอาท์พุทจะอยู่ระหว่าง 0-100 เสมอ วิธีนี้ฉันสามารถถาม Arduino เกี่ยวกับความสว่างสัมพัทธ์บางอย่างได้ โดยไม่คำนึงถึงความสว่างสัมบูรณ์สูงสุด
y =Log10(0.08 x +1)*100/1.914
เนื่องจากใน Arduino อินพุตของฉันคือความสว่างสัมพัทธ์ ฉันต้องจัดสมการสำหรับ x (PWM ใหม่):
x = (10^(y*1.914/100) - 1) / 0.08
โดยใช้สมการนี้ในโค้ด เราจะสามารถเปลี่ยนแปลงความสว่างเชิงเส้นได้ ดังนั้นคุณจึงขอให้ Arduino สำหรับความสว่าง (y) ระหว่าง 0-100 และ Arduino จะคำนวณค่า PWM ที่สอดคล้องกัน ด้วยวิธีนี้ หากความสว่างเพิ่มขึ้นเป็นสองเท่า การรับรู้ของคุณก็เหมือนกัน
หากคุณต้องการใช้ในโค้ดของคุณ คุณควรเพิ่มบรรทัดนี้:
ความสว่าง=50; // เป็นเปอร์เซ็นต์
PWM = pow(10, ความสว่าง*1.914/100)-1)/0.0793;
analogWrite (ledpin, PWM);
หมายเหตุ: การปรับให้เป็นมาตรฐานทำได้สำหรับ PWM สูงสุด 1023 (สำหรับ Wemos mini D1) สำหรับ Arduino PWM อยู่ระหว่าง 0-255 คุณต้องคำนวณตามนั้น
NOTE2: ฉันได้เพิ่ม log-linear plot เพื่อแสดงว่าการรับรู้และค่า PWM ของเราเกี่ยวข้องกันอย่างไร คุณไม่ควรใช้เพื่อกระชับ!
ขั้นตอนที่ 5: บทสรุป
การสอบเทียบทำงานได้ดีสำหรับฉัน เมื่อค่า PWM มีค่ามาก ฉันสามารถเห็นความแตกต่างได้ ก่อนเป็นค่าขนาดใหญ่ฉันไม่สามารถเห็นผลของการหรี่แสง โดยพื้นฐานแล้วการเปลี่ยนแปลงส่วนใหญ่เกิดขึ้นในช่วง PWM ขนาดเล็ก ตอนนี้มันถูกปรับเทียบแล้ว!
LED แต่ละดวงซึ่งมีสีต่างกันเป็นพิเศษ ควรมีพารามิเตอร์การสอบเทียบของตัวเอง อย่างไรก็ตาม ฉันปรับเทียบ LED สีน้ำเงินและใช้พารามิเตอร์สำหรับ LED สีขาว และผลลัพธ์ก็เป็นที่ยอมรับ ดังนั้นบางทีคุณสามารถใช้พารามิเตอร์การปรับเทียบของฉันโดยไม่รบกวนตัวเอง!!