RFID門禁系統實作-作品(1)

 RFID門禁系統實作

前言:

之前在家門用樹苺派人臉辨識的方法於門禁鎖,但因為辨識

須要耗時,解鎖時間大概要十秒,後來家人覺得麻煩就不太用了,

後來這一年開始玩Arduino覺得用於專案比較實際,所以開始

改善家裡門禁,讓它再度啓用。

先來看看實際完成是什麼樣子


所須零件模組清單

Arduino nano V3.0 x1

RC522 x1

LCD I2C x1

LED 紅 x1 

LED 綠 x1

10k電阻 x2(視LED耐壓決定)

門鎖 x1

繼電器模組 x1

3D列印外殼-連結

30cm以上杜邦線 若干

注意事項

#如果LCD模組用1602沒i2c恐怕實際安裝上門螢幕無法正常顯示
所以後來我改用I2C,就OK了。

#有兩種選擇,一個是把nano放在感應卡盒裡,另一則放在盒外,
我選用放盒外,原因是放盒裡雖然接出的電線較少,但很擠,且nano
電源要另外從vim接點拉出,測試結果好像就是使LCD和門鎖無法
正常運作的原因。

前置作業

接線
先將門禁感應的程式寫好並測試



讀卡比對並用簡易電子鎖測試-程式碼


#include <SPI.h>
#include <Wire.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
const int SS_PIN=10;
const int RST_PIN=9;
const int g_led=3;
const int r_led=4;
MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27162);
const int num=4;
byte uid[num][4]={{0x7A0x390x350x29},{0xBB0x670x890x22},{0x690x110xB00x6E},{0xFD0x020x3E0xB4}};  //這是我們指定的卡片UID,可由讀取UID的程式取得特定卡片的UID,再修改這行

void compTag(){
  int serialnum=-1;
  
  for (int i=0; i<num; i++){
    int e=1;
    for (int j=0; j<4; j++){
      if (rfid.uid.uidByte[j] != uid[i][j]){
        e=0;
      }
    }
    if (e==1){
      serialnum=i;
    }
  }
  if (serialnum>=0){
    Serial.print(serialnum);
    digitalWrite(g_led, HIGH);
    delay(1000);
    digitalWrite(g_led, LOW);
    Serial.print(" ");
    Serial.println("access pranted!");
    lcd.clear();
    lcd.setCursor(10);
    lcd.print("Welcome to got");
    lcd.setCursor(05);
    lcd.print("home");
    delay(3000);
    lcd.clear();
    lcd.setCursor(01);
    lcd.print("RFID is reading...");
  }else {
    Serial.print(serialnum);
    digitalWrite(r_led, HIGH);
    delay(1000);
    digitalWrite(r_led, LOW);
    Serial.print(" ");
    Serial.println("access denied!");
    lcd.clear();
    lcd.setCursor(10);
    lcd.print("access denied!");
    delay(3000);
    lcd.clear();
    lcd.setCursor(01);
    lcd.print("RFID is reading...");

  }
}
void setup() {
  lcd.init();
  lcd.backlight();
  pinMode(r_led, OUTPUT);
  pinMode(g_led, OUTPUT);
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  Serial.print("RFID is reading....");
  lcd.setCursor(01);
  lcd.print("RFID is reading...");
}

void loop() {
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()){
    int size=rfid.uid.size;
    Serial.print("UID: ");
    for (int i=0; i<size; i++){
      Serial.print(rfid.uid.uidByte[i], HEX);
      Serial.print(" ");
    }
    Serial.println("");
    compTag();
  rfid.PICC_HaltA();
  delay(1000);
  }
}

此程式包含讀卡的UID碼,將想要設定開門卡的UID碼填入上面程式裡的uid[num][4]={{}}裡
假設有2組門禁卡,就寫成num=2
uid[num][4]={{0x2A, 0x4r, 0xDH, 0xAB},{0x6B, 0x5D,0xRT, 0xUJ}}

實際上接門鎖

我所使用的是這款較通用的電子門鎖-鳥牌(BIRD)
它有分外開和內開,要看自己家是由家裡面解鎖後
門是往自己方向拉就是內開,往外打開就是外開

電子門鎖附上的線圖如下

看起來是很複雜,但我只是要找到正負引線,我這裡實際會用到的是AC和EL

接線圖

其它的較麻煩的部份就是拉線和收線








留言

這個網誌中的熱門文章

平衡小車(balance-Robot)-基本平衡-Arduino