Home / Tutorial Arduino / Cara Kerja RFID dan Cara Membuat Proyek Arduino Kunci Pintu Berbasis RFID

Cara Kerja RFID dan Cara Membuat Proyek Arduino Kunci Pintu Berbasis RFID

kelas-fisika.com – Cara Kerja RFID dan Cara Membuat Proyek Arduino Kunci Pintu Berbasis RFID

Dalam tutorial ini kita akan belajar apa itu RFID, bagaimana cara kerjanya dan bagaimana membuat kunci pintu RFID berbasis Arduino.

Ikhtisar

RFID adalah singkatan dari (Radio Frequency IDentification) Identifikasi Frekuensi Radio dan itu adalah teknologi non-kontak yang secara luas digunakan di banyak industri untuk tugas-tugas seperti pelacakan personil, kontrol akses, manajemen rantai pasokan, pelacakan buku di perpustakaan, sistem gerbang tol dan sebagainya.

Cara Kerja RFID

Sistem RFID terdiri dari dua komponen utama, transponder atau tag yang terletak pada objek yang ingin kita identifikasi, dan transceiver atau pembaca.

Pembaca RFID terdiri dari modul frekuensi radio, unit kontrol dan kumparan antena yang menghasilkan medan elektromagnetik frekuensi tinggi. Di sisi lain, tag biasanya merupakan komponen pasif, yang terdiri dari hanya antena dan microchip elektronik, sehingga ketika mendekati medan elektromagnetik dari transceiver, karena induksi, tegangan yang dihasilkan dalam kumparan antena dan ini tegangan berfungsi sebagai kekuatan untuk microchip.

Sekarang ketika tag diaktifkan dapat mengekstrak pesan yang dikirimkan dari pembaca, dan untuk mengirim pesan kembali ke pembaca, itu menggunakan teknik yang disebut manipulasi beban. Mengaktifkan dan menonaktifkan beban di antena tag akan memengaruhi konsumsi daya antena pembaca yang dapat diukur sebagai penurunan tegangan. Perubahan tegangan ini akan ditangkap sebagai satu dan nol dan begitulah cara data ditransfer dari tag ke pembaca.

Ada juga cara lain untuk mentransfer data antara pembaca dan tag, yang disebut backscattered coupling. Dalam hal ini, tag menggunakan bagian dari daya yang diterima untuk menghasilkan medan elektromagnetik lain yang akan diambil oleh antena pembaca.

RFID dan Arduino

Jadi itulah prinsip kerja dasar dan sekarang mari kita lihat bagaimana kita dapat menggunakan RFID dengan Arduino dan membuat kunci pintu RFID kita sendiri. Kami akan menggunakan tag yang didasarkan pada protokol MIFARE dan pembaca RFID MFRC522, yang harganya hanya beberapa dolar.

Tag ini memiliki 1kb memori dan memiliki microchip yang dapat melakukan operasi aritmatika. Frekuensi operasi mereka adalah 13,56 MHz dan jarak operasinya hingga 10 cm tergantung pada geometri antena. Jika kita membawa salah satu dari tag ini di depan sumber cahaya, kita dapat melihat antena dan microchip yang sebelumnya kita bicarakan.

Sedangkan untuk modul pembaca RFID, ia menggunakan protokol SPI untuk komunikasi dengan board Arduino dan inilah cara kita perlu menghubungkannya. Harap dicatat bahwa kita harus menghubungkan VCC dari modul ke 3.3V dan untuk pin lainnya kita tidak perlu khawatir karena mereka toleran 5V.

Setelah kita menghubungkan modul kita perlu mengunduh library MFRC522 dari GitHub. Perpustakaan dilengkapi dengan beberapa contoh bagus yang darinya kita bisa belajar cara menggunakan modul.

Pertama kita dapat mengunggah contoh “DumpInfo” dan menguji apakah sistem kami berfungsi dengan baik. Sekarang jika kita menjalankan Serial Monitor dan membawa tag di dekat modul, pembaca akan mulai membaca tag dan semua informasi dari tag akan ditampilkan di monitor serial.

Di sini kita dapat melihat nomor UID dari tag serta memori 1 KB yang sebenarnya dibagi menjadi 16 sektor, setiap sektor menjadi 4 blok dan setiap blok dapat menyimpan 2 byte data. Untuk tutorial ini, kami tidak akan menggunakan salah satu dari memori tag, kami hanya akan menggunakan nomor UID dari tag.

Arduino RFID Door Lock Access Control Project

Sebelum kita menelusuri kode proyek kunci pintu RFID kami, mari kita lihat komponen dan skema rangkaian proyek ini.

Selain modul RFID kita akan menggunakan sensor jarak untuk memeriksa apakah pintu tertutup atau terbuka, motor servo untuk mekanisme kunci dan tampilan karakter.

Anda bisa mendapatkan komponen yang diperlukan untuk Tutorial Arduino ini dari tautan di bawah ini:

  • MFRC522 RFID Module
  • Proximity Sensor CNY70
  • Servo Motor
  • LCD Display
  • Arduino Board
  • Breadboard and Jump Wires

Proyek ini memiliki alur kerja berikut: Pertama kita harus mengatur tag master dan kemudian sistem masuk ke mode normal. Jika kami memindai tag yang tidak dikenal, akses akan ditolak, tetapi jika kami memindai master, kami akan memasuki mode program dari mana kami dapat menambahkan dan mengotorisasi tag yang tidak dikenal. Jadi sekarang jika kami memindai tag lagi, akses akan diberikan sehingga kami dapat membuka pintu.

Pintu akan terkunci secara otomatis setelah kami menutup pintu. Jika kita ingin menghapus tag dari sistem, kita hanya perlu masuk lagi ke mode program, memindai tag tahu dan itu akan dihapus.

Kode Program

Sekarang mari kita lihat kodenya. Jadi pertama-tama kita perlu menyertakan library untuk modul RFID, tampilan dan motor servo, mendefinisikan beberapa variabel yang diperlukan untuk program di bawah ini serta membuat instance dari library.

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#define RST_PIN 9
#define SS_PIN 10
byte readCard[4];
char* myTags[100] = {};
int tagsCount = 0;
String tagID = "";
boolean successRead = false;
boolean correctTag = false;
int proximitySensor;
boolean doorOpened = false;
// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Parameters: (rs, enable, d4, d5, d6, d7)
Servo myServo; // Servo motor

Di bagian pengaturan, pertama kita menginisialisasi modul, dan mengatur nilai awal motor servo ke posisi kunci. Kemudian kami mencetak pesan awal ke tampilan dan dengan lingkaran “sementara” berikut ini kami menunggu hingga tag master dipindai. Fungsi getID() mendapatkan tag UID dan kami memasukkannya ke lokasi pertama dari array myTags [0].

void setup() {
 // Initiating
 SPI.begin(); // SPI bus
 mfrc522.PCD_Init(); // MFRC522
 lcd.begin(16, 2); // LCD screen
 myServo.attach(8); // Servo motor
 myServo.write(10); // Initial lock position of the servo motor
 // Prints the initial message
 lcd.print("-No Master Tag!-");
 lcd.setCursor(0, 1);
 lcd.print(" SCAN NOW");
 // Waits until a master card is scanned
 while (!successRead) {
 successRead = getID();
 if ( successRead == true) {
 myTags[tagsCount] = strdup(tagID.c_str()); // Sets the master tag into position 0 in the array
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Master Tag Set!");
 tagsCount++;
 }
 }
 successRead = false;
 printNormalModeMessage();
}

Mari kita lihat fungsi kustom getID(). Pertama, memeriksa apakah ada tag baru ditempatkan di dekat pembaca dan jika demikian kita akan melanjutkan ke “for” loop yang akan mendapatkan UID dari tag. Tag yang kita gunakan memiliki nomor UID 4 byte sehingga itulah mengapa kita perlu melakukan 4 iterasi dengan loop ini, dan menggunakan fungsi concat() kita menambahkan 4 byte ke dalam variabel String tunggal. Kami juga mengatur semua karakter string ke huruf besar dan akhirnya kami menghentikan pembacaan.

uint8_t getID() {
 // Getting ready for Reading PICCs
 if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
 return 0;
 }
 if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
 return 0;
 }
 tagID = "";
 for ( uint8_t i = 0; i < 4; i++) { // The MIFARE PICCs that we use have 4 byte UID
 readCard[i] = mfrc522.uid.uidByte[i];
 tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
 }
 tagID.toUpperCase();
 mfrc522.PICC_HaltA(); // Stop reading
 return 1;
}

Sebelum kita memasuki loop utama, di akhir bagian pengaturan, kami juga memanggil fungsi cetak printNormalModeMessage() yang mencetak pesan “Access Control” pada tampilan.

void printNormalModeMessage() {
 delay(1500);
 lcd.clear();
 lcd.print("-Access Control-");
 lcd.setCursor(0, 1);
 lcd.print(" Scan Your Tag!");
}

Pada loop utama kita mulai dengan membaca nilai sensor jarak, yang memberi tahu kita apakah pintunya tertutup atau tidak.

int proximitySensor = analogRead(A0);

Jadi jika pintu ditutup, menggunakan baris yang sama seperti yang kami jelaskan dalam fungsi getID (), kami akan memindai dan mendapatkan UID dari tag baru. Kami dapat melihat di sini bahwa kode tidak akan diproses lebih lanjut hingga kami memindai tag karena garis “kembali” dalam pernyataan “if”.

Setelah kami memindainya, kami akan memeriksa apakah tag tersebut adalah master yang sebelumnya telah kami daftarkan, dan jika itu benar, kami akan memasuki mode program. Dalam mode ini jika kita memindai tag yang sudah diotorisasi maka akan dihapus dari sistem, atau jika tag tidak diketahui itu akan ditambahkan ke sistem sebagai yang berwenang.

// Checks whether the scanned tag is the master tag
 if (tagID == myTags[0]) {
 lcd.clear();
 lcd.print("Program mode:");
 lcd.setCursor(0, 1);
 lcd.print("Add/Remove Tag");
 while (!successRead) {
 successRead = getID();
 if ( successRead == true) {
 for (int i = 0; i < 100; i++) {
 if (tagID == myTags[i]) {
 myTags[i] = "";
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Tag Removed!");
 printNormalModeMessage();
 return;
 }
 }
 myTags[tagsCount] = strdup(tagID.c_str());
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Tag Added!");
 printNormalModeMessage();
 tagsCount++;
 return;
 }
 }
 }

Di luar mode program, dengan loop “for” berikutnya kami memeriksa apakah tag yang dipindai sama dengan tag yang terdaftar dan kami membuka kunci atau mencegah akses ditolak. Pada bagian akhir pernyataan “else” kita menunggu sampai pintu tertutup, kemudian kita mengunci pintu dan mencetak pesan mode normal lagi.

// Checks whether the scanned tag is authorized
 for (int i = 0; i < 100; i++) {
 if (tagID == myTags[i]) {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Access Granted!");
 myServo.write(170); // Unlocks the door
 printNormalModeMessage();
 correctTag = true;
 }
 }
 if (correctTag == false) {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Access Denied!");
 printNormalModeMessage();
 }
 }
 // If door is open...
 else {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Door Opened!");
 while (!doorOpened) {
 proximitySensor = analogRead(A0);
 if (proximitySensor > 200) {
 doorOpened = true;
 }
 }
 doorOpened = false;
 delay(500);
 myServo.write(10); // Locks the door
 printNormalModeMessage();
 }

Jadi itu segalanya dan inilah kode lengkap dari proyek ini:

/*
* Arduino Door Lock Access Control Project
* 
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: MFRC522, https://github.com/miguelbalboa/rfid
*/
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#define RST_PIN 9
#define SS_PIN 10
byte readCard[4];
char* myTags[100] = {};
int tagsCount = 0;
String tagID = "";
boolean successRead = false;
boolean correctTag = false;
int proximitySensor;
boolean doorOpened = false;
// Create instances
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Parameters: (rs, enable, d4, d5, d6, d7)
Servo myServo; // Servo motor
void setup() {
 // Initiating
 SPI.begin(); // SPI bus
 mfrc522.PCD_Init(); // MFRC522
 lcd.begin(16, 2); // LCD screen
 myServo.attach(8); // Servo motor
 myServo.write(10); // Initial lock position of the servo motor
 // Prints the initial message
 lcd.print("-No Master Tag!-");
 lcd.setCursor(0, 1);
 lcd.print(" SCAN NOW");
 // Waits until a master card is scanned
 while (!successRead) {
 successRead = getID();
 if ( successRead == true) {
 myTags[tagsCount] = strdup(tagID.c_str()); // Sets the master tag into position 0 in the array
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Master Tag Set!");
 tagsCount++;
 }
 }
 successRead = false;
 printNormalModeMessage();
}
void loop() {
 int proximitySensor = analogRead(A0);
 // If door is closed...
 if (proximitySensor > 200) {
 if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
 return;
 }
 if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
 return;
 }
 tagID = "";
 // The MIFARE PICCs that we use have 4 byte UID
 for ( uint8_t i = 0; i < 4; i++) { //
 readCard[i] = mfrc522.uid.uidByte[i];
 tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
 }
 tagID.toUpperCase();
 mfrc522.PICC_HaltA(); // Stop reading
 correctTag = false;
 // Checks whether the scanned tag is the master tag
 if (tagID == myTags[0]) {
 lcd.clear();
 lcd.print("Program mode:");
 lcd.setCursor(0, 1);
 lcd.print("Add/Remove Tag");
 while (!successRead) {
 successRead = getID();
 if ( successRead == true) {
 for (int i = 0; i < 100; i++) {
 if (tagID == myTags[i]) {
 myTags[i] = "";
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Tag Removed!");
 printNormalModeMessage();
 return;
 }
 }
 myTags[tagsCount] = strdup(tagID.c_str());
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Tag Added!");
 printNormalModeMessage();
 tagsCount++;
 return;
 }
 }
 }
 successRead = false;
 // Checks whether the scanned tag is authorized
 for (int i = 0; i < 100; i++) {
 if (tagID == myTags[i]) {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Access Granted!");
 myServo.write(170); // Unlocks the door
 printNormalModeMessage();
 correctTag = true;
 }
 }
 if (correctTag == false) {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Access Denied!");
 printNormalModeMessage();
 }
 }
 // If door is open...
 else {
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print(" Door Opened!");
 while (!doorOpened) {
 proximitySensor = analogRead(A0);
 if (proximitySensor > 200) {
 doorOpened = true;
 }
 }
 doorOpened = false;
 delay(500);
 myServo.write(10); // Locks the door
 printNormalModeMessage();
 }
}
uint8_t getID() {
 // Getting ready for Reading PICCs
 if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
 return 0;
 }
 if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
 return 0;
 }
 tagID = "";
 for ( uint8_t i = 0; i < 4; i++) { // The MIFARE PICCs that we use have 4 byte UID
 readCard[i] = mfrc522.uid.uidByte[i];
 tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Adds the 4 bytes in a single String variable
 }
 tagID.toUpperCase();
 mfrc522.PICC_HaltA(); // Stop reading
 return 1;
}
void printNormalModeMessage() {
 delay(1500);
 lcd.clear();
 lcd.print("-Access Control-");
 lcd.setCursor(0, 1);
 lcd.print(" Scan Your Tag!");
}

selamat mencoba

About kelas-fisika

Check Also

Proyek Arduino Pilah Warna

kelas-fisika.com – Proyek Arduino Pilah Warna Dalam artikel ini kelas-fisika akan menunjukkan bagaimana Anda dapat membuat …

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Powered by themekiller.com