Cara Memakai RFID RC522: Membaca Kartu dengan Arduino dan Kunci Pintu Berkartu
Bagaimana cara kerja modul RFID RC522? Kartu dan gantungan kunci 13,56 MHz, pengkabelan SPI 3,3 V, library MFRC522, membaca UID, mengecek kartu yang diizinkan, kunci pintu servo, serta pemakaian di ESP32 dan Pico.
RFID (Radio Frequency IDentification) adalah teknologi yang mengenali kartu atau gantungan kunci lewat gelombang radio tanpa menyentuh pembacanya. Kartu transportasi, kartu akses kantor, label anti-maling di toko, dan microchip hewan peliharaan semuanya memakai RFID. RC522 adalah modul pembaca murah yang bekerja di 13,56 MHz, biasanya dijual bersama kartu putih dan gantungan kunci biru. Modul ini menjadi dasar banyak proyek, dari kunci pintu berkartu sampai sistem absensi.

Bagaimana cara kerja RFID?
Antena tembaga di board pembaca membuat medan magnet 13,56 MHz. Di dalam kartu atau gantungan kunci ada kumparan tipis dan chip kecil, tetapi tidak ada baterai. Ketika kartu mendekati medan itu, energi yang terinduksi di kumparan memberi daya ke chip, lalu chip mengirim identitas dan datanya kembali ke pembaca dengan mengubah medan itu sedikit sekali. Itulah sebabnya kartu bisa bekerja bertahun-tahun tanpa pernah dicas, tetapi dengan RC522 jarak bacanya hanya sekitar 3–5 sentimeter.
Kartu di kit biasanya MIFARE Classic 1K: memori 1 KB-nya dibagi menjadi 16 sektor, masing-masing terdiri dari 4 blok berukuran 16 byte. Setiap kartu punya UID (pengenal unik) yang ditulis di pabrik, biasanya sepanjang 4 byte. Sebagian besar proyek sederhana mengenali kartu dengan membaca UID ini, bukan dengan menulis data ke kartu.
Spesifikasi RC522
| Fitur | Nilai |
|---|---|
| Frekuensi kerja | 13,56 MHz |
| Catu daya | 3,3 V (bukan 5 V) |
| Konsumsi arus | 13–26 mA |
| Jarak baca | Sekitar 3–5 cm (tergantung kartunya) |
| Kartu yang didukung | MIFARE Classic 1K/4K, Ultralight, NTAG (ISO 14443A) |
| Antarmuka | SPI (chip-nya juga mendukung I2C dan UART) |
Pengkabelan RC522 (SPI)
RC522 berkomunikasi dengan board lewat SPI. Pin SCK, MOSI, dan MISO harus masuk ke pin SPI tetap di setiap board, sedangkan SDA (SS) dan RST bisa masuk ke pin digital mana pun asalkan sesuai dengan kodenya. Kamu bisa melihat pin SPI board-mu di alat Pinout.
| Pin RC522 | Arduino Uno | Arduino Mega | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| SDA (SS) | D10 | 53 | GPIO 5 | GP17 |
| SCK | D13 | 52 | GPIO 18 | GP18 |
| MOSI | D11 | 51 | GPIO 23 | GP19 |
| MISO | D12 | 50 | GPIO 19 | GP16 |
| IRQ | Tidak dihubungkan | Tidak dihubungkan | Tidak dihubungkan | Tidak dihubungkan |
| GND | GND | GND | GND | GND |
| RST | D9 | 5 | GPIO 22 | GP20 |
| 3.3V | 3.3V | 3.3V | 3V3 | 3V3 |
Library MFRC522 dan membaca UID kartu
Di Library Manager, cari MFRC522 lalu instal library buatan GithubCommunity (miguelbalboa). Kode di bawah menampilkan UID setiap kartu yang kamu tempelkan di Serial Monitor dalam format heksadesimal (HEX):
1#include <SPI.h>
2#include <MFRC522.h>
3
4const int SS_PIN = 10;
5const int RST_PIN = 9;
6
7MFRC522 rfid(SS_PIN, RST_PIN);
8
9void setup() {
10 Serial.begin(9600);
11 SPI.begin();
12 rfid.PCD_Init();
13 Serial.println("Kartı okutun / scan a card");
14}
15
16void loop() {
17 if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return; // kart yok / no card
18
19 Serial.print("UID:");
20 for (byte i = 0; i < rfid.uid.size; i++) {
21 Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
22 Serial.print(rfid.uid.uidByte[i], HEX);
23 }
24 Serial.println();
25
26 rfid.PICC_HaltA(); // kartı beklemeye al / halt the card
27 rfid.PCD_StopCrypto1();
28}Mengecek kartu yang diizinkan
Dengan membandingkan UID yang terbaca dengan nilai yang sudah kamu simpan, kamu bisa memutuskan apakah kartu itu diizinkan. Contoh di bawah mengecek satu kartu yang diizinkan; untuk beberapa kartu, cukup jadikan array-nya dua dimensi dan bandingkan di dalam loop:
1// yukarıdaki tanımlar ve setup() aynen / definitions and setup() as above
2byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF}; // kendi kartının UID'si / your card's UID
3
4bool isAllowed() {
5 if (rfid.uid.size != 4) return false;
6 for (byte i = 0; i < 4; i++) {
7 if (rfid.uid.uidByte[i] != allowed[i]) return false;
8 }
9 return true;
10}
11
12void loop() {
13 if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
14 Serial.println(isAllowed() ? "İzin verildi / access granted" : "Reddedildi / access denied");
15 rfid.PICC_HaltA();
16 rfid.PCD_StopCrypto1();
17}Kunci pintu berkartu dengan servo
Mari buat kunci yang memutar servo 90 derajat untuk membuka selama 3 detik ketika kartu yang diizinkan ditempelkan, dan membunyikan bip peringatan singkat dari buzzer untuk kartu yang tidak diizinkan. Untuk pengkabelan servo lihat Apa Itu Motor Servo?, dan untuk suara peringatannya Apa Itu Buzzer? Di Uno, library Servo memakai Timer1 dan tone() memakai Timer2, jadi keduanya bisa bekerja bersama tanpa masalah.
1#include <SPI.h>
2#include <MFRC522.h>
3#include <Servo.h>
4
5MFRC522 rfid(10, 9); // SS, RST
6Servo lock;
7const int BUZZER_PIN = 8;
8byte allowed[4] = {0xDE, 0xAD, 0xBE, 0xEF};
9
10void setup() {
11 SPI.begin();
12 rfid.PCD_Init();
13 lock.attach(6);
14 lock.write(0); // kilitli / locked
15}
16
17void loop() {
18 if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) return;
19 bool ok = rfid.uid.size == 4 && memcmp(rfid.uid.uidByte, allowed, 4) == 0;
20 if (ok) {
21 lock.write(90); // kilidi aç / unlock
22 delay(3000);
23 lock.write(0); // tekrar kilitle / lock again
24 } else {
25 tone(BUZZER_PIN, 400, 600); // reddedildi sesi / denied beep
26 }
27 rfid.PICC_HaltA();
28 rfid.PCD_StopCrypto1();
29}RC522 dengan ESP32 dan Raspberry Pi Pico
Library MFRC522 yang sama berjalan di ESP32; pakai pin VSPI dan deklarasikan objeknya sebagai MFRC522 rfid(5, 22);. Karena ESP32 bekerja di 3,3 V, board ini pasangan yang pas untuk RC522, dan berkat Wi-Fi kamu bisa mencatat kartu yang ditempelkan ke internet. Di Pico dengan MicroPython, salin file mfrc522.py (misalnya library buatan danjperron) ke Pico lalu pakai seperti ini:
1from mfrc522 import MFRC522 # mfrc522.py Pico'da olmalı / mfrc522.py must be on the Pico
2import time
3
4reader = MFRC522(spi_id=0, sck=18, miso=16, mosi=19, cs=17, rst=20)
5
6while True:
7 reader.init()
8 stat, tag_type = reader.request(reader.REQIDL)
9 if stat == reader.OK:
10 stat, uid = reader.SelectTagSN()
11 if stat == reader.OK:
12 print("UID:", "".join("{:02X}".format(b) for b in uid))
13 time.sleep_ms(200)Jenis RFID: kartu apa saja yang bisa dibaca RC522?
| Jenis | Frekuensi | Jarak baca | Pemakaian umum |
|---|---|---|---|
| RFID LF | 125 kHz | Sekitar 10 cm | Kartu akses lama, microchip hewan peliharaan (EM4100) |
| RFID HF / NFC | 13,56 MHz | 1–10 cm | Kartu transportasi, MIFARE, NFC di ponsel |
| RFID UHF | 860–960 MHz | Beberapa meter | Label gudang, logistik, dan ritel |
RC522 hanya membaca kartu HF 13,56 MHz. Kartu 125 kHz yang dipakai di banyak pintu masuk gedung (sering bertanda “EM”) tidak bisa dibaca RC522; kartu itu butuh pembaca 125 kHz seperti RDM6300. NFC adalah jenis RFID 13,56 MHz yang bisa dibaca ponsel; RC522 bisa membaca UID stiker NTAG.
Ide proyek dengan RFID
- Kunci pintu atau laci berkartu: kunci yang terbuka dengan kartu yang diizinkan dan memberi peringatan untuk kartu yang tidak diizinkan.
- Sistem absensi: pasangkan setiap kartu dengan nama dan catat waktu kedatangan ke kartu SD atau internet.
- Layar sambutan: tampilkan “Welcome” dan nama orangnya di LCD ketika kartu ditempelkan; untuk layarnya, lihat Cara Memakai Layar LCD I2C.
- Kotak cerita: pasangkan file suara yang berbeda ke setiap kartu dan buat mainan audio untuk anak-anak dengan DFPlayer.
- Pemberi makan hewan pintar: keluarkan makanan ketika label di kalung hewan peliharaan terbaca.
- Permainan kartu: buat kuis atau permainan memori dengan kartu.
Kesalahan umum dan cara mengatasinya
- Tidak ada kartu yang terbaca dan versinya 0x0: kabel SPI terpasang di pin yang salah; cek terutama MOSI dan MISO.
- Menghubungkan modul ke 5V: RC522 bekerja di 3,3 V; 5 V bisa merusaknya.
- Mencoba membaca kartu 125 kHz: RC522 tidak bisa melihat kartu seperti ini; pakai kartu 13,56 MHz.
- Kartu terlalu jauh atau di atas permukaan logam: dekatkan kartu sampai 1–3 cm; permukaan logam mengganggu medannya.
- Kartu yang sama terbaca berulang-ulang: PICC_HaltA() tidak dipanggil; hentikan kartu setelah dibaca.
- Kabel panjang: sinyal SPI melemah di kabel yang panjang; buat kabel kurang dari 20 cm.
RFID menjawab pertanyaan “siapa kamu?” dengan sekali tempel, yang menambah banyak hal pada proyek keamanan dan otomasi. Di aplikasi BlueGrays kamu akan menemukan proyek membaca nilai RFID, pembaca kartu dengan LCD, dan kunci pintu RFID dengan servo langkah demi langkah lengkap dengan skema rangkaian dan kode.
Pertanyaan umum
Dari jarak berapa RC522 bisa membaca kartu?
Dengan kartu dan gantungan kunci bawaan kit, biasanya terbaca dari jarak 3–5 cm. Jenis kartu, ukuran antena, dan logam di sekitarnya semuanya memengaruhi jarak. Untuk jangkauan yang lebih jauh, kamu butuh pembaca UHF yang bekerja di frekuensi berbeda.
Kartu apa saja yang dibaca RC522? Apakah bisa membaca kartu 125 kHz?
RC522 hanya membaca kartu ISO 14443A 13,56 MHz, seperti MIFARE Classic 1K/4K, Ultralight, dan label NTAG. RC522 tidak bisa membaca kartu EM 125 kHz yang umum di pintu masuk gedung; untuk kartu itu dipakai pembaca 125 kHz seperti RDM6300.
Apakah RC522 bisa bekerja di 5V?
Tidak, RC522 harus diberi daya dari 3,3 V. Menghubungkannya ke pin 5V bisa merusak modul. Pin datanya biasanya tahan dengan sinyal 5 V dari Uno, tetapi karena chip-nya secara resmi tidak tahan 5 V, level shifter disarankan untuk proyek permanen.
Apakah UID kartu bisa berubah atau disalin?
UID kartu biasa ditulis di pabrik dan tidak berubah. Namun ada kartu “magic” yang UID-nya bisa diubah, dan UID MIFARE Classic bisa disalin ke kartu seperti itu. Itulah sebabnya sistem yang hanya memercayai UID tidak memberi keamanan yang sesungguhnya.
Bisakah aku menulis data ke kartu dengan RC522?
Bisa. Di kartu MIFARE Classic, setiap sektor dilindungi kunci; di kartu baru, kunci bawaannya adalah FF FF FF FF FF FF. Dengan contoh ReadAndWrite di library MFRC522, kamu bisa menulis data ke blok lalu membacanya kembali. Blok terakhir setiap sektor menyimpan kunci-kuncinya, jadi jangan tulis data sembarangan di sana.
Bisakah ponselku dipakai sebagai kartu di RC522?
Biasanya tidak bisa diandalkan. iPhone tidak membuka NFC untuk emulasi kartu, dan ponsel Android mengirim UID acak yang berubah di setiap tempelan. Untuk sistem berbasis ponsel, lebih baik membaca label NFC dengan ponsel lalu mengirim hasilnya ke board lewat Wi-Fi atau Bluetooth.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Membaca Nilai RFID
Gantungan kunci akses gedung atau kartu aksesmu menyimpan nomor ID rahasia, dan proyek ini membacanya. Dekatkan kartu ke pembaca RFID dan Arduino menulis nomor kartunya ke layar komputermu. Langkah pe

Pembaca Kartu RFID RC522 ESP32 (dengan LCD)
Di proyek ini, kita menyambungkan modul RFID RC522 berbasis MFRC522 ke ESP32 lewat SPI dan membaca UID kartu/tag. Ini menjadi dasar untuk aplikasi seperti kunci pintu, sistem keanggotaan, dan kontrol akses. Kita menampilkan UID yang terbaca di layar LCD; versi ini tidak membandingkannya dengan daftar kartu yang diizinkan. PERINGATAN: RC522 hanya bekerja di 3.3V; memberinya 5V akan membakar modulnya!

Kunci Pintu RFID ESP32 (RC522 + Servo + OLED + Buzzer + LED)
Kita membuat kunci pintu pintar dengan ESP32, modul RFID RC522, motor servo SG90, layar OLED SSD1306, buzzer aktif, dan 2 LED. Ketika sebuah kartu dipindai, UID-nya dibandingkan dengan daftar kartu resmi yang disimpan di kode; jika resmi, motor servo berputar untuk membuka kunci (LED hijau + 2 bunyi bip pendek), dan pintu otomatis terkunci lagi setelah 5 detik. Untuk kartu tidak resmi, LED merah menyala, peringatan diberikan dengan 3 bunyi bip cepat, dan UID yang terbaca ditampilkan di layar.

Brankas Elektronik Pintar
Brankas kecil untuk barang berhargamu yang terbuka dengan kode. Kamu mengetik kode empat digitmu di keypad; jika benar, motor servo membuka kunci, lampu hijau menyala, dan layar menampilkan keadaan br

Kunci Sandi dengan Keypad 4x4 dan LCD
Kunci pintu elektronik kecil yang menahan siapa pun yang tidak tahu kodenya. Kamu menekan tombol pagar lalu mengetik kodenya di keypad; jika benar, layar menulis akses diberikan, LED hijau menyala, da

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.

Layar LCD I2C ESP32 (16x2)
Di proyek ini, kita menampilkan teks dengan menyambungkan layar LCD karakter 16x2 ke ESP32 lewat protokol I2C. Berkat I2C, kita bisa mengendalikan layar hanya dengan dua pin data (SDA dan SCL), sehingga tidak perlu memboroskan 6+ pin seperti pada sambungan paralel klasik. Kode mencetak pesan tetap di baris pertama dan penghitung yang naik setiap detik di baris kedua. Selain itu, kita menjalankan pemindai I2C di awal untuk mencetak alamat layar ke Serial Monitor (biasanya 0x27).
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

