กลับไปหน้ารวมไฟล์
rfid-lock-system-with-mfrc522-3707a9.md

ภาพรวม

โปรเจคนี้จะโชว์และสอนวิธีทำระบบล็อคด้วยเทคโนโลยี RFID เป็นทางเลือกด้านความปลอดภัยที่เจ๋งกว่ากุญแจแบบเดิมๆ

โมเดลการทำงานของระบบ

RFID ทำงานยังไง?

ทุกวันนี้แท็ก RFID พบเห็นได้ทั่วไปกว่าแต่ก่อนมาก แม้แต่บัตรเครดิต/เดบิตสมัยนี้ส่วนใหญ่ก็มีระบบ NFC (ซึ่งเป็นส่วนหนึ่งของเทคโนโลยี RFID) สำหรับจ่ายเงินแบบไม่สัมผัสแล้ว

หลักการทำงานของ RFID มันคล้ายๆ กับหม้อแปลงไฟฟ้าเลย คือเมื่อมีสนามแม่เหล็กสลับในขดลวดปฐมภูมิ (Primary Winding) มันก็จะเหนี่ยวนำให้เกิดแรงดันไฟฟ้าสลับในขดลวดทุติยภูมิ (Secondary Winding) ซึ่งนี่แหละคือวิธีจ่ายไฟแบบไร้สาย หลักการเดียวกับการชาร์จไร้สายนั่นเอง

เครดิต : phet.colorado.edu สำหรับการจำลอง

เพียงแต่ในกรณีนี้ ขดลวดทุติยภูมิจะอยู่ภายในบัตร RFID และแรงดันที่ถูกเหนี่ยวนำมาก็จะถูกใช้เพื่อจ่ายไฟให้กับหน่วยความจำและตัวควบคุมภายในบัตร

ส่วนการสื่อสารในเทคโนโลยีนี้เกิดขึ้นเมื่อ IC ในบัตรใช้ทรานซิสเตอร์ลัดวงจรขดลวดในบัตร ซึ่งจะทำให้แรงดันบนขดลวดปฐมภูมิลดลงเล็กน้อย และการลดลงนี่แหละที่ถูกบันทึกเป็นเลขฐานสอง (Binary Digit)

เครดิต : GreatScott!

แล้วโปรเจคนี้มีฟีเจอร์ความปลอดภัยอะไรให้บ้าง?

ไอเดียแรกที่คิดถึงเวลาทำกุญแจก็คือการตั้งรหัสผ่าน (Passcode) ใช่มั้ย? แต่รหัสผ่านเดียวมันเสี่ยงโดนโจมตีได้ ก็เลยอาจจะคิดถึงการเปลี่ยนรหัสผ่านบ่อยๆ ระบบของเรานี้จะสร้างรหัสผ่านแบบสุ่มขึ้นมาใหม่ทุกครั้งที่ปลดล็อคประตู พอรหัสผ่านถูกใช้แล้วก็จะถูกทิ้งไปเลย ใช้ได้ครั้งเดียวจบ ระบบแบบนี้ก็ใช้ในกุญแจรีโมทรถยนต์เหมือนกันนะ ที่มันจะสร้างรหัสคำสั่งใหม่ทุกครั้งที่ปลดล็อครถ เผื่อมีใครแอบอัดเสียงรหัสเก่าไว้ก็จะใช้เปิดรถไม่ได้

ระบบนี้เขาเรียกว่า Rolling Codes

แต่ปัญหาของการเอามาใช้กับแท็ก RFID คือมันป้องกันไม่พอหรอก กุญแจรถส่งสัญญาณวิทยุ ถ้าจะอัดเสียงมันต้องมีอุปกรณ์เฉพาะทาง แต่สำหรับแท็ก RFID นี่ สมาร์ทโฟนที่มี NFC อ่านข้อมูลทั้งหมดในแท็กได้สบายๆ แถมไม่ต้องให้บัตรแตะโทรศัพท์เลย แค่ลอยห่างไม่เกิน 1 นิ้วก็อ่านได้แล้ว หมายความว่าถ้าใส่ไว้ในกระเป๋ากางเกงหรือกระเป๋าสตางค์ ก็ยังโดนอ่านได้อยู่ดี เราจะเข้ารหัส (Encrypt) บัตรก็ได้ แต่โมดูล RFID ส่วนใหญ่สำหรับ Arduino มันถอดรหัส (Decrypt) ไม่ได้น่ะสิ

แต่ยังไงก็ตาม เราก็มีทางออกสำหรับปัญหานี้อยู่นะ

แท็ก RFID ทุกอันจะมีข้อมูลเริ่มต้นที่ผู้ผลิตเขียนไว้ก่อนส่งออกขาย เช่น ประเภท PICC, UID, คีย์ (Key) โดยเฉพาะ UID หรือ Unique ID นี่แหละเป็นวิธีที่ดีในการตรวจสอบซ้ำว่ามันเป็นบัตรใบเดิมรึเปล่า มันคือ UID ขนาด 4 ไบต์ หน้าตาประมาณนี้: F6 25 5C 11 เพราะมันมี 4 ไบต์ หรือ 32 บิต ก็แปลว่าจะมีค่าที่เป็นไปได้ทั้งหมด 4,294,967,296 แบบ โอกาสที่สองแท็กจะมี UID ซ้ำกันเป๊ะๆ นี่แทบไม่มีเลย แต่มันมีข้อแม้นะ! เราสามารถเขียนโค้ดบน Arduino เพื่อเปลี่ยน UID ได้ เพราะงั้นถ้ามีคนอ่านข้อมูลทั้งหมดในบัตร รวมทั้งรหัสผ่านและ UID ออกมาได้ เขาก็สามารถใช้ข้อมูลนั้นโคลนบัตรใบใหม่ได้สบาย

ข่าวดีคือ มีแท็ก RFID หลายประเภทที่เปลี่ยน UID ไม่ได้ เพราะผู้ผลิตเขากำหนด UID และชื่อรุ่น (Model Name) ลงในหน่วยความจำแบบตายตัว (Hard Coded) ไปแล้ว หนึ่งในนั้นก็คือซีรีย์ MIFARE Classic ของ NXP ซึ่งบังเอิญว่ารุ่นพี่มีอยู่พอดีนี่แหละ มาจัดไปวัยรุ่น!

สรุปง่ายๆ ก็คือเราต้องตรวจสอบชื่อโมเดลก่อน จากนั้นค่อยเช็ค UID เพราะถ้าโมเดลเป็น MIFARE Classic แสดงว่า UID น่าจะเป็นของแท้ ไม่ได้ถูกแกะดัดแปลง หลังจากนั้นก็ค่อยตรวจสอบรหัสผ่านอีกที กลายเป็นระบบป้องกันสามชั้นแบบจัดเต็มไปเลย

การดึงค่า UID แบบฐานสิบหก (Hexadecimal)

มันไม่ใช่แค่สแกนบัตรแล้วประตูก็เปิดนะน้อง! ตัวอ่าน MFRC522 มันอ่านข้อมูลจากบล็อคที่เข้ารหัสไว้แน่นหนาขนาด 4 ไบต์

  1. การจับมือ SPI (The SPI Handshake): ต้องต่อโมดูล MFRC522 ด้วยพิน SPI ตามกฎตายตัวเลย (MISO: พิน 12, MOSI: พิน 11, SCK: พิน 13)
  2. ผู้ใช้ก็เอา "บัตรพลาสติกสีฟ้าใบจิ๋ว" ของเค้ามาแตะที่เครื่องอ่าน
  3. เครื่องอ่านจะปล่อยสนามแม่เหล็กไฟฟ้าออกมา เพื่อให้พลังงานกับชิปจิ๋วๆ ในบัตร บัตรก็จะตอบกลับมาว่า: 0xDE 0xAD 0xBE 0xEF
  4. กับดักตรรกะ C++ (The C++ Logic Trap):
    if (uid == "DEADBEEF") {
      UnlockDoor();
    } else {
      TriggerAlarm();
    }
    

การควบคุมโซลินอยด์ (ล็อคประตู 12V)

ล็อคประตูพวกนี้ต้องการพลังกายระดับเทพ

  • ล็อคโซลินอยด์ 12V นี่คือแท่งเหล็กยักษ์ที่ขวางกรอบประตูไว้
  • Arduino จะสั่งงานด้วยคำสั่ง digitalWrite(RelayPin, LOW);
  • บอร์ดรีเลย์แบบกลไก 5V จะ "คลิก!" แล้วปล่อยกระแส 12 โวลต์ / 1.5 แอมป์ เข้าไปในขดลวดโซลินอยด์
  • แม่เหล็กไฟฟ้ายักษ์จะทำงานทันที ดึงแท่งเหล็กให้ถอยกลับเข้าไปในตัวเรือน ฝืนแรงสปริงสุดโหด! ประตูก็จะปลดล็อค!
  • หลังจาก 5 วินาที Arduino จะปล่อยรีเลย์ แรงสปริงก็จะดีดแท่งเหล็กกลับไปล็อคตำแหน่งเดิมแบบสุดแรง!

อุปกรณ์ฮาร์ดแวร์สำหรับประกอบ

  • Arduino Uno/Nano
  • บอร์ดเครื่องอ่าน MFRC522 13.56MHz
  • ล็อคตู้หรือล็อคประตูแบบโซลินอยด์ 12V
  • โมดูลรีเลย์แบบแยกแสง (Optically-Isolated) 5V
  • อะแดปเตอร์ไฟเลี้ยง 12V กระแสสูง (อะแดปเตอร์ 12V 500mA ธรรมดาๆ นี่แรงไม่พอจะดึงล็อคเหล็กหนักๆ นะ อย่าเอามาใช้!)

การนำไปใช้งาน

ระบบนี้เอาไปใช้กับประตูบ้าน, ตู้นิรภัย หรือจะไม่ใช้กับประตูก็ได้ เอาไปทำเป็นบัตรประจำตัวส่วนตัวแบบ RFID ก็ได้นะ เช่น บัตรที่ให้สิทธิ์เข้าได้เฉพาะที่ทำงานของตัวเอง

แอปพลิเคชันเกือบทุกอย่าง จำกัดแค่ที่จินตนาการของเราเท่านั้นแหละ สู้งานนะน้อง!

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

apps:
  - "1x Arduino IDE"
author: "devansh_tangri"
category: ""
components:
  - "1x Buzzer"
  - "1x General Purpose Transistor NPN"
  - "1x Jumper wires (generic)"
  - "1x Resistor 1k ohm"
  - "1x Arduino Mega 2560"
  - "1x RFID reader (generic)"
  - "1x Hot glue gun (generic)"
  - "1x Soldering iron (generic)"
  - "1x SG90 Micro-servo motor"
description: "มาแกะกล่องสร้างระบบล็อคใช้บัตร/คีย์การ์ด RFID กัน! ใช้ MFRC522 Module จับคู่กับ Arduino ควบคุม Servo Motor ให้ปลดล็อคแบบเทพๆ งานนี้ทั้งสนุกและได้ใช้จริง จัดไปเลยวัยรุ่น!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX19EkQJwyGEJqwaUNZsMB4OCu0DTUSC6oCAzzGDF6y8+3rNVXB1Q4LOv9y+D7zDXwc2nCjDJ+iIl3M0agZryjOrajiiwmuS0eoU="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/rfid-lock-system-with-mfrc522-3707a9_cover.gif"
lang: "en"
likes: 0
passwordHash: "adaea47d501b10988b18c6fe9ba210177d81d4a89dec838a80e66d861f2ddd62"
price: 299
seoDescription: "Build your own RFID Lock System using MFRC522 RFID Module and Arduino. A step-by-step guide for secure access control projects."
tags:
  - "rfid"
  - "energy efficiency"
  - "home automation"
  - "security"
  - "nfc"
title: "ระบบล็อคสุดตึงด้วย RFID MFRC522 (งานง่ายแต่หล่อ!)"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/shorts"
  - "https://www.youtube.com/embed/clip"
views: 8162