You are on page 1of 8

BÁO CÁO

THỰC HÀNH VI ĐIỀU KHIỂN


GVHD : ThS. LÊ VIẾT VĨNH
SVTH : NGUYỄN NGỌC HẢI (54149)
TRƯƠNG HỮU PHƯƠNG (52559)
LỚP : CA20A1A
ĐỀ TÀI: ĐỌC THẺ RFID(RC522)
1.1. Lý thuyết
Thẻ RFID (Radio Frequency Identification) RC522 là một loại thiết bị truyền
thông không dây được sử dụng để đọc và ghi thông tin trên thẻ RFID. Thẻ RFID
RC522 sử dụng sóng radio để truyền thông tin giữa thẻ và đầu đọc.
Cấu trúc của Thẻ RFID RC522:
 Mạch điều khiển: chịu trách nhiệm điều khiển toàn bộ hoạt động của thẻ
RFID RC522.
 Bộ xử lý: chứa vi xử lý và bộ nhớ để xử lý dữ liệu.
 Bộ điều khiển giao tiếp: kết nối với máy tính hoặc hệ thống đọc thẻ RFID.
 Anten: giúp truyền và nhận tín hiệu sóng radio.
 Các thành phần khác: bao gồm các linh kiện điện tử như điện trở, tụ,
điốt,...
Sơ đồ chân của Thẻ RFID RC522:
1. VCC: nguồn cấp 3.3V của thẻ RFID.
2. RST: chân reset của thẻ RFID.
3. GND: chân đất của thẻ RFID.
4. MISO: kết nối dữ liệu đầu vào (Master In Slave Out).
5. MOSI: kết nối dữ liệu đầu ra (Master Out Slave In).
6. SCK: tín hiệu đồng hồ.
7. SDA: kết nối truyền thông dữ liệu.
8. IRQ: chân ngắt, được sử dụng để thông báo về các trạng thái hoạt động
của thẻ RFID.
Nguyên lý hoạt động của Thẻ RFID RC522: Thẻ RFID RC522 sử dụng kỹ thuật
truyền thông không dây trên cùng một bước sóng với tần số 13,56 MHz để truyền
thông tin giữa thẻ và đầu đọc. Khi thẻ RFID RC522 được đưa vào phạm vi của đầu
đọc, anten trên thẻ sẽ bắt đầu phát tín hiệu sóng radio. Đầu đọc sử dụng anten để nhận
tín hiệu sóng radio này và đọc các thông tin được mã hóa trên thẻ. Sau đó, các thông
tin này được xử lý và chuyển đổi thành dữ liệu nhận dạng, thông tin sản phẩm hoặc dữ
liệu khác được lưu trữ trên thẻ RFID. Để ghi dữ liệu lên thẻ, đầu đọc cũng sử dụng
sóng radio để truyền thông tin đến anten trên thẻ và ghi dữ liệu vào bộ nhớ của thẻ
RFID.

1.2. Mạch mô phỏng

1.3. Bảng phân công IO


Thiết bị vào Thiết bị ra
Stt Tên TB Địa chỉ TB Mô tả Stt Tên TB Địa chỉ Mô tả
TB
1 MFRC522 1 servo 5
SDA 11 2 LCD
SCK 13 SDA A4
MOSI 10 SCL A5
MISO 12
RST 9
2 CB 3
3 NB 7
1.4. Lưu đô thuật toán
1.5. Chương trình điều khiển
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN   9   //chân kết nối với chân reset của module  
#define SS_PIN    10    //chân kết nối với chân chip select của module
MFRC522 mfrc522(SS_PIN, RST_PIN);  
int UID[4], i;
int ID1[4] = {01, 66, 136, 38};
#include <Servo.h>
Servo myServo;
int servo=5;
int CB=3;
int NB=7;
int goc;
void setup()
{
  Serial.begin(9600);
  lcd.init();    //khởi tạo màn hình LCD
  lcd.backlight();  //bật đèn nền
  lcd.setCursor(0,0);
  lcd.print("    WELCOME!   ");
  myServo.attach(servo); //kết nối động cơ servo với chân điều khiển
  pinMode(CB,INPUT_PULLUP);
  pinMode(NB,INPUT_PULLUP);
  myServo.write(0); //Đóng cửa

  SPI.begin();    //khởi tạo giao thức SPI trên Arduino


  mfrc522.PCD_Init();  // khởi tạo module đọc thẻ RFID MFRC522
}

void loop()
{
  lcd.setCursor(0,1);//cột,dòng
  lcd.print("<SCAN YOUR TAG>");
  if(digitalRead(NB)==0) //Nếu nhấn nút mở cửa bên trong
  {
    lcd.setCursor(0,1);
    lcd.print("   OPENING...   ");
    for(goc=myServo.read();goc<=180;goc++) //Mở cửa
    {
    myServo.write(goc);
    delay(10);
    if(digitalRead(CB)==0)  //Nếu có người đứng giữa cửa
    {
      for(goc=myServo.read();goc<=180;goc++) //Mở cửa
      {
      myServo.write(goc);
      delay(10);
      }
    }
     while(digitalRead(CB)==0){} //Chờ đến khi người đi qua
    }

    delay(5000); // Chờ 5s
    lcd.setCursor(0,1);
    lcd.print("   CLOSING...   ");
    for(goc=myServo.read();goc>=0;goc--) // Đóng cửa
    {
    myServo.write(goc);
    delay(10);

    if(digitalRead(CB)==0) //Nếu có người đứng giữa cửa


    {
      myServo.write(goc); //Dừng cửa
      delay(1000);       // Chờ 1s
      lcd.setCursor(0,1);
      lcd.print("   OPENING...   ");
      for(goc=myServo.read();goc<=180;goc++) //Mở cửa
      {
      myServo.write(goc);
      delay(10);
      }
      while(digitalRead(CB)==0){} //Chờ đến khi người đi qua
      delay(2000);  //Chờ 2s
    lcd.setCursor(0,1);
    lcd.print("   CLOSING...   ");
    }
    }
  }
 
 if ( ! mfrc522.PICC_IsNewCardPresent()) //kiểm tra thẻ RFID mới nào được
đưa vào vùng đọc của module MFRC522 hay không.
  {
    return;
  }
 
  if ( ! mfrc522.PICC_ReadCardSerial()) //đọc thông tin trên thẻ Nếu không
thành công, hàm sẽ kết thúc bằng cách trả về. Nếu thành công, thông tin trên
thẻ được đọc và lưu trữ
  {  
    return;  
  }
 
  Serial.print("UID of Card: ");  
 
  for (byte i = 0; i < mfrc522.uid.size; i++) //duyệt qua từng byte trong
mảng uidByte của đối tượng uid của module MFRC522.
  {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); //Nếu giá trị
của uidByte[i] là số nguyên nhỏ hơn 0x10 (hoặc 16 ở dạng thập phân), thì dữ
liệu sẽ được in ra với một dấu cách và số 0 trước giá trị đó. Nếu không, chỉ
in ra giá trị đó.
    UID[i] = mfrc522.uid.uidByte[i];//lưu trữ giá trị của uidByte[i] vào
mảng UID.
    Serial.print(UID[i]);
  }
  Serial.println("   ");

 
  if (UID[i] == ID1[i] ) //Nếu thẻ đúng
  {
    lcd.setCursor(0,1);
    lcd.print("   OPENING...   ");
    for(goc=myServo.read();goc<=180;goc++)
    {
    myServo.write(goc);
    delay(10);
    if(digitalRead(CB)==0)
    {
      myServo.write(goc);
      delay(10);
      for(goc=myServo.read();goc<=180;goc++)
      {
      myServo.write(goc);
      delay(10);
      }
    }
     while(digitalRead(CB)==0){}
    }

    delay(5000);
    lcd.setCursor(0,1);
    lcd.print("   CLOSING...   ");
    for(goc=myServo.read();goc>=0;goc--)
    {
    myServo.write(goc);
    delay(10);

    if(digitalRead(CB)==0)
    {
      myServo.write(goc);
      delay(1000);
      lcd.setCursor(0,1);
      lcd.print("   OPENING...   ");
      for(goc=myServo.read();goc<=180;goc++)
      {
      myServo.write(goc);
      delay(10);
      }
      while(digitalRead(CB)==0){}
      delay(2000);
    lcd.setCursor(0,1);
    lcd.print("   CLOSING...   ");
    }
    }
  }
  else // Nếu thẻ sai
  {
    lcd.setCursor(0,1);
    lcd.print("   WRONG TAG!   ");
    delay(2000);
  }
 

 
}

You might also like