9. 案例 06:密碼自動門

難度:level auto_fit

9.1. 目標


製作一個能用按鈕開門的密碼自動門。

9.2. 背景


甚麼是密碼自動門?

現在電子鎖及自動門已經十分普及,其功能除了防盜外,亦提升了不少的方便性。例如不用攜帶實體鎖匙,只需要使用密碼或生物特徵,就可以解鎖。過程中也不用去推拉門來打開或關閉,自動門會自動執行開關動作。

運作原理

房主設定開門密碼為(A=2 & B=3)

  1. 初始化兩個變數count_Acount_B

  2. 按下按鈕 A,count_A會加 1。而按下按鈕 B,則count_B會加 1。

  3. 使用者輸入密碼後,再按按鈕 A+B 檢查密碼。如果正確,micro:bit 會顯示剔號,否則會顯示交叉。

  4. 使用者按下門旁邊的按鈕。

  5. 如果密碼正確,門就會打開,並在5秒後關上。

auto_fit

9.3. 所用部件


pic_90

9.4. 組裝步驟


步驟一

這個案例以「開放式模型」作為房子的基礎。

pic

步驟二

要建造智慧門,先用 M4 * 10 毫米螺絲及螺母把按鈕安裝到 B1 模型上,並與 B1 模型上門旁邊的孔對齊。連接線應穿過上面的孔。

pic

步驟三

用 M3 * 10 毫米螺絲及螺母把 L型支架固定到 B1 模型的背面。

pic

步驟四

用 M2 * 7.5 毫米螺絲把舵機半搖臂固定在舵機,並把 180ᵒ舵機組裝到 A 模型。

pic

步驟五

把萬字夾用作鉤子連接 L型支架和 180ᵒ舵機。

pic

步驟六

組裝完成!

pic

9.5. 線路連接


  1. 連接按鈕到 P0 端口

  2. 連接180ᵒ舵機到 P1 端口

  3. 把蜂鳴器開關向上撥以斷開蜂鳴器

pic_80

9.6. 編程(MakeCode)


步驟一. 建立變數和初始化舵機

  • 建立變數count_Acount_Bunlock auto_fit

  • 當啟動時裡,用變數 unlock 設為 false轉動180度舵機到45度接口P1將門的狀態初始化為關閉,並設count_Acount_B為 0。 pic_60

步驟二. 監測按鈕狀態並採取行動

  • 加入當按鈕接口P0被按下

  • 在裡面加入一個如果語句

  • 設條件為unlock = true

  • unlock = true,即表示成功解鎖,舵機應以轉動180度舵機到180度接口P1來打開門,​​之後通過暫停 5000 毫秒等待5秒,最後以轉動180度舵機到45度接口P1變數 unlock 設為 false來關上門並再次鎖上。 pic_60

步驟三. 密碼輸入方式

  • 加入當按鈕 A 被按下

  • 變數 count_A 改變 1把計數變數增加1

  • 重複以上步驟,但稍有不同的是讓按鈕 B 增加count_B pic_60

步驟四. 檢查密碼

  • 加入當按鈕 A+B 被按下

  • 在裡面加入一個如果-否則語句

  • count_A = 2count_B = 3為條件,您也可以將其變更為您喜歡的密碼

  • 在代表輸入正確的如果段中,加入顯示圖示剔號變數 unlock 設為 true,按下擴充按鈕即可打開門。

  • 在代表輸入錯誤的否則段中,加入顯示圖示交叉變數 unlock 設為 false,按下擴充按鈕時拒絕開門。

  • 將兩個計數變數count_Acount_B重設為 0 以供下次輸入。 pic_70

完整答案

MakeCode: https://makecode.microbit.org/_JbC8kyH4p48m

你可以從以下網頁中下載HEX檔案:

9.7. 結果


按下正確次數的按鈕 A 和 B 後,按 A+B 驗證。
如果密碼正確,按下擴充按鈕門就會打開。5 秒後門將再次關閉並鎖上。如果輸入錯誤,請勿開門。

auto_fit

9.8. 思考


Q1. 除了使用實體按鈕之外,還有更好的方法來控制門的開關嗎?

Q2. 可以讓門鈴在開門時發出聲音嗎?

Q3. 除了門,開關還可以用於其他用途嗎? (例如開啟/關閉 LED)

Q4. 你能否新增一個規則,如果輸入錯誤超過3次,則顯示警報訊息並鎖門5分鐘?