作者/攝影 |
- 智慧門禁系統作者:曾希哲老師
- 文字整理:CAVEDU 宗諭
- 圖片:曾希哲老師、pixabay
|
材料表 |
- LinkIt 7697*1(若欲購買,請洽機器人王國商城)
- RC522 RFID讀取器*1
- 電磁鎖*1
- LCD*1
- 蜂鳴器*1
- Mifare S50 Card*1
- 智慧型手機*1
|
因長期致力於科技教育,CAVEDU團隊認識許多老師,但慢慢地我們才發現,教師當中真是人才濟濟,高手藏身於教育界。對科技、程式教育,有熱忱又富能力的老師其實相當多,例如熱衷於四軸飛行器教學的洪雅慧老師,還有對於Micro:bit深有研究的劉正吉老師⋯⋯等等,而花蓮的曾希哲老師也是其中之一。
若仔細瞧瞧曾希哲老師的臉書頁面,上面幾乎都是他各種學習程式、物聯網、開發板的心得、照片及影片,例如,他最近就在玩LinkIt 7697的擴充板,不斷發出新的貼文,真感受到他的樂此不疲!為將所學得的技術充分教導給學生,曾老師也架設一個網站「曾希哲的學習天地」,上面有他學習物聯網、LinkIt 7697、Arduino⋯⋯等等心得,讀者們記得抽空去逛逛喔!
本文的主角是曾希哲老師一手打造的「智慧門禁系統」。當初,曾老師有做過RFID的門禁系統,並於2017年以此系統參加過「花蓮創客賽物聯網組」,卻一直找不著適合的按鍵輸入方式。
因此,曾希哲老師便逐漸萌生以手機當作藍牙鍵盤的想法,並想透過LinkIt Remote實現。後來,他在手機上實做出藍牙鍵盤,並加入原有的門禁系統中,再把幾項一直想做出的功能實現,最後「智慧門禁系統」就大功告成。(噹啷~~)
讓我們先看看曾希哲老師親自錄製的介紹影片:
這個「智慧門禁系統」包含哪些單元呢?請見下圖:
智慧門禁系統的功能與特色
系統是以LinkIt 7697為核心建立,有以下幾項功能:
- 可用RFID刷卡輸入
- 可以藍牙鍵盤輸入
- LCD顯示輸出
- 蜂鳴器輸出
- 若使用者兩次輸入錯誤,系統就會透過Line即時訊息通知屋主。
- 假設使用者受威脅必須開門,可輸入威脅密碼,門一樣會打開,但會在威脅者無法察覺情況下,以Line即時訊息通知屋主,使屋主能盡快報警。
這個系統又有哪些特色呢?
- 以手機作為藍牙鍵盤,使用起來相對方便。
- 使用者受威脅需開門時,可使用威脅密碼。
- 同時使用藍牙與WiFi功能,LinkIt 7697是以IFTTT網路服務,透過Wi-Fi傳送Line即時訊息。
- 不需使用App Inventor撰寫手機程式,只要撰寫7697程式即可。
- 使用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);
}
相關文章
Post Views: 379