Khóa thẻ cảm ứng mfrc- 522 rc522 RFID

Mã số sản phẩm : AM013
95.000₫


Thông số kỹ thuật:
Khóa thẻ cảm ứng mfrc- 522 rc522 RFID

Hướng dẫn cài đặt thẻ từ

Thẻ từ RFID hiện này có rất nhiều ứng dụng trong cuộc sống. Trong lĩnh vực an ninh, ta có thể áp dụng làm khóa phòng, phân quyền ra vào cho khu vực, hay ở Việt Nam là khóa chống trộm xe máy. Chi phí lại rất rẻ cho 1 bộ thẻ từ. Vậy nguyên lý hoạt động ra sao, mình xin chia sẻ một chút về thẻ từ RFID RC522

CHUẨN BỊ 

1 Thẻ từ RFID RC522 (1 bộ gồm cảm biển và 2 thẻ) 

2 Bo mạnh chủ Arduino Uno 3

3 Bo mạnh test và 2 đèn Led

THỰC HIỆN

Bước 1 :

Các bạn thực kết nối từ bộ cảm biển RC522 sang Arduino Uno 3 như sau:

    RC522                    Arduino Uno 3

   SAD (SS)                       10
   SCK                               13     
   MOSI                              11    
   MISO                              12     
   IRQ                              Không kết nối
   GND                               GND     
   RST                                  5     
  +3.3V                                3V3    

Mình sử dụng thêm 2 đèn LED kết nối cực dương với chân 2 và 3. Cực âm kết nối GND trên bo mạnh Arduino để thể hiện đóng mở của thẻ từ ( Các bạn có thể test trên máy tính vẫn thể hiện được nhé )

NẠP PHẦN MÊM ( Các bạn có thể tìm kiếm bài viết mình đã hướng dẫn về phần mềm nạp cho bo mạnh Arduino)

Thư viện MFRC 522:

 https://github.com/ljos/MFRC522

Code check:

#include <MFRC522.h>
//Get library from https://github.com/ljos/MFRC522
//Sketch: gudjonholm@gmail.com
#include <SPI.h>

/*
Pins    SPI       UNO  Mega2560  Leonardo
1 (NSS) SAD (SS)   10     53        10
2       SCK        13     52        SCK1
3       MOSI       11     51        MOSI1
4       MISO       12     50        MISO1
5       IRQ        *      *         *
6       GND       GND     GND       GND
7       RST        5      ?         Reset
8      +3.3V (VCC) 3V3     3V3       3.3V
* Not needed
1 on ICPS header
*/
#define SAD 10
#define RST 5
MFRC522 nfc(SAD, RST);


#define ledPinOpen    2
#define ledPinClosed  3


void setup() {
  pinMode(ledPinOpen  , OUTPUT);   
  pinMode(ledPinClosed, OUTPUT);   
  SPI.begin();
  Serial.begin(115200);
  Serial.println("Looking for MFRC522.");
  nfc.begin();
  byte version = nfc.getFirmwareVersion();
  if (! version) {
    Serial.print("Didn't find MFRC522 board.");
    while(1); //halt
  }

  Serial.print("Found chip MFRC522 ");
  Serial.print("Firmware ver. 0x");
  Serial.print(version, HEX);
  Serial.println(".");
}

#define AUTHORIZED_COUNT 2 /*If you want more Authorized of cards set the count here, and then add the serials below*/
byte Authorized[AUTHORIZED_COUNT][6] = {

                            {0x45, 0x14, 0x39, 0x2E, 0xFF, 0xFF, }
                      ,{0x81, 0xAF, 0xF5, 0x1E, 0xFF, 0xFF, }  /*f. example how to add more authorized cards*/
                            
                          };
                          
void printSerial(byte *serial);
boolean isSame(byte *key, byte *serial);
boolean isAuthorized(byte *serial);

void loop() {
  byte status;
  byte data[MAX_LEN];
  byte serial[5];
  boolean Opening = false;
  digitalWrite(ledPinOpen, Opening);
  digitalWrite(ledPinClosed, !Opening);
  status = nfc.requestTag(MF1_REQIDL, data);

  if (status == MI_OK) {
    status = nfc.antiCollision(data);
    memcpy(serial, data, 5);
    
    if(isAuthorized(serial))
    { 
      Serial.println("Authenticated");
      Opening = true;
    }
    else
    { 
      printSerial(serial);
      Serial.println("is NOT authenticated");
      Opening = false;
    }
    
    nfc.haltTag();
    digitalWrite(ledPinOpen, Opening);
    digitalWrite(ledPinClosed, !Opening);
    delay(2000);
  }//if (status == MI_OK)

  delay(500);

}//void loop()

boolean isSame(byte *key, byte *serial)
{
    for (int i = 0; i < 4; i++) {
      if (key[i] != serial[i])
      { 
        return false; 
      }
    }
    
    return true;

}

boolean isAuthorized(byte *serial)
{
    for(int i = 0; i<AUTHORIZED_COUNT; i++)
    {
      if(isSame(serial, Authorized[i]))
        return true;
    }
   return false;
}

void printSerial(byte *serial)
{
        Serial.print("Serial:");
    for (int i = 0; i < 4; i++) {
      Serial.print(serial[i], HEX);
      Serial.print(" ");
    }
}


Thể hiện khi cảm biến gặp thẻ từ đúng

( trên máy tính )

Và trên đèn led thi đèn bên tay trái các bạn tắt và tay phải bật , thể hiện truy cập đúng và mở

Thể hiện khi truy cập sai

Đèn bên tay phải các bạn vẫn bật thể hiện truy cập bị từ chối

Chúc các bạn thành công !

 

Sản phẩm liên quan