กลับไปหน้ารวมไฟล์
wooden-led-christmas-tree-66c448.md

ช่วงหลังมานี่พี่ติดใจเล่นไฟ LED กับ Arduino ทำโปรเจคต์สนุกๆ ไปเรื่อยเลยอะ นี่คือโปรเจคต์คริสต์มาสปี 2017 ของพี่ ต้นคริสต์มาสไม้ประดับไฟ LED!

ต้นคริสต์มาสไฟสว่างจ้า

ดูมันทำงานจริงๆ แบบนี้เลยจ้า:

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

สายไฟด้านหลังต้นไม้

พี่พบว่าการใช้ลวด 20ga ตะกั่วอาบ (tinned wire) ต่อไฟ LED ทุกดวงมันสะดวกสุด มันทำให้ด้านหลังดูเรียบร้อยและแข็งแรงพอที่จะแยกวงจรไม่ให้ชนกันได้ (ถึงจะต้องใช้กาวร้อนช่วยยึดเป็นฉนวนบางจุดก็เถอะ) จากนั้นก็ต่อตัวต้านทาน (Resistor) เข้ากับแต่ละแถวของ LED แล้วใช้ลวด 24ga ลงไปที่ฐาน ส่วนขา ground ของ LED ทั้งหมดก็ต่อรวมกัน

สรุปคือต้นไม้มีทั้งหมด 18 วงจร ใช้ Arduino Uno ตัวเดียวควบคุม ส่วนดาวบนยอดเป็นอีกชุดนึงแยกออกมา มี 20 วงจร ใช้ Nano คุม อุปกรณ์ทั้งหมดยัดไว้ในฐานหมดเลย:

Uno, Nano, Buck converter, Switchboard ในฐานต้นไม้

ข้างในฐานมันไม่สวยเท่าไหร่หรอก พี่มีแผนจะปรับปรุงใหม่ เพราะตอนนี้พี่ทำแผงสวิตช์บอร์ด (switchboard PCB) ของตัวเองขึ้นมาแล้ว เดี๋ยวพี่จะอธิบายต่อไป แต่นี่คือไส้ในทั้งหมด ณ ตอนนั้น:

ล้วงลึกเทคนิค: สถาปัตยกรรมระบบไฟและการควบคุม

ดาวบนยอดใช้ Nano จ่ายไฟได้สบายๆ แต่ต้นไม้มีไฟ LED เยอะเกินไปนิดนึงสำหรับ Uno ตัวเดียว เพื่อแก้ปัญหาขีดจำกัดกระแสไฟจากขา GPIO ของ Arduino Uno พี่เลยออกแบบ แผงสวิตช์ทรานซิสเตอร์ PNP (PNP Transistor Switchboard) แบบคัสตอมขึ้นมา บอร์ดนี้จะใช้สัญญาณลอจิกจาก Uno มาควบคุมการจ่ายไฟกระแสสูงจากแหล่งจ่ายไฟอีกชุดนึง

  • แผงสวิตช์โฟโตนิคส์กระแสสูง: ระบบนี้ใช้ทรานซิสเตอร์ PNP จำนวน 18 ช่อง Arduino Uno จะส่งสัญญาณ 5V HIGH ไปที่ขาเบสของแต่ละทรานซิสเตอร์ผ่านตัวต้านทาน 1kΩ เพื่อเปิดการจ่ายไฟจากเรล 5V อีกเส้น (ซึ่งได้จากบักคอนเวอร์เตอร์) ไปยังแถว LED ที่ต้องการ วิธีนี้ทำให้ Uno สามารถควบคุม LED ได้จำนวนมากโดยไม่ต้องรับโหลดกระแสไฟโดยตรง
  • ความเสถียรของเรลไฟ: ความหนาแน่นของ LED บนต้นไม้ต้องการโครงสร้างระบบไฟที่มั่นคง บักคอนเวอร์เตอร์ทำหน้าที่ลดแรงดันไฟ DC เสริม (จากเพาเวอร์ซัพพลาย DVD เสียที่พี่เอามาใช้) ให้เหลือ 5V ที่เสถียร การให้ความสำคัญกับเส้นกราวด์ร่วม (common-ground return paths) ช่วยให้ไฟทุกวงจรจาก 18 วงจรอิสระนี้สว่างได้โดยไม่มีไฟกระพริบ

ช่วงหลังพี่ก็เริ่มสนใจการออกแบบและผลิตแผงวงจรพิมพ์ (PCB) ผ่าน JLCPCB ด้วย ซึ่งพี่ก็วางแผนจะเอามาปรับใช้ในโปรเจคต์นี้เพื่อให้การเดินสายดูสะอาดตาขึ้น นี่คือแผงสวิตช์บอร์ดของพี่ มันทำให้การต่อสายง่ายมากๆ มีด้าน IN รับสัญญาณจาก Arduino และด้าน OUT ส่งต่อไปยัง LED

แผงสวิตช์บอร์ดของพี่

รายละเอียดทางวิศวกรรมและการลงมือทำ

  • การผสานโครงสร้างและแมคคาทรอนิกส์: โครงตัวถังตัดจากไม้อัดหนา 1/2 นิ้ว สร้างเส้นทางนำไฟฟ้าที่ด้านหลังโดยใช้ลวดเปลือยอาบดีบุกเบอร์ 20ga ทำหน้าที่เป็น "บัสบาร์" ส่วนสายไฟเบอร์ 24ga ที่มีฉนวนสีเป็นรหัสใช้เชื่อมต่อระหว่างส่วนลอจิกกับโหลด เราใช้กาวร้อนเคลือบเป็นฉนวนป้องกันการลัดวงจรระหว่างช่องสัญญาณ
  • การควบคุมแบบดาวที่ปลายยอด: ดาวบนยอดต้นไม้เป็นระบบโฟโตนิกส์อิสระที่ควบคุมด้วย Arduino Nano มันรันลูปย่อย 20 ช่อง โดยที่ Nano จะทำงานลำดับไฟกระพริบแบบอัตโนมัติแยกจากฮับหลักของต้นไม้ ทำให้เกิดความลึกของภาพหลายชั้น
  • ลอจิกของแพตเทิร์นและการบาลานซ์ LED: ด้วยการแยกกลุ่มสีออกเป็นวงจรอิสระ ระบบจึงควบคุมแต่ละส่วนได้อย่างเป็นอิสระ ตัวต้านทานจำกัดกระแส (330Ω) ช่วยให้ LED สีแดง, เขียว, และขาว ให้ความสว่างที่สมดุลกัน ชดเชยค่าโวลเตจตกคร่อมที่แตกต่างกันของวัสดุเซมิคอนดักเตอร์แต่ละสี

บอกตรงๆ นะน้อง รหัสต้นไม้พี่ไม่มีเก็บไว้แล้ว ไม่งั้นพี่แจกให้เลย แต่ด้วยสกิลโค้ดดิ้งระดับ "พอได้" ของพี่ มันเลยออกมาเป็นโค้ดที่เรียบง่าย แต่ยาวเฟื้อย เพราะใช้แค่คำสั่งเปิด/ปิด (HIGH/LOW) เฉยๆ พี่ต้องมานั่งวาดวงจรแต่ละอันลงกระดาษ แล้วไล่คิดว่าต้องเปิดอันไหนก่อน ต่อด้วยอันไหน ฯลฯ เพื่อให้ได้เอฟเฟกต์แบบที่ต้องการ ระบบมันทำงานแพตเทิร์นซับซ้อนแบบ "สายรุ้ง" หรือ "เกลียว" ผ่านลำดับ digitalWrite ที่กำหนดไว้แน่นอน ใช้ delay() แบบเป๊ะๆ (เช่น 60ms) เพื่อให้การเคลื่อนไหวของแสงลื่นไหล ตัวอย่างก็ประมาณนี้:

int delay1 = 60;
int delay2 = 500;
int delay3 = 60;
// the setup function runs once when you press reset or power the board
void setup() {
 pinMode(2, OUTPUT); //white 1
 pinMode(3, OUTPUT); //white 2
 pinMode(4, OUTPUT); //white 3
 pinMode(5, OUTPUT); //red 1
 pinMode(6, OUTPUT); //red 2
 pinMode(7, OUTPUT); //red 3
}
// the loop function runs over and over again forever
void loop() {
 digitalWrite(5, LOW);
 digitalWrite(6, LOW);
 digitalWrite(7, LOW);
 digitalWrite(2, LOW);   
 delay(delay1);                       
 digitalWrite(3, LOW);
 digitalWrite(2, HIGH);    
 delay(delay1);       
 digitalWrite(4, LOW);
 digitalWrite(3, HIGH);
 delay(delay1);
 digitalWrite(2, LOW);
 digitalWrite(4, HIGH);
 delay(delay1); 
 digitalWrite(3, LOW);
 digitalWrite(2, HIGH);    
 delay(delay1);       
 digitalWrite(4, LOW);
 digitalWrite(3, HIGH);
 delay(delay1);  
 digitalWrite(2, LOW);
 digitalWrite(4, HIGH);
 delay(delay1); 
 digitalWrite(3, LOW);
 digitalWrite(2, HIGH);    
 delay(delay1);       
 digitalWrite(4, LOW);
 digitalWrite(3, HIGH);
 delay(delay1); 
 digitalWrite(2, LOW);
 digitalWrite(4, HIGH);
 delay(delay1); 
}

โค้ดง่ายๆ แต่นั่งเขียนเมื่อยมือเลยว่ะ บางคนอาจมีวิธีเขียนโค้ดหรือต่อวงจรที่ดีกว่านี้ แต่ตอนนั้นนี่คือสุดความสามารถของพี่แล้วแหละน้อง สู้งานนะ!

สรุป

โปรเจกต์นี้คือการลงลึกไปในโลกของการออกแบบฮาร์ดแวร์แบบบูรณาการเลยนะน้อง ถ้าเราจัดการกับบอร์ดสวิตช์ทรานซิสเตอร์แบบทำเอง (custom transistor switchboard) และควบคุม MCU สองตัว (dual-MCU orchestration) ให้เป็นหนึ่งเดียวได้ เราก็จะสามารถสร้างงานติดตั้งภาพ (visual installation) ที่แข็งแกร่งและดูโปรระดับมืออาชีพได้ ซึ่งมันจะพาเราก้าวข้ามขีดจำกัดพื้นฐานของ Arduino ตัวเดียวไปไกลโขเลย

พี่หวังว่าน้องจะสนุกกับการอ่านไม่ต่างจากที่พี่สนุกตอนทำมัน และหวังว่ามันจะจุดไฟให้น้องอยากลงมือทำโปรเจกต์ของตัวเองบ้างนะ พี่ยังไม่เคยเห็นตัวอย่างโปรเจกต์แบบนี้ที่ไหนมาก่อนเลย ก็เลยไม่มีอะไรให้เอามาเปรียบเทียบกับสายไฟหรือโค้ดของเราได้เลย หวังว่าด้วยโปรเจกต์นี้ จะมีใครสักคนได้แรงบันดาลใจ แล้วมาทำงานที่เจ๋งกว่าพี่ให้ดูบ้างนะ! :)

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

apps:
  - "1x Arduino IDE"
author: "Arduino_Jarod"
category: "Lights & LEDs"
components:
  - "1x 1/8\" drill bit"
  - "12x Resistor 330 ohm"
  - "1x Electric drill"
  - "1x 1/2\" plywood 2'x4"
  - "2x 9V 1A Switching Wall Power Supply"
  - "20x Resistor 1k ohm"
  - "20x General Purpose Transistor PNP"
  - "1x Arduino UNO"
  - "1x 24ga insulated wire, Multiple color, multiple feet"
  - "1x Soldering iron (generic)"
  - "34x 3 mm LED: Green"
  - "1x SparkFun Breadboard Power Supply 5V/3.3V"
  - "1x 20 gauge tinned bare wire, 30 feet"
  - "1x Jig Saw"
  - "34x 3 mm LED: White"
  - "34x 3 mm LED: Red"
  - "30x Resistor 4.75k ohm"
  - "1x 3 mm LED: Yellow"
  - "1x Arduino Nano R3"
description: "นี่คือต้นคริสต์มาสไม้ที่พี่ทำเองจ้า! ใช้ LED แต่งเป็นดาวเทพๆ อยู่บนยอด แล้วก็พันเป็นพวงมาลัยรอบต้น ไฟสวยจัดไป วัยรุ่นทำได้แน่นอน!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX18hspt7s2qcAlaGYCeE2+3s+ze6gdb/RIg4SH0uJVzcPofq+WTS5KcdGwZ9MytRAQhZzwBERsBqo79PmLVV7hmefe0m+ybubhc="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/wooden-led-christmas-tree-66c448_cover.jpg"
lang: "en"
likes: 5
passwordHash: "4b6f54d741ac17444535dbe4f8a9081c92d6bf9cfa58a09e712de0ff13a0f7e2"
price: 1499
seoDescription: "Handmade Wooden Christmas Tree decorated with LEDs for the star and garland. A creative holiday DIY project."
tags:
  - "marquee"
  - "tree"
  - "led"
  - "transistor"
  - "sequence"
  - "unique"
  - "christmas"
  - "wooden"
  - "decoration"
title: "ต้นคริสต์มาสไม้ LED งานง่ายแต่หล่อ ไฟกระพริบตึงๆ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/w38ulha41P8"
views: 9016