กลับไปหน้ารวมไฟล์
arduino-buttonless-led-matrix-clock-with-adxl335-sensor-6f0096.md

นาฬิกา Arduino LED Matrix ไร้ปุ่มพร้อมเซ็นเซอร์ ADXL335

ครั้งนี้ผมจะมาอธิบายวิธีสร้างนาฬิกาที่น่าสนใจบน 8x8 LED matrix ซึ่งไม่มีปุ่มใด ๆ และปรับตั้งค่าด้วยการเคลื่อนไหวที่แตกต่างกัน นี่เป็นอีกหนึ่งในคอลเล็กชันนาฬิกาที่ไม่เหมือนใครของผม ซึ่งคุณสามารถดูได้จาก เพลย์ลิสต์นาฬิกา ของผม อนึ่ง ผมสร้างนาฬิกานี้เมื่อหลายปีก่อนบน matrix ที่ทำเองจาก 64 ดวงของ LED สีเหลืองขนาด 5mm และคุณสามารถดูได้จาก ลิงก์ที่ให้มา

แตกต่างจากครั้งก่อน ครั้งนี้นาฬิกาถูกสร้างขึ้นบน matrix สำเร็จรูป และผมจะอธิบายรายละเอียดวิธีสร้าง พร้อมด้วยแผนผังวงจร และโค้ด

นอกจากนี้ นาฬิกาที่สวยงามเรือนนี้เป็นผลงานของ Mark Wilson ซึ่งคุณสามารถดูโปรเจกต์ต้นฉบับได้ที่ เว็บไซต์ ของเขา

อุปกรณ์นี้ค่อนข้างง่ายต่อการสร้างและประกอบด้วยส่วนประกอบหลายอย่าง:

- Arduino Nano Microcontroller

- 8x8 LED matrix แบบ common anode

- DS3231 Realtime clock module

- ADXL335 Accelerometer module

- LDR resistor

- i 74HC595 shift register IC

โปรเจกต์นี้เก่ามากย้อนไปถึงปี 2012 ดังนั้นโค้ดจึงจำเป็นต้องคอมไพล์ด้วย Arduino IDE เวอร์ชั่น 1.0.6 หรือเก่ากว่าเพื่อให้คอมไพล์ได้โดยไม่มีข้อผิดพลาด โฟลเดอร์ Matrix Clock มีไลบรารีที่จำเป็นทั้งหมด จึงไม่ต้องติดตั้งเพิ่มเติม นอกจากนี้ ในแท็บ "PINS" มีแผนผังการเชื่อมต่อที่แสดงอยู่ ซึ่งมีข้อผิดพลาดเล็กน้อยในการระบุ cathode และ anode ของไดโอดใน matrix อย่างไรก็ตาม ผมขอแนะนำให้คุณใช้แผนผังวงจรที่ผมนำเสนอไว้ด้านล่างนี้ โดยแผนผังหนึ่งสำหรับกรณีที่คุณใช้ 8x8 matrix สำเร็จรูปแบบ common anode และอีกแผนผังหนึ่งสำหรับ matrix แบบ DIY ขอกล่าวถึงว่า matrix สีเดียวแบบ common anode และ common cathode นั้นจริง ๆ แล้วมีฮาร์ดแวร์ที่เหมือนกัน เพียงแต่สลับแถวและคอลัมน์เท่านั้น นอกจากนี้ ในโปรเจกต์ต้นฉบับใช้ IMU sensor ชนิด AM3X แต่เนื่องจากโมดูลนี้ไม่มีการผลิตแล้ว ผมจึงใช้ ADXL335 sensor module แทน

ตอนนี้ เพื่อให้อุปกรณ์ทำงานได้ตามปกติ ควรไปที่แท็บ IMU.cpp ในบรรทัด:

return Voltage/VoltsPerG*100.0; -> เพื่อแทนที่ค่า 100.0 ด้วย 150.0

IMU sensor module ควรวางไว้ในตำแหน่งที่เห็นในรูปภาพ ตอนนี้เรามาดูกันว่าอุปกรณ์นี้ทำงานอย่างไรในความเป็นจริง นาฬิกานี้มีโหมดการแสดงผลหลายโหมดที่สามารถเปลี่ยนได้โดยการหมุนตัวเรือน 90 องศา เมื่อเปิดเครื่อง เวลาปัจจุบันจะปรากฏขึ้น โดยชั่วโมงจะแสดงอยู่ตรงกลางด้วยฟอนต์ขนาด 5×7 และนาทีจะแสดงอยู่ที่ขอบ ด้วยความละเอียด 5 นาที (พูดให้ถูกต้องคือ ระยะห่างระหว่างไดโอดสองดวงคือ 5 นาที)

ตอนนี้ หากเราหมุนไปทางซ้าย 90 องศา มันจะแสดงอุณหภูมิห้องปัจจุบันเป็นองศาเซลเซียส

หมุนไปทางซ้ายอีก 90 องศา และเราจะเข้าสู่โหมดที่เวลาถูกเขียนเป็นคำพูด

และด้วยการหมุนครั้งต่อไป เราจะได้เอฟเฟกต์ที่เรียกว่า Matrix screen effect

สุดท้าย ด้วยการหมุนกลับไปยังตำแหน่งเดิม เวลาปัจจุบันจะถูกนำเสนออีกครั้ง

ถัดไป ผมจะอธิบายการตั้งค่านาฬิกานี้

- หากต้องการให้เกิดเอฟเฟกต์ Random Pseudo Words ให้ทำตามลำดับต่อไปนี้:

หงายหน้าขึ้น -> คว่ำหน้าลง

- สำหรับการตั้งค่าชั่วโมง ลำดับคือ:

ขึ้น -> ซ้าย -> ลง -->> ขวา = ตั้งค่าแล้ว

- สำหรับการตั้งค่านาที:

ทำซ้ำ ขึ้น -> ซ้าย -> ลง -- >> ขวา = ตั้งค่าแล้ว

ในทำนองเดียวกัน เราสามารถเปลี่ยนความไวของ LDR resistor และความสว่างของการแสดงผลได้

และสุดท้ายบทสรุปสั้น ๆ แม้ว่าโปรเจกต์นี้จะมีอายุมากกว่า 10 ปีแล้ว แต่แนวคิดในการแทนที่ปุ่มกลไกด้วย IMU sensor นั้นยอดเยี่ยมมาก ทุกวันนี้ เป็นไปได้ที่จะสร้างนาฬิกาแบบนี้ด้วย njs2812 matrix ซึ่งจะทำได้ง่ายมาก ราคาถูก และยังมีความเป็นไปได้ที่จะสร้างเอฟเฟกต์สีได้หลากหลาย ผมเสนอสิ่งนี้เป็นแนวคิดสำหรับ DIYer ที่เชี่ยวชาญด้านการเขียนโปรแกรมมากกว่าผม

รายละเอียดทางเทคนิคเพิ่มเติม

การโต้ตอบด้วยท่าทาง

นาฬิกานี้ตัดปุ่มแบบดั้งเดิมออก โดยใช้การจัดวางและการเคลื่อนไหวทางกายภาพเพื่อควบคุมการตั้งค่าทั้งหมด

  • Inertial Sensing: มีคุณสมบัติ ADXL335 3-axis accelerometer ตัว Arduino จะตรวจสอบเวกเตอร์แรงโน้มถ่วงเพื่อพิจารณาว่าด้านใดของนาฬิกาที่หงายขึ้น
  • Orientation-Aware UI: การพลิกนาฬิกาไปด้านต่างๆ สามารถวนดูโหมดต่างๆ (Time, Date, Temperature) หรือปรับความสว่างได้ การเขย่าอุปกรณ์สามารถเรียกใช้ฟังก์ชัน "Snooze" หรือ "Reset" ได้

ฮาร์ดแวร์แสดงผล

  • Matrix Multiplexing: ขับเคลื่อนด้วย 8x8 or 32x8 LED Matrix พร้อม MAX7219 driver สิ่งนี้ช่วยให้สามารถเลื่อนข้อความได้อย่างราบรื่นและแสดงตัวเลขขนาดใหญ่ที่อ่านง่าย
  • RTC Precision: ผสานรวมกับ DS3231 Real-Time Clock ทำให้มั่นใจว่าเวลาจะยังคงแม่นยำภายในไม่กี่วินาทีต่อเดือน แม้จะมีการออกแบบแบบไร้ปุ่มและมีการโต้ตอบ

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

title: "Arduino Buttonless LED Matrix Clock with ADXL335 sensor"
description: "Multimode Arduino Matrix Clock, Word Clock, Thermometer, and Random Word Generator controlled by various motions."
author: "mircemk"
category: "Screens & Displays"
tags:
  - "Clocks"
  - "Games"
  - "Tools"
views: 1276
likes: 1
price: 2450
difficulty: "Easy"
components:
  - "1x LDR Resistor"
  - "1x SparkFun Triple Axis Accelerometer Breakout - ADXL335"
  - "1x Arduino Nano"
  - "1x Soldering kit"
  - "1x 74hc595 shift register"
  - "8x Resistor 330 ohm"
  - "1x Adafruit RTC DS3231 Real time clock"
  - "1x 8*8 led matrix"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/89431285-2701-4ad3-8a47-d0d56446c938.ino"
documentationLinks: []
passwordHash: "58fc701dad0f604606f3a7cc014bc1a82ed2a08b42d109b4bb18f1c8b07afa5c"
encryptedPayload: "U2FsdGVkX1+IUhbSWHlVr4/hATw4NdpqndBZKoKq1/tCKlEKKkN54l1N8S6IOU1e8CZAKWhKzSFrlFOnDhyiHF+Ej4kfBQmkh5g0/LmNwAs="
seoDescription: "Arduino Buttonless LED Matrix Clock with ADXL335 sensor. Motion-controlled Word Clock, Thermometer, and Random Word Generator."
videoLinks:
  - "https://youtu.be/3yRDbMqCUzw"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-buttonless-led-matrix-clock-with-adxl335-sensor-6f0096_cover.jpg"
lang: "th"