กลับไปหน้ารวมไฟล์
k-pop-lightstick-personal-lightshow-8e8f62.md

เรื่องราวเบื้องหลัง

ลูกสาวผมกับเพื่อนๆ เค้าเป็นแฟนพันธุ์แท้เพลง K-POP กันเลยทีเดียว และก็อยากได้เจ้าไฟสติ๊กสุดเท่ที่เห็นในคอนเสิร์ตวงเคป๊อปกันทั้งนั้น แต่ราคามันช่างสูงลิ่วเกินไป (ทั้งผม ลูกสาว และเพื่อนๆ) เลยตัดสินใจสร้างเวอร์ชั่นของเราขึ้นมาเองไงล่ะ แค่ใส่ LED กระพริบๆ ในท่อพลาสติกมันดูเบื่อไปหน่อย พวกเราก็เลยทำอะไรที่มันว้าวขึ้นมาหน่อย!

ฟีเจอร์เด็ดๆ

  • มีลวดลายไฟหลากสีให้เลือกเพียบ
  • มี โหมดเฉพาะเพลง ที่เปลี่ยนรูปแบบและสีไฟให้เข้ากับจังหวะเพลง (ท่อน verse, chorus, ระหว่างท่อน...)
  • มีเว็บอินเตอร์เฟซ (ใช้บนมือถือได้ด้วย) สำหรับเลือกเพลง โปรแกรมไฟ และตั้งค่าเครือข่าย
  • ตรวจจับ BPM และซิงค์กับจังหวะได้ด้วยปุ่มกดในตัว
  • โปรแกรมโชว์ไฟสำหรับเพลงอะไรก็ได้แบบสดๆ
  • บันทึกและโหลดโชว์ไฟทั้งหมดลงในหน่วยความจำภายในได้

เรื่องการเชื่อมต่อ

  • เปิดโหมด Access Point WLAN ของตัวเองอัตโนมัติ ถ้าเชื่อมต่อกับเครือข่ายที่มีอยู่ไม่ได้ หรือกดปุ่มค้างตอนเปิดเครื่อง
  • เชื่อมต่อกับ WLAN ได้โดยใช้ข้อมูลที่เคยบันทึกไว้ หรือตั้งค่าใหม่ผ่านเว็บอินเตอร์เฟซ

ตัวอย่างการทำงาน

วัสดุอุปกรณ์

นอกจากชิ้นส่วนอิเล็กทรอนิกส์ (ดูรายการในส่วนคอมโพเนนต์) เราก็ต้องมีของมาประกอบเป็นตัวแท่งไฟด้วย แบบของเราได้แรงบันดาลใจจาก "BTS Armybomb" เลยใช้วัสดุประมาณนี้:

  • ท่อพลาสติกยาว 30-40 ซม. เส้นผ่านศูนย์กลาง 4 ซม. พร้อมฝาปิดด้านหนึ่ง
  • ลูกบอลพลาสติกขนาด 10 ซม. และ 8 ซม.
  • กระดาษทราย
  • สีอะครีลิคสีดำ (เลือกไม่ค่อยดีเท่าไหร่ เพราะมันลอกง่าย)
  • เพชรอะคริลิกแก้ว ขนาด 4 ซม.
  • FIMO (แป้งโดว์แห้งเร็ว) เอามาทำเป็นฐานสำหรับชุดเลนส์และไฟ
  • กาวร้อน

ขั้นตอนการประกอบ

การต่อวงจรเป็นส่วนที่ง่ายที่สุด การเขียนซอฟต์แวร์คือส่วนที่สนุก และการประกอบตัวแท่งไฟคือช่วงลองผิดลองถูก มาดูขั้นตอนหลักๆ ตามลำดับกัน:

วงจรไฟฟ้า

อันนี้ใครๆ ก็ทำได้อยู่แล้ว แต่อย่างนึงที่ต้องบอกไว้: ตอนพัฒนาและทดสอบเอฟเฟกต์ไฟทั้งหมด ผมใช้ Arduino Uno นะ เพราะคอมไพล์และอัพโหลดโค้ดเร็วกว่าเยอะ บน Arduino Uno ปุ่มกดจะต่อกับขา D5 และขา Data ของ Neopixel ต่อกับ D12 ซึ่งเป็นตัวเลขที่เห็นในโค้ด ความสับสนเรื่องหมายเลขขาในโค้ดกับขาจริงนี่เป็นเรื่องแปลกๆ ของ ESP8266 นี่แหละ ดังนั้นแผนภาพนี้จะแสดงวิธีต่อเข้ากับ ESP8266 NodeMCU

ซอฟต์แวร์

ใน repository มีสเก็ตช์หลักๆ อยู่ 3 ไฟล์:

  • the_light_stick: เฟิร์มแวร์สุดท้ายสำหรับ ESP8266 NodeMCU
  • LightShow_preparation: เวอร์ชั่นที่ตัดฟังก์ชันเครือข่ายและเว็บ UI ออก เหลือแต่ฟังก์ชันหลักสำหรับโชว์ไฟ เอาไปรันบน Arduino Uno ได้ เวลาจะเปลี่ยนหรือทดสอบโปรแกรมไฟ ให้ดูคำสั่งที่สามารถส่งผ่าน Serial Interface ได้
  • ui_preparation: เวอร์ชั่นที่เหลือแต่โค้ดเครือข่ายและ UI ทำให้ไฟล์เล็กลงและอัพโหลดลง NodeMCU ได้เร็วขึ้น รวมไฟล์ css และ html ต้นแบบไว้ด้วย การปรับแต่งเลย์เอาต์ทำได้โดยแค่แก้ไฟล์พวกนี้แล้วเสิร์ฟผ่านเว็บเซิร์ฟเวอร์เล็กๆ (เช่น miniweb)

มีไฟล์นึงที่ขาดไปโดยตั้งใจ น้องต้องสร้างไฟล์ `wifi_credentials.h` ขึ้นมาเอง โดยมี `#define STASSID` และ `#define STAPSK` อยู่ข้างใน

ถ้าน้องอยากเพิ่มหรือเปลี่ยนเพลงที่ตั้งค่าไว้ในโค้ด (hard coded song presets) ให้ไปดูในไฟล์ "SongPresets.ino" ที่อยู่ในโฟลเดอร์ "the_light_stick" เลยจ้า

Development Mockup

รายละเอียดเทคนิคแบบจัดเต็ม

ประสบการณ์คอนเสิร์ตสมัยใหม่มันคือภาพของไฟ LED 50,000 ดวงในไลท์สติ๊กที่สว่างพร้อมกันเป็นแพทเทิร์นใหญ่โตเต็มสนาม โปรเจค K-Pop Lightstick นี้คือการย่อเทคโนโลยีนั้นลงมาให้อยู่ในมือเรา สอนให้น้องๆ ได้สร้างงานศิลปะจาก LED ความหนาแน่นสูงแบบพกพา ที่สามารถตอบสนองต่อคำสั่งภายนอกและเสียงเพลงได้

ทรงกลมแห่ง NeoPixel (The Spherical NeoPixel Array)

ถ้าอยากได้แสงออร่าที่เจิดจ้าเห็นชัด น้องต้องไม่ใช้แค่ LED ดวงเดียวแน่นอน ในโปรเจคนี้เราใช้ NeoPixel Jewel ที่มี LED 7 ดวงเป็นแหล่งกำเนิดแสงหลัก เอาไปติดตั้งไว้ในถ้วยที่ทำขึ้นเอง แล้วปิดทับด้วยเพชรอะคริลิกเพื่อกระจายแสง จากนั้นแสงจะถูกกระจายอีกครั้งผ่านทรงกลมพลาสติก ทำให้เกิดแสงเรืองที่สม่ำเสมอ

โดยใช้ไลบรารี FastLED Arduino จะทำการแมป LED เหล่านี้ให้เป็นอาร์เรย์เชิงตรรกะ โค้ดจะรันอนิเมชั่นซับซ้อนอย่าง sinelon(), juggle(), และ rainbow_beat() ทำให้แสงเต้นเป็นจังหวะได้อย่างเป็นธรรมชาติ ส่วนอินเทอร์เฟซเว็บจะช่วยให้เราสามารถโปรแกรมแพทเทิร์นเหล่านี้ได้แบบเรียลไทม์ และซิงค์กับเพลงผ่านการตรวจจับ BPM ได้อีกด้วย

การซิงค์ในคอนเสิร์ต (Wireless Triggers)

ไลท์สติ๊กของจริงมันไม่ได้แค่ลูปซ้ำๆ นะ มันต้องตอบสนองได้ด้วย แม้ว่าตัวที่เราสร้างกันนี้จะใช้ WiFi และอินเทอร์เฟซเว็บสำหรับควบคุม แต่แนวคิดนี้สามารถขยายไปสู่การซิงค์แบบไร้สายเป็นกลุ่มได้

  • ESP8266 (อย่าง NodeMCU หรือ D1 Mini ที่เราใช้กัน) จะเปิด WiFi Access Point ของตัวเองขึ้นมา ทำให้สมาร์ทโฟนหรือแล็ปท็อปสามารถเชื่อมต่อโดยตรงเพื่อทำหน้าที่เป็น "ผู้จัดการเวที (Stage Manager)"
  • ผ่านอินเทอร์เฟซเว็บ ผู้จัดการสามารถเลือกเพลงที่ตั้งค่าไว้ (song presets) หรือสั่งให้แสดงแพทเทิร์นแสงเฉพาะได้
  • เฟิร์มแวร์รองรับเพลงที่ตั้งค่าไว้ในโค้ด (hardcoded song presets) ซึ่งจะเปลี่ยนแพทเทิร์นและสีให้สอดคล้องกับโครงสร้างเพลง (ท่อน verse, chorus, breaks) ในกรณีที่ใช้เป็นกลุ่ม การเรียกใช้ preset จะทำให้ไลท์สติ๊กทุกอันที่เชื่อมต่ออยู่เปลี่ยนไปพร้อมกัน
  • ปุ่มที่ติดตั้งมาด้วยช่วยให้เราสามารถแตะจังหวะ BPM ด้วยมือได้ เพื่อซิงค์อนิเมชั่นแสงให้เข้ากับจังหวะของเพลงที่เล่นสด

อุปกรณ์แบบ Wearable และความต้องการพลังงาน

  • ESP8266 NodeMCU หรือ D1 Mini: ต้องใส่เข้าไปในด้ามจับทรงท่อได้ รุ่น D1 Mini จะมีขนาดกะทัดรัดและเป็นโมดูลาร์มากกว่า
  • NeoPixel Jewel (7 x WS2812B LEDs): โมดูล LED RGB แอดเดรสได้หลักของเรา
  • แบตเตอรี่ LiPo 18650 และวงจรชาร์จ: NeoPixels ที่เปิดสีขาวเต็มความสว่างจะกินไฟมหาศาล ดังนั้นการจัดการพลังงานในโค้ดให้มีประสิทธิภาพจึงสำคัญมากสำหรับอายุการใช้งานแบตเตอรี่ อุปกรณ์นี้ใช้ไฟผ่าน USB
  • ชิ้นส่วนที่ต้องทำเอง (Custom Fabrication): ท่อพลาสติก, ทรงกลม, และถ้วยที่ทำขึ้นเอง (จาก FIMO หรือ Sugru) เพื่อใช้เป็นที่ยึดชุดแสง

ชุดแสง (The optical unit):

  • ทำถ้วยขึ้นมาอันนึงจาก FIMO หรือวัสดุปั้นอื่นๆ
  • เส้นผ่านศูนย์กลางด้านใน: เล็กกว่าเพชรอะคริลิกนิดนึง
  • เส้นผ่านศูนย์กลางด้านนอก: พอดีกับเส้นผ่านศูนย์กลางด้านในของท่อ
  • ความลึกด้านในเท่ากับความสูงของเพชร
  • เจาะรูที่ก้นถ้วยสำหรับสายไฟ
  • บัดกรีสายไฟเข้ากับ NeoPixel Jewel
  • กาว NeoPixel Jewel เข้ากับก้นถ้วย
  • กาวเพชรไว้ในถ้วย (ต้องกาวให้แน่นๆ ไม่งั้นมันจะหลุดและเด้งไปมาเวลาเขย่า)

ทรงกลม (The spheres)

  • ขัดทรงกลมพลาสติกขนาด 8 ซม. ให้ทั่วด้วยกระดาษทราย
  • ตัดรูในทรงกลม (เราใช้ใบเลื่อยเหล็กเล็กๆ ตัดร่องก่อนเพื่อทำให้พลาสติกอ่อนตัวตรงที่ต้องการ จากนั้นใช้คีมดึงส่วนที่เตรียมไว้ออกมา)

การประกอบ (Assembly)

  • เจาะรูบนท่อสำหรับปุ่มกด
  • ต่อสายไฟทั้งหมดและจัดเส้นสายไฟให้เรียบร้อยผ่านท่อ
  • ยัด Node MCU เข้าไปในท่อ (เวอร์ชั่นเรามันแน่นปึ๊กกับเส้นผ่านศูนย์กลางเลย)
  • ติดปุ่มในรูที่เจาะไว้
  • วางและกาวหน่วยควบคุมแสง (optical unit)
  • ติดกาวลูกแก้ว (spheres)
  • ทาสีไม้ให้เป็นสีดำ
  • คู่มือ (Manual)

    ไปหาคู่มือเต็มๆ (ภาษาอังกฤษและเยอรมัน) ได้ในไดเรกทอรี "docs" ของโปรเจกต์บน git นะ ตรงนั้นจะอธิบายด้วยว่าเราจะตั้งค่าแพทเทิร์นสำหรับเพลงเองผ่านเว็บอินเตอร์เฟซยังไง ถ้าอยากแฮดโค้ดแพทเทิร์นลงในเฟิร์มแวร์โดยตรง ก็แค่คัดลอกสตริงโปรแกรมที่เราสร้างในเว็บอินเตอร์เฟซไปวางในโค้ดไฟล์ "SongPresets.ino" ได้เลย

    ตัวแปรฮาร์ดแวร์ - D1 Mini

    เพื่อให้บอร์ดคอนโทรลเลอร์กินพื้นที่น้อยลง และให้การติดตั้งมันแน่นหนาเป็นโมดูลมากขึ้น พี่เลยทำตัวแปรที่ใช้บอร์ด D1 Mini กับ PCB เล็กๆ สำหรับติดตั้งง่ายๆ ขึ้นมา

    แล้วเราก็เปลี่ยนวัสดุท่อด้วย โดยเอากล่องกระดาษแข็งจากม้วนกระดาษห่อของกลับมาใช้ใหม่ ดูรูปพวกนี้เลย:

    ข้อมูล Frontmatter ดั้งเดิม

    apps:
      - "1x Arduino IDE"
      - "1x MiniWeb http server"
    author: "mattywausb"
    category: "Lights & LEDs"
    components:
      - "1x esp8266 NodeMCU"
      - "1x Arduino UNO"
      - "1x Button (RAFI 107.507)"
      - "1x Neopixel Jewel"
    description: "แสงตึงๆ สำหรับคอนเสิร์ตในบ้าน! Lightstick อันนี้มีเอฟเฟกต์แสงจัดเต็มหลายโหมด แถมมี "Song Programming Mode" ให้โปรแกรมแสงตามเพลงได้แบบเทพๆ และมี User Interface ผ่านสมาร์ทโฟน งานง่ายแต่หล่อมาก วัยรุ่นต้องชอบ!"
    difficulty: "Easy"
    documentationLinks: []
    downloadableFiles:
      - "https://github.com/mattywausb/lightstick"
      - "https://github.com/mattywausb/lightstick"
    encryptedPayload: "U2FsdGVkX1/QcOm3qNwU9XX3zOBDMu3CAK9Nt3ipcuQFBlY1UJpsuXVJ4h0FCmGl3uB/ir7hhr6QN+/NJYUHtf17FcqTZuigKjDVY5eYfcJT2T5LS+6lY/aEeo3Jd8XE"
    heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/k-pop-lightstick-personal-lightshow-8e8f62_cover.jpg"
    lang: "en"
    likes: 2
    passwordHash: "de73a7a603da7902d4e97fa15bab92352048f57b4d18571f56f9f556437d5861"
    price: 2450
    seoDescription: "Build a custom K-Pop Lightstick with various effects, Song Programming Mode, and a smartphone user interface using Arduino."
    tags:
      - "lights"
      - "k-pop"
      - "music"
    title: "K-Pop Lightstick (จัดเต็มโชว์แสงแบบ Personal!)"
    tools: []
    videoLinks:
      - "https://www.youtube.com/embed/DNqyDrP80E0"
    views: 12521