หน้าแรก ดูโปรเจกต์ทั้งหมด
Easy

โปรเจกต์ ระบบเช็คชื่อ RFID ที่ใช้ Arduino Uno R4 Wi-Fi

ระบบเช็คชื่อ RFID แบบอัตโนมัติและชาญฉลาด ขับเคลื่อนด้วย Arduino Uno R4 Wi-Fi ที่ติดตามการเข้างาน เวลา และสรุปผลแบบ Real-time!

โปรเจกต์ ระบบเช็คชื่อ RFID ที่ใช้ Arduino Uno R4 Wi-Fi
4,277 การดู
2 ถูกใจ

รายการอุปกรณ์และเครื่องมือ

1x Jumper Wires (Generic)
🛒 สั่งซื้อ
1x 20x4 I2C LCD display
🛒 สั่งซื้อ
1x Arduino UNO R4 WiFi LED Matrix
🛒 สั่งซื้อ
1x RFID Module (RC522)
🛒 สั่งซื้อ

แอปพลิเคชันและแพลตฟอร์ม

1x Arduino IDE 2.0 (beta)
เว็บ Official

รายละเอียดและวิธีทำ

Introduction

แม้ว่าจะเป็นส่วนประกอบสำคัญของการดำเนินงานในแต่ละวันในที่ทำงาน โรงเรียน และมหาวิทยาลัย แต่การเช็คชื่อเข้าเรียนหรือเข้างานมักจะน่าเบื่อและอาจเกิดข้อผิดพลาดจากมนุษย์ได้ง่าย ด้วยระบบอัตโนมัติและการบันทึกข้อมูลแบบ real-time ระบบเช็คชื่อด้วย RFID บนพื้นฐานของ Arduino UNO R4 Wi-Fi จึงเป็นทางเลือกที่ทันสมัยและมีประสิทธิภาพ

เทคนิคนี้ช่วยให้การเช็คชื่อทำได้ง่ายขึ้นโดยใช้เทคโนโลยี RFID (Radio Frequency Identification) นักเรียนทุกคนจะได้รับบัตร RFID ซึ่งระบบจะประทับตราว่าเป็น "Present - On Time" (มาเรียน - ตรงเวลา) หากมีการสแกนภายในสิบนาทีแรกหลังจากเปิดเครื่อง ส่วนนักเรียนที่ไม่สแกนจะถูกทำเครื่องหมายว่าขาดเรียนทันที ในขณะที่ผู้ที่สแกนหลังจากผ่านไปสิบนาทีจะถูกเปลี่ยนสถานะเป็น "Present - Late" (มาเรียน - สาย)

นอกจากนี้ ระบบยังมีบัตร Master Card ของครู ซึ่งเมื่อสแกนแล้วจะแสดงสรุปการเช็คชื่อของนักเรียนทุกคนที่ลงทะเบียนไว้บนหน้าจอ 20x4 I2C LCD

โปรเจกต์นี้เป็นการรวมกันของระบบอัตโนมัติและ electronics เพื่อมอบโซลูชันการเช็คชื่ออัจฉริยะที่ใช้งานได้จริง ซึ่งเหมาะสำหรับ:

  1. การเช็คชื่ออัตโนมัติโดยไม่ต้องขานชื่อในโรงเรียนและมหาวิทยาลัย
  1. โปรแกรมการฝึกอบรมและ Workshop: วิธีง่ายๆ ในการตรวจสอบการเข้างานของพนักงาน
  1. การเช็คอินที่รวดเร็วด้วย RFID สำหรับการสัมมนาและกิจกรรมต่างๆ
  1. การปรับปรุงในอนาคตอาจรวมถึงการซิงค์กับฐานข้อมูล Cloud เพื่อให้สามารถบันทึกข้อมูลออนไลน์ไปยัง Google Sheets และแพลตฟอร์มอื่นๆ หรือการรวมการเข้าถึง Wi-Fi เข้ากับ Module ในตัวของ Arduino Uno R4 Wi-Fi

Components Required

1. Arduino UNO R4 Wi-Fi: Arduino รุ่นล่าสุดที่มีประสิทธิภาพการประมวลผลเพิ่มขึ้นและมี Wi-Fi ในตัว ช่วยให้ขยายขีดความสามารถได้ง่าย เพิ่มความเร็ว และความเสถียรสำหรับการรวมระบบ IoT ในอนาคต

2. MFRC522 RFID Module: ใช้การเชื่อมต่อแบบ SPI เพื่อค้นหาและอ่าน UID บนบัตร RFID เป็นวิธีการระบุบัตรแต่ละใบที่รวดเร็วและประหยัดค่าใช้จ่าย

3. RFID Tags: แต่ละใบแทน ID ของนักเรียนที่แตกต่างกัน เป็นวิธีการระบุตัวตนที่ง่าย ทนทาน และนำกลับมาใช้ใหม่ได้

4. 20x4 I2C LCD: แสดงการอัปเดตตัวนับเวลาแบบ real-time, ข้อความ และชื่อนักเรียน อินเทอร์เฟซแบบ I2C ช่วยเพิ่มความน่าเชื่อถือและลดความยับเยินของสายไฟ

5. Jumper Wires: เชื่อมต่อส่วนประกอบทั้งหมดเข้าด้วยกันอย่างปลอดภัย รับประกันการไหลของสัญญาณที่คงที่โดยไม่จำเป็นต้องบัดกรี

How This System Works

Arduino Uno R4 Wi-Fi จะเริ่มต้นการทำงานของ LCD และ RFID Module เมื่อเปิดเครื่อง ระบบจะเริ่มจับเวลาถอยหลัง 10 นาทีเพื่อระบุช่วงเวลาที่เปิดให้เช็คชื่อ

นี่คือคำอธิบายโดยละเอียดเกี่ยวกับการทำงานของระบบ:

1. System Initialization: "Ready for Attendance" คือข้อความทักทายที่ปรากฏบน LCD เมื่อเปิดระบบ Arduino จะบันทึกเวลาปัจจุบัน ณ เริ่มต้นเซสชัน

2. RFID Tag Scanning: Arduino จะเปรียบเทียบ Unique Identifier (UID) ที่ Module RC522 อ่านได้จากบัตร RFID ของนักเรียนกับรายการ UID ที่ลงทะเบียนไว้ซึ่งจัดเก็บไว้ในหน่วยความจำ

3. Update on Attendance Status:

นักเรียนจะถูกทำเครื่องหมายเป็น "Present – On Time" หากสแกนบัตรภายในสิบนาที

จะถูกบันทึกเป็น "Present – Late" หากทำการสแกนหลังจากผ่านไปสิบนาที

เมื่อสแกนบัตรของครูแล้ว นักเรียนที่ไม่ได้สแกนจะถูกระบุว่าขาดเรียนโดยอัตโนมัติ

4. Teacher Summary Card: สรุปการเช็คชื่อจะถูกเปิดใช้งานโดยบัตร RFID ของครู หน้าจอ LCD จะแสดงชื่อนักเรียนแต่ละคนและสถานะการเข้าเรียน (ขาด, สาย หรือ ตรงเวลา) ตามลำดับ

5. Wi-Fi Extension (Optional): การตรวจสอบการเช็คชื่อจากระยะไกลแบบ real-time สามารถทำได้ด้วย Arduino Uno R4 Wi-Fi ซึ่งช่วยให้สามารถส่งข้อมูลไปยัง Cloud server, ฐานข้อมูลออนไลน์ หรือแม้แต่ Google Sheets ในภายหลัง

ด้วยการกำจัดการใช้แผ่นรายชื่อแบบเขียนด้วยมือ โซลูชันนี้จึงรับประกันความแม่นยำ ความโปร่งใส และประสิทธิภาพ

Steps to Build the Project

Step 1: Circuit Connections

เชื่อมต่อ MFRC522 RFID Module เข้ากับ Arduino Uno R4 Wi-Fi

  1. SDA เข้ากับ D10
  1. SCK เข้ากับ D13
  1. MOSI เข้ากับ D11
  1. MISO เข้ากับ D12
  1. RST เข้ากับ D9
  1. 3.3v เข้ากับ 3.3v
  1. GND เข้ากับ GND

เชื่อมต่อหน้าจอ 20x4 I2C LCD

  1. SDA เข้ากับ A4
  1. SCL เข้ากับ A5
  1. VCC เข้ากับ 5v
  1. GND เข้ากับ GND

Step 2: Upload The Code

Upload Code ของคุณโดยใช้ Arduino IDE ตรวจสอบให้แน่ใจว่าได้ติดตั้ง Library ต่อไปนี้แล้ว:

  1. MFRC522.h
  1. LiquidCrystal.h.

/* ระบบเช็คชื่อด้วย RFID สำหรับผู้เริ่มต้น (RC522 + 20x4 I2C LCD)

สำหรับ Arduino Uno R4 Wi-Fi (pinout เหมือนกับบอร์ดที่รองรับ UNO)

การต่อสาย (Arduino UNO/R4):

RC522: SDA(SS)=D10, SCK=D13, MOSI=D11, MISO=D12, RST=D9, 3.3V, GND

I2C LCD: SDA=A4, SCL=A5, VCC=5V, GND=GND

การเปลี่ยนแปลงในเวอร์ชันนี้:

- ลบ UID ที่ซ้ำกันออก

- อัปเดตรายชื่อนักเรียนเป็นชื่อใหม่

*/

#include <Wire.h>

#include <SPI.h>

#include <MFRC522.h>

#include <LiquidCrystal_I2C.h>

#define SS_PIN 10 // SDA/SS สำหรับ RC522

#define RST_PIN 9 // RST สำหรับ RC522

#define LCD_ADDR 0x27

#define LCD_COLS 20

#define LCD_ROWS 4

MFRC522 rfid(SS_PIN, RST_PIN);

LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLS, LCD_ROWS);

// UID ของครู (ตัวพิมพ์ใหญ่, ไม่มีช่องว่าง)

const char TEACHER_UID[] = "2A7E17B1";

// 10 นาที = 10 * 60 * 1000 มิลลิวินาที

const unsigned long ATTENDANCE_LENGTH = 10UL * 60UL * 1000UL;

// เวลา debounce เพื่อป้องกันการอ่านบัตรใบเดิมซ้ำหลายครั้งอย่างรวดเร็ว

const unsigned long DEBOUNCE = 1000UL;

// ระยะเวลาแสดงข้อมูลนักเรียน (ms)

const unsigned long SHOW_MS = 1500UL;

// อัตราการรีเฟรชสำหรับตัวนับเวลา (ms)

const unsigned long REFRESH_MS = 500UL;

// --- รายการ UID นักเรียนและชื่อที่ตรงกัน ---

// ลบ UID ที่ซ้ำกันแล้ว — ตรวจสอบให้แน่ใจว่า UID ทั้งหมดที่นี่ไม่ซ้ำกัน (ตัวพิมพ์ใหญ่, ไม่มีช่องว่าง)

const char* uids[] = {

"E2D2D500",

"49F1DF00",

"5C55D500",

"827ED600",

"310AF400",

"D7CFE000",

"23370EAA",

"7EB6F300",

"D784D500"

};

const char* names[] = {

"Amanjeet Kaur",

"Siddharth Verma",

"Meera Patel",

"Arjun Khanna",

"Neha Rathi",

"Vikram Singh",

"Simran Kaur",

"Ritik Sharma",

"Kavya Menon"

};

const int NUM = sizeof(uids) / sizeof(uids[0]);

// สถานะการเช็คชื่อ: 0=ขาด, 1=ตรงเวลา, 2=สาย

uint8_t attendance[NUM];

// ตัวแปรสำหรับเวลา

unsigned long startTime = 0;

bool windowStarted = false;

// ตัวช่วยสำหรับ debounce และการรีเฟรชหน้าจอ

String lastUID = "";

unsigned long lastUIDTime = 0;

unsigned long lastRefresh = 0;

void setup() {

Serial.begin(9600);

while (!Serial) { } // รอ Serial บนบางบอร์ด ไม่มีผลกับ UNO/R4

SPI.begin();

rfid.PCD_Init();

lcd.init();

lcd.backlight();

lcd.clear();

// ข้อความต้อนรับ

lcd.setCursor(0, 0);

lcd.print("Welcome to the");

lcd.setCursor(0, 1);

lcd.print("RFID attendance");

lcd.setCursor(0, 2);

lcd.print("system");

delay(2000);

// เริ่มช่วงเวลาเช็คชื่อ

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Ready for attendance");

startTime = millis();

windowStarted = true;

// กำหนดให้ทุกคนขาดเรียนในตอนเริ่มต้น

for (int i = 0; i < NUM; i++) attendance[i] = 0;

// แสดงตัวนับเวลาเริ่มต้นทันที

updateTimerOnLCD();

Serial.println("Attendance started.");

}

void loop() {

unsigned long now = millis();

// อัปเดตตัวนับเวลาถอยหลังเป็นระยะ

if (now - lastRefresh >= REFRESH_MS) {

updateTimerOnLCD();

lastRefresh = now;

}

// ตรวจสอบว่ามีการสแกนบัตรใหม่หรือไม่

if (!rfid.PICC_IsNewCardPresent()) return;

if (!rfid.PICC_ReadCardSerial()) return;

// สร้าง String ของ UID (HEX ตัวพิมพ์ใหญ่, ไม่มีช่องว่าง)

String uid = "";

for (byte i = 0; i < rfid.uid.size; i++) {

if (rfid.uid.uidByte[i] < 0x10) uid += "0";

uid += String(rfid.uid.uidByte[i], HEX);

}

uid.toUpperCase();

// การทำ debounce แบบง่าย: เพิกเฉยหากสแกนบัตรเดิมภายในเวลา DEBOUNCE ms

if (uid == lastUID && (now - lastUIDTime) < DEBOUNCE) {

rfid.PICC_HaltA();

rfid.PCD_StopCrypto1();

return;

}

lastUID = uid;

lastUIDTime = now;

Serial.print("Card scanned: ");

Serial.println(uid);

// บัตรครู -> แสดงสรุปของนักเรียนทุกคน

if (uid == String(TEACHER_UID)) {

showSummary();

rfid.PICC_HaltA();

rfid.PCD_StopCrypto1();

updateTimerOnLCD();

return;

}

// ค้นหาลำดับของนักเรียน

int idx = findIndex(uid.c_str());

if (idx < 0) {

// บัตรที่ไม่รู้จัก

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Unknown card:");

lcd.setCursor(0,1);

lcd.print(uid);

lcd.setCursor(0,3);

lcd.print("Not registered");

Serial.println("Unknown UID - not registered.");

delay(SHOW_MS);

updateTimerOnLCD();

rfid.PICC_HaltA();

rfid.PCD_StopCrypto1();

return;

}

// หากเช็คชื่อไปแล้ว ให้แสดงสถานะอีกครั้ง

if (attendance[idx] != 0) {

showStudent(idx);

delay(SHOW_MS);

updateTimerOnLCD();

rfid.PICC_HaltA();

rfid.PCD_StopCrypto1();

return;

}

// ตรวจสอบว่าสแกนภายในช่วงเวลาเช็คชื่อหรือไม่

bool onTime = windowStarted && ((now - startTime) <= ATTENDANCE_LENGTH);

if (onTime) attendance[idx] = 1; // ตรงเวลา

else attendance[idx] = 2; // สาย

// แสดงข้อมูลนักเรียน

showStudent(idx);

delay(SHOW_MS);

updateTimerOnLCD();

rfid.PICC_HaltA();

rfid.PCD_StopCrypto1();

}

// ค้นหาลำดับของ uid ใน uids[]; คืนค่า -1 หากไม่พบ

int findIndex(const char* uid) {

for (int i = 0; i < NUM; i++) {

if (strcmp(uids[i], uid) == 0) return i;

}

return -1;

}

// แสดงหน้าจอพร้อมเช็คชื่อและเวลาที่เหลือ

void updateTimerOnLCD() {

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Ready for attendance");

if (windowStarted) {

long elapsed = (long)(millis() - startTime);

long remaining = (long)ATTENDANCE_LENGTH - elapsed;

if (remaining > 0) {

unsigned long seconds = remaining / 1000UL;

unsigned int mins = seconds / 60UL;

unsigned int secs = seconds % 60UL;

lcd.setCursor(0,1);

// พิมพ์ "Time left: mm:ss" พร้อมเลขศูนย์นำหน้าสำหรับวินาที

lcd.print("Time left: ");

if (mins < 10) lcd.print('0');

lcd.print(mins);

lcd.print(':');

if (secs < 10) lcd.print('0');

lcd.print(secs);

} else {

lcd.setCursor(0,1);

lcd.print("Attendance closed");

}

} else {

lcd.setCursor(0,1);

lcd.print("Window not set");

}

// เคลียร์บรรทัดล่างเพื่อความสะอาดตา

lcd.setCursor(0,2); lcd.print(" ");

lcd.setCursor(0,3); lcd.print(" ");

}

// แสดงข้อมูลนักเรียนหนึ่งคนบน LCD

void showStudent(int i) {

lcd.clear();

lcd.setCursor(0,0);

lcd.print(names[i]); // ชื่อ

lcd.setCursor(0,1);

lcd.print("Present");

lcd.setCursor(0,2);

if (attendance[i] == 1) {

lcd.print("ON time");

Serial.print(names[i]); Serial.println(" -> ON time");

} else {

lcd.print("Came late");

Serial.print(names[i]); Serial.println(" -> Came late");

}

}

// แสดงสรุปทีละคนสำหรับครู (ชื่อ + มา/ขาด + ตรงเวลา/สาย)

void showSummary() {

for (int i = 0; i < NUM; i++) {

lcd.clear();

lcd.setCursor(0,0);

lcd.print(names[i]);

if (attendance[i] == 0) {

lcd.setCursor(0,1);

lcd.print("Absent");

Serial.print(names[i]); Serial.println(": Absent");

} else if (attendance[i] == 1) {

lcd.setCursor(0,1);

lcd.print("Present");

lcd.setCursor(0,2);

lcd.print("ON time");

Serial.print(names[i]); Serial.println(": Present (ON time)");

} else {

lcd.setCursor(0,1);

lcd.print("Present");

lcd.setCursor(0,2);

lcd.print("Late");

Serial.print(names[i]); Serial.println(": Present (Late)");

}

delay(2500); // หยุดรอ 2.5 วินาทีต่อคน

}

}

Step 3: Register Your RFID Tags

นักเรียนทุกคนจะได้รับ RFID tag ใน Code ให้ทำการอัปเดตชื่อและ UID ของพวกเขา

Step 4: Power On and Start Attendance

ระบบจะเริ่มตัวนับเวลา 10 นาทีทันทีที่เปิดเครื่อง ในช่วงเวลานี้ ให้สแกนบัตรเพื่อรับสถานะ "On Time" การสแกนหลังจากนั้นจะถูกติดสถานะว่าสายตามความเหมาะสม

Step 5: View Summary

หากต้องการดูสรุปการเช็คชื่อโดยละเอียดของนักเรียนทุกคนบนหน้าจอ LCD ให้ใช้บัตรของครูสแกน

Taking the Project to the Next Level - WithJUSTWAY

แม้ว่าระบบเช็คชื่อ Arduino ของคุณจะทำงานได้อย่างสมบูรณ์แบบบน Breadboard แต่มันอาจจะดูไม่เป็นมืออาชีพเมื่อคุณนำไปแสดงในงานเดโม่สำหรับนักลงทุน งานแฟร์เทคโนโลยี หรือการแข่งขัน

การนำเสนอเป็นสิ่งสำคัญ และ JUSTWAY ช่วยคุณในเรื่องนี้ได้

JUSTWAY ช่วยให้คุณเปลี่ยนโปรเจกต์ DIY ของคุณให้กลายเป็นต้นแบบคุณภาพสูงที่ให้ความรู้สึกและรูปลักษณ์เหมือนผลิตภัณฑ์จริงที่พร้อมสำหรับตลาด

Why JUSTWAY is the Perfect Choice

Rapid Prototyping

  1. การติดตามการผลิตตลอด 24 ชั่วโมง
  1. การติดตามการผลิตแบบ real-time
  1. เหมาะสำหรับนักเรียนและนักประดิษฐ์ที่มีกำหนดเวลาที่กระชั้นชิด

CNC Machining (Aluminum 6061 / Stainless Steel 304)

  1. มอบเคสที่แข็งแรงและมีความแม่นยำสูง
  1. ทำให้โปรเจกต์ของคุณมีตัวบอดี้ระดับอุตสาหกรรมพรีเมียม

Sheet Metal Fabrication

  1. แผ่นโลหะตัดด้วยเลเซอร์และดัดด้วย CNC
  1. มีตัวเลือกสำหรับการเคลือบผิวด้วยสีฝุ่น (Powder coating)
  1. เหมาะสำหรับการสร้างตัวเครื่องระบบเช็คชื่อของคุณอย่างสวยงาม

Injection Molding

  1. เปลี่ยนจากตัวต้นแบบไปสู่การผลิตจำนวนมาก
  1. เคสพลาสติกคุณภาพสูงที่ออกแบบมาโดยเฉพาะ

Urethane Casting

  1. เหมาะสำหรับการผลิตจำนวนน้อย
  1. มอบชิ้นงานระดับมืออาชีพสำหรับโมเดลจัดแสดง

3D Printing (SLA & HPA-PA12)

  1. SLA Resin: แสดงอุปกรณ์อิเล็กทรอนิกส์ภายในด้วยความสวยงามและโปร่งใส
  1. HP-PA12 Nylon: ทนทานและมีอายุการใช้งานยาวนาน

Pro Tip: Resin แบบใสจะช่วยโชว์วงจรของคุณ ส่วนสีดำด้าน (Matte black) จะช่วยให้ดูทันสมัยและโฉบเฉี่ยว

How To Order in 4 Easy Steps

Step 1 Upload Your CAD Files at JUSTWAY.com

เริ่มต้นด้วยการอัปโหลดไฟล์ STL หรือ STEP ของคุณ

Step 2 Select Material & Finish

เลือกจากพลาสติก เรซิน หรือโลหะ ขึ้นอยู่กับการออกแบบของคุณ

Step 3 Preview Your Model in 3D

ตรวจสอบขนาดแบบ live เพื่อให้แน่ใจว่าพอดีก่อนการผลิตจริง

Step 4 Place Your Order

ราคาที่โปร่งใส จัดส่งรวดเร็ว และไม่มีค่าธรรมเนียมแอบแฝง

Conclusion

ระบบเช็คชื่อด้วย RFID บนพื้นฐานของ Arduino Uno R4 Wi-Fi เป็นการสาธิตที่ทรงพลังว่าระบบอัตโนมัติและ IoT สามารถทำให้งานบริหารจัดการในแต่ละวันง่ายขึ้นได้อย่างไร ด้วยการรวมเทคโนโลยี RFID, การแสดงผลผ่าน LCD และตรรกะตามเวลา ระบบนี้จะช่วยให้มั่นใจได้ถึงการเช็คชื่อที่แม่นยำและป้องกันการทุจริต ด้วย JUSTWAY คุณสามารถยกระดับโปรเจกต์นี้จากตัวต้นแบบไปสู่ผลิตภัณฑ์ระดับมืออาชีพที่ผสมผสานทั้งฟังก์ชันการทำงาน การออกแบบ และความทนทาน ไม่ว่าจะสำหรับโรงเรียน งานนิทรรศการ หรือสตาร์ทอัพ ระบบนี้คือประตูสู่การสร้างนวัตกรรมในโลกแห่งความเป็นจริงของคุณ

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: arduino-uno-r4-wi-fi-based-rfid-attendance-system-f259ea
2450 บาท
PromptPay QR Code

ประเมิน Project

อยากได้งานคล้ายโปรเจคนี้? กดไปหน้าประเมินราคา

เอาฟอร์มยาวออกจากท้ายหน้า Project แล้ว เหลือเป็นปุ่มให้กดไปกรอกหน้าเดียว ตัวใหญ่ เว้นบรรทัดเยอะ อ่านง่ายกว่า

รีวิวจากคนใช้งานจริง

รีวิวจากลูกค้าและคนที่เคยใช้งาน

ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย

กำลังโหลดรีวิว...