Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Cara Kerja RFID dan Cara Membuat Kunci Pintu RFID berbasis Arduino

Pada tutorial kali ini kita akan mempelajari apa itu RFID, cara kerjanya dan cara membuat kunci pintu RFID berbasis Arduino. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini untuk lebih jelasnya.

Ringkasan

RFID adalah singkatan dari Radio Frequency IDentification dan ini adalah teknologi non-kontak yang digunakan secara luas di banyak industri untuk tugas-tugas seperti pelacakan personel, kontrol akses, manajemen rantai pasokan, pelacakan buku di perpustakaan, sistem gerbang tol, dan sebagainya.[/column]

Cara Kerja RFID


Sistem RFID terdiri dari dua komponen utama, transponder atau tag yang terletak pada objek yang ingin diidentifikasi, 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 hanya terdiri dari antena dan microchip elektronik, sehingga ketika mendekati medan elektromagnetik transceiver, karena induksi, tegangan dihasilkan di kumparan antena dan ini tegangan berfungsi sebagai daya untuk microchip.

Sekarang ketika tag diaktifkan, ia dapat mengekstrak pesan yang dikirimkan dari pembaca, dan untuk mengirim pesan kembali ke pembaca, ia menggunakan teknik yang disebut manipulasi beban. Menghidupkan dan mematikan beban pada antena tag akan mempengaruhi 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 kopling backscattered. Dalam hal ini, tag menggunakan sebagian dari daya yang diterima untuk membangkitkan medan elektromagnetik lain yang akan ditangkap 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 memori 1kb dan memiliki microchip yang dapat melakukan operasi aritmatika. Frekuensi operasi mereka adalah 13,56 MHz dan jarak operasi hingga 10 cm tergantung pada geometri antena. Jika kita membawa salah satu tag ini di depan sumber cahaya, kita dapat melihat antena dan microchip yang telah kita bicarakan sebelumnya.

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

Setelah menghubungkan modul, kita perlu mendownload library MFRC522 dari GitHub. Pustaka dilengkapi dengan beberapa contoh bagus yang dapat digunakan untuk mempelajari cara menggunakan modul.

Pertama kita bisa mengupload contoh “DumpInfo” dan menguji apakah sistem kita bekerja dengan baik. Sekarang jika kita menjalankan Serial Monitor dan mendekatkan tag ke modul, pembaca akan mulai membaca tag dan semua informasi dari tag akan ditampilkan di monitor serial.

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

Proyek Kontrol Akses Kunci Pintu RFID Arduino

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

Selain modul RFID kami 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 link di bawah ini:

  • Modul RFID MFRC522 …………………….
  • Motor Servo ……………………………………..
  • Layar LCD ………………………………………
  • Arduino Board ………………………………….
  • Breadboard dan Kabel Lompat …………….. 
  • Sensor Kedekatan CNY70 ………………………

Proyek ini memiliki alur kerja berikut:Pertama kita harus menetapkan tag master dan kemudian sistem masuk ke mode normal. Jika kami memindai tag yang tidak dikenal, aksesnya 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 kita memindai tag lagi, akses akan diberikan sehingga kita bisa membuka pintu.

Pintu akan otomatis mengunci setelah kita menutup pintu. Jika kita ingin menghapus tag dari sistem, kita hanya perlu masuk lagi ke mode program, pindai tag yang diketahui dan tag akan dihapus.

Kode Sumber

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

#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 motorCode language: Arduino (arduino)

Di bagian setup, pertama-tama kita menginisialisasi modul, dan mengatur nilai awal motor servo ke posisi kunci. Kemudian kami mencetak pesan awal ke tampilan dan dengan loop "sementara" berikut kami menunggu sampai tag master dipindai. Fungsi khusus getID() mendapatkan tag UID dan kami menempatkannya di lokasi pertama larik 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();
}Code language: Arduino (arduino)

Mari kita lihat fungsi kustom getID(). Pertama ia memeriksa apakah ada tag baru yang ditempatkan di dekat pembaca dan jika demikian, kita akan melanjutkan ke loop "untuk" yang akan mendapatkan UID dari tag. Tag yang kita gunakan memiliki nomor UID 4 byte jadi itu sebabnya kita perlu melakukan 4 iterasi dengan loop ini, dan menggunakan fungsi concat() kita menambahkan 4 byte ke dalam satu variabel String. 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;
}Code language: Arduino (arduino)

Sebelum kita memasuki loop utama, di akhir bagian penyiapan, kita juga memanggil fungsi kustom printNormalModeMessage() yang mencetak pesan “Access Control” di layar.

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

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

int proximitySensor = analogRead(A0);Code language: Arduino (arduino)

Jadi jika pintu ditutup, menggunakan baris yang sama seperti yang kami jelaskan dalam fungsi kustom getID() kami akan memindai dan mendapatkan UID dari tag baru. Kami dapat melihat di sini bahwa kode tidak akan melanjutkan lebih jauh sampai kami memindai tag karena baris "kembali" dalam pernyataan "jika".

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

// 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;
        }
      }
    }Code language: Arduino (arduino)

Di luar mode program, dengan loop "untuk" berikutnya, kami memeriksa apakah tag yang dipindai sama dengan tag mana pun yang terdaftar dan kami membuka kunci pintu atau membiarkan akses ditolak. Di akhir pernyataan “else” kita menunggu sampai pintu tertutup, kemudian kita mengunci pintu dan mencetak kembali pesan mode normal.

// 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();
  }Code language: Arduino (arduino)

Jadi itu saja semuanya dan inilah kode lengkap proyeknya:

/*
* 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!");
}Code language: Arduino (arduino)

Saya harap Anda menikmati tutorial ini dan jangan ragu untuk mengajukan pertanyaan apa pun di bagian komentar di bawah.


Proses manufaktur

  1. Arduino RFID Lock Dengan RC522 - Protokol MIFARE 13.56 Mhz
  2. Tutorial Kunci RFID Arduino
  3. Cara Membuat Tombol Keyboard Punchable yang Dapat Disesuaikan
  4. Kunci Pintu Berbasis Kata Sandi
  5. Otomata Seluler berbasis Arduino dan OLED
  6. eDOT - Jam Presisi dan Stasiun Cuaca Berbasis Arduino
  7. Sistem Kehadiran Berbasis Arduino dan Google Spreadsheet
  8. Cara membuat musik dengan Arduino
  9. Cara membuat Pintu Otomatis Berbasis Arduino
  10. Cara Membuat Kompas menggunakan Arduino dan Mengolah IDE