LinkIt7697搭配LinkIt Remote打造智慧門禁系統 6項功能、6大特色一次帶您看!!

作者/攝影
  • 智慧門禁系統作者:曾希哲老師
  • 文字整理:CAVEDU 宗諭
  • 圖片:曾希哲老師、pixabay
材料表
  • LinkIt 7697*1(若欲購買,請洽機器人王國商城)
  • RC522 RFID讀取器*1
  • 電磁鎖*1
  • LCD*1
  • 蜂鳴器*1
  • Mifare S50 Card*1
  • 智慧型手機*1

因長期致力於科技教育,CAVEDU團隊認識許多老師,但慢慢地我們才發現,教師當中真是人才濟濟,高手藏身於教育界。對科技、程式教育,有熱忱又富能力的老師其實相當多,例如熱衷於四軸飛行器教學的洪雅慧老師,還有對於Micro:bit深有研究的劉正吉老師⋯⋯等等,而花蓮的曾希哲老師也是其中之一。

圖1 各路高手在教師界

 

若仔細瞧瞧曾希哲老師的臉書頁面,上面幾乎都是他各種學習程式、物聯網、開發板的心得、照片及影片,例如,他最近就在玩LinkIt 7697的擴充板,不斷發出新的貼文,真感受到他的樂此不疲!為將所學得的技術充分教導給學生,曾老師也架設一個網站「曾希哲的學習天地」,上面有他學習物聯網、LinkIt 7697、Arduino⋯⋯等等心得,讀者們記得抽空去逛逛喔!

圖2 曾希哲老師的個人網站

 

本文的主角是曾希哲老師一手打造的「智慧門禁系統」。當初,曾老師有做過RFID的門禁系統,並於2017年以此系統參加過「花蓮創客賽物聯網組」,卻一直找不著適合的按鍵輸入方式。

因此,曾希哲老師便逐漸萌生以手機當作藍牙鍵盤的想法,並想透過LinkIt Remote實現。後來,他在手機上實做出藍牙鍵盤,並加入原有的門禁系統中,再把幾項一直想做出的功能實現,最後「智慧門禁系統」就大功告成。(噹啷~~)

圖3 智慧門禁系統

 

讓我們先看看曾希哲老師親自錄製的介紹影片:

 

這個「智慧門禁系統」包含哪些單元呢?請見下圖:

圖4

 

智慧門禁系統的功能與特色

系統是以LinkIt 7697為核心建立,有以下幾項功能:

  1. 可用RFID刷卡輸入
  2. 可以藍牙鍵盤輸入
  3. LCD顯示輸出
  4. 蜂鳴器輸出
  5. 若使用者兩次輸入錯誤,系統就會透過Line即時訊息通知屋主。
  6. 假設使用者受威脅必須開門,可輸入威脅密碼,門一樣會打開,但會在威脅者無法察覺情況下,以Line即時訊息通知屋主,使屋主能盡快報警。

 

這個系統又有哪些特色呢?

  1. 以手機作為藍牙鍵盤,使用起來相對方便。
  2. 使用者受威脅需開門時,可使用威脅密碼。
  3. 同時使用藍牙與WiFi功能,LinkIt 7697是以IFTTT網路服務,透過Wi-Fi傳送Line即時訊息。
  4. 不需使用App Inventor撰寫手機程式,只要撰寫7697程式即可。
  5. 使用LinkIt 7697 BlocklyDuino,程式撰寫比較容易。
圖5

 

圖6 圖5、6為曾希哲老師運用LinkIt 7697 BlocklyDuino,所撰寫的程式碼。

 

6.可透過這個系統,學習RFID的概念。

 

進一步交流

關於如何自造智慧門禁系統,應是因製作步驟較複雜,曾希哲老師只簡單提及,就是拆解系統各部分功能,然後進行各單元製作、測試,逐步組成為一個完整系統。若讀者閱畢本文,有興趣進一步了解此系統,歡迎直接至曾希哲老師的臉書頁面與他交流。

前文提及,曾老師設計、製作此系統很重要的原因,是為了實踐把手機當成藍牙鍵盤。而他是用BlocklyDuino撰寫藍牙鍵盤的程式,若讀者想更多了解,可點此下載原始程式碼。

 

結語

總之,曾希哲老師目前正積極測試LinkIt 7697擴充板的各式功能,若後續有任何消息、成果,CAVEDU教育團隊也會成為報馬仔,透過技術部落格或臉書粉絲專頁,跟讀者們分享,敬請期待!

 

附錄:

曾希哲老師以BlocklyDuino撰寫藍牙鍵盤的程式碼

/*
* Generated using BlocklyDuino:
*
* https://github.com/MediaTek-Labs/BlocklyDuino-for-LinkIt
*
* Date: Wed, 27 Jun 2018 18:58:00 GMT
*/

#include <LRemote.h>

int SetPasswd;

int PhonePasswd;

int c;

String S1;

String S2;

String S3;

String S4;

String InputPsaawd;

String OpeningDoor;

String PasswdError;

LRemoteLabel label1;
LRemoteButton button7;
LRemoteButton button8;
LRemoteButton button9;
LRemoteButton button4;
LRemoteButton button5;
LRemoteButton button6;
LRemoteButton button1;
LRemoteButton button2;
LRemoteButton button3;
LRemoteButton button0;
LRemoteButton button10;

void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
LRemote.setName("LinkIt 7697");
LRemote.setOrientation(RC_PORTRAIT);
LRemote.setGrid(3, 5);
label1.setPos(0, 0);
label1.setText("Input Password");
label1.setSize(3, 1);
label1.setColor(RC_ORANGE);
LRemote.addControl(label1);

button7.setPos(0, 1);
button7.setText("7");
button7.setSize(1, 1);
button7.setColor(RC_BLUE);
LRemote.addControl(button7);

button8.setPos(1, 1);
button8.setText("8");
button8.setSize(1, 1);
button8.setColor(RC_GREEN);
LRemote.addControl(button8);

button9.setPos(2, 1);
button9.setText("9");
button9.setSize(1, 1);
button9.setColor(RC_BLUE);
LRemote.addControl(button9);

button4.setPos(0, 2);
button4.setText("4");
button4.setSize(1, 1);
button4.setColor(RC_GREEN);
LRemote.addControl(button4);

button5.setPos(1, 2);
button5.setText("5");
button5.setSize(1, 1);
button5.setColor(RC_BLUE);
LRemote.addControl(button5);

button6.setPos(2, 2);
button6.setText("6");
button6.setSize(1, 1);
button6.setColor(RC_GREEN);
LRemote.addControl(button6);

button1.setPos(0, 3);
button1.setText("1");
button1.setSize(1, 1);
button1.setColor(RC_BLUE);
LRemote.addControl(button1);

button2.setPos(1, 3);
button2.setText("2");
button2.setSize(1, 1);
button2.setColor(RC_GREEN);
LRemote.addControl(button2);

button3.setPos(2, 3);
button3.setText("3");
button3.setSize(1, 1);
button3.setColor(RC_BLUE);
LRemote.addControl(button3);

button0.setPos(0, 4);
button0.setText("0");
button0.setSize(1, 1);
button0.setColor(RC_GREEN);
LRemote.addControl(button0);

button10.setPos(1, 4);
button10.setText("Clear");
button10.setSize(2, 1);
button10.setColor(RC_ORANGE);
LRemote.addControl(button10);
LRemote.begin();
SetPasswd = 10;
PhonePasswd = 0;
c = 0;
digitalWrite(LED_BUILTIN, LOW);
S1 = "*";
S2 = "**";
S3 = "***";
S4 = "****";
InputPsaawd = "Input Password";
OpeningDoor = "Opening Door";
PasswdError = "Password Error";
}


void loop()
{
LRemote.process();
if (button0.isValueChanged()) {
if (button0.getValue() == 1) {
c = c + 1;
if (c == 1) {
PhonePasswd = PhonePasswd + 1;

}

}

} else if (button1.isValueChanged()) {
if (button1.getValue() == 1) {
c = c + 1;
if (c == 2) {
PhonePasswd = PhonePasswd + 2;

}

}
} else if (button2.isValueChanged()) {
if (button2.getValue() == 1) {
c = c + 1;
if (c == 3) {
PhonePasswd = PhonePasswd + 3;

}

}
} else if (button3.isValueChanged()) {
if (button3.getValue() == 1) {
c = c + 1;
if (c == 4) {
PhonePasswd = PhonePasswd + 4;

}

}
} else if (button4.isValueChanged()) {
if (button4.getValue() == 1) {
c = c + 1;

}
} else if (button5.isValueChanged()) {
if (button5.getValue() == 1) {
c = c + 1;

}
} else if (button6.isValueChanged()) {
if (button6.getValue() == 1) {
c = c + 1;

}
} else if (button7.isValueChanged()) {
if (button7.getValue() == 1) {
c = c + 1;

}
} else if (button8.isValueChanged()) {
if (button8.getValue() == 1) {
c = c + 1;

}
} else if (button9.isValueChanged()) {
if (button9.getValue() == 1) {
c = c + 1;

}
} else if (button10.isValueChanged()) {
if (button10.getValue() == 1) {
label1.updateText(String(InputPsaawd));
c = 0;
PhonePasswd = 0;

}
}
if (c == 1) {
label1.updateText(String(S1));

} else if (c == 2) {
label1.updateText(String(S2));
} else if (c == 3) {
label1.updateText(String(S3));
} else if (c == 4) {
label1.updateText(String(S4));
delay(500);
if (SetPasswd == PhonePasswd) {
label1.updateText(String(OpeningDoor));
digitalWrite(LED_BUILTIN, HIGH);
delay(5000);
digitalWrite(LED_BUILTIN, LOW);

} else {
label1.updateText(String(PasswdError));
delay(5000);

}
label1.updateText(String(InputPsaawd));
c = 0;
PhonePasswd = 0;
}
delay(100);
}

 

相關文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *