การมีไฟสวยๆ เนียนๆ นี่สำคัญกว่ากล้อง SLR แพงๆ อีกนะเว้ย! โปรเจคนี้จะพาน้องๆ มาสร้าง Portable Ring Light ด้วย Arduino กับ NeoPixel กัน รับรองว่าภาพ Portrait หรือภาพสินค้าจะดูโปรขึ้นชัวร์!
ของที่ต้องใช้ในโปรเจคนี้
- Arduino UNO×1
- Adafruit NeoPixel Ring: WS2812 5050 RGB LED×1
- SparkFun Pushbutton switch 12mm×1
- แบตเตอรี่ 9V (ทั่วไป)×1
- แผ่นทดลองวงจร (Dot board)×1
ซอฟต์แวร์และไลบรารี
- Arduino IDE
- Adafruit Neopixel Library
เจาะลึกชิ้นส่วนหลักแบบช่างๆ
ในมุมมองของวิศวกรรมฝังตัว (Embedded) ตัว WS2812B NeoPixel นี่ไม่ใช่ LED ทั่วไปนะฮะ ข้างในแต่ละดวงมันมีวงจรรวม (IC) ฝังอยู่ด้วยเลย มันรับข้อมูลดิจิทัลแบบอนุกรม แล้วก็ส่งข้อมูลนั้นต่อไปยัง LED ตัวถัดไป ทำให้เราควบคุม LED เป็นสิบๆ ดวงได้ด้วยสายสัญญาณเส้นเดียว!
ส่วน Arduino UNO ก็ทำหน้าที่เป็นเจ้านาย (Master) คอยส่งสัญญาณพัลส์ที่แม่นยำมากๆ (จับเวลาเป๊ะ) เพื่อตั้งค่าความสว่างและสีของ LED แต่ละดวงตามที่ช่างภาพต้องการ
การต่อวงจร

เราต้องต่อ NeoPixel WS2812B และปุ่มกด (Push button) เข้ากับ Arduino UNO
1. การต่อ NeoPixel Ring:
- VCC → 5V: ขั้วบวกของแหล่งจ่ายไฟ
- GND → GND: กราวด์ร่วมของระบบ
- DI (Data Input) → Digital Pin 7: ขาสัญญาณข้อมูลสำหรับควบคุม LED
2. การต่อปุ่มกด:
- ต่อปุ่มกดระหว่าง Digital Pin 6 และ GND
- ในโค้ด เราจะใช้โหมด
INPUT_PULLUPเพื่อลดความจำเป็นในการใช้ตัวต้านทาน (Resistor) ภายนอก
3. แหล่งจ่ายไฟ:
เราสามารถจ่ายไฟให้โปรเจคนี้ได้ทั้งจากแบตเตอรี่ 9V และสาย micro-USB ถ้าอยากให้พกพาได้ ก็ต่อขั้ว +ve ของแบตเตอรี่เข้ากับขา VIN ของ Arduino และ -ve ต่อกับ GND ตัว Voltage Regulator ในบอร์ดจะลดแรงดันลงเหลือ 5V อย่างปลอดภัยเพื่อจ่ายไฟให้ระบบ
ติดตั้งไลบรารี Neopixel

เราสามารถติดตั้งไลบรารี Neopixel ของ Adafruit ผ่าน Library Manager ได้เลย เลือกเวอร์ชันล่าสุดแล้วกด Install
จากนั้นเปิดตัวอย่างโปรเจคแล้วรันมัน อย่าลืมเปลี่ยนค่า NUMPIXEL ให้ตรงกับจำนวน LED บริงที่ซื้อมา ตัวอย่างนี้พี่ใช้ NeoPixel LED Ring 16 ดวง
การประยุกต์ใช้และวิเคราะห์ตรรกะของโค้ด
หัวใจของโปรเจคนี้คือการสร้าง "State Machine" ง่ายๆ เพื่อสลับโหมดการทำงานเมื่อกดปุ่ม หลักการทำงานมีดังนี้:
- ตรวจจับอินพุต (Input Sensing): โปรแกรมจะคอยตรวจสอบสถานะของ Digital Pin (Input) ตลอดเวลา ถ้าตรวจพบค่าเป็น
LOW(เพราะเราใช้ PULLUP) แปลว่ามีการกดปุ่ม - สลับโหมด (Mode Switching): ทุกครั้งที่กดปุ่ม ตัวแปร
modeจะเพิ่มค่า และจะวนกลับไปเริ่มต้นใหม่เมื่อถึงโหมดสุดท้ายแล้ว - เอฟเฟกต์ไฟ: แต่ละโหมดจะเรียกใช้ฟังก์ชันต่างกันไป:
- สีทึบ (Solid Colors): แสดงสีแดง เขียว น้ำเงิน ตามลำดับ เอาไว้ปรับสมดุลแสงขาว (White Balance) หรือสร้างอารมณ์ภาพถ่ายแบบเฉพาะเจาะจง
- ไฟไล่สี (Color Chasing): สร้างเอฟเฟกต์ไฟไล่ตามกันเป็นสีขาว แดง หรือน้ำเงิน ใช้สร้างภาพเบลอจากการเคลื่อนไหว (Motion Blur) หรือเงาสะท้อนที่ดูมีชีวิตชีวา
- โหมดสายรุ้ง (VIBYOR): แสดงสีรุ้งโดยการวนผ่านเฉดสีต่างๆ ในวงล้อสี (Color Wheel) เหมาะสำหรับงานถ่ายภาพศิลปะสร้างสรรค์
เจ้านี่เอาไปใช้เป็น ริงไลท์ (Ring Light) ติดหน้ากล้องได้เลย ช่วยลบเงาบนใบหน้า (Fill Light) หรือสร้างจุดแสงสวยๆ ในดวงตา (Catchlights) ได้จัดเต็ม
โค้ด
โค้ดทั้งหมดอยู่ใน GitHub ของพี่นะ ไปก๊อปมาเล่นได้เลย
เวลาอัพโหลดโค้ด เลือกบอร์ดเป็น Arduino UNO และตั้งอัตราส่งข้อมูล (Upload Speed) เป็น 115200 โลด
การทำงาน

ภาพด้านบนเปรียบเทียบก่อนและหลังเปิดไฟแล้วจ้า
เย่! ในที่สุดเราก็ทำโปรเจคนี้สำเร็จแล้ววว โปรเจคนี้เป็นตัวอย่างที่เจ๋งมากของการนำความรู้ Embedded Systems ไปประยุกต์ใช้กับงานศิลปะและการถ่ายภาพ ถ้าน้องมีคำถามหรืออยากต่อยอด เช่น เพิ่มปุ่มปรับความสว่าง (Potentiometer) หรือควบคุมผ่านบลูทูธ ก็ถามพี่มาได้ตลอดนะ หรือจะเสนอโปรเจคใหม่ๆ ให้พี่ทำต่อก็ยินดีเลย
ถ้ามันช่วยน้องได้จริงๆ อย่าลืมกดไลค์ให้กำลังใจพี่ด้วยล่ะ และติดตามช่องไว้จะมีโปรเจคเด็ดๆ มาให้ดูเรื่อยๆ :)
ขอบคุณที่อ่านมาจนจบนะ สู้งานต่อไปน้อง!