เจ้าโมดูลไฟ Neopixel LED นี่มันจัดเต็มเรื่องฟีเจอร์เลยนะน้อง มันใช้ไมโครคอนโทรลเลอร์เป็นฐาน ทำให้สามารถผลิตแสงสีได้เป็นล้านเฉดเลยทีเดียว ในบทสอนนี้ เราจะมาปรับเปลี่ยน สถานะของไฟ Neopixel LED ตามสีที่เราต้องการ ด้วยความช่วยเหลือจากโมดูล Rotary Encoder และบอร์ด Arduino กัน วิธีนี้คือ พอเราหมุนแกน Encoder ไปแต่ละสเต็ป สถานะของไฟ Neopixel ก็จะเปลี่ยนตามไปด้วย งานนี้ทั้งสนุกและได้ความรู้ อย่าลืมไปหาความรู้เพิ่มเติมจากแหล่งอื่นๆ นะวัยรุ่น สู้งานต่อให้สุด!

โมดูล Rotary Encoder
Rotary Encoder คือเซ็นเซอร์วัดตำแหน่งประเภทหนึ่ง ใช้สำหรับหาตำแหน่งเชิงมุมของแกนที่กำลังหมุน มันจะสร้างสัญญาณไฟฟ้า (ไม่ว่าจะเป็นอนาล็อกหรือดิจิตอล) ที่สัมพันธ์กับการเคลื่อนที่แบบหมุน เนื่องจากมันมีพลังด้านดิจิตอลและการควบคุมที่แข็งแกร่ง โปรเจกต์หลายๆ อย่าง เช่น หุ่นยนต์, เครื่อง CNC, และเครื่องพิมพ์ จึงนิยมใช้โมดูล Rotary Encoder กัน Encoder มีทั้งแบบ Absolute และ Incremental นะ แบบ Absolute จะบอกตำแหน่งที่แน่นอนของปุ่มเป็นองศาเลย ส่วนแบบ Incremental จะรายงานว่าแกนมันเคลื่อนที่ไปกี่สเต็ปแล้ว พูดง่ายๆ Rotary Encoder ก็คือตัวต้านทานปรับค่า (Potentiometer) เวอร์ชันดิจิตอลในยุคใหม่นั่นแหละ มันสามารถหมุนได้รอบแบบไม่สิ้นสุด ไม่เหมือน Pot เก่าๆ ที่หมุนได้แค่ประมาณ 3/4 ของวงกลม ด้านใน Encoder จะมีแผ่นดิสก์ที่มีช่องสลิต เชื่อมต่อกับขา Common Ground (C) และขาสัมผัสอีกสองขาคือ A กับ B ตามที่เห็นในไดอะแกรมด้านล่าง พอน้องหมุนปุ่มไป ขา A กับ B จะสัมผัสกับขา Common Ground (C) สลับกันไปมา ขึ้นอยู่กับทิศทางที่หมุน

สุดท้ายแล้ว มันจะสร้างสัญญาณออกมาโดยการสัมผัสจุดร่วมนี่แหละ สัญญาณพวกนี้จะถูกส่งออกมาโดยที่ขาหนึ่งจะสัมผัสก่อนอีกขาหนึ่ง 90 องศา (เฟสต่างกัน) การเข้ารหัสแบบนี้เรียกว่า Quadrature นะ พอหมุนปุ่มตามเข็มนาฬิกา ขา A จะต่อก่อน แล้วตามด้วยขา B พอหมุนทวนเข็มนาฬิกา ขา B จะต่อก่อน แล้วค่อยตามด้วยขา A จำให้แม่น ไม่งั้นโปรแกรมจะงงเอา

บอร์ด Arduino
บอร์ด Arduino เป็นหนึ่งในบอร์ดพัฒนาที่ฮิตที่สุดในหมู่วิศวกรฝังตัวเลย มันมีหลายรุ่นให้เลือกใช้ เช่น Micro, Pro Mini, Nano, Uno และ Mega ด้วย ใจกลางของบอร์ดฮิตๆ พวกนี้คือชิปตระกูล AtMega328 นั่นเอง Arduino เป็นแพลตฟอร์มฮาร์ดแวร์และซอฟต์แวร์แบบโอเพ่นซอร์ส อย่างที่บอกไป แพลตฟอร์ม Arduino ประกอบด้วยไมโครคอนโทรลเลอร์แบบบอร์ดเดี่ยวโอเพ่นซอร์ส ซึ่งเป็นส่วนหนึ่งของฮาร์ดแวร์ Arduino นอกจากนี้ แพลตฟอร์มยังรวมถึงซอฟต์แวร์ Arduino IDE ที่ออกแบบมาเพื่อเขียนโปรแกรมให้บอร์ด Arduino และบูตโหลดเดอร์ซอฟต์แวร์ที่โหลดลงในไมโครคอนโทรลเลอร์อีกด้วย ง่ายๆ เลยคือมีทั้งตัวฮาร์ดแวร์และเครื่องมือให้ครบ จัดไปวัยรุ่น!
โมดูลไฟ LED แบบ Neopixel
Neopixel LEDs เป็นไฟ LED แบบ Addressable (ควบคุมเป็นดวงๆ ได้) ที่เรียงกันเป็นแถวหรือวง และสั่งงานจากไมโครคอนโทรลเลอร์ได้จากขาเดียวเลย! นั่นหมายความว่าเราสามารถควบคุมสีของแต่ละดวง และเลือกเปิดปิดไฟแต่ละดวงได้ตามใจชอบ ในขณะที่ถ้าเป็นไฟ RGB LED ทั่วไป เราต้องใช้ขาถึง 3 ขาเพื่อควบคุมความสว่างของสีแดง เขียว น้ำเงิน และไฟทุกดวงจะติดหรือดับพร้อมกันหมด จะเห็นว่าการควบคุมแบบแยกดวงเนี่ย มันช่วยสร้างเอฟเฟกต์แสงได้น่าสนใจกว่าเยอะเลย
หลายบริษัทก็ขายแถบไฟ LED แบบ Addressable กัน แต่ที่ฮิตสุดๆ ก็คือ Neopixel LEDs นี่แหละ ที่ผลิตโดย Adafruit บริษัทนี้เขาผลิตแถบไฟ Addressable ออกมาหลายรุ่น และยังพัฒนาลิเบรารีสำหรับควบคุมไฟพวกนี้โดยเฉพาะ ชื่อว่า Adafruit NeoPixel ด้วย แม้ว่าบริษัทอื่นๆ จะมีลิเบรารีของตัวเองเหมือนกัน แต่ในความคิดรุ่นพี่ Adafruit มีซัพพอร์ตดีสุดแล้ว เหมาะมากสำหรับเริ่มต้นเล่น เอาไปเลยวัยรุ่น!
อธิบายเพิ่มเติม
ในโปรเจคควบคุม Neopixel LED นี้ เราจะกำหนดค่าสี R, G และ B ไว้ในโค้ด จากนั้นสถานะของไฟ Neopixel จะเปลี่ยนไปตามการหมุนแต่ละสเต็ปของ โมดูล Rotary Encoder วิธีนี้ทำให้แต่ละสเต็ปของการหมุน ตรงกับเงื่อนไข (case) หนึ่งในโค้ดของโปรเจค โดยแต่ละเงื่อนไขก็จะมีค่าสีที่กำหนดไว้ ซึ่งจะถูกแสดงผลผ่านการเปลี่ยนสถานะของ Encoder ดูภาพประกอบด้านล่างนี้เลย

รายละเอียดเทคนิคแบบจัดเต็ม
การโต้ตอบระหว่างคนกับเครื่อง (HMI) แบบลื่นไหล
โปรเจคนี้เน้นที่ความรู้สึก "สัมผัส" (Feel) ของการควบคุม โดยใช้ Rotary Encoder ที่มีปุ่มกดในตัว เพื่อเลื่อนเลือกรูปแบบการแสดงแสงที่ซับซ้อน
- การอ่านค่า Encoder แบบ Interrupt: เพื่อให้แน่ใจว่าไม่พลาดการ "คลิก" แม้แต่ครั้งเดียว ขณะที่ไฟ NeoPixel กำลังแสดงแอนิเมชันอยู่ Arduino จะใช้การขัดจังหวะทางฮาร์ดแวร์ (Hardware Interrupt) บนขา
CLKและDTวิธีนี้ทำให้การเลื่อนเลือกสีหรือระดับความสว่างลื่นไหลมาก - การนำทางด้วย State-Machine: การกดปุ่ม Encoder หนึ่งครั้งจะสลับโหมดการทำงาน (เช่น โหมดเลือกสี, ตั้งความสว่าง, หรือความเร็วแอนิเมชัน) ส่วนการหมุนจะใช้ปรับค่าภายในโหมดนั้นๆ
การตอบสนองด้วยภาพ
- การตอบกลับด้วยไฟ Addressable LED: วงไฟ NeoPixel นี้ทำหน้าที่เป็นตัวบ่งชี้ภาพด้วยตัวเอง ตัวอย่างเช่น เวลาปรับระดับความสว่าง วงไฟอาจจะค่อยๆ เติมเต็มเหมือนมิเตอร์แบบมีตัวเลข ทำให้ผู้ใช้เข้าใจได้โดยสัญชาตญาณ ง่ายต่อการใช้งานสุดๆ สู้งานนะน้อง!