กลับไปหน้ารวมไฟล์
rfid-race-timer-06a2f2.md

เป็นนักวิ่งระยะไกลตัวยงเลยครับ และก็ติดใจระบบจับเวลาที่ใช้ในการแข่งขันมาตลอด นักกีฬาจะติดชิป UHF RFID ไว้ แล้วเสาอากาศจะอ่านชิปตอนที่นักกีฬาข้ามเส้นชัย "ชิป" พวกนี้มักจะมีหมายเลขเบอร์หรือข้อมูลบางอย่างเพื่อระบุตัวนักวิ่ง ผมอยากจัดแข่งเองและใช้ระบบแบบนี้จับเวลา แต่ว่า...ชุดอุปกรณ์ระดับมืออาชีพมันราคาเกินหมื่นดอลลาร์อะน้อง แพงเว่อร์! แถมระบบใหญ่ๆที่เป็นระบบปิดอย่าง IPICO, MyLaps, ChronoTrack พวกนี้ก็บังคับให้ใช้ชิปและอุปกรณ์ของเขาเท่านั้น ถึงจะเจ๋งและฟีเจอร์ครบก็เถอะ แต่ผมไม่จำเป็นต้องใช้ขนาดนั้นหรอก เพราะไม่ได้จัดแข่งที่มีนักวิ่งเป็นร้อยๆคน

ดังนั้น...ผมเลยซื้อ SparkFun Simultaneous RFID reader กับอุปกรณ์ต่อพ่วง แล้วสร้างระบบจับเวลาของตัวเองขึ้นมา! ใช่ครับ รู้ว่าน้องอาจจะไม่อยากจ่ายเงิน 200 ดอลลาร์ขึ้นไปสำหรับตัวอ่านและอุปกรณ์ แต่ว่าฟังรุ่นพี่ก่อน...นี่คือตัวเลือกที่ดีสุดแล้ว ตอนที่ผมค้นคว้าทำโปรเจกต์นี้ ผมดูตัวอ่านและเสาอากาศแทบทุกยี่ห้อบนโลกใบนี้ และนี่คือตัวเลือกที่ดีที่สุด มันทำให้การจัดการ RFID ง่ายขึ้น แถมมีเอกสารค่อนข้างดีและเขียนโปรแกรมควบคุมได้ไม่ยาก

ด้วยระบบนี้ ผมสามารถโปรแกรมชื่อนักกีฬาหรือหมายเลขเบอร์ลงในชิปได้ แล้วพอพวกเขาข้ามเส้นชัย ชื่อและเวลาก็จะถูกพิมพ์ออกมา! มันเป็นระบบที่เชื่อถือได้มาก และทำให้การจับเวลาแข่งเล็กๆ เป็นเรื่องง่าย

การจับเวลาการแข่งขันด้วยมือโดยใช้สต็อปวอตช์ มันมีโอกาสเกิดความผิดพลาดจากมนุษย์สูงครับ RFID Race Timer กำจัดปัจจัยมนุษย์ออกไปได้หมด โดยใช้โปรโตคอล Radio Frequency Identification ความถี่ 13.56MHz ทำให้ Arduino สามารถอ่านข้อมูล ระบุตัวตน และประทับเวลาให้กับนักวิ่งหลายสิบคนได้ภายในพริบตา

13.56MHz SPI Communication (MFRC522)

โมดูลยอดนิยมในวงการฮ็อบบีคือ MFRC522 แต่มันไม่เหมือน I2C ที่ใช้แค่ 2 สายนะตัวนี้ มันต้องการ SPI Data Bus (MISO, MOSI, SCK, SS) ความเร็วสูง

  1. The Unique Identifier (UID): แท็กสีฟ้าแบบติดกุญแจหรือการ์ดพลาสติกสีขาวทุกอัน จะมีหมายเลขซีเรียล 4 ไบต์ที่ถูกบันทึกมาจากโรงงานอยู่ข้างใน (เช่น 04 EA F1 2B)
  2. The Database Array: ในโค้ดของเรา เราจะสร้างตารางสำหรับค้นหา (lookup table) ขึ้นมา: String Runner1 = "04 EA F1 2B"; String Runner2 = "7A 9C 11 DE";
  3. The Scan: นักวิ่งมาราธอนจะติดการ์ดสีขาวไว้บนเสื้อของพวกเขา พอพวกเขาวิ่งผ่านซุ้มสแกนเนอร์ขนาดใหญ่ที่เส้นชัย MFRC522 จะปล่อยสนามแม่เหล็กออกมาเพื่อให้พลังงานกับการ์ดที่ไม่มีแบตเตอรี่ จากนั้นชิปก็จะยิง UID ของมันกลับมาทันที!

Sub-Second Timestamping

ตอนที่ Arduino ตรวจจับการ์ดได้ มันต้องบันทึกเวลาให้แม่นยำเป๊ะ

  1. Arduino จะสอบถาม โมดูลนาฬิกาจริง DS3231 (RTC Module) ที่ต่ออยู่
  2. มันจะดึงเวลาที่แน่นอน ชั่วโมง:นาที:วินาที ออกมา แต่ว่าการแข่งขันมันชนะกันที่เศษเสี้ยวของวินาทีเลยนะ!
  3. เพื่อให้ได้ความแม่นยำระดับมิลลิเมตร (เปรียบเทียบ) Arduino จะรวมเวลาจาก RTC เข้ากับค่าออฟเซตจาก millis() เพื่อคำนวณว่า Runner 1 วิ่งเข้าเส้นชัยที่เวลา 14:23:45.342 พอดีเป๊ะ
  4. ระบบจะพิมพ์ข้อมูลนี้ไปที่ Serial terminal โดยตรง หรือเขียนลงไฟล์ CSV ใน การ์ด MicroSD ที่อยู่บนบอร์ด เพื่อให้กรรมการนำไปวิเคราะห์ทีหลังได้เลย! สะดวกจัดๆ

อุปกรณ์ฮาร์ดแวร์สำหรับจับเวลาที่ต้องมี

  • Arduino Mega: จำเป็นเพราะต้องใช้ RAM เยอะๆ สำหรับเก็บฐานข้อมูลนักวิ่งที่อาจจะมากโข
  • โมดูลอ่านเขียน RFID MFRC522
  • โทเคนหรือการ์ด RFID 13.56MHz (ต้องมีให้นักวิ่งทุกคนเลยนะ)
  • โมดูลนาฬิกาจริง DS3231 และโมดูล MicroSD
  • (หมายเหตุ: ระบบจับเวลามาราธอนระดับมืออาชีพเขาจะใช้เครื่องสแกน UHF ที่อ่านการ์ดได้ไกลเป็นสิบฟุตเลย แต่เจ้า RC522 มาตรฐานบ้านๆ นี้ ต้องให้นักวิ่งเอาการ์ดมาแตะใกล้ๆ ราวๆ 3 เซนติเมตรเท่านั้นแหละ)

บทสอนทำโปรเจคกำลังจะมา! (พี่เองก็ยุ่งมาก ไม่ค่อยมีเวลานั่งลงมือเขียนบทสอนเต็มๆ... กำลังค่อยๆ ทำไปตอนว่างๆ เนี่ยแหละ)

นี่คือวิดีโอสาธิตการทำงานของระบบ:

RFID Timing Demo

ตัวกล่อง (Enclosure)

พี่มีกล่องใส่กล้อง SKB i-series เก่าๆ อยู่ตัวนึง เลยเอามาดัดแปลงให้เป็นที่เก็บระบบจับเวลาแทน จะได้มั่นคงและดูโปรขึ้น อีกอย่างคือมันดูเท่ห์กว่า เหมือนระบบของ MyLaps กับ Chronotrack ด้วยแหละ แถมยังทำให้ระบบจัดการง่ายและทนมือมากขึ้นอีก

Timing Box

มีคำถาม ข้อสงสัย หรืออยากคอมเมนต์อะไรไหม?

คอมเมนต์ไว้ด้านล่างได้เลย พี่จะรีบมาตอบให้เร็วที่สุด!

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

apps:
  - "1x Arduino IDE"
author: "jammcooter"
category: ""
components:
  - "1x Jumper wires (generic)"
  - "1x Arduino UNO"
  - "1x UHF RFID tags"
  - "1x Soldering iron (generic)"
  - "1x Toggle Switch, Toggle"
  - "1x SparkFun Simultaneous RFID Reader - M6E Nano"
  - "2x Pushbutton Switch, Momentary"
  - "1x 3D Printer (generic)"
  - "2x Resistor 10k ohm"
description: "ระบบจับเวลาแข่งแบบเทพๆ ที่ใช้ RFID ตรวจจับและระบุตัวนักกีฬาอัตโนมัติ งานจัดไป วัยรุ่นต้องลอง!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles:
  - "https://projects.arduinocontent.cc/51b30159-a5ce-4c8e-a89e-7a772ee889e0.ino"
  - "https://projects.arduinocontent.cc/51b30159-a5ce-4c8e-a89e-7a772ee889e0.ino"
  - "https://projects.arduinocontent.cc/b059f1f9-05e5-4a54-857e-34f3d4195d74.ino"
encryptedPayload: "U2FsdGVkX18FTiuDnU7seEyCzDD/8bu6VTU4YZdnW98Gd7ivr8rCXY5VlmF+vi8fH0MWD3gwcplqaUG0G1qbJhC650QmHjmMIO4bnDKiBCQ="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/rfid-race-timer-06a2f2_cover.jpg"
lang: "en"
likes: 14
passwordHash: "ce7480c02af19ec11894caad0b4825f88fc553056ab00f1c970d173e47eed01f"
price: 1499
seoDescription: "A professional RFID race timing system to track and identify athletes with high precision."
tags:
  - "rfid"
  - "timing"
  - "health"
title: "ระบบจับเวลาวิ่งสุดตึงด้วย RFID งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/ZR0S8E9Uby8"
views: 6916