Panduan Lengkap: Membuat Sistem Kontrol Akses RFID dengan NodeMCU (Kunci Selenoid)

Halo! Dalam panduan ini, kita akan mempelajari cara membangun sistem kontrol akses elektronik sederhana menggunakan NodeMCU ESP8266, modul pembaca RFID MFRC522, dan Kunci Selenoid (Solenoid Lock) yang dikontrol via modul Relay.

Bagian 1: Modul Pembelajaran (Dasar Teori)

Sistem ini berfungsi berdasarkan teknologi RFID (Radio-Frequency Identification). Hanya kartu dengan UID (Unique Identifier) yang terdaftar yang akan diizinkan untuk mengaktifkan kunci selenoid selama 3 detik.

A. Teori Dasar RFID dan SPI

  • RFID: Teknologi nirkabel yang menggunakan gelombang radio (frekuensi ) untuk membaca UID unik dari kartu atau tag.
  • MFRC522: Modul pembaca yang berkomunikasi dengan NodeMCU menggunakan antarmuka SPI (Serial Peripheral Interface).
  • SPI Jalur Komunikasi:
    • SCK (Serial Clock)
    • MOSI (Master Out Slave In)
    • MISO (Master In Slave Out)
    • SS/SDA (Slave Select)

B. Pinout NodeMCU (ESP8266)

Kode program menggunakan pin-pin berikut:

NodeMCU D-PinGPIO PinFungsi dalam Kode
D5GPIO14SCK (SPI Clock)
D7GPIO13MOSI (SPI Data Out)
D6GPIO12MISO (SPI Data In)
D8GPIO15SS/SDA (Chip Select)
D3GPIO0RST (Reset Pin MFRC522)
D4GPIO2ACCESS_PIN (Pin Kontrol Relay)

C. Analisis Kode

Kode ini mengimplementasikan sistem “Whitelist” di mana variabel AUTHORIZED_UID menjadi kunci akses.

  1. Inisialisasi (setup): Mengatur komunikasi Serial (115200), memulai SPI, menginisialisasi MFRC522, dan mengatur pin D4 sebagai OUTPUT (kondisi awal LOW/mati).
  2. Logika Utama (loop):
    • Mencari kartu baru (PICC_IsNewCardPresent).
    • Membaca UID kartu (PICC_ReadCardSerial).
    • Mengubah UID byte menjadi String Hexa (currentCardUID).
    • Membandingkan currentCardUID dengan AUTHORIZED_UID.
    • Jika Cocok: Pin D4 diset HIGH (Relay aktif, Selenoid terbuka) selama (3 detik), lalu kembali LOW (Selenoid terkunci).
    • Jika Tidak Cocok: Dicetak “Access Denied!”.

Bagian 2: Jobsheet Praktikum (Langkah Implementasi)

Ikuti langkah-langkah ini untuk merakit dan menguji sistem.

I. Alat dan Bahan

No.Nama Komponen/AlatJumlahKeterangan
1.NodeMCU ESP82661 Unit
2.Modul RFID MFRC5221 UnitDilengkapi Kartu/Tag RFID
3.Modul Relay 1 Channel1 UnitWajib untuk mengontrol Selenoid
4.Kunci Selenoid (Solenoid Lock)1 UnitOutput sistem
5.Power Supply Eksternal1 UnitSesuaikan dengan tegangan Selenoid (/)
6.Kabel JumperSecukupnya
7.Komputer dengan IDE Arduino1 UnitSudah terinstal library MFRC522

II. Skema Pengkabelan (Wiring)

A. MFRC522 ke NodeMCU (SPI Communication):

MFRC522 PinNodeMCU Pin (D-Pin)Keterangan
VCC3V3Power Supply
RSTD3Reset Pin (GPIO0)
GNDGNDGround
MISOD6SPI MISO (GPIO12)
MOSID7SPI MOSI (GPIO13)
SCKD5SPI SCK (GPIO14)
SDA (SS)D8SPI Slave Select (GPIO15)

B. Modul Relay dan Kunci Selenoid:

  • Kontrol Relay: Hubungkan pin IN pada Modul Relay ke pin D4 (GPIO2) NodeMCU.
  • Power Relay: Hubungkan pin VCC dan GND pada Modul Relay ke sumber daya yang sesuai (bisa dari NodeMCU jika ).
  • Kunci Selenoid:
    1. Hubungkan kutub Positif (+) Power Supply Eksternal ke pin COM (Common) pada Relay.
    2. Hubungkan pin NO (Normally Open) pada Relay ke salah satu kabel Selenoid.
    3. Hubungkan kabel Selenoid yang tersisa ke kutub Negatif (-) Power Supply Eksternal (GND).

Penting: Kita menggunakan Relay karena pin GPIO NodeMCU hanya mampu menyediakan arus sangat kecil (), tidak cukup untuk menggerakkan Selenoid yang membutuhkan arus besar.

III. Prosedur Uji Coba

  1. Dapatkan UID Kartu: Unggah program ke NodeMCU, buka Serial Monitor, dan tempelkan kartu yang ingin Anda otorisasi. Catat UID Hexa yang muncul (contoh: 56A38FB8).
  2. Modifikasi Kode: Ganti variabel AUTHORIZED_UID dalam program dengan UID yang sudah Anda catat.String AUTHORIZED_UID = "56A38FB8"; // Ganti dengan UID Kartu Anda
#include <SPI.h>
#include <MFRC522.h>

// Definisi Pin NodeMCU ke GPIO ESP8266 (Referensi)
#define D3 0    // RST Pin MFRC522
#define D4 2    // ACCESS_PIN (Pin Kontrol Relay/Solenoid)
#define D5 14   // SCK (SPI Clock)
#define D6 12   // MISO (Master In Slave Out)
#define D7 13   // MOSI (Master Out Slave In)
#define D8 15   // SS/SDA (Chip Select)

// Pin MFRC522 yang terhubung ke NodeMCU
const int SS_PIN = D8;    // NodeMCU D8 (GPIO15) for SDA (Slave Select)
const int RST_PIN = D3;   // NodeMCU D3 (GPIO0) for RST (Reset)

// Pin Output untuk mengontrol Relay/Solenoid
const int ACCESS_PIN = D4; // NodeMCU D4 (GPIO2)

// Membuat instance MFRC522
MFRC522 mfrc522(SS_PIN, RST_PIN);

// GANTI dengan ID kartu Anda yang telah dicatat
String AUTHORIZED_UID = "56A38FB8";

void setup() {
  Serial.begin(115200);
  SPI.begin();          // Init SPI bus
  mfrc522.PCD_Init();   // Init MFRC522

  // Inisialisasi pin output (Relay)
  pinMode(ACCESS_PIN, OUTPUT);
  digitalWrite(ACCESS_PIN, LOW); // Pastikan Selenoid terkunci saat startup

  Serial.println("Sistem Kontrol Akses RFID Aktif.");
  Serial.println("Dekatkan kartu atau tag pada pembaca...");
}

void loop() {
  // Cek apakah ada kartu baru
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    delay(50);
    return;
  }

  // Pilih salah satu kartu
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    delay(50);
    return;
  }

  Serial.print("Card UID: ");
  String currentCardUID = "";
  
  // Format UID dari byte array ke string Hexa
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    currentCardUID.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? "0" : ""));
    currentCardUID.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  
  currentCardUID.toUpperCase();
  AUTHORIZED_UID.toUpperCase();

  Serial.println(currentCardUID);

  // --- Cek Otorisasi dan Tindakan ---
  if (currentCardUID == AUTHORIZED_UID) {
    Serial.println("✅ Akses Diberikan! Kunci terbuka.");
    
    // 1. Set D4 HIGH (mengaktifkan Relay, membuka Selenoid)
    digitalWrite(ACCESS_PIN, HIGH); 
    Serial.println("D4 (GPIO2) set HIGH.");
    
    // 2. Tahan Selenoid terbuka selama 3000ms (3 detik)
    delay(3000); 
    
    // 3. Set D4 LOW (menonaktifkan Relay, mengunci Selenoid)
    digitalWrite(ACCESS_PIN, LOW);
    Serial.println("D4 (GPIO2) set LOW. Kunci terkunci kembali.");

  } else {
    Serial.println("❌ Akses Ditolak!");
  }

  // Hentikan PICC dan kripto pada MFRC522
  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();

  // Tunggu sebentar sebelum cek lagi
  delay(500);
}

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *