โปรเจกต์นาฬิกาสารพัดประโยชน์ ใช้บอร์ด Pico-2040 คู่หูดูโอ้

ภาพรวมโปรเจกต์ (OVERVIEW):
เจ้านาฬิกาสารพัดนึกตัวนี้มันมีสมองกล 2 ก้อนนะน้อง โดยใช้บอร์ด Pico-2040 แยกกันทำงานคนละส่วน แล้วเอามาเชื่อมต่อกันผ่าน I2C Bus เพื่อให้มันคุยกันและทำงานประสานกันได้แบบเนียนๆ ถึงแม้แต่ละบอร์ดจะมีโมดูล RTC (Real-Time Clock) เป็นของตัวเอง แต่พี่สั่งให้บอร์ดที่สองเป็นคนคุมเรื่องเวลาหลัก ส่วนบอร์ดแรกจะรับหน้าที่ขับจอ Seven-segment ขนาดบิ๊กเบิ้มแบบ Common-Anode และบอร์ดที่สองจะใช้จอ MAX7219 LED matrix ไว้โชว์ข้อความวิ่งๆ และข้อมูลต่างๆ ให้ดูหล่อเท่
การทำงาน (FUNCTIONALITY):
พอน้องจ่ายไฟปุ๊บ นาฬิกาทั้งสองจะทำการ Sync โมดูล RTC ให้ตรงกันทันที โดยให้ Clock-1 เป็น Master และ Clock-2 เป็น Slave จัดไปวัยรุ่น!
Clock-2 จะรับหน้าที่เป็นสายลุย คุมพวกอุปกรณ์เสริมอย่าง MP3 player, SD card reader และพวก [Sensor](https://s.shopee.co.th/7VBG2rX65j) ต่างๆ ส่วน Clock-1 จะเน้นจัดการเรื่อง Display และรอรับคำสั่งจาก User Input เป็นหลัก
พี่ใช้เทคนิค Time Division Multiplexing ใน Clock-1 เพื่อให้จัดการ Display ได้อย่างมีประสิทธิภาพ และแน่นอนว่าหน้าจอ Seven-segment ตัวใหญ่มันกินไฟ พี่เลยต้องใส่ Driver IC เข้าไปช่วยขับ ไม่งั้นบอร์ดพังนะน้อง
แถมยังมี Remote control ให้กดสั่งงานได้แบบชิลๆ ทั้งตั้งเวลา, ตั้งปลุก, เลือกโหมดเพลง, ปรับเสียง หรือจะสั่งเปลี่ยนหน้าจอก็ทำได้หมด สะดวกจัด!
ฟีเจอร์เด่นๆ (KEY FEATURES):
นาฬิกาชุดนี้ประกอบด้วยบอร์ด Pico-2040 สองตัวเชื่อมกันผ่าน I2C Interface โดยแต่ละตัวมี RTC เป็นของตัวเอง (พี่ใช้โมดูล DS1307 ราคาประหยัด หาซื้อง่าย) ซึ่งจะถูกเซ็ตให้ตรงกันตอนเปิดเครื่อง
Clock-1 จะโชว์เวลาด้วยจอ Seven-segment ขนาดใหญ่สะใจ ส่วน Clock-2 จะใช้จอ LED matrix แบบวิ่งได้เพื่อโชว์ วันที่, อุณหภูมิ, ความชื้น และข้อความทักทาย พี่ใช้จอ Seven-segment ขนาด 2.3 นิ้ว (Common Anode) 4 หลักสำหรับชั่วโมง/นาที และขนาด 1 นิ้ว 2 หลักสำหรับวินาที บอกเลยว่าวงจรนี้ขับจอใหญ่กว่านี้ก็ได้นะ ถ้าใจน้องถึงพอ
Clock-2 มีจอ MAX7219 ไว้โชว์เวลา, วันที่, อุณหภูมิ, ความชื้น และคำทักทายตามช่วงเวลา เช่น Good morning, Good night หรือจะโชว์ Status ต่างๆ เวลาเปลี่ยนโหมดก็ได้ แถมยังอ่านไฟล์ข้อความจาก SD card มาวิ่งบนหน้าจอก็ยังได้เลย
มี Mini MP3 player ในตัวด้วยนะ เอาไว้เปิดเสียง Chime ทุกชั่วโมง, เป็นนาฬิกาปลุก หรือจะตั้งเวลาเปิดเพลงสวดมนต์ก็ได้ ที่สำคัญคือมัน "พูด" บอกเวลาได้ด้วย พี่ตั้งไว้ให้มันพูดทุกครึ่งชั่วโมง และส่งเสียงกริ่งทุกต้นชั่วโมง เจ๋งป่ะล่ะ
พี่ติด Ultra sound sensor ไว้กับบอร์ดที่สองด้วยนะ เอาไว้ตรวจจับว่าถ้ามีใครเดินเข้ามาใกล้ๆ ให้มันสุ่มพูดทักทาย (Hi, Hello, How are you) แล้วโชว์ข้อความบนจอไปพร้อมกัน น้องจะใส่ไฟล์เสียงทักทายเป็นร้อยไฟล์ใน SD card ก็จัดไปเลย
มีโมดูล DHT 11 เอาไว้วัดอุณหภูมิและความชื้นในห้อง แล้วส่งค่าไปวิ่งโชว์บนหน้าจอแบบเรียลไทม์
คุมงานด้วย Remote แบบ Full function พี่ติด IR sensor ไว้ที่ Clock-1 น้องสามารถใช้รีโมทมาตรฐานตั้งเวลา, ตั้งปลุก, ตั้งวันที่, ปรับเสียง หรือเลือกโหมดเพลงได้เลย จะสั่งปิดเสียง (Mute) หรือสั่งเปิด Sensor ก็ทำได้ผ่านรีโมทตัวเดียว
หน้าจอ LED matrix จะวิ่งสลับไปมาทั้งเวลา, วันที่, อุณหภูมิ และคำทักทาย พี่ตั้งค่าไว้ว่าตอน 6.10 น. กับ 18.10 น. ให้มันเล่นเพลงสวดมนต์พร้อมกับโชว์เนื้อร้องวิ่งไปทีละบรรทัดจาก SD card ด้วยนะ หล่อเท่เลยงานนี้ เวลาเรากดรีโมท จอก็จะขึ้น Status บอกว่ากำลังทำอะไรอยู่ เช่น “Set time", "Set Alarm " อะไรพวกนี้ และค่าที่เราตั้งไว้จะถูกเซฟลง SD card โดยอัตโนมัติ เปิดเครื่องใหม่ก็ไม่ต้องตั้งใหม่ให้เสียเวลา
SD card reader, MP3 player และ Ultra sound sensor ทั้งหมดนี้ต่ออยู่กับ Clock-2 นะ พอเปิดเครื่องปุ๊บ Clock-1 จะไปขอข้อมูลเวลาและค่าเซ็ตติ้งต่างๆ จาก Clock-2 ผ่าน I2C Bus ทันที เพื่อให้เวลาหน้าจอมันซิงค์กันเป๊ะๆ
ในการคุยผ่าน I2C นั้น Clock-1 จะเป็น Master ส่วน Clock-2 เป็น Slave และเนื่องจาก IR receiver ต่ออยู่ที่ Clock-1 พอน้องกดรีโมท Clock-1 ก็จะส่งค่านั้นไปให้ Clock-2 ทำงานต่อและบันทึกลง SD card นั่นเอง
รายละเอียดโปรเจกต์ (PROJECT DETAILS):
โปรเจกต์นี้หัวใจคือ RP2040 สองตัว แยกกันทำงานแต่คุยกันผ่าน I2C Bus บอร์ดแรกโชว์ Seven-segment บอร์ดที่สองโชว์ LED matrix (ใช้ MAX7219 ต่อกัน 12 ยูนิต ยาวเฟื้อยสะใจ) ที่ต้องแยกสองบอร์ดเพราะการคุมจอ LED matrix ให้ข้อความวิ่งเนี่ยมันกิน Processor เอาเรื่อง พี่เลยไม่อยากให้มันทำงานหนักเกินไปจนกวนส่วนอื่น
พี่ใช้ Interface ครบเลยนะ ทั้ง I2C, SPI และ UART เพื่อคุยกับโมดูลต่างๆ จริงๆ พี่ใช้ I2C สองชุดแยกกันด้วยนะ ชุดนึงคุยกับ RTC อีกชุดคุยกันเองระหว่างบอร์ด เพื่อตัดปัญหาเรื่องสัญญาณตีกัน
ส่วนภาคจ่ายไฟ พี่ใช้ Module 12V 1A ตัวเดียวเลี้ยงทั้งระบบ แต่ละบอร์ดมี Regulator 7805 (5V) และ 3.3V แยกของใครของมัน ปลอดภัยไว้ก่อน ห้ามช็อตนะตัวนี้
น้องต้องมี Micro SD card 2 ใบนะ ใบแรกไว้ใส่เพลงใน MP3 Player อีกใบไว้เก็บไฟล์ Text และข้อมูล Setting ต่างๆ การจัดการไฟล์ใน SD card ก็แค่ตั้งชื่อโฟลเดอร์เป็น 001, 002 และชื่อไฟล์เป็น 001, 002... ตามลำดับ ง่ายๆ เลย
เรื่องรีโมท น้องไปคุ้ยเอารีโมทเก่าๆ ของเครื่องเสียงรถยนต์หรืออะไรก็ได้มาใช้ พี่ใช้วิธีอ่านค่า Code จาก Serial Monitor ใน [Arduino](https://s.shopee.co.th/7fUgFAWSki) IDE เอาว่าปุ่มไหนส่งค่าอะไรมา แล้วก็เอาค่านั้นไปใส่ในโค้ด จบงาน
ส่วนเรื่อง Display พี่ใช้เทคนิค Time division multiplexing อย่างที่บอกไป เนื่องจาก Seven segment ตัวใหญ่มันใช้ LED ต่ออนุกรมกันหลายดวง GPIO ของ Pico ขับไม่ไหวแน่ พี่เลยต้องใช้ IC ULN2803 มาช่วย และใช้ระดับแรงดันผ่าน IC CD4503 กับ Transistor BD139 เพื่อให้ไฟพอกับจอใหญ่ๆ
ตัวโครงพี่ทำ PCB เองโดยใช้ DIPTRACE แล้วกัดปริ้นท์เอง (แผ่นทองแดงทำมือนะจ๊ะ) แล้วเอาไปใส่ในกรอบรูป 2 อันมาประกบกัน พ่นสีดำที่กระจกเว้นช่องจอไว้ ติดโลโก้ Raspberry กับคำว่า PICO 2040 ลงไปหน่อย โหย... ดูเป็นมืออาชีพจนคนนึกว่าซื้อมาเลยน้องเอ๊ย!
การควบคุมด้วยรีโมท (Remote control):

ทุกอย่างคุมได้ผ่านรีโมทหมด ถ้ากดปุ่มตั้งเวลา จอวินาทีจะขึ้น "St" และที่จอ LED matrix จะขึ้น "SET Time" น้องก็แค่กดเลขเวลาที่ต้องการแล้วกด Enter หรือถ้าจะยกเลิกก็กด Home
การตั้งนาฬิกาปลุกและวันที่ก็ทำเหมือนกันเป๊ะเลย
ปุ่ม CH SET เอาไว้เปลี่ยนโหมดเสียง: 1. CH--on: ส่งเสียงกริ่งทุกชั่วโมงและพูดบอกเวลาตลอด 2. CH--nt: โหมดกลางคืน (Night mode) จะไม่ส่งเสียงรบกวนตอนเราหลับ 3. --UL on: ปิดกริ่ง แต่เปิด [Sensor](https://s.shopee.co.th/7VBG2rX65j) จับคนเดินผ่าน 4. CH UL nt: ปิดทั้งกริ่งและ [Sensor](https://s.shopee.co.th/7VBG2rX65j) ในช่วงเวลากลางคืน
ปุ่ม Temp ไว้ขอดูอุณหภูมิ, AL POF ไว้เปิด/ปิดนาฬิกาปลุกถาวร, PL OFF ไว้หยุดเสียงปลุกหรือหยุดเพลง
ส่วนปุ่ม VOL ก็เอาไว้ปรับความดัง MP3 Player ได้ 10 ระดับ (สูงสุดคือ 30) และมีปุ่ม On-Off ไว้สำหรับพักหน้าจอให้มืดสนิท (Blank) แต่ระบบข้างในยังรันปกติ ไม่ต้องห่วง

โหมดปกติ (มีตัวอักษรวิ่งตลอดเวลา)

หน้าจอตอนอยู่ในโหมดตั้งค่าต่างๆ
สรุป (CONCLUSION):
โปรเจกต์นาฬิกามัลติฟังก์ชันตัวนี้เป็นการรวมร่างระหว่างฟังก์ชันการใช้งานระดับเทพกับดีไซน์ที่ดูดี เป็นโซลูชันการบอกเวลาที่อเนกประสงค์สุดๆ ด้วยฟีเจอร์นวัตกรรมใหม่ๆ และหน้าตาที่หล่อเท่ พี่บอกเลยว่าทำเสร็จแล้วน้องจะภูมิใจกับมันแน่นอน สู้ๆ นะวัยรุ่น!
รายละเอียดทางเทคนิคเพิ่มเติม
ระบบนาฬิกาแบบกระจายศูนย์ Dual-Core
โปรเจกต์นี้รีดพลังจากบอร์ด Raspberry Pi Pico (RP2040) สองตัวมาทำงานขนานกันเพื่อให้ได้สถานีจัดการเวลาที่มีฟีเจอร์ล้นๆ
- Inter-Processor Telemetry: Pico ตัวแรกทำหน้าที่เป็น "Timekeeper" เชื่อมต่อกับ DS3231 RTC และ LED Matrix ขนาดใหญ่ ส่วน Pico ตัวที่สองทำหน้าที่เป็น "UI Hub" คอยจัดการปุ่มกดและจอ OLED สำรองเพื่อตั้งค่ารายละเอียดนาฬิกาปลุก
- Concurrent Task Management: ใช้สถาปัตยกรรม Dual-core ของ RP2040 ให้เป็นประโยชน์ โดยใช้ Core นึงปั่นการ Refresh หน้าจอด้วยความเร็วสูง ในขณะที่อีก Core นึงประมวลผลคำสั่งจากผู้ใช้และ Logic ของนาฬิกาปลุกไปพร้อมๆ กัน
ความสามารถของระบบ
- Multi-Sensor Dashboard: มีระบบวัดอุณหภูมิ ความชื้น และความดันบรรยากาศในตัว โดยมีการ Sync ข้อมูลระหว่างบอร์ดทั้งสองเพื่อเฝ้าดูสภาพแวดล้อมในบริเวณนั้นได้อย่างแม่นยำ