Introduction
พี่เป็นคนนึงที่ชอบนาฬิกามาก โดยเฉพาะแบบกลไกหรือแบบที่แสดงเวลาด้วยวิธีแปลกๆ พี่เคยเห็นนาฬิกาที่ใช้มิเตอร์เป็นตัวบอกเวลาอยู่สองสามเรือน เลยคิดว่า "เออว่ะ น่าสน มาลองทำเองดีกว่า" ว่าปุ๊บทำปั๊บเลยวัยรุ่น!
Project Overview
"Metric-Flux" โปรเจคนี้คือการเอาเรื่อง Analog Kinetic Telemetry และ Precision PWM-Voltage Orchestration มาทำกันจริงจังเลย ไม่เล่นๆ แทนที่จะใช้จอดิจิตอลแห้งๆ เราจะใช้มิเตอร์หน้าปัดเกรดอุตสาหกรรมรุ่น 85C1-V จำนวน 3 ตัว มาเป็นตัวบอกเวลา (ชั่วโมง, นาที, วินาที) ผ่านการขยับของเข็มจริงๆเลย โดยใช้ DS3231 Real-Time Clock ควบคุมความแม่นยำของเวลา แล้วแปลงข้อมูลเวลาเป็นสัญญาณ PWM ที่มีความกว้างพัลส์แปรผัน เพื่อขับขดลวดในมิเตอร์ให้เข็มขยับได้เนียนๆ โปรเจคนี้เน้นทั้งความแม่นยำในการปรับเทียบ (Calibration Forensics) ความสวยงามของโครงสร้าง (Laser-Precision Chassis Aesthetics) และการรักษาความคลาสสิกของมิเตอร์วินเทจให้ยังคงอยู่
Wiring
การต่อสายตรงไปตรงมามาก น้องๆ อย่าเพิ่งช็อต วงจรหลักมีสองส่วนคือวงจรนาฬิกาจริง (RTC) และวงจรของมิเตอร์ โดยมิเตอร์ทั้งสามจะต่อกับขา PWM สามขาบน Arduino ส่วนโมดูลนาฬิกาจะต่อกับขาอินเตอร์เฟสแบบอนาล็อกสองขาคือ SCL กับ SDA

Technical Deep-Dive
- d'Arsonval Movement & PWM Deflection Forensics:
- The Magnetic Deflection Harmonics: มิเตอร์แต่ละตัวทำงานบนหลักการของ d’Arsonval นั่นคือขดลวดที่มีกระแสไหลผ่านจะหมุนภายในสนามแม่เหล็กถาวร หน้าที่เราคือขับขดลวดพวกนี้ผ่านขา PWM ของ Arduino $(D3, D5, D6)$ สิ่งที่ต้องเจาะลึกคือความสัมพันธ์ระหว่าง Duty Cycle $(\delta)$ กับมุมที่เข็มเบน $(\theta)$ เพื่อให้แน่ใจว่าเราชดเชยความเฉื่อยไม่เป็นเชิงเส้น (Non-linear Inertia) ของเข็มได้ผ่านการตั้งค่า "ค่าต่ำสุด/สูงสุด" (Minimum/Maximum Calibration Arrays) ในซอฟต์แวร์
- I2C Temporal-Drift Diagnostics: การอ่านเวลาจัดการผ่านโมดูล DS3231 RTC ผ่านบัส I2C $(A4/A5)$ เราโพล์ข้อมูลจาก TCXO (Temperature Compensated Crystal Oscillator) 32kHz ของโมดูลเพื่อรักษาความแม่นยำในระดับเสี้ยววินาที สิ่งสำคัญคือต้องทำให้การเปลี่ยนจากวินาทีที่ 59 กลับไปที่ 00 เกิดอย่างนุ่มนวล (Smooth "Return-to-Home" Needle Harmonic) ป้องกันไม่ให้เกิด Mechanical Shock กับสปริงเส้นเล็กๆ ภายในมิเตอร์
- Calibration & Pulse-Width Analytics:
- The PWM-to-Analog Interpolation Heuristics: เพื่อให้การ映射สเกลเป็น 1:1 (เช่น แสดง 12 ชั่วโมง บนสเกล 5V) ระบบนี้ใช้โหมดปรับเทียบสามขั้นตอน (Three-Tiered Calibration Mode) เราต้องมาปรับค่า
hoursMinimum,minutesMinimum, และsecondsMinimumด้วยมือ เพื่อชดเชยความแตกต่างของความต้านทานภายใน $(\pm 5%)$ ของมิเตอร์แต่ละตัว ซึ่งเป็นเรื่องปกติของอุปกรณ์แอนะล็อก vintage แบบนี้ การปรับนี้จะทำให้เข็มทั้งสามชี้ตรงกันเป๊ะเวลาบอกเวลาเดียวกัน สู้งานนะน้อง!
- The PWM-to-Analog Interpolation Heuristics: เพื่อให้การ映射สเกลเป็น 1:1 (เช่น แสดง 12 ชั่วโมง บนสเกล 5V) ระบบนี้ใช้โหมดปรับเทียบสามขั้นตอน (Three-Tiered Calibration Mode) เราต้องมาปรับค่า
วิศวกรรมและการลงมือทำ
- ความสมบูรณ์ของสัญญาณและนิติวิทยาศาสตร์สัญญาณรบกวน:
- ฮาร์มอนิกส์จากการสวิตช์ PWM: ความถี่ PWM มาตรฐาน $490\text{Hz}$ ของ Arduino นั้นเพียงพอสำหรับกลไกเมคคาทรอนิกส์ที่ตอบสนองช้าของมิเตอร์อนาล็อก แต่นิติวิทยาศาสตร์จะเน้นไปที่การวินิจฉัยตัวเก็บประจุบายพาส $(\text{ตัวเลือก } 10\mu\text{F})$ ที่ขั้วของมิเตอร์ เพื่อกำจัดสัญญาณกระตุกความถี่สูงที่อาจทำให้เข็มสั่นแบบปรสิตในเส้นทางการเคลื่อนที่ที่ตาเห็น
- การปรับแต่ง Pull-up ของ I2C: การลงมือทำเกี่ยวข้องกับการตั้งค่าคล็อกให้ DS3231 ที่ $100\text{kHz}$ (โหมดมาตรฐาน) นิติวิทยาศาสตร์เกี่ยวข้องกับการตรวจสอบความ "แข็ง" ของลอจิกบนสาย SDA/SCL เพื่อให้แน่ใจว่าการเชื่อมต่อ RTC ไม่ได้สร้างความจุปรสิตให้กับเครื่องยนต์ I2C ของตัวควบคุม
- การผลิตและความสวยงามเชิงโครงสร้าง:
- โครงสร้างหลักเป็นแบบไฮบริดระหว่างการพิมพ์ 3D และการตัดเลเซอร์ นิติวิทยาศาสตร์เกี่ยวข้องกับการตรวจสอบความแข็งแรงเชิงโครงสร้างของแผ่นยึดมิเตอร์ 85C1-V $(X/Y \text{ tolerance} < 0.2\text{mm})$ เพื่อป้องกันการเบี่ยงเบนเชิงกลของกลไกมิเตอร์
การประกอบ
มีชิ้นส่วนตัดเลเซอร์ 2 ชิ้น และชิ้นส่วนพิมพ์ 3D 4 ชิ้น ชิ้นส่วนเหล่านี้ไม่ได้เป็นส่วนสำคัญต่อการทำงานของนาฬิกา ดังนั้นจึงสามารถทำด้วยวิธีอื่นได้ง่ายๆ แม้แต่กล่องกระดาษลังเล็กๆ ก็สามารถใช้แทนชิ้นส่วนที่ผลิตได้เลย เริ่มจากแยกมิเตอร์ออกจากกัน (ของพี่มีสกรู 2 ตัวในแต่ละตัว) แล้วติดตั้งหน้าปัดกระดาษเข้าไปในมิเตอร์ จากนั้นก็ยึดมิเตอร์เข้ากับแผ่นฐานและเดินสายไฟ เชื่อมต่อโมดูลนาฬิกาจริง (RTC) แล้วดันมันเข้าไปในที่ยึดให้แน่น
การตั้งค่า
อัพโหลดสเก็ตช์และตั้งค่าโหมดเป็น 2 จากนั้นตั้งค่าตำแหน่งต่ำสุดของแต่ละหน้าปัดโดยปรับตัวเลขในตัวแปร `hoursMinimum`, `minutesMinimum` และ `secondsMinimum` แล้วอัพโหลดสเก็ตช์ใหม่ ปรับตัวแปรจนกว่าเข็มทุกอันจะอยู่ที่ปลายซ้ายสุดของหน้าปัดพอดี ทำแบบเดียวกันสำหรับค่าสูงสุด เพื่อให้เข็มอยู่ที่ปลายขวาสุดของหน้าปัด
สำหรับการตั้งเวลา ให้ใส่เวลาเข้าไปในฟังก์ชัน `setDS3231time` ในฟังก์ชัน `setup()` โดยใช้โหมด 1
เมื่ออัพโหลดสเก็ตช์แล้ว เวลาควรจะแสดงผลและเข็มวินาทีควรจะเดินแล้วล่ะ
การทำงาน
ตั้งค่าโหมดเป็น 0 แล้วอัพโหลดสเก็ตช์ ตราบใดที่แบตเตอรี่ของนาฬิกายังเชื่อมต่ออยู่ เวลาจะถูกแสดงผลทุกครั้งที่จ่ายไฟให้ Arduino
สรุป
เป็นนาฬิกาที่เจ๋งมากด้วยวิธีแสดงเวลาที่น่าสนใจ แต่อาจจะไม่ค่อยประหยัดแบตเตอรี่สักเท่าไหร่ ถ้าจะใช้ไฟจากแบตเตอรี่เป็นเวลานานอาจจะไม่เวิร์ค แต่อย่างไรก็ตาม มันก็สนุกดี!
Metric-Flux ถือเป็นสุดยอดแห่ง Mechatronic Chronometry ด้วยการเชี่ยวชาญ d'Arsonval Movement Harmonics และ PWM-Voltage Calibration ทำให้ markbennettuk ได้สร้างระบบแสดงเวลาระดับมืออาชีพที่แข็งแกร่งและชัดเจนสมบูรณ์แบบ ผ่านการผสมผสานระหว่างฟิสิกส์อนาล็อกและความแม่นยำดิจิทัลได้อย่างสวยงาม