มีโปรเจกต์นาฬิกา [Arduino](https://s.shopee.co.th/7fUgFAWSki) แสดงอุณหภูมิและความชื้นเพียบเลยเนอะ แต่ส่วนใหญ่ก็จะเอาผลลัพธ์ไปแสดงบนจออะไรสักอย่าง วันนี้พี่จะมาสอนน้องทำอุปกรณ์แบบเดียวกัน แต่แทนที่จะใช้จอ เราใช้ "Addressable WS2812B pixel ring" ที่มี LED 12 ดวงแทน งานนี้หล่อเท่เลย!

นี่เป็นอีกหนึ่งผลงานในซีรีส์ "นาฬิกาแปลกๆ" ของพี่ที่น้องๆ ไปดูเพลย์ลิสต์ได้เลย การอ่านค่าต่างๆ ถูกออกแบบมาให้เข้าใจง่ายสุดๆ ด้วยการผสมสีหลากหลายแบบ
แม้ว่านาฬิกาจะมีความละเอียดแค่ 1 วินาทีบน LED แค่ 12 ดวงก็ตาม ไม่งั้นโค้ดนี้พี่เอามาจากเว็บ ChrisAsi github ชื่อว่า tux-clock แต่พี่หาวิดีโออธิบายไม่เจอ เลยตัดสินใจทำเองซะเลยเพื่อเช็คการทำงาน อีกเรื่องที่เจ๋งคือวิธีการใส่คำสั่งด้วยปุ่มกดเดียว ด้วยการคลิกเดียว คลิกสองครั้ง และกดค้าง

นอกจากนี้ อุปกรณ์นี้สร้างง่ายมากๆ และมีส่วนประกอบแค่ไม่กี่ชิ้น:
- Arduino Nano MCU board
- Addressable WS2812B pixel ring with 12 LEDs
- DS3231 Realtime clock module
- DHT11 Temperature + humidity [sensor](https://s.shopee.co.th/7VBG2rX65j)
- ปุ่มกด 1 อัน
- ตัวต้านทาน (Resistor)
- และ [Buzzer](https://s.shopee.co.th/6pvZFdZdRf)
Buzzer จะส่งเสียงเมื่อกดปุ่ม

มาดูกันดีกว่าว่าอุปกรณ์นี้ทำงานยังไงในสถานการณ์จริง
หลังจากเปิดสวิตช์และทดสอบ LED ring แล้ว นาฬิกาจะเริ่มต้นที่โหมดตั้งค่าเวลาปัจจุบัน ด้วยการกดปุ่มสั้นๆ เราสามารถตั้งชั่วโมงได้ ซึ่งจะแสดงด้วย LED สีชมพูหรือแดง (AM หรือ PM) พอตั้งค่าเสร็จ รอสักพัก LED สีน้ำเงินที่แสดงนาทีจะติดขึ้นมา เราตั้งนาทีด้วยวิธีเดียวกัน แล้วอีกไม่กี่วินาทีเวลาที่ถูกต้องก็จะปรากฏ
เราอ่านเวลาที่แน่นอนด้วยวิธีนี้:
- LED สีแดง แสดงชั่วโมง (ในที่นี้คือ 5 โมง)
- LED สีน้ำเงิน แสดงนาที (ในที่นี้คือ 47 นาที)
- LED สีเขียวทั้งสองดวง แสดงวินาที อย่างที่เห็น ความสว่างของ LED จะค่อยๆ เพิ่มขึ้นทุกวินาที และทุก 5 วินาที LED ดวงต่อไปจะติดขึ้นมา หลักการเดียวกันนี้ใช้กับนาทีและชั่วโมงด้วย

ทีนี้ลองกดปุ่มสองครั้ง (double click) สถานะต่อไปนี้จะปรากฏบน "จอ" ซึ่งแสดงความชื้นปัจจุบันที่วัดได้จากเซ็นเซอร์ DHT11 ตอนนี้คือ 68 เปอร์เซ็นต์ LED สีแดงแสดงหลักสิบ และสีน้ำเงินแสดงหลักหน่วย

กด double click อีกครั้ง จะแสดงอุณหภูมิที่วัดได้จาก DHT11 เช่นกัน ตอนนี้คือ 21 องศาเซลเซียส เช่นเดียวกับก่อนหน้า LED สีแดงแสดงตัวเลขตัวแรก และสีน้ำเงินแสดงตัวเลขตัวที่สอง

นอกจากนี้ อุปกรณ์ยังมีความสามารถในการปรับความสว่างของ LED อีกด้วย เข้าเมนูนี้ด้วยการ double click ครั้งต่อไป และปรับค่าความสว่างที่ต้องการด้วยการกดปุ่มสั้นๆ บนค่าที่ต้องการ แล้วบันทึกค่าด้วยการ double click

ตอนนี้อุปกรณ์จะกลับไปที่เมนูแรกสำหรับตั้งเวลา ถ้าเราตั้งค่าไว้แล้วตั้งแต่เริ่มต้น ก็แค่กดปุ่มเดียว (single click) เพื่อให้แสดงชั่วโมงและนาทีที่ตั้งไว้ก่อนหน้า

และสุดท้าย สรุปสั้นๆ
แม้ว่านี่จะเป็นโปรเจกต์ Arduino ที่ง่ายมาก แต่กลับมีฟังก์ชันหลากหลาย รวมถึงวิธีที่เข้าใจง่ายในการแสดงข้อมูลเยอะแยะบน "จอ" ที่มี LED แค่ 12 ดวงเท่านั้น
เพื่อความสวยงาม พี่ได้ทำเคสที่เหมาะสมให้อุปกรณ์จากแผ่น PVC หนา 3 และ 5 มม. แล้วปิดทับด้วยวอลล์เปเปอร์สีสติกเกอร์
รายละเอียดทางเทคนิคเพิ่มเติม
การแสดงผลสภาพแวดล้อมแบบองค์รวม
นาฬิกาแปลกๆ นี้ใช้ NeoPixel Ring (24 หรือ 60 LEDs) แบบวงกลมเพื่อแสดงเวลา อุณหภูมิ และความชื้นผ่านรูปแบบสีที่เป็นนามธรรม
- ชุดเซ็นเซอร์หลากหลาย: มี DHT22 (วัดอุณหภูมิ/ความชื้น) และ DS3231 RTC Arduino จะแมปเวลากับตำแหน่ง LED เฉพาะ (เช่น สีเขียวสำหรับชั่วโมง สีน้ำเงินสำหรับนาที)
- การไล่ระดับสีตามสภาพแวดล้อม: พื้นหลัง "ออร่า" หรือ "แสงเรือง" ของวงแหวนจะเปลี่ยนสีตามอุณหภูมิ (สีน้ำเงินสำหรับอากาศเย็น สีแดงสำหรับอากาศร้อน) และกระพริบตามระดับความชื้น
เอฟเฟกต์ภาพขั้นสูง
- การผสมสีที่ลื่นไหล: ใช้พื้นที่สี
CHSVของไลบรารีFastLEDเพื่อให้การเปลี่ยนสีเป็นไปอย่างราบรื่นและมีสีไม่จำกัด ทำให้นาฬิกาเป็นชิ้นงานศิลปะเชิงปฏิกิริยา ไม่ใช่แค่การแสดงตัวเลขดิจิทัลเท่านั้น