โปรเจกต์ LED HOURGLASS โดยใช้ ARDUINO
นาฬิกาทรายแบบ digital โดยใช้ ARDUINO ซึ่งจะใช้ electronic components มาแทนที่ทรายและแก้วเพื่อจำลองการไหลของเวลาในรูปแบบที่สร้างสรรค์และ interactive
นาฬิกาทรายแบบ digital โดยใช้ ARDUINO ซึ่งจะใช้ electronic components มาแทนที่ทรายและแก้วเพื่อจำลองการไหลของเวลาในรูปแบบที่สร้างสรรค์และ interactive
▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์
Project Supporter Team
โพสต์โดย
ในสมัยโบราณ ผู้คนพึ่งพานาฬิกาทรายเป็นเครื่องมือที่เรียบง่ายแต่มีประสิทธิภาพในการวัดการผ่านไปของเวลา นาฬิกาทรายประกอบด้วยหลอดแก้วสองใบที่เชื่อมต่อกันด้วยคอคอดแคบๆ ซึ่งทรายจะไหลจากหลอดบนลงสู่หลอดล่างอย่างสม่ำเสมอ ระยะเวลาของการไหลของทรายมักจะถูกกำหนดไว้ตายตัว—มักจะประมาณหนึ่งชั่วโมง—ซึ่งเป็นที่มาของชื่อนาฬิกาทราย อุปกรณ์ที่อยู่เหนือกาลเวลานี้เป็นสัญลักษณ์ของการไหลเวียนของเวลาอย่างต่อเนื่อง และแม้ในปัจจุบันก็ยังได้รับความชื่นชมในความเรียบง่ายและความสง่างาม ด้วยแรงบันดาลใจจากแนวคิดดั้งเดิมนี้ ใน Tutorial นี้เราจะสร้างแนวคิดเดิมขึ้นมาใหม่ในรูปแบบที่ทันสมัย โดยการสร้างนาฬิกาทรายแบบ Digital ด้วย Arduino ซึ่งจะใช้ส่วนประกอบ Electronic เข้ามาแทนที่ทรายและแก้วเพื่อจำลองการผ่านไปของเวลาในรูปแบบที่สร้างสรรค์และโต้ตอบได้
COMPONENTS NEEDED


Arduino (ส่วนสมอง)
Arduino คือตัวควบคุมส่วนกลางสำหรับนาฬิกาทราย Digital: ทำหน้าที่อ่านค่าจาก Accelerometer, ประมวลผล Animation ของ "ทราย" และสื่อสารกับ LED driver ฉันเลือกใช้ Arduino เพราะมี Digital I/O ให้ใช้มากมาย, มี Library ที่ใช้งานง่าย, การจ่ายไฟและการโปรแกรมผ่าน USB ที่สะดวก และมี Community ขนาดใหญ่ — ซึ่งเหมาะมากสำหรับการสร้างโปรเจกต์ในระดับเบื้องต้นถึงระดับกลาง คุณสามารถใช้ Uno, Nano หรือ Pro Mini ก็ได้
ADXL335 3-axis analog accelerometer (Sensor ตรวจจับทิศทาง)
ADXL335 ให้ค่าแรงดันไฟฟ้า Analog ในแนวแกน X, Y และ Z ที่สอดคล้องกับการวางแนวของ Sensor สำหรับนาฬิกาทราย Digital เราเพียงแค่ต้องรู้ว่าด้านใดอยู่ "ด้านบน" ดังนั้น ADXL335 จึงเป็นตัวเลือกที่เรียบง่าย ราคาประหยัด และอ่านค่าได้ง่ายด้วย analogRead() (ไม่จำเป็นต้องใช้ I2C) นอกจากนี้ยังทนทานต่อการเดินสายไฟในระดับงานอดิเรก และทำงานได้ดีเมื่อติดตั้งเข้ากับโครงสร้างโดยตรง
8×8 LED matrices สองชุดขับเคลื่อนโดย MAX7219 (ส่วนแสดงผลทราย)
เพื่อแสดงภาพทราย เราจะใช้ 8×8 LED matrix จำนวน 2 ชุด — ชุดหนึ่งแทนหลอดแก้วด้านบนและอีกชุดสำหรับด้านล่าง แต่ละ Matrix ถูกขับเคลื่อนด้วย IC MAX7219 ดังนั้นเราจึงใช้ Pin ควบคุมเพียง 3 ขา (DIN, CLK, CS/LOAD) ในการควบคุมแต่ละ Module และยังสามารถเชื่อมต่อกันแบบ Daisy-chain (ส่งข้อมูลออกจากตัวแรกเข้าสู่ตัวที่สอง) MAX7219 จะจัดการเรื่อง Multiplexing และการควบคุมความสว่างให้คุณ ทำให้คุณได้ Animation ที่คมชัดโดยไม่ต้องทำ Time-multiplexing ที่แถวของ LED ด้วยตัวเอง คุณสามารถสร้าง Animation ของเม็ดทรายที่ร่วงหล่นได้โดยการเปิด Pixel, เลื่อนตำแหน่งลงด้านล่างตามเวลา และใช้ Intensity Register ของ MAX7219 เพื่อปรับแต่ง "น้ำหนัก" ทางสายตาของทราย
3.7V Li-ion battery charger + 5V booster
เครื่องชาร์จแบตเตอรี่ Li-ion 3.7V แบบ Cell เดียวพร้อมวงจร Booster เป็นทางเลือกที่กะทัดรัด เนื่องจาก Arduino และ MAX7219 มักต้องการแรงดันไฟ 5V ดังนั้นเราจึงชาร์จแบตเตอรี่และเพิ่มแรงดันไฟเป็น 5V ด้วย Module เดียวกัน เพื่อช่วยลดขนาดของตัวโปรเจกต์ลง
การทำงานร่วมกันของชิ้นส่วนต่างๆ (แนวคิด)
ADXL335 ตรวจจับว่าหลอดไหนอยู่ "ด้านบน" ในขณะนั้น Arduino จะอ่านค่าจาก Accelerometer แล้วตัดสินใจว่า Matrix ไหนคือด้านบนและ Matrix ไหนคือด้านล่าง จากนั้นจะเริ่มเล่น Animation ของทรายตามทิศทางนั้น MAX7219 จะรับข้อมูล Frame จาก Arduino และแสดงผล Pixel ที่ร่วงหล่น เมื่อคุณพลิกนาฬิกาทราย Arduino จะตรวจพบการเปลี่ยนแปลงของทิศทางและย้อนกลับ Animation เพื่อจำลองทรายที่เคลื่อนที่จาก Matrix ด้านบนตัวใหม่ลงสู่ Matrix ด้านล่าง จนกว่าตัวหนึ่งจะว่างเปล่าและอีกตัวจะเต็ม
CIRCUIT DIAGRAM

Arduino → MAX7219 (LED Matrix ตัวแรก)
DIN → D5
CLK → D4
CS/LOAD → D6
VCC → 5V
GND → GND
MAX7219 (Matrix ตัวแรก) → MAX7219 (Matrix ตัวที่สอง)
DOUT → DIN ของ Matrix ตัวที่สอง
CLK → CLK
CS/LOAD → CS/LOAD
VCC → VCC
GND → GND
ADXL335 → Arduino
X → A1
Y → A2
VCC → 5V
GND → GND
คุณสามารถดาวน์โหลด Circuit Diagram ได้จาก ที่นี่
SOLDERING



ฉันบัดกรีขา Output X และ Y ของ ADXL335 Accelerometer เข้ากับขา Analog A1 และ A2 ของ Arduino Nano ในขณะที่ขา VCC และ GND ของ Sensor เชื่อมต่อกับขา 5V และ GND ของ Nano ส่วน 8×8 LED matrix ทั้งสองชุดพร้อม Driver MAX7219 ถูกเชื่อมต่อแบบ Daisy-chained เข้าด้วยกัน และฉันบัดกรีขา DIN, CLK และ CS เข้ากับขา Digital D5, D4 และ D6 ของ Nano ตามลำดับ พร้อมกับเชื่อมต่อสาย VCC และ GND เข้ากับ 5V และ GND สำหรับแหล่งจ่ายไฟ ฉันเชื่อมต่อแบตเตอรี่ Li-Po 3.7V เข้ากับ IP5306 Base Booster และ Module ชาร์จ จากนั้นบัดกรีขา Output 5V และ GND ของ Module เข้ากับ Arduino Nano เพื่อจ่ายไฟให้กับวงจรทั้งหมด
3D printed Enclosure

ฉันออกแบบตัวเคส (Enclosure) โดยใช้ Tinkercad และพิมพ์ชิ้นส่วนด้วยเครื่องพิมพ์ BambuLab A1 ของฉันโดยใช้ PLA คุณสามารถดาวน์โหลดไฟล์ได้จาก ที่นี่
Arduino Programming
คุณสามารถดาวน์โหลด Code ได้จาก ที่นี่
ASSEMBLY




หลังจาก Upload Code แล้ว ฉันได้นำวงจรไปติดตั้งไว้ภายในเคส 3D และเสร็จสิ้นโปรเจกต์
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้