พี่มีนาฬิกาปลุกเก่าๆ ตัวนึงพังอยู่ ก็เลยเกิดไอเดียจะเอามาปรับปรุงให้เป็นนาฬิกาและสถานีพยากรณ์อากาศไปในตัว
รายละเอียดเต็มๆ พร้อมรูปภาพ ก็มีที่นี่ด้วยนะ

สำหรับโปรเจกต์นี้ น้องๆ จะต้องเตรียม:
- นาฬิกาปลุกทรงกลมเก่าๆ สักตัว
- [Arduino](https://s.shopee.co.th/7fUgFAWSki) Nano
- โมดูลเซ็นเซอร์ BME280 (วัดอุณหภูมิ, ความชื้น, ความดัน)
- โมดูลจอ [LCD](https://s.shopee.co.th/6AfsSPcAnb) จากโทรศัพท์ Nokia 5110
- นาฬิกา RTC รุ่น DS1307
- ชาร์จเจอร์แบตเตอรี่ลิเธียม TP4056
- แบตเตอรี่ Li-ion เก่าจากมือถือที่ยังใช้ได้
- โมดูลบูสต์แรงดัน 3.7v เป็น 5v ขนาดเล็ก
- ตัวต้านทานไวแสง ([LDR](https://s.shopee.co.th/1BHCUqb0Tt) - วัดแสง)
- [Buzzer](https://s.shopee.co.th/6pvZFdZdRf) (เอามาจาก PC เก่า)
- ปุ่มกด 3 ปุ่ม
- ตัวต้านทานหลายๆ ค่า (2x10k, 270 โอห์ม) และทรานซิสเตอร์ (2N2222A หรือรุ่นใกล้เคียง)
- หดสาย (Shrink tube) ขนาดใหญ่หน่อย
- แผ่น PCB เก่าๆ เอามาทำเป็นหน้าปกแต่ง
- สายต่อ Micro-USB (ทั้งสองข้างเป็นหัว Micro-USB)
- แผ่นทดลองวงจรขนาด 2x8cm และสายไฟบางส่วน
ขั้นตอนที่ 1: รื้อทุกอย่างออกมา
เริ่มแรกพี่ก็รื้อนาฬิกาเก่าออกหมด ระฆัง, มอเตอร์, กลไกนาฬิกาที่พัง...

ขั้นตอนที่ 2: ใส่ปุ่มสำหรับตั้งค่าดิจิทัล
เพราะนาฬิกาใหม่ของเราจะเป็นดิจิทัลเต็มตัว มีคอมพิวเตอร์จิ๋วอยู่ข้างใน พี่เลยเพิ่มปุ่มกดสวยๆ 3 ปุ่มไว้ที่ด้านข้าง
พี่ใช้เศษอลูมิเนียมตัดเป็นแผ่นป้าย แล้วก็ใช้แม่พิมพ์ตัวอักษรและปากกามาร์กเกอร์สีดำทำตัวอักษรสำหรับป้าย




ขั้นตอนที่ 3: ตัวเก็บประจุสำหรับมอเตอร์
พี่จะเก็บระฆังเก่าไว้เพื่อใช้ปลุกด้วยมอเตอร์ กลไกเก่าที่พังมีตัวเก็บประจุเซรามิกติดป้ายว่า 104 พี่เลยแกะออกจากแผงวงจรแล้วบัดกรีต่อเข้ากับมอเตอร์โดยตรง - มันจะช่วยป้องกันสไปก์ไฟตอนเปิดมอเตอร์ตอนปลุก ข้อสำคัญอีกอย่างคือมอเตอร์จะถูกควบคุมผ่านทรานซิสเตอร์ เดี๋ยวค่อยว่ากันทีหลัง

ขั้นตอนที่ 4: หน้าปกใหม่สำหรับนาฬิกา
เพราะพี่ตัดสินใจทำหน้าปกใหม่ให้นาฬิกา - พี่เลยหยิบแผงวงจรจากกองขยะอิเล็กทรอนิกส์มา แล้วใช้ปืนลมร้อนเป่าอุปกรณ์ทั้งหมดออกให้หมด ตรงรูกลางแผงทำไว้สำหรับจอดิจิทัลของนาฬิกาใหม่


ขั้นตอนที่ 5: จอดิจิทัลจากมือถือเก่า
สำหรับโปรเจกต์นี้พี่ตัดสินใจใช้หน้าจอ LCD จากมือถือ Nokia 5110 เก่า หน้าจอแบบนี้หาซื้อเป็นโมดูลได้ทั่วไป มันกินไฟน้อยมาก และมีไลบรารีดีๆ สำหรับ Arduino ด้วย ถ้าน้องซื้อโมดูลใหม่ที่มีหน้าจอ 5110 - น้องกำลังช่วยโลกอยู่เพราะโมดูลใหม่ทั้งหมดทำมาจากมือถือ 5110, 3110 และ 3210 ที่รื้อมาใช้ใหม่นั่นเอง!


ขั้นตอนที่ 6: ต่อวงจรต่างๆ เข้าด้วยกัน
น้องอาจจะเดาได้แล้วว่าพี่วางแผนจะใช้บอร์ด Arduino มาควบคุมนาฬิกาตัวนี้ โปรเจกต์นี้ทำตามได้ง่ายแม้แต่สำหรับมือใหม่หัดเล่น Arduino เพราะพี่ไม่ได้ทำแผงวงจรเอง มันคือบอร์ด Arduino Nano ที่มีโมดูลต่างๆ ต่อเข้าไป - เซ็นเซอร์วัดอุณหภูมิ ความดัน และความชื้น BME280, นาฬิกา RTC DS1307, ชาร์จเจอร์แบตเตอรี่ลิเธียม TP4056, โมดูลบูสต์แรงดัน 3.7v เป็น 5v ขนาดเล็ก, ตัวต้านทานไวแสง (LDR) และ Buzzer (เอามาจาก PC เก่า)
ลองดูสเก็ตช์วงจรด้วยนะ - มันแสดงการต่อทั้งหมด พี่คิดว่าทุกอย่างอ่านและเข้าใจได้ง่ายมาก แต่ถ้ามีคำถามอะไรก็ถามมาในคอมเมนต์ด้านล่างได้เลย
หมายเหตุเล็กน้อยเกี่ยวกับการตั้งค่า:
- มอเตอร์ต่อตรงจากแบตเตอรี่ผ่านทรานซิสเตอร์ Arduino ควบคุมทรานซิสเตอร์ผ่านตัวต้านทานและพิน PWM D5
- พิน D7-12 ใช้สำหรับต่อกับ LCD Ground และ VCC ต่อกับรางบนบอร์ดจังก์ชัน
- LDR ติดตั้งบนหน้าปกนาฬิกา และตัวต้านทาน + สายไฟ 3 เส้น บัดกรีติดไว้ด้านหลังของหน้าปกเลย
- สำหรับการต่อปุ่ม พี่ใช้ฟังก์ชัน PULLUP ภายในของ Arduino ปุ่ม Menu ต่อกับอินเตอร์รัพท์ และพี่เพิ่งมารู้ทีหลังว่าสามารถใช้ PULLUP ภายในสำหรับอินเตอร์รัพท์ได้ด้วย อินเตอร์รัพท์สำหรับปุ่ม Menu จำเป็นเพื่อให้โค้ดไม่ต้องสแกนสถานะของปุ่มตลอดเวลา
- นาฬิกาจะตรวจสอบและแสดงสถานะของแบตเตอรี่ด้วย ดังนั้นแบตเตอรี่จึงต่อตรงกับพิน A0 แรงดันแบตเตอรี่ไม่เกิน 4.2V ดังนั้นการต่อแบตเตอรี่ตรงกับพินอนาล็อกของ Arduino จึงปลอดภัย
- Buzzer ต่อตรงกับพิน PWM D6 แม้ว่าจะไม่ใช่วิธีที่ดีนัก แต่พี่ก็ทำได้เพราะ Arduino Nano ทนได้มากกว่าที่ระบุ และเพราะ Buzzer จะไม่ทำงานตลอดเวลา การตั้งค่าแบบเดียวกันนี้จะเผาพินบนบอร์ด ESP ได้ง่ายๆ ดังนั้นในกรณีนั้นพี่แนะนำให้ใช้การควบคุมผ่านทรานซิสเตอร์
- นาฬิกามีสวิตช์อยู่แล้ว พี่เลยตัดสินใจใช้มัน มันดูเป็นธรรมชาติดีที่ด้านหลัง


ขั้นตอนที่ 7: บอร์ดจังก์ชันสำหรับต่อวงจรง่ายๆ
โมดูลทั้งหมดต้องการสายบวกและกราวด์ พี่เลยตัดสินใจใช้แผ่นทดลองวงจรขนาด 2x8cm แล้วบัดกรีราง 5V และ Ground ลงไป พี่ยังทำราง I2C เล็กๆ ไว้ด้วย เพราะมีโมดูลหลายตัวที่ใช้อินเตอร์เฟซ I2C
อีกด้านหนึ่งพี่บัดกรีพินมาตรฐานไว้ เพื่อจะได้ต่อและถอดโมดูลออกได้เมื่อต้องการ
ชิ้นส่วนเพิ่มเติมบางอย่างก็บัดกรีไว้ที่นั่นด้วย เช่น ทรานซิสเตอร์และตัวต้านทานสำหรับควบคุมมอเตอร์ และตัวต้านทานสำหรับปุ่ม Menu ที่ใช้อินเตอร์รัพท์ พี่แสดงแผนผังวงจรไว้ในส่วนก่อนหน้าแล้ว


ขั้นตอนที่ 8: จัดการเรื่องไฟเลี้ยง
พี่ใช้แบตเตอรี่ลิเธียม-ไอออนเก่าจากมือถือมาเป็นไฟเลี้ยงนาฬิกาตัวนี้ โดยปกติแล้วแบตเตอรี่มือถือที่เปลี่ยนออกมายังมีความจุที่ดีอยู่ (อย่างน้อยครึ่งหนึ่งของตอนใหม่) ข้อดีของมันคือมีวงจรป้องกันการคายประจุในตัว และมันบางมากด้วย จึงใช้ในพื้นที่จำกัดได้
การต่อแบตเตอรี่ก็แค่บัดกรีสายไฟเข้ากับขั้ว + และ - บนแบตเตอรี่ ไม่ต้องกังวล มันจะไม่ทำลายเซลล์เพราะมีตัวควบคุมและมีช่องว่างระหว่างขั้วกับสารเคมีในเซลล์
ในรูปนี้จะเห็นแบตเตอรี่และตัวควบคุมการชาร์จ TP4056 รวมถึงบูสเตอร์ 5V ต่อเข้าด้วยกันและเข้ากับแบตเตอรี่ พี่ใช้หดสายบางส่วนเพื่อให้ทุกอย่างเป็นฉนวนและกะทัดรัด

ขั้นตอนที่ 9: Micro USB สำหรับชาร์จและอัพเดตเฟิร์มแวร์

หลังจากบัดกรีทุกอย่างเสร็จ พี่ก็กาวติด Buzzer และเซ็นเซอร์วัดอุณหภูมิ/ความดัน/ความชื้นไว้ที่แผงหลัง มันพอดีกับช่องที่มีอยู่เดิมจากกลไกควบคุมหน้าปัดนาฬิกาเก่าพอดี
ตอนนี้ก็ถึงเวลาติดตั้งพอร์ต Micro USB ที่ด้านหลัง ทำไมต้อง Micro USB ในเมื่อ Nano ใช้ Mini USB? ก็เพราะในบ้าน สาย USB ส่วนใหญ่เป็นของมือถือ มันจะสะดวกถ้านาฬิกาใช้ได้ด้วย
เพราะพี่อยากใช้มันทั้งสำหรับชาร์จและอัพเดตฟังก์ชันนาฬิกาและสถานีอากาศ - พี่เลยปลอกสาย USB ออก สายไฟเลี้ยงส่งผ่านชาร์จเจอร์ TP4056 และสาย Data+/Data- ต่อตรงไปยังซ็อกเก็ต USB ของ Arduino Nano น้องเห็นได้ในแผนผังที่พี่แนบมา
ขั้นตอนที่ 10: การประกอบขั้นสุดท้าย
ตอนนี้ถึงเวลายัดทุกอย่างกลับเข้าไปในตัวนาฬิกาเดิมแล้ว พี่ใช้หดสายเพื่อเป็นฉนวนให้ชิ้นส่วนและโมดูลต่างๆ แม้แต่ Arduino ก็ห่อด้วยหดสาย



ขั้นตอนที่ 11: โค้ด
อย่างที่น้องเห็น นาฬิกาแน่นไปหมดด้านใน นี่ทำให้เราสร้างอะไรที่ซับซ้อนกว่านาฬิกาเก่าที่พี่มีได้ - ถ้ามีทักษะการโปรแกรมมานิดหน่อย พี่เขียนโค้ดเริ่มต้น แต่ก็ขอให้เพื่อนมาช่วยพี่ด้วย
ตอนนี้ นอกจากตัวนาฬิกาเองแล้ว โปรเจกต์นี้รองรับฟังก์ชันเหล่านี้แล้ว:
- แสดงเวลาและวันที่ (รวมถึงเวลาและเปิด/ปิดปลุกบนหน้าจอเดียวกัน)
- หน้าจอสว่างขึ้นเมื่อสภาพแวดล้อมมืด หรือเมื่อตรวจพบการเคลื่อนไหว (อิงจากการเปลี่ยนแปลงของแสง)
- พยากรณ์อากาศ (แดดออก, มีเมฆมาก, ฝนตก)
- แสดงอุณหภูมิ, ความดัน และความชื้น (สำหรับความชื้นจะบอกด้วยว่ามันแห้งเกินไปหรือไม่)
- เมนูสำหรับตั้งค่า: ปลุก, เปลี่ยนเวลา, เปิด/ปิดการแสดงวันที่, เปิด/ปิดเสียงแจ้งเตือนการเปลี่ยนแปลงสภาพอากาศ และสลับระหว่างหน่วยอิมพีเรียลกับเมตริก
- ตั้งค่าปลุก - เปิด/ปิด,