กลับไปหน้ารวมไฟล์
arduino-controlled-led-multi-player-game-on-arduino-shield-8aad36.md

Arduino Controlled LED Multi-Player Game on Arduino


title: "โปรเจกต์เกม LED Ping-Pong: การเปลี่ยนผ่านจาก Raspberry Pi สู่ระบบ Arduino Shield"

โปรเจกต์นี้ได้รับแรงบันดาลใจจากวิดีโอชื่อดังจาก Jabrils บน YouTube ซึ่งเขาสร้างเกมสไตล์อาเขตโดยใช้ Raspberry Pi และเขียนโปรแกรมด้วย Python อย่างไรก็ตาม สำหรับโปรเจกต์นี้ ในฐานะวิศวกรระบบสมองกลฝังตัว (embedded systems engineer) ผมได้ปรับปรุงและพัฒนาแนวคิดดังกล่าวใหม่ให้เป็นรูปแบบ Arduino Shield ซึ่งมีความเสถียรและประหยัดพลังงานมากกว่า การควบคุมทั้งหมดถูกนำไปใช้ด้วยภาษา C++

วิดีโอต้นฉบับจาก Jabrils

ด้านล่างนี้คือรูปภาพของโปรเจกต์ที่เสร็จสมบูรณ์ ซึ่งแสดงให้เห็นถึง Printed Circuit Board (PCB) ที่ออกแบบมาโดยเฉพาะ


ขั้นตอนการสร้าง (วิศวกรรมฮาร์ดแวร์)

หัวใจสำคัญของโปรเจกต์นี้คือ Custom PCB Shield (สีเขียว) ที่ออกแบบด้วย EasyEDA และผลิตโดย JLCPCB เพื่อให้มั่นใจถึงการเชื่อมต่อที่แม่นยำกับขา (pins) ของ Arduino Uno คุณสามารถดาวน์โหลด Gerber File ได้จากลิงก์ด้านล่างเพื่อนำไปผลิตได้ด้วยตนเอง

การวิเคราะห์ส่วนประกอบอิเล็กทรอนิกส์:

  1. Resistors: วงจรใช้ Resistors ขนาด 10K Ohm (3 ตัว) เพื่อทำหน้าที่เป็น Pull-down resistors สำหรับปุ่มกด เพื่อป้องกันสัญญาณลอย (floating signals) ส่วน Resistor ขนาด 220 Ohm (1 ตัว) ใช้เพื่อจำกัดกระแสสำหรับ LED ป้องกันกระแสไฟที่มากเกินไปซึ่งอาจทำให้ LED เสียหายได้
  2. LED Forward Voltage: ข้อสังเกตทางเทคนิคคือ LED สีเขียวอาจดูหรี่กว่า LED สีแดง นี่เป็นเพราะ LED สีเขียวมักจะมี Forward Voltage ที่สูงกว่า เมื่อใช้ค่าความต้านทาน (resistance) เดียวกัน กระแสที่ไหลผ่านก็จะต่ำลงเล็กน้อย

คำแนะนำในการประกอบ:

  • ขา (pins) ของ Push Button ควรถอดให้ตรงและขนานกันก่อนเสียบลงใน PCB เพื่อป้องกันความเสียหายต่อลายวงจร (traces)
  • บอร์ดนี้ออกแบบมาเป็น "Shield" คุณสามารถเสียบเข้ากับ Arduino ได้โดยตรงหลังจากบัดกรีเสร็จสมบูรณ์

ตรรกะของซอฟต์แวร์ (การวิเคราะห์ตรรกะของโค้ด)

โปรแกรมถูกเขียนขึ้นโดยใช้หลักการของ Finite State Machine (FSM) เพื่อจัดการสถานะต่างๆ ของเกมอย่างเป็นระบบ:

  1. สถานะเมนูหลัก (รอเริ่มเกม): เมื่อเปิดเครื่องครั้งแรก LED จะกะพริบช้าๆ ไปมาเพื่อแสดงว่าระบบพร้อมใช้งานแล้ว
  2. การเริ่มต้น (Initialization): หากต้องการเข้าสู่เกม ให้กดปุ่มใดปุ่มหนึ่งค้างไว้ 5 วินาที (ระบุด้วยการกะพริบ 5 ครั้ง) ระบบจะรีเซ็ตตัวแปรคะแนน (score variables) และเข้าสู่โหมดพร้อมเล่น โดยจะกะพริบ LED ทั้งหมด 3 ครั้ง
  3. ตรรกะการเล่นเกม (Gameplay Logic): ระบบจะส่องสว่าง LED ตามลำดับด้วยความเร็วที่กำหนด
    • ผู้เล่นจะต้องกดปุ่มเมื่อแสงไปถึง "จุดทำคะแนน" (Green LED) ที่ฝั่งตรงข้าม
    • หากกดพลาด (แสงยังไม่ถึงหรือไม่ผ่านไปแล้ว) LED สีแดงในตำแหน่งนั้นจะสว่างขึ้นเป็นเวลา 500ms เพื่อระบุข้อผิดพลาด
    • ระบบป้องกัน "Own Goals" โดยการบล็อกคำสั่งหากมีการกดปุ่มในโซนของผู้เล่นเอง
  4. การให้คะแนนและการชนะ (Scoring & Winning): เมื่อผู้เล่นทำคะแนนได้ ระบบจะกะพริบไฟตามคะแนนสะสมปัจจุบัน (Score Tracking) เมื่อผู้เล่นคนใดคนหนึ่งทำคะแนนถึง 5 แต้มก่อน พวกเขาจะเข้าสู่ Win State โดยไฟของฝั่งที่ชนะจะกะพริบอย่างต่อเนื่องจนกว่าจะมีการกดปุ่ม Restart

วิธีการเล่นและควบคุม

เกมนี้ออกแบบมาสำหรับการแข่งขันแบบ 2 ผู้เล่น:

  • Buttons 1 และ 2: ใช้ควบคุมการหยุดแสงสำหรับแต่ละด้าน
  • Button 3 (RESTART): ใช้เพื่อรีเซ็ตเกมกลับไปยังเมนูหลัก

เทคนิคการจ่ายไฟ: คุณสามารถรันโปรแกรมผ่านสาย USB จากคอมพิวเตอร์ หรือเปลี่ยนไปใช้ DC Power Jack (2.1 mm) ได้ ทั้งนี้เนื่องจาก Arduino มี Internal Flash Memory ซึ่งโปรแกรมจะถูกเก็บไว้ถาวร

ข้อควรทราบและการแก้ไขปัญหาที่สำคัญ: ในกรณีที่ปุ่ม Restart บน PCB ไม่ทำงาน (ซึ่งอาจเกิดขึ้นได้เนื่องจากความไม่แม่นยำของ hardware debounce) คุณสามารถกดปุ่ม Reset สีแดงบนบอร์ด Arduino ได้โดยตรงเพื่อคืนค่าเริ่มต้นทันที หากระบบค้าง ให้ลองตรวจสอบแหล่งจ่ายไฟ (power supply) หรือเปลี่ยนพอร์ต USB เพื่อให้แน่ใจว่ากระแสไฟมีความเสถียร


ดาวน์โหลดไฟล์โปรเจกต์

  • Source Code: สามารถคัดลอกได้จากส่วนด้านล่าง
  • Gerber File: [Link to download for PCB manufacturing]

ข้อมูล Frontmatter ดั้งเดิม

title: "Arduino Controlled LED Multi-Player Game on Arduino \"Shield"
description: "A custom made PCB fits onto an Arduino Uno. This is a game that can be played by two players."
author: "22warehamD"
category: "Gadgets, Games & Toys"
tags:
  - "game"
  - "shield"
  - "led"
views: 10214
likes: 6
price: 2450
difficulty: "Easy"
components:
  - "1x Custom PCB"
  - "3x Resistor 10k ohm"
  - "3x Pushbutton switch 12mm"
  - "1x Soldering iron (generic)"
  - "1x Male-Header 36 Position 1 Row- Long (0.1\")"
  - "7x 3 mm LED: Red"
  - "1x Resistor 220 ohm"
  - "1x Arduino UNO"
  - "2x 5 mm LED: Green"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/a230e07a-c3f7-494f-9798-52ae09d8c955.ino"
  - "https://projects.arduinocontent.cc/a230e07a-c3f7-494f-9798-52ae09d8c955.ino"
documentationLinks: []
passwordHash: "97580fc61d26073be59616d57266f8ecb08c48b2812e7b66602b0574abbf0fb3"
encryptedPayload: "U2FsdGVkX1/mTgzUvH6y/w91o4qhZVP2tdQjZtJN1GT2x1Jfvp3yLVcTE/0f9XTsLJo/yohuIkkMEerCGSxSQZF4VMzCuQ1NJRJF0o4AdJw="
seoDescription: "Build an LED Multi-Player Game using an Arduino Shield and custom PCB for Arduino Uno. A fun 2-player project."
videoLinks:
  - "https://www.youtube.com/embed/6hP5wbpJOpQ"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-controlled-led-multi-player-game-on-arduino-shield-8aad36_cover.jpg"
lang: "th"