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.
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.
// 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();
}
#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();
}
}
0 Comments