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了。
所以後來我改用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(0x27, 16, 2);
const int num=4;
byte uid[num][4]={{0x7A, 0x39, 0x35, 0x29},{0xBB, 0x67, 0x89, 0x22},{0x69, 0x11, 0xB0, 0x6E},{0xFD, 0x02, 0x3E, 0xB4}}; //這是我們指定的卡片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(1, 0);
lcd.print("Welcome to got");
lcd.setCursor(0, 5);
lcd.print("home");
delay(3000);
lcd.clear();
lcd.setCursor(0, 1);
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(1, 0);
lcd.print("access denied!");
delay(3000);
lcd.clear();
lcd.setCursor(0, 1);
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(0, 1);
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
留言
張貼留言