
ถ้าน้องติดตามพี่มาบ่อยๆ น้องอาจจะเคยเห็นทิวตอเรียนสอนทำนาฬิกาของพี่ไปแล้วหลายแบบ งานนี้ก็เป็นอีกหนึ่งไอเดียที่พี่จะมาสอนทำนาฬิกา แต่คราวนี้ต้องแปลกและเท่กว่าเดิม! หลังจากคิดๆ ควานหาและออกแบบอยู่นาน พี่ก็ได้ไอเดียการออกแบบโครงกระดูก (Skeleton) ขึ้นมา โครงสร้างที่ออกแบบมาดูคล้ายกับโครงกระดูก เลยตั้งชื่อมันว่า "Skeleton Clock" ตัวโครงสร้างหลักพี่ทำมาจากการแกะสลักแผ่น PCB เองเลย พี่ว่าเท่มากๆ เอาล่ะ มาดูกันดีกว่าว่าพี่ทำยังไง เริ่มเลย!

การจะแสดงเวลาก็ต้องมีจอแสดงผล จอที่เหมาะกับงาน DIY ที่สุดก็คือจอ 7 Segment (เซเว่นเซกเมนต์) นั่นเอง เราสามารถทำจอแบบนี้ได้ง่ายๆ และออกแบบสไตล์ได้ตามชอบ งานนี้พี่จะใช้ LED 7 ดวงมาทำเป็นหนึ่งหลักจอ 7 Segment ครับ
วงจรของ Skeleton Clock

แผนผังวงจร (Circuit Diagram)
พี่ใช้ EasyEDA ในการออกแบบวงจรและ PCB นี่คือแผนผังวงจรครับ วงจรนี้ใช้ LED ทั้งหมด 30 ดวง ซึ่งมาจากจอ 7 Segment 4 หลัก และ LED อีก 2 ดวงสำหรับแสดงเครื่องหมายคั่นระหว่างหลัก (เช่น เครื่องหมายทวิภาค ":") พี่ใช้ Arduino Nano เป็นสมองของวงจร และใส่ DS1307 RTC IC ไว้สำหรับเก็บเวลาให้แม่นยำ ส่วนประกอบอื่นๆ ก็มีคริสตัลและตัวต้านทาน (Resistor) ธรรมดาๆ และพี่ก็เพิ่มปุ่มกด 3 ปุ่มสำหรับตั้งเวลาด้วย งานนี้จัดเต็ม!
อุปกรณ์ที่ต้องใช้ทำ Skelton Clock


Arduino nano – 1 ตัว
DS1307 RTC ic -1 ตัว
คริสตัล 32.768Khz - 1 ตัว
LED ขนาด 0805 - 30 ดวง
ตัวต้านทาน (Resistor) 1k ขนาด 0805 - 7 ตัว
ตัวต้านทาน (Resistor) 10k ขนาด 0805 - 5 ตัว
แบตเตอรี่แบบเหรียญ (Coin Cell) 3v – 1 ก้อน
ตัวถือแบตเตอรี่แบบเหรียญ - 1 ตัว
ปุ่มกด (Push Button) – 3 ตัว
สวิตช์เปิด/ปิด – 1 ตัว
เฮดเดอร์พินแบบเมีย 40 พิน - 1 ชุด
แบตเตอรี่ลิเธียม 3.7 โวลต์ - 1 ก้อน
โมดูลชาร์จ TP4056 - 1 ตัว
แผ่น PCB ที่พิมพ์แล้ว -1 แผ่น
ชิ้นส่วนที่พิมพ์จากเครื่องพิมพ์ 3D
การออกแบบ PCB


เพื่อให้ได้โครงสร้างแบบโครงกระดูก เราต้องแปลงวงจรนี้ให้เป็น PCB ครับ ต่อไปพี่ก็แปลงแผนผังวงจรให้เป็น PCB พี่จัดเรียง LED ให้เป็นรูป 7 Segment และออกแบบ PCB ให้เป็นรูปร่างแบบนี้ จากนั้นก็สร้างและดาวน์โหลดไฟล์ Gerber ไปสั่งทำ PCB ได้เลย ง่ายๆ ตรงไปตรงมา
มุมมอง 2D ของ Skelton Clock


มุมมอง 3D ของนาฬิกาโครงกระดูก (Skeleton Clock)


ขั้นตอนการผลิต PCB


สำหรับการผลิต PCB ครั้งนี้ พี่เลือกใช้บริการจากเว็บไซต์ JLCPCB.com ครับ ราคาเบาๆ แค่ $2 ได้ PCB กลับมา 5 แผ่น แถมค่าบริการประกอบ (Assembly) เริ่มต้นที่ $0 อีกต่างหาก สะดวกสุดๆ วิธีสั่งก็ง่ายนิดเดียว แค่คลิก "Order Now" แล้วอัพโหลดไฟล์ Gerber ของเรา จากนั้นก็เลือกสี PCB, ความหนา, จำนวนแผ่น ฯลฯ ตามชอบเลย ครั้งนี้พี่เลือกสีดำเท่ๆ น้องๆ จะเลือกสีไหนก็มีให้เลือกเพียบเลยครับ สุดท้ายเลือกวิธีจัดส่ง แล้วก็กดสั่งซื้อได้เลย ง่ายมั้ยล่า!
PCB ที่ผลิตเสร็จแล้ว



รอประมาณสองสัปดาห์ PCB ก็มาส่งถึงมือครับ คุณภาพงานออกมาดีมากตามที่คาดไว้เลย พี่ประทับใจคุณภาพ PCB จาก JLCPCB มาก ถ้าน้องๆ กำลังมองหาบริการผลิต PCB คุณภาพสูงราคาเบาๆ ลองไปศึกษาดูได้นะ รับรองคุ้มค่า!
การประกอบชิ้นส่วนลงบน PCB
เอาล่ะ ถึงขั้นตอนที่ต้องใช้ความใจเย็นแล้ว มาจัดการบัดกรีชิ้นส่วนลงบน PCB กันเถอะ เริ่มจากชิ้นส่วนแบบ SMD ก่อน มีหลายวิธีให้เลือกใช้เลยครับ เช่น ใช้ปืนลมร้อน (Hot Air Gun), ใช้เตาอบรีโฟลว์ (Reflow Oven), ใช้เตาอบครัวเรือน (Oven Method) หรือจะใช้หัวแร้งธรรมดาบัดกรีทีละจุดก็ได้ แต่ถ้าใช้หัวแร้งธรรมดา งานอาจจะไม่สวยเท่าไหร่ การใช้ลมร้อนดีกว่าแต่ลมอาจทำให้ชิ้นส่วนขยับได้ วิธีที่ดีที่สุดคือใช้เตาอบรีโฟลว์หรือ Hotplate ครับ พี่เลือกใช้วิธีรีโฟลว์ด้วย Hotplate เริ่มจากบีบซอลเดอร์เพสต์ลงบนแผ่นรอง (Pad) ด้วยไซริงค์ จากนั้นใช้คีมปากนกแก้ว (ESD Tweezer) จับวางชิ้นส่วนลงไปทีละตัวให้เรียบร้อย
รีโฟลว์ด้วย Hotplate



วาง PCB ที่วางชิ้นส่วนเรียบร้อยแล้วลงบน Hotplate แล้วก็รอให้มัน "สุก" ตามกระบวนการครับ ทำซ้ำขั้นตอนเดิมกับ LED จนครบทุกตัว เท่านี้ก็เสร็จสิ้นการบัดกรีชิ้นส่วน SMD แล้ว
ต่อไปก็ถึงตาชิ้นส่วนแบบขาแทง (THT) ละ เริ่มจากวางคริสตัลของ RTC แล้วบัดกรี จากนั้นก็บัดกรีหัวต่อแบบ Female Header ขนาด 2.54mm สำหรับเสียบ Arduino และตัว Holder สำหรับใส่แบตเตอรี่ สวิตช์ต่างๆ พี่ใช้สายไฟต่อแล้วบัดกรีลงบน Pad โดยตรง หลังจากบัดกรีทุกอย่างเสร็จ PCB ของเราก็จะออกมาเป็นแบบนี้แหละ สวยปะล่า!
เขียนโค้ดโปรแกรม Arduino ให้กับนาฬิกาโครงกระดูก
ทีนี้มาถึงส่วนที่หลายคนรอคอย... การเขียนโค้ด! ด้านล่างพี่จะอธิบายโครงสร้างโค้ดให้น้องๆ ฟัง ส่วนโค้ดเต็มๆ น้องสามารถดาวน์โหลดไปศึกษาได้เลยครับ อย่าลืมอ่านคอมเมนต์ในโค้ดให้ละเอียดนะ งานนี้ห้ามช็อตนะตัวนี้!
#include <Wire.h>
#include "RTClib.h"
เริ่มแรกพี่ก็ include header files ที่จำเป็นให้เรียบร้อย จะได้โค้ดง่ายๆ ไงน้อง เราเพิ่มไลบรารี RTClib สำหรับคุยกับ RTC และ Wire สำหรับการสื่อสาร I2C ไลบรารีพวกนี้โหลดจาก Arduino IDE ได้เลยนะ ไปที่ Sketch -> Include Library -> Manage Libraries ง่ายๆ เอง
int digit1 = 11; //PWM Display pin 12 (digit1 is common anonds A1 from right side)
int digit2 = 10; //PWM Display pin 9 (digit2 is common A2)
int digit3 = 9; //PWM Display pin 8 (digit3 is common anods A3)
int digit4 = 6; //PWM Display pin 6 (digit4 is common anods, from left side)
int segA = 2; //Display pin 11
int segB = 3; //Display pin 7
int segC = 4; //Display pin 4
int segD = 5; //Display pin 2
int segE = 12; //Display pin 1
int segF = 7; //Display pin 10
int segG = 8; //Display pin 5
int segDP = 13; // Display pin 3
int pin = 1;
RTC_DS1307 RTC;
byte SW0 = A0;
byte SW1 = A1;
byte SW2 = A2;
จากนั้นก็กำหนดพิน (Define pins) ให้แต่ละเซกเมนต์และปุ่มกด รวมถึงประกาศโมดูล RTC ด้วย อย่าลืมเช็คให้ดีนะ ไม่งั้นไฟไม่ติดหรอก
Wire.begin();
RTC.begin();
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
ในส่วน setup พี่ก็เริ่มการสื่อสาร I2C และ RTC แล้วก็ประกาศให้พินของเซกเมนต์เป็น OUTPUT ส่วนพินของปุ่มกดเป็น INPUT เรื่องพื้นฐานแต่สำคัญมาก ห้ามพลาด!
DateTime now = RTC.now();
int timp = now.hour()*100+now.minute();
ใน loop section อันดับแรกพี่อ่านข้อมูลจาก RTC แล้วส่งไปแสดงผลที่จอ พี่ใช้ switch statement ในการควบคุมให้แสดงทีละหลัก แค่นั้นแหละ ง่ายมั้ยล่า? อย่าช็อตนะตัวนี้
ทีนี้ก็ถึงเวลาจัดการแล้ววัยรุ่น! ต่อ Arduino เข้ากับคอม แล้วอัปโหลดโค้ดนาฬิกาเข้าไปเลย โค้ดทั้งหมดอยู่ด้านล่างนี้เลย (จัดไปเต็มๆ) หลังจากอัปโหลดโค้ดเสร็จ ก็จะเห็นมันทำงานแล้ววว สู้งานนะน้อง!
เทคนิคการทำงานเบื้องหลัง: มัลติเพล็กซ์และการจับเวลา
โปรเจคนี้เผยให้เห็นชั้นข้อมูลที่ซ่อนอยู่เบื้องหลังการแสดงผลเวลาธรรมดาๆ นะ เซเวนเซกเมนต์ทั้งสี่ตัวถูกจัดวางในรูปแบบ "โครงกระดูก" (Skeleton) พร้อมสายไฟที่โชว์เพื่อความสวยงามแบบมินิมอล Arduino Nano จะจัดการกับหลอด LED ทั้ง 30 ตัวด้วยกลยุทธ์มัลติเพล็กซ์ (Multiplexing) คือมันจะสลับเปิดปิดแต่ละหลักอย่างรวดเร็ว เปิดทีละหลักในแต่ละช่วงเวลา เพื่อหลีกเลี่ยงการกะพริบและลดจำนวนพิน I/O ที่ต้องใช้ ส่วนโมดูล DS1307 RTC ทำหน้าที่เป็นนาฬิกาอ้างอิงที่แม่นยำ คอยรักษาเวลาให้ตรงกัน Arduino code ก็จะทำงานตามตรรกะมัลติเพล็กซ์นี้ แปลงข้อมูลเวลาเป็นการเปิดปิดเซกเมนต์ที่ประสานกัน เพื่อให้ได้ภาพที่ชัดเจน
กล่องที่พิมพ์จากเครื่อง 3D Printer



ขั้นตอนสุดท้ายแล้วจ้า! ต้องเพิ่มกล่องให้กับวงจรนาฬิกาของเรา พี่ออกแบบเคสใน TinkerCAD แล้วพิมพ์ด้วยเครื่อง Ender 3V2 ของพี่เอง พอพิมพ์กล่องเสร็จ ก็เอา PCB วางเข้าไปในกล่อง แล้วก็ติดสวิตช์เข้ากับรูที่เตรียมไว้ให้เรียบร้อย



โหลดไฟล์ 3D ไปจัดเลยวัยรุ่น



อัพเกรดต่อยอดได้อีกนะตัวนี้
โปรเจคนาฬิกากระดูกนี้ยังมีช่องทางให้เราเอามันไปลุยต่อได้อีกเพียบ:
- เพิ่มหน้าจอ OLED Dashboard: เอา OLED ขนาดจิ๋วมาติดเพื่อแสดงข้อมูลเสริม เช่น วันที่, อุณหภูมิ, หรือสถานะของระบบ
- ควบคุมความสว่างอัตโนมัติ: ต่อ LDR (ตัวต้านทานปรับตามแสง) เข้าไปให้มันปรับความสว่าง LED อัตโนมัติตอนกลางคืน ห้ามช็อตนะตัวนี้
- ซิงค์เวลาจากเน็ต: ใส่โมดูล WiFi (เช่น ESP8266) เพื่อให้นาฬิกาไปดึงเวลามาจากเซิร์ฟเวอร์ NTP บนอินเทอร์เน็ตให้เป๊ะเวอร์
- เอฟเฟกต์ตระการตา: แก้โค้ดให้มีลูกเล่นพิเศษ เช่น จุดคู่ที่กะพริบได้, เอฟเฟกต์เลื่อนตัวเลข, หรือลำดับอนิเมชั่น เพื่อให้การแสดงผลดูตื่นเต้นกว่าเดิม สู้งานนะน้อง