นี่คือการนำ Conway's Game of Life มาพัฒนาบน Arduino ประกอบด้วยส่วนประกอบหลักเพียง 2 อย่าง: จอ Matrix และ Arduino Nano
บทนำเกี่ยวกับ Cellular Automata
Conway's Game of Life เป็นเกมแบบ zero-player ที่มีชื่อเสียง ซึ่งจำลองวิวัฒนาการของประชากรเซลล์บนตาราง Grid ด้วยกฎทางคณิตศาสตร์ที่เรียบง่าย ชุดหนึ่ง ทำให้เกิดรูปแบบที่ซับซ้อนขึ้นมาจากสถานะเริ่มต้นที่ไม่ซับซ้อน การพัฒนาบน Arduino นี้ได้นำการจำลองแบบคลาสสิกนี้มาสู่โลกแห่งความเป็นจริง สร้างการแสดงผลที่น่าหลงใหลของชีวิตดิจิทัลบน LED Matrix ขนาดกะทัดรัด
ระบบแสดงผล Hardware
- Arduino Nano: สมองประมวลผลขนาดกะทัดรัดที่คำนวณกฎสำหรับทุกวงจรชีวิต
- MAX7219 8x8 LED Matrix: ทำหน้าที่เป็น "Grid" สำหรับสภาพแวดล้อมของเซลล์ LED ทั้ง 64 ดวง แต่ละดวงจะแสดงเซลล์หนึ่งเซลล์ ซึ่งสามารถเป็นได้ทั้ง "มีชีวิต" (เปิด) หรือ "ตาย" (ปิด)
- SPI Communication: ชิป MAX7219 ช่วยให้ Arduino สามารถควบคุม LED ทั้ง 64 ดวงได้โดยใช้ Digital Pin เพียงสามขา ทำให้การเดินสายมีประสิทธิภาพสูง
- Breadboard Powering: ระบบมีขนาดกะทัดรัดและใช้กระแสไฟน้อยมาก ทำให้สามารถจ่ายไฟได้โดยตรงจากพอร์ต USB ของ Nano
ตรรกะและกฎของ Algorithm
การจำลองจะดำเนินไปเป็น "รุ่น" (generations) ที่ไม่ต่อเนื่องกัน สำหรับแต่ละรอบ Arduino จะใช้กฎต่อไปนี้กับเซลล์ทุกเซลล์พร้อมกัน:
- Survival: เซลล์ที่มีชีวิตใด ๆ ที่มีเซลล์เพื่อนบ้านมีชีวิต 2 หรือ 3 เซลล์ จะอยู่รอดไปยังรุ่นถัดไป
- Death (Underpopulation): เซลล์ที่มีชีวิตใด ๆ ที่มีเซลล์เพื่อนบ้านมีชีวิตน้อยกว่า 2 เซลล์ จะตาย
- Death (Overpopulation): เซลล์ที่มีชีวิตใด ๆ ที่มีเซลล์เพื่อนบ้านมีชีวิตมากกว่า 3 เซลล์ จะตาย
- Birth: เซลล์ที่ตายใด ๆ ที่มีเซลล์เพื่อนบ้านมีชีวิต 3 เซลล์พอดี จะกลายเป็นเซลล์ที่มีชีวิต
โค้ดจะเก็บ "Buffer" (Array) สองตัวไว้ในหน่วยความจำ โดยจะคำนวณสถานะถัดไปจาก Buffer ปัจจุบัน แล้วสลับ Buffer เพื่ออัปเดตการแสดงผล ซึ่งทำให้มั่นใจได้ว่าการคำนวณสำหรับเซลล์หนึ่งจะไม่รบกวนเซลล์เพื่อนบ้านในรุ่นเดียวกัน
การเฝ้าดูรูปแบบที่วิวัฒนาการ
แม้ว่า Grid จะมีขนาดเพียง 8x8 คุณก็สามารถเห็นการปรากฏขึ้นของรูปแบบชีวิตคลาสสิกหลายรูปแบบได้:
- Oscillators: รูปแบบที่สลับไปมาระหว่างสองสถานะ (เหมือนเส้นที่กะพริบ)
- Still Life: รูปแบบที่คงที่และไม่เปลี่ยนแปลง เว้นแต่จะถูกรบกวนจากแรงภายนอก
- Gliders: รูปแบบที่ดูเหมือนจะ "เคลื่อนที่" ข้ามหน้าจอ (แม้ว่า Grid ขนาด 8x8 จะทำให้พวกมันไปถึงขอบได้อย่างรวดเร็ว) ด้วยการใช้ "Random Seed" ในการเริ่มต้น ทุกครั้งที่คุณรีเซ็ต Arduino คุณจะสร้างประวัติวิวัฒนาการใหม่ทั้งหมด โปรเจกต์นี้เป็นการผสมผสานที่น่าสนใจระหว่าง คณิตศาสตร์, วิทยาการคอมพิวเตอร์ และ การออกแบบ Hardware