ปีนี้พวกเราตกแต่งต้นไม้ด้วยไฟ Arduino Uno และความสำเร็จขั้นเทพ (เท่าที่ผ่านมา!) ของพี่คือการทำให้หิมะตกบนต้นไม้ได้!
การแสดงผลนี้จะสร้าง 'เกล็ดหิมะ' ที่ยอดต้นไม้ จำลองการร่วงหล่นพลิ้วไหว และกองสุมเป็นกองหิมะที่โคนต้น แถวล่างสุดจะค่อยๆ ละลาย ช่วยให้มีที่สำหรับหิมะใหม่ๆ!
พายุหิมะดิจิทัล: ฟิสิกส์การตกของหิมะบนต้นไม้
ไฟคริสต์มาสธรรมดาๆ ก็แค่ "กระพริบ" แต่โปรเจค Snowy Tree นี้สร้างสภาพแวดล้อมที่มีชีวิตขึ้นมาเลย ด้วยการพันต้นไม้ด้วย WS2811 Addressable LEDs คุณจะจำลองการเคลื่อนไหวพลิ้วไหวของพายุหิมะในฤดูหนาวได้ โปรเจคนี้ไม่ใช่แค่แสดงรูปแบบ แต่จำลองวงจรชีวิตในบรรยากาศของเกล็ดหิมะ—ตั้งแต่ "การเกิด" ที่ยอดต้นไม้ ไปจนถึง "การละลาย" ที่พื้น
การทำแผนที่เชิงพื้นที่: เชื่อมต่อ 1D สู่ 3D
ความท้าทายใหญ่ที่สุดในการตกแต่งต้นไม้ด้วย LED คือสายไฟเป็น สายแบบหนึ่งมิติ (1D) แต่ต้นไม้เป็น ทรงกรวยสามมิติ (3D) เพื่อให้หิมะดูเหมือนตกลงมาตรงๆ พี่ต้องหาอัตราส่วนของไฟ LED ในแต่ละชั้น (ring)
ส่วนที่ยากคือการหาอัตราส่วนของไฟในแต่ละชั้นนี่แหละ พี่เลยเขียนโค้ดชั่วคราวขึ้นมาให้สามารถเลื่อน 'เคอร์เซอร์' ไปรอบๆ ต้นไม้ได้ โดยจะติดทีละหนึ่ง LED มันใช้ Serial.read() เพื่อให้พี่ใช้ปุ่ม '-' และ '=' เลื่อนมันไปมาได้ และพิมพ์หมายเลขไฟปัจจุบันออกมาให้พี่บันทึกได้ วิธีนี้ทำให้พี่สร้าง 'เส้นแนวตั้ง' ขึ้นด้านหนึ่งของต้นไม้ โดยเริ่มที่ไฟหมายเลข 0
"ซอฟต์แวร์เคอร์เซอร์" ตัวนี้คือเครื่องมือทำแผนที่แบบมือของพี่เลย ด้วยการเลื่อน LED ที่ติดไฟเพียงดวงเดียวไปตามสายไฟ พี่บันทึกว่า "ดัชนี LED" ไหนตรงกับความสูงและกิ่งจริงๆ บนต้นไม้ จากข้อมูลนี้ พี่ก็คำนวณ อัตราส่วนแนวตั้ง สำหรับแต่ละ "ชั้น" ในแนวนอนของต้นไม้ได้ ด้วยอัตราส่วนเหล่านั้น ทุกครั้งที่เกล็ดหิมะต้อง 'ร่วง' ลงมา พี่ก็รู้แล้วว่าต้องเลื่อนมันกี่ดวงเพื่อสร้างภาพลวงตาว่ามันเคลื่อนที่ในแนวตั้ง! ตอนนี้ Arduino สามารถระบุได้อย่างแม่นยำแล้วว่า LED ดวงไหนควรติดไฟต่อไป เพื่อสร้างภาพลวงตาว่าเกล็ดหิมะ "ตกลงมา" ในแนวตั้ง แทนที่จะแค่เคลื่อนที่ไปตามสายไฟ
วงจรชีวิตของเกล็ดหิมะเสมือน
โค้ดนี้ใช้เอ็นจิ้นแอนิเมชันที่ซับซ้อน มีหลายขั้นตอนชัดเจน:
- การกำเนิด: เกล็ดหิมะจะถูกสุ่มสร้างขึ้นที่ LED ชั้นบนสุด ด้วยความเข้มที่แตกต่างกัน (ใช้สีขาวและสีฟ้าอ่อน)
- การพลิ้วไหว: ขณะที่เกล็ดหิมะ "ร่วงลงมา" โค้ดจะเพิ่มการส่ายในแนวนอนเล็กน้อย เลียนแบบการเคลื่อนที่วุ่นวายของหิมะจริงที่ถูกสายลมโชย
- การสะสม: เมื่อเกล็ดหิมะถึงปลายสายไฟ มันไม่ได้หายไปเฉยๆ มันจะยังคงติดไฟอยู่ สร้าง "กองหิมะ" สะสมขึ้น
- การละลายครั้งใหญ่: เพื่อป้องกันไม่ให้ต้นไม้ขาวโพลนไปหมด "ตัวจับเวลาในการละลาย" จะค่อยๆ ปิดไฟ LED ชั้นล่างสุด ทำให้มีที่ว่างสำหรับเกล็ดหิมะใหม่จากด้านบนได้ตลอดเวลา
การจัดการพลังงานสำหรับสิ่งมหัศจรรย์ในฤดูหนาว
Addressable LEDs นี่กินไฟไม่เบา ถ้าคุณตั้งค่า LED 100 ดวงให้เป็นสีขาวเต็มที่ (เหมือนหิมะ) มันอาจกินกระแสได้ถึง 6 แอมป์ โปรเจคนี้ใช้ แหล่งจ่ายไฟอุตสาหกรรม 5V 10A และ ตัวเก็บประจุขนาดใหญ่ 1000uF ขวางบนเรลไฟ เพื่อป้องกันปรากฏการณ์ "Browser Brownouts" — ที่แรงดันตกต่ำมากจน Arduino รีเซ็ตตัวเอง การจัดการนี้ช่วยให้การแสดงผลฤดูหนาวของคุณคงที่ตลอดทั้งคืน
โปรเจคนี้เป็นบทนำที่เพอร์เฟกต์สำหรับ Algorithmic Animation และแสดงให้เห็นว่าแค่การทำแผนที่เชิงพื้นที่นิดหน่อย ก็สามารถเปลี่ยนสายไฟธรรมดาๆ ให้กลายเป็นงานศิลปะเชิงโต้ตอบระดับมืออาชีพได้แล้ว