โปรเจกต์ บอร์ด Multi clock
สำหรับ: 1*Maxx7219 หรือ 4*Maxx7219 หรือ LCD ผ่าน I2C connection
สำหรับ: 1*Maxx7219 หรือ 4*Maxx7219 หรือ LCD ผ่าน I2C connection
ความตั้งใจแรกของผมในการสร้าง Board นี้คือการสร้างนาฬิกาปลุก Mp3 โดยใช้ Ds3231, Matrix Display และ Df Mp3 Player ผมได้ทำการทดลองกับ Df Player อยู่บ้าง แต่โปรเจกต์ของผมต้องหยุดชะงักเมื่อพบว่าฟังก์ชันสุ่มเพลง (random play) แม้จะสลับเพลงจริง แต่มันกลับเล่นลำดับเดิมซ้ำทุกครั้ง :(
ต่อมาผมได้ใช้ Board นี้เพื่อทดลองออกแบบนาฬิกาแบบอื่นๆ ที่ผมพบเจอ ผมจึงนำเสนอโปรเจกต์นี้เพื่อวัตถุประสงค์นั้น
Hardware ประกอบด้วย Arduino Nano, Ds3231 Clock Module และ Connector ต่างๆ ที่ช่วยให้เชื่อมต่อกับ Maxx7219 Module แบบเดี่ยวหรือหลายตัว หรือหน้าจอ LCD โดยใช้ I2C Backpack
วงจรนี้สร้างขึ้นบน Stripboard ส่วนประกอบประกอบด้วย Socket 4 อันสำหรับ Nano, Maxx7219 และ Ds3231 พร้อมด้วย Pin Strip สำหรับการเชื่อมต่อ LCD I2C และอีกอันหนึ่งเพื่อใช้เป็นทางเลือกแทน Maxx7219 Socket
หมายเหตุ: Pin Plug แบบ 4 Pin ที่ด้านหน้าของ Board เป็นส่วนที่เหลือจากการทดลอง Df Player ของผม ซึ่งควรตัดส่วนนี้และสายไฟของมันออกไป
ผมได้รวมตัวอย่างการเขียนโปรแกรมนาฬิกาแบบพื้นฐานไว้ 3 แบบ:
อย่างที่ผมได้กล่าวไป หลังจากโปรเจกต์ของผมหยุดชะงัก ผมก็ลงเอยด้วยการใช้ Board ของผมเพื่อทดลองออกแบบนาฬิกาอื่นๆ ที่ผมพบบน Project Hub
บางดีไซน์ก็ Port ง่าย และบางอันก็ไม่ ยกตัวอย่างเช่น:
https://create.arduino.cc/projecthub/mircemk/diy-word-clock-on-single-max7219-driven-8x8-matrix-8379ed?ref=platform&ref_id=424_recent___&offset=3 โดย Mirko Pavleski แค่เพียงดาวน์โหลด Library ที่จำเป็น คอมไพล์ (Compile) และโปรแกรมลงใน Nano (อย่างไรก็ตาม คุณจำเป็นต้องวาง Maxx7219 ตะแคงข้างนะ!)
ตัวอย่างที่ซับซ้อนกว่านั้นคือ Four stroke clock โดย Lagsilva: https://create.arduino.cc/projecthub/lagsilva/4-stroke-digital-clock-with-arduino-ec4d50?ref=search&ref_id=four%20stroke%20clock&offset=0
หน้าจอ Matrix มีการต่อสายที่แตกต่างกัน ผมจึงแก้ไข LedControl Initializer ให้ตรงกับการต่อสายของผม
เดิมทีวงจรนี้ใช้ Ds1307 ซึ่งสื่อสารผ่าน I2C เหมือนกับ Ds3231
ผมพยายามใช้ Library มาตรฐานสำหรับเปลี่ยนแทน แต่พบว่าตัว Ds1307 ใช้ชื่อฟังก์ชันที่ไม่เป็นมาตรฐาน
ผมไปค้นหา Library ใน GitHub และโชคดีที่ผู้เขียน Library มีรุ่นสำหรับ Ds3232 ซึ่งระบุว่าสามารถใช้งานร่วมกับ Ds3231 ได้ ผมจึงดาวน์โหลดและติดตั้งตัวนั้น
ผมแก้ไข Ds1307 #include เพื่อให้มัน Import Library สำหรับ Ds3232 แทน
ผมพบ Error ตรง #import <Time.h> ผมจึงเลือก Comment บรรทัดนี้ออก เนื่องจากบรรทัดถัดไปมีการ Import <TimeLib.h> อยู่แล้ว
ผม Compile Code และส่งไปยัง Arduino เวลาแสดงขึ้นมาและมีการเคลื่อนไหว (Animate) แต่กลับแสดงผลเป็นแนวนอนบนจอภาพของผม
ผมบันทึกไฟล์ LedControl.cpp มาตรฐานไว้ที่อื่น จากนั้นจึงแก้ไขไฟล์ใน Arduino->libraries->LedControler->src เพื่อให้มันหมุนพิกัด 90 องศาทวนเข็มนาฬิกา
สำเร็จ!
Edit: ลืมบอกไปว่าผมได้ใส่ Code RPM=10; ไว้ทันทีหลังจาก analogRead ซึ่งเป็นตัวกำหนดอัตราการเคลื่อนไหว (Animation rate)
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้