Projek Arduino Wireless ID Card Entry System 




Komponen yang diperlukan :

1. Arduino board

2. Breadboard

3. Jumper wires

4. Mifare RFID-RC522 module 

5. Tower Pro SG90 9g servomotor

6. Piezo buzzer

7. Red LED

8. Green LED

9. 2 220-ohm resistors

Diperlukan librari 

1. RFID 

2. SPI

3. Wire

4. Servo

5. Pitches


Pembaca RFID menggunakan teknologi nirkabel untuk mengidentifikasi kartu, tag, atau key fob tanpa kontak. Pembaca akan merespons ketika kartu diletakkan di dekatnya. Pertama, kita membutuhkan pembaca untuk membaca nomor unik kartu RFID kita, dan kemudian kita akan menambahkan servo yang akan bergerak tergantung pada apakah pembaca RFID mengenali kartu tersebut. Kita dapat menggunakan sistem ID ini untuk sesuatu seperti kunci pintu atau kotak, seperti kunci kode ketukan rahasia.

Anda mungkin pernah melihat stiker seperti pada Gambar pada barang yang Anda beli. Stiker ini menggunakan RFID untuk memungkinkan toko melacak item untuk tujuan keamanan. Jika Anda melewati bidang RFID di pintu keluar tanpa membayar, stiker akan membunyikan alarm. Pembaca dan kartu RFID juga sering digunakan sebagai identifikasi untuk memungkinkan akses ke area terlarang, seperti laboratorium rahasia atau komunitas yang terjaga keamanannya.

Ada dua jenis RFID: pasif dan aktif. Setiap sistem RFID menggunakan frekuensi radio untuk bertukar sinyal antara pembaca dan tag atau kartu. Sinyal ini berisi kode unik tag atau kartu, dan jika pembaca RFID mengenali kode itu, ia akan bereaksi dengan tepat—misalnya, dengan membiarkan item melewati detektor di toko atau dengan membuka kunci pintu.

Dalam sistem pasif, ketika keduanya dilewatkan berdekatan satu sama lain, sinyal radio pembaca memberi daya pada sirkuit dalam tag atau kartu yang cukup bagi mereka untuk bertukar data. Sistem aktif memiliki pembaca bertenaga dan tag bertenaga dan dapat membaca tag secara akurat dari jauh. Sistem aktif sangat mahal dan digunakan untuk aplikasi yang lebih canggih, jadi kami akan menggunakan sistem RFID pasif: pembaca Mifare RFID-RC522, yang dilengkapi dengan kartu kosong dan key fob, seperti yang ditunjukkan pada Gambar. Pembaca beroperasi pada 13,56 MHz, yang berarti dapat mengidentifikasi kartu atau fob, yang masing-masing diberi daya oleh pembaca, hanya jika jaraknya kurang dari beberapa inci. Penting untuk mengingat hal ini saat memposisikan pembaca Anda.


Kita akan membuat servo yang dikendalikan RFID. Ketika Anda memberikan kartu Anda di depan pembaca RFID, kartu itu akan terbaca. Jika modul mengenali kartu dan kartu memiliki hak akses, LED hijau menyala, nada diputar, dan servomotor bergerak 180 derajat. Jika modul tidak mengenali kartu, LED merah menyala, nada yang berbeda diputar, dan servo tidak bergerak.


Tabel menjelaskan berbagai fungsi pembaca RFID.



Cara membuat rangkaian :

1. Anda mungkin perlu menyiapkan modul dengan menyolder pin header terlebih dahulu. Jepret strip delapan pin header. Solder satu pin header ke setiap titik. Pastikan untuk menahan besi solder di tempatnya hanya selama beberapa detik sehingga Anda tidak merusak sirkuit. 

2. Tempatkan modul RFID Anda ke dalam breadbord seperti yang ditunjukkan pada Gambar, lalu hubungkan pin RFID ke pin Arduino seperti yang ditunjukkan pada tabel berikut. Ingatlah untuk menghubungkan papan RFID ke daya 3.3V pada Arduino (bukan +5V), atau Anda akan merusak modul.


3. Sekarang kita perlu memeriksa apakah modul RFID berfungsi.
Unggah sketsa uji berikut untuk pembaca RFID.

// RFID Library Created by Miguel Balboa (circuitito.com)
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN);
// Setup variables
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.init();
}
void loop() { // This loop looks for a card(s) to read
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
if (rfid.serNum[0] != serNum0
&& rfid.serNum[1] != serNum1
&& rfid.serNum[2] != serNum2
&& rfid.serNum[3] != serNum3
&& rfid.serNum[4] != serNum4
) {

// When a card is found, the following code will run
Serial.println(" ");
Serial.println("Card found");
serNum0 = rfid.serNum[0];
serNum1 = rfid.serNum[1];
serNum2 = rfid.serNum[2];
serNum3 = rfid.serNum[3];
serNum4 = rfid.serNum[4];
// Print the card ID to the Serial Monitor of the IDE
Serial.println("Cardnumber:");
Serial.print("Dec: ");
Serial.print(rfid.serNum[0], DEC);
Serial.print(", ");
Serial.print(rfid.serNum[1], DEC);
Serial.print(", ");
Serial.print(rfid.serNum[2], DEC);
Serial.print(", ");
Serial.print(rfid.serNum[3], DEC);
Serial.print(", ");

Serial.print(rfid.serNum[4], DEC);
Serial.println(" ");
Serial.print("Hex: ");
Serial.print(rfid.serNum[0], HEX);
Serial.print(", ");
Serial.print(rfid.serNum[1], HEX);
Serial.print(", ");
Serial.print(rfid.serNum[2], HEX);
Serial.print(", ");
Serial.print(rfid.serNum[3], HEX);
Serial.print(", ");
Serial.print(rfid.serNum[4], HEX);
Serial.println(" ");
} else {
// If the ID matches, write a dot to the Serial Monitor
Serial.print(".");
}
}
}
rfid.halt();
}


4. Buka Serial Monitor Arduino di IDE Anda.
5. Lewatkan kartu atau key fob Anda di depan modul RFID. Nomor unik akan muncul di Serial Monitor, seperti yang ditunjukkan pada Gambar. Catat nomor ini, karena Anda akan membutuhkannya nanti. Dalam hal ini, nomor kartu saya adalah 4D 55 AD D3 66. 

6. Masukkan dua LED ke breadbord, dengan kabel negatif yang lebih pendek terhubung ke rel GND. Hubungkan kabel positif yang lebih panjang pada LED merah ke pin 3 Arduino melalui resistor 220-ohm. Hubungkan kaki positif LED hijau ke pin 2 melalui resistor 220-ohm lainnya.

7. Hubungkan servo ke Arduino dengan memasang kabel merah ke +5V, kabel coklat (atau hitam) ke GND, dan kabel kuning ke pin Arduino 9.
8. Hubungkan piezo buzzer ke Arduino dengan cara memasang kabel merah ke pin 8 Arduino dan kabel hitam ke GND. Bangunan Anda sekarang akan terlihat seperti gambar.


9. Buka kode proyek di Arduino IDE Anda dan ubah baris berikut agar sesuai dengan nomor hex yang Anda temukan untuk kartu atau key fob Anda pada langkah 5 menggunakan pembaca RFID. Biarkan Sapi seperti yang muncul, tetapi isi sisanya dengan nomor Anda.

byte card[5] = {0x4D,0x55,0xAD,0xD3,0x66};

10. Konfirmasikan bahwa pengaturan Anda cocok dengan diagram sirkuit pada gambar, lalu unggah kode dari "Sketsa".

Sketch program arduino :
Sketsa dimulai dengan memanggil perpustakaan SPI, RFID, Servo, Pitch, dan Wire untuk mengontrol komunikasi antara Arduino, modul RFID, dan servo. Dua melodi ditentukan, satu untuk pembacaan positif pada kartu Anda dan yang lainnya untuk pembacaan negatif. LED hijau diatur ke pin Arduino 2, LED merah ke pin 3, buzzer piezo ke pin 8, dan servo ke pin 9.

Baris berikut adalah tempat Anda menambahkan nilai hex kartu Anda:

byte card[5] = {0x4D,0x55,0xAD,0xD3,0x66};

Berikan kartu Anda di depan pembaca. Jika kode hex pada kartu cocok dengan yang ada di sketsa Anda, LED hijau menyala, nada diputar, dan servo bergerak. Pembaca menolak semua kartu lain kecuali Anda menambahkan nomornya ke kode di 0. Jika kartu ditolak, LED merah menyala dan nada yang berbeda diputar, tetapi servo tidak bergerak.


#include <SPI.h>
#include <RFID.h>
#include <Servo.h>
#include "pitches.h"
#include <Wire.h>
RFID rfid(10, 5); // Define the RFID
// Replace this with the code from your card in hex form
u byte card[5] = {0x4D,0x55,0xAD,0xD3,0x66};
// List any other codes for cards with access here
byte serNum[5];
byte data[5];
// Define the melodies for successful access and denied access
int access_melody[] = {NOTE_G4, 0, NOTE_A4, 0, NOTE_B4, 0, NOTE_A4,
0, NOTE_B4, 0, NOTE_C5, 0};
int access_noteDurations[] = {8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 4};
int fail_melody[] = {NOTE_G2, 0, NOTE_F2, 0, NOTE_D2, 0};
int fail_noteDurations[] = {8, 8, 8, 8, 8, 4};
int LED_access = 2; // Pin connected to green LED
int LED_intruder = 3; // Pin connected to red LED
int speaker_pin = 8; // Pin connected to piezo buzzer
int servoPin = 9; // Pin connected to servo
Servo doorLock; // Define the servomotor
void setup() {
doorLock.attach(servoPin); // Set servo as a pin
Serial.begin(9600); // Start serial communication

SPI.begin(); // Start serial communication between the RFID and PC
rfid.init(); // Initialize the RFID
Serial.println("Arduino card reader");
delay(1000);
pinMode(LED_access, OUTPUT);
pinMode(LED_intruder, OUTPUT);
pinMode(speaker_pin, OUTPUT);
pinMode(servoPin, OUTPUT);
}
void loop() { // Create a variable for each user
boolean card_card = true; // Define your card
if (rfid.isCard()) {
if (rfid.readCardSerial()) {
delay(1000);
data[0] = rfid.serNum[0];
data[1] = rfid.serNum[1];
data[2] = rfid.serNum[2];
data[3] = rfid.serNum[3];
data[4] = rfid.serNum[4];
}
Serial.print("Card found - code:");
for (int i = 0; i < 5; i++) {
// If it is not your card, the card is considered false
if (data[i] != card[i]) card_card = false;
}

Serial.print("Card found - code:");
for (int i = 0; i < 5; i++) {
// If it is not your card, the card is considered false
if (data[i] != card[i]) card_card = false;
}
Serial.println();
if (card_card) { // A card with access permission is found
Serial.println("Hello!"); // Print to Serial Monitor
for (int i = 0; i < 12; i++) { // Play welcome music
int access_noteDuration = 1000 / access_noteDurations[i];
tone(speaker_pin, access_melody[i], access_noteDuration);
int access_pauseBetweenNotes = access_noteDuration * 1.30;
delay(access_pauseBetweenNotes);
noTone(speaker_pin);
}
}
else { // If the card is not recognized
// Print message to Serial Monitor
Serial.println("Card not recognized! Contact administrator!");
digitalWrite(LED_intruder, HIGH); // Turn on red LED
for (int i = 0; i < 6; i++) { // Play intruder melody
int fail_noteDuration = 1000 / fail_noteDurations[i];
tone(speaker_pin, fail_melody[i], fail_noteDuration);
int fail_pauseBetweenNotes = fail_noteDuration * 1.30;
delay(fail_pauseBetweenNotes);
noTone(speaker_pin);
}
delay(1000);
digitalWrite(LED_intruder, LOW); // Turn off red LED
}

if (card_card) { // Add other users with access here
Serial.println("Access granted.......Welcome!");
digitalWrite(LED_access, HIGH); // Turn on green LED
doorLock.write(180); // Turn servo 180 degrees
delay(5000); // Wait for 5 seconds
doorLock.write(0); // Turn servo back to 0 degrees
digitalWrite(LED_access, LOW); // Turn off green LED
}
Serial.println();
delay(500);
rfid.halt();
}
}

Demikianlah projek arduino Wireles ID card Entry System, selamat mencoba dan semoga bermanfaat.