กลับไปหน้ารวมไฟล์
custom-chess-clock-84144a.md

นาฬิกาเล่นหมากรุกเนี่ยจำเป็นมากถ้าอยากเพิ่มความมันส์ในการแข่งขัน ช่วยให้เล่นกันแฟร์ๆ ด้วยการจำกัดเวลาคิดของแต่ละฝั่ง มันช่วยเพิ่มความตื่นเต้นและกลยุทธ์ในเกมหมากรุก ทำให้ทุกวินาทีมีค่าตอนที่เราพยายามคว้าชัยชนะ แต่ว่า... นาฬิกาแบบซื้อสำเร็จเนี่ยราคาพุ่งไปถึง 60 ดอลลาร์เลยนะ และการซื้อมันมาเนี่ยไม่สนุกเลยใช่มั้ยล่ะ?

นาฬิกาของพี่ (ซึ่งเอาไปใช้กับเกมไหนก็ได้ที่ต้องจับเวลา เช่น Scrabble, Go, หมากฮอส ฯลฯ) มีฟีเจอร์คือใช้สวิตช์แมคคานิคัลแบบกดแล้วรู้สึกดี, มีอินพุตที่ปรับแต่งได้ 4 ช่อง และหน้าจอ LCD ขนาดใหญ่สำหรับแสดงเวลา นอกจากนี้กลไกสวิตช์ใหญ่ๆ นี่กดแล้วสนุกมาก แถมยังมีเสียง *ท็อง* ที่ฟังแล้วฟินอีกด้วย

พี่ออกแบบตัวเรือนนาฬิกาใน Fusion 360 และเพราะพี่อยากให้เปลี่ยนชิ้นส่วนได้ง่ายๆ เลยใส่พารามิเตอร์ชุดหนึ่งเข้าไป ซึ่งปรับค่าได้ง่ายๆ เพื่อสร้างนาฬิกาที่เหมาะกับความต้องการของใครก็ตาม

การใช้งานหลักของพารามิเตอร์เหล่านี้คือการกำหนดขนาดทางกายภาพของชิ้นส่วน ซึ่งพี่สามารถวัดได้ด้วยเวอร์เนียคาลิปเปอร์ พารามิเตอร์ x และ z offset คือระยะห่างจากมุมด้านในบนสุดของกล่องไปยังตำแหน่งที่วางลิมิตสวิตช์ ตามรูปด้านล่างนี้:

พารามิเตอร์ "encoderBore" กำหนดขนาดรูสำหรับพอเทนชิออมิเตอร์, "buttonBore" คือเส้นผ่านศูนย์กลางของรูสำหรับปุ่มแบบติดแผงหน้า, และ "limitSwitchC2c" คือระยะห่างระหว่างรูยึดสำหรับลิมิตสวิตช์ของคุณ ส่วนพารามิเตอร์สุดท้าย "bodyThickness" กำหนดความหนาของนาฬิกาทั้งหมด พี่แนะนำให้ทำหนาเท่าที่ทำได้ เพราะการยัดชิ้นส่วนทั้งหมดลงในพื้นที่เล็กๆ นั้นยาก แต่ข้อจำกัดจะอยู่ที่ความยาวของสลักเกลียว M3 ที่น้องมี (หมายเหตุอย่างนึง: สวิตช์ไมโครส่วนใหญ่มาพร้อมรูยึด M2 แต่มันควรอยู่ในตำแหน่งที่สามารถเจาะขยายเป็น M3 ได้อย่างปลอดภัย ซึ่งสลักเกลียวยาวๆ หาง่ายกว่า) ในการตั้งค่านี้ ให้เริ่มจากความยาว (หน่วย mm) ของสลักเกลียวที่ต้องการ แล้วลบออกประมาณ 9-10mm เพื่อชดเชยความหนาของผนัง รวมถึงความยาวของแหวนเกลียว M3 ธรรมดาที่อีกฝั่งหนึ่ง

เมื่อปรับพารามิเตอร์เหล่านี้เรียบร้อยแล้ว น้องก็พร้อมที่จะพิมพ์ชิ้นส่วนทั้งหมดด้วยวัสดุแข็งๆ ใดๆ ก็ได้ (PLA, PETG หรือวัสดุที่คล้ายกัน)

ถ้าน้องตัดสินใจที่จะพิมพ์จากไฟล์ STL ที่แนบมาเฉยๆ น้องก็น่าจะทำโปรเจกต์นี้สำเร็จได้ แต่อาจต้องเจาะรูบางจุดเพิ่มเพื่อให้ทุกอย่างพอดีกัน

อัลกอริทึมนาฬิกาคู่ (millis)

Custom Chess Clock นี่คือการประยุกต์ใช้ State Machine แบบคู่ขั้นสุดเลย มันมีผู้เล่นสองคน, นาฬิกาสองเรือน และกฎลอจิกที่เข้มงวดมาก น้องไม่สามารถหยุดนาฬิกาของตัวเองได้โดยไม่เปิดนาฬิกาของคู่ต่อสู้ทันที

ต่างจากตัวจับเวลานับถอยหลังพื้นฐานตรงที่มันมีตัวแปรสองตัวที่ทำงานพร้อมกัน

  1. ตัวแปรสถานะหลัก (Global State Variable): int activePlayer = 1;
  2. เครื่องยนต์ Millis:
    if(activePlayer == 1) {
      if (millis() - prevMillis > 1000) { player1_time--; prevMillis = millis(); }
    } else if (activePlayer == 2) {
      if (millis() - prevMillis > 1000) { player2_time--; prevMillis = millis(); }
    }
    
  3. การขัดจังหวะ (Interruption): ทันทีที่ผู้เล่นคนที่ 1 ตบปุ่มอาร์เคดยักษ์ของตัวเอง อินเตอร์รัปต์จะสลับค่า activePlayer ไปเป็น 2 การคำนวณมิลลิวินาทีของผู้เล่นคนที่ 1 จะ หยุดทันที กลางคัน ป้องกันไม่ให้เสียเวลาแม้แต่เสี้ยววินาทีตลอดหลายชั่วโมงของการเล่น

การประกอบฮาร์ดแวร์ (กลไกไม้กระดก)

การประกอบชิ้นส่วนจริงเนี่ยสำคัญไม่แพ้การเขียนโค้ดเลยนะน้อง! แทนที่จะใช้ปุ่มกดแยกกันสองปุ่ม เด็กช่างหลายคนชอบใช้คันโยกแบบ "ไม้กระดก" ที่พิมพ์จากเครื่องพิมพ์ 3D หรือทำจากไม้ วางทับบนสวิตช์จิ๋วแบบ SPDT พอกดฝั่งตัวเองลง อีกฝั่งก็เด้งขึ้นมา บังคับให้กดได้ทีละฝั่งเท่านั้น! กลไกแบบนี้แหละที่เห็นในภาพดีไซน์ด้านบน

อุปกรณ์ที่ต้องใช้ในการประกอบ

  • Arduino Nano: ตัวเล็กแบน ลงกล่องบางๆ ได้พอดี
  • จอแสดงผลข้อความ 16x2 หรือจอ 7-Segment 4 หลัก 2 ตัว (หันเข้าหาผู้เล่นคนละด้าน)
  • ปุ่มอาร์เคดยักษ์ หรือไม่ก็คันโยกไม้กระดกแบบกลไกวางทับบนลิมิตสวิตช์
  • บัซเซอร์: สำหรับส่งเสียงเตือนน่ากลัวเวลา "ธงร่วง / หมดเวลา" ซึ่งหมายถึงแพ้แล้วนั่นเอง

แนะนำให้บัดกรีทุกจุดต่อให้เรียบร้อย และต่อสายทุกชิ้นส่วนตามแผนภาพการเดินสายด้านล่าง โดยใช้ตัวต้านทาน (Resistor) ค่าประมาณเดียวกันทุกจุด หมายเหตุ: เพราะโปรเจกต์นี้พื้นที่ค่อนข้างจำกัด ควรตัดสายให้สั้นหน่อย และบอร์ดใหญ่ๆ อย่าง UNO อาจจะใส่กล่องไม่ลงเลย ถ้าไม่ได้ทำกล่องให้หนาพิเศษ

พอเดินสายทุกอย่างเสร็จแล้ว ก็อัพโหลดโค้ด แล้วไปเล่นหมากรุกได้เลยจ้า!

(ถ้านับเวลาผิดฝั่ง ให้ลองสลับค่า "true" กับ "false" ของตัวแปร "LEFT" กับ "RIGHT" ดูนะ)

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

apps:
  - "1x Arduino IDE"
author: "iant1"
category: "Gadgets, Games & Toys"
components:
  - "1x Soldering kit"
  - "2x 10k potentiometer"
  - "1x arduino micro (no headers)"
  - "1x micro switch"
  - "1x Computer"
  - "1x Friend with a 3D printer"
  - "2x panel mount momentary contact button"
  - "1x 16x2 lcd display (i2c)"
description: "Without a chess clock, games can drag on endlessly and lose their competitive spark, but imagine the thrill and precision of owning a custom chess clock, transforming every match into a dynamic and engaging battle."
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX18tWoLIlgH/IEkZfMWxf0jT7VNhsdKtV7p95pIyshecCwnxX25ZhuK4Jkaut645upeVGqzoIbNnatR/DGhdTKwPZiS2VyJ5zD8="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/custom-chess-clock-84144a_cover.jpg"
lang: "en"
likes: 5
passwordHash: "47b35cba8bccbc16e0010075554e558ecef8efac7cd2d18a49787a82027c9daa"
price: 2450
seoDescription: "Build a Custom Chess Clock to add precision and thrill to your games. Enhance every match with this Arduino project."
tags:
  - "Clocks"
  - "Games"
  - "Entertainment System"
title: "นาฬิกาเล่นหมากรุกสุดคัสตอม งานง่ายแต่หล่อ!"
tools: []
videoLinks: []
views: 3946