Sambungkan RC522 ke pin SPI Arduino Uno, baca UID kad, bandingkan dengan senarai dalam sketch anda, kemudian trigger relay module yang menyuis electric strike 12V. RC522 ialah peranti 3.3V β VCC-nya mesti ke pin 3.3V Uno, jangan sekali-kali 5V. Satu library, satu sketch, lebih kurang sepuluh wayar.
Apa yang ada dalam kit RC522, dan apa sebenarnya yang boleh dibacanya?
RC522 dijual di sini sebagai satu set lengkap: PCB reader biru dengan gegelung antena spiral besar terukir pada tembaganya, satu kad RFID putih, satu keyfob biru berbentuk titisan air, dan dua jalur pin header yang masih berasingan β satu lurus, satu bengkok 90 darjah. Tiada satu pun yang disolder siap β panduan solder header pin kami tunjukkan cara memasang header mana yang sesuai dengan enclosure anda.
Reader ini bekerja pada 13.56 MHz atas standard ISO/IEC 14443A β keluarga MIFARE, yang merangkumi kad dan fob dalam kotak serta banyak kad akses pejabat dan kondo β tetapi bukan jenis lama 125 kHz, yang langsung tak dapat dilihat oleh reader ini.
Senarai komponen
Macam mana nak sambung RC522 dan relay ke Arduino Uno?
RC522 berkomunikasi melalui SPI, jadi ia duduk pada pin hardware SPI tetap Uno, dan library MFRC522 memang menjangkakan susunan ini. Biarkan IRQ tanpa sambungan.
| Pin modul | Arduino Uno | Nota |
|---|---|---|
| RC522 SDA (SS) | D10 | Chip select; berlabel SDA pada board ini |
| RC522 SCK | D13 | Clock SPI |
| RC522 MOSI | D11 | Data keluar SPI |
| RC522 MISO | D12 | Data masuk SPI |
| RC522 RST | D9 | Reset |
| RC522 VCC | 3.3V | Jangan sekali-kali 5V β 5V di sini memusnahkan modul |
| RC522 GND | GND | Ground dikongsi |
| Relay IN1 | D7 | Mana-mana pin digital yang lapang |
| Relay DC+ | 5V | Bekalan coil dan opto |
| Relay DCβ | GND | Ground dikongsi |
Talian 3.3V ini satu-satunya peraturan tanpa tolak ansur: had mutlak maksimum chip ini pada setiap pin bekalan ialah 4.0V, jadi 5V pada VCC terus membunuhnya β cara paling biasa orang merosakkan reader ini. Pin logic-nya pun tidak 5V-tolerant secara rasmi β datasheet hadkan pada 0.5V melebihi bekalan, lebih kurang 3.8V β dan walaupun dalam praktiknya modul ini biasa sahaja menahan isyarat SPI 5V dari Uno, level shifter atau perintang siri ringkas ialah penyelesaian ikut buku.
Kunci kekal sebagai litar voltan rendah yang berasingan: positif bekalan 12V masuk ke terminal COM relay, NO keluar ke strike, strike balik ke negatif 12V. Channel relay kedua dibiarkan spare.

Kenapa projek ini guna relay module dan bukan bare relay?
Relay Songle SRD-05VDC-SL-C ialah kiub biru di atas board merah itu, dan kami jual juga sebagai komponen berasingan untuk projek yang ada driver stage sendiri β tetapi tiada bare relay, milik kami atau sesiapa pun, yang boleh dipacu terus dari pin Arduino. Coil 5V-nya berukuran 70 Ξ©, jadi ia menarik lebih kurang 71 mA sedangkan pin I/O Uno dinilai untuk 20 mA sahaja, dan bila coil dimatikan ia menendang balik spike voltan yang lambat-laun akan membawa pin itu sekali.
Sebab itu bare relay perlukan transistor driver dan flyback diode dibina sekelilingnya. Module 2-channel dah sedia ada kedua-duanya, plus optocoupler pada setiap input β itulah sebabnya ia komponen pilihan dalam projek ini. Pin anda hanya memacu LED opto pada beberapa milliamp; module yang uruskan coil.
Macam mana nak elak kunci klik terbuka bila Arduino reset?
Relay module 2-channel ini ada jumper block kecil di sebelah terminal input, bertanda untuk high atau low level trigger, yang menentukan logic level mana yang menarik relay. Ini penting untuk kunci: semasa power-up dan reset, pin Uno terapung sebagai input, input terapung boleh terbaca LOW, dan pada low-level trigger kunci akan klik terbuka setiap kali board di-power-cycle.
Dua tabiat menyelesaikannya: pilih sisi trigger dengan sengaja, sebab high-level trigger membuatkan pin terapung tak berbahaya, dan set keadaan idle pin sebagai perkara pertama dalam setup(), dengan menulis level idle sebelum pinMode(). Panduan keselamatan relay module kami mengupas jumper ini dengan mendalam. Kekalkan kunci pada DC voltan rendah dengan bekalan sendiri β switching bekalan mains tiada tempat dalam projek ini.

Macam mana nak dapatkan UID kad anda dan jalankan sketch?
Library MFRC522 oleh GithubCommunity ialah yang perlu dipasang: Arduino IDE Library Manager, cari MFRC522, pilih entri itu. Upload sketch di bawah tanpa ubah apa-apa, buka Serial Monitor pada 9600 baud dan tap kad anda β ia mencetak UID setiap kad yang dilihatnya, dibenarkan atau tidak. Salin byte itu ke dalam allowedUids, upload semula, dan kad itu kini membuka kunci.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10 // RC522 SDA/SS
#define RST_PIN 9 // RC522 RST
#define RELAY_PIN 7 // IN1 pada relay module
// Padankan dengan jumper trigger anda: LOW/HIGH untuk low-level trigger,
// HIGH/LOW untuk high-level trigger.
#define RELAY_ACTIVE HIGH
#define RELAY_IDLE LOW
#define UNLOCK_MS 3000
MFRC522 mfrc522(SS_PIN, RST_PIN);
// Kad yang dibenarkan, UID 4-byte. Ganti dengan UID yang dicetak sketch ini.
byte allowedUids[][4] = {
{0xDE, 0xAD, 0xBE, 0xEF},
{0x12, 0x34, 0x56, 0x78}
};
const byte allowedCount = sizeof(allowedUids) / sizeof(allowedUids[0]);
// Pulangkan true hanya jika UID yang di-tap sepadan dengan satu baris penuh senarai.
bool isAllowed(byte *uid, byte size) {
if (size != 4) return false; // senarai ini untuk UID 4-byte sahaja
for (byte c = 0; c < allowedCount; c++) {
byte matched = 0;
for (byte i = 0; i < 4; i++) {
if (uid[i] == allowedUids[c][i]) matched++;
}
if (matched == 4) return true;
}
return false;
}
void setup() {
// Letakkan relay pada idle SEBELUM pin jadi output, supaya ia tak
// glitch ke level aktif semasa board sedang start.
digitalWrite(RELAY_PIN, RELAY_IDLE);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, RELAY_IDLE);
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
delay(50);
mfrc522.PCD_DumpVersionToSerial(); // 0x00 atau 0xFF bermakna masalah pendawaian atau bekalan
Serial.println(F("Ready. Tap a card."));
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
// Cetak UID setiap kad, supaya anda boleh kutip UID anda sendiri.
Serial.print(F("UID:"));
for (byte i = 0; i < mfrc522.uid.size; i++) {
if (mfrc522.uid.uidByte[i] < 0x10) Serial.print(F(" 0"));
else Serial.print(F(" "));
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
if (isAllowed(mfrc522.uid.uidByte, mfrc522.uid.size)) {
Serial.println(F("Granted - unlocking"));
digitalWrite(RELAY_PIN, RELAY_ACTIVE);
delay(UNLOCK_MS);
digitalWrite(RELAY_PIN, RELAY_IDLE);
} else {
Serial.println(F("Denied"));
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
Sejujurnya, sejauh mana selamat access control dengan RC522?
UID yang dibandingkan oleh sketch RC522 ini bukan rahsia. Kad menyiarkannya kepada mana-mana reader yang bertanya, sebelum sebarang authentication berlaku, dan kad kosong yang blok UID-nya boleh ditulis semula dijual secara terbuka dengan harga beberapa ringgit sahaja. Dokumentasi library MFRC522 sendiri menyatakannya terus terang: UID tidak boleh dijadikan pengenalan unik untuk projek berkaitan keselamatan.
Membaca sector yang dilindungi pun tidak menyelamatkannya. Cipher Crypto1 pada MIFARE Classic telah dipecahkan secara terbuka sejak 2008, dan penyelidik kemudiannya menunjukkan serangan ciphertext-only yang memulihkan key daripada kad hardened dalam beberapa minit. Pada 2024 Quarkslab menemui backdoor key perkakasan yang dikongsi merentasi satu keluarga penuh chip serasi MIFARE Classic. Crypto1 bukan setakat lemah; ia sudah tamat riwayatnya.
Jadi inilah verdict jujurnya β dan ia langsung bukan alasan untuk berhenti membina. Ini projek RBT atau final-year yang cemerlang, log kehadiran atau akses, laci, locker, kabinet workshop, paparan “siapa ada di bench”, atau pagar yang masih menyimpan kunci fizikal sebagai backup. Ia bukan kunci untuk pintu depan rumah anda, peti keselamatan anda, atau apa-apa yang anda tak sanggup kehilangannya.
Bila threat model-nya serius, credential pun kena serius. Kad seperti MIFARE DESFire menggunakan AES-128 dengan mutual authentication, bukan nombor siri yang disiarkan begitu sahaja, dan itulah yang dipakai sistem pintu komersial. Untuk pintu depan rumah, kunci mekanikal yang bagus plus kamera mengalahkan padanan UID setiap masa.

Kenapa reader tak nampak apa-apa, atau boleh baca tapi tak pernah match?
RC522 tak banyak mod kegagalan dan setiap satu ada tanda tersendiri β sebab itulah sketch ini mencetak versi firmware pada setiap boot.
| Simptom | Punca berkemungkinan | Penyelesaian |
|---|---|---|
| Versi firmware cetak 0x00 atau 0xFF | Pendawaian SPI salah, atau 5V pada VCC | Semak semula D9βD13, pindahkan VCC ke 3.3V; modul yang pernah diberi 5V mungkin sudah mati |
| Versi terbaca elok, tiada kad langsung dikesan | Header belum disolder atau cold joint | Reflow lapan sambungan itu; goyang-goyang wayar tak membuktikan apa-apa |
| Bacaan jalan, kemudian berhenti selepas beberapa tap | 3.3V lemah atau wayar jumper terlalu panjang | Pendekkan wayar bawah 20 cm, kuasakan Uno dari bekalan yang betul, bukan hub laptop |
| UID dicetak tapi akses sentiasa denied | Byte atau panjang tak sepadan dalam senarai | Salin byte yang dicetak betul-betul tepat; kad UID 7-byte perlukan semakan panjang diluaskan |
Kesilapan biasa yang kami nampak daripada pelanggan sebenar
Corak yang paling makan duit ialah RC522 disambung ke 5V ikut kebiasaan, sebab hampir semua modul lain jalan pada 5V. Kegagalannya muncul sebagai versi firmware 0x00 pada board yang elok sejam sebelumnya β diikuti satu petang penuh meragui code yang sebenarnya tiada masalah.
Corak yang makan satu malam pula ialah strike yang tak sehaluan dengan design: diuji di bench dengan relay klik riang-riang, kemudian dipasang pada kunci fail-secure sedangkan plan asal andaikan fail-safe. Putuskan apa yang patut berlaku semasa bekalan elektrik terputus sebelum anda beli strike.
FAQ
Boleh tak saya guna RC522 untuk clone kad akses pejabat atau Touch ‘n Go?
RC522 biasanya boleh membaca UID mana-mana kad 13.56 MHz, dan Touch ‘n Go memang duduk dalam keluarga MIFARE yang sama β tetapi kami tidak akan terbitkan prosedur cloning. Menduplikasi credential yang bukan milik anda adalah urusan pihak yang mengeluarkannya, dan baki stored-value tersimpan dalam sector yang di-encrypt, yang bukan hak anda untuk usik.
Boleh tak RC522 membaca menembusi pintu atau dinding?
Ia boleh membaca menembusi beberapa milimeter bahan bukan logam β kayu, akrilik, atau faceplate 3D-printed β dan begitulah caranya reader disorokkan dalam enclosure. Logam ialah pembunuhnya: pintu logam atau plat belakang logam men-detune antena dan jarak bacaan terus runtuh.
Berapa jarak bacaan sebenar RC522?
Sehingga 50 mm di atas kertas, dan realistiknya 2β4 cm dengan kad putih yang disertakan. Antena keyfob biru yang lebih kecil membaca lebih dekat lagi, dan jarak jatuh lagi bila bekalan kuasa lemah.
Boleh tak saya guna ESP32 sebagai ganti Arduino Uno?
Boleh, malah dari segi elektrik ia padanan yang lebih baik, sebab ESP32 ialah board 3.3V sama macam RC522. Guna pin SPI default β MOSI 23, MISO 19, SCK 18, SS 5 β dengan RST pada mana-mana GPIO lapang. Perbandingan ESP32 vs ESP8266 vs Uno kami mengupas trade-off-nya.
Berapa banyak kad boleh saya simpan dalam senarai yang dibenarkan?
Jauh lebih banyak daripada yang anda perlukan. Setiap UID 4-byte hanya makan empat byte daripada 2 KB RAM ATmega328P, jadi beratus-ratus muat dalam array. Pindahkan senarai ke EEPROM 1 KB chip itu β lebih kurang 250 UID β bila kad perlu kekal selepas bekalan terputus dan boleh didaftarkan tanpa upload semula.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
RFID Full Set Sensor Module 13.56MHz RC522 Card Reader with RFID Card, RFID button Arduino IOT
Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(2WAY)
Power Supply Adapter DC Universal AC to DC Converter PSU 5V2A 5V3A 9V2A 12V2A - P.S. ADAPTOR (12V2A)