Arduino第39課4×4薄膜鍵盤(密碼鎖)

4×4薄膜鍵盤:
是一款常見的薄膜按鍵模組,由16個按鍵(開關)交織而成,4×4按鍵模組有8個接腳,分別排成列、行兩組。(註1)

圖片來源:https://swf.com.tw/images/books/arduino/keypad/keypad_4x4.png

接線圖:

——————————

一、上拉電阻原理

在Arduino上使用開關來控制電路,讀取資料時,如果直接使用[INPUT]指令輸入,常常因為受到環境雜訊的影響,會發生讀取訊號不穩定的現象(沒有動作卻有時讀取到 HIGH ,有時卻讀取到 LOW),造成讀取判斷錯誤。為了確保它在穩定的狀態,,必須接個上拉電阻或下拉電阻。(註2)

上拉電阻:

如上圖,5V接電阻(一般接10Kꭥ),再接開關、接地,中間引出接數位腳D5輸入。

使用下面積木宣告

注意:

當按鍵開關未接通時,數位腳D5讀取到高電位(1),當開關接通時,數位腳D5讀取到低電位(0)。

—————————-

內建了上拉電阻

其實arduino在數位腳位都已經內建了上拉電阻,只要使用下面的宣告[INPUT_PULLUP]

就可以取代上面的外接電阻,電路圖變成下面

接線圖:

按鍵開關可以直接接數位腳D5輸入,省去外接上拉電阻的麻煩 。

注意:

當按鍵開關未接通時,數位腳D5讀取到高電位(1),當開關接通時,數位腳D5讀取到低電位(0)。

————————–

二、測試腳位程式

以下為每一個按鍵讀取功能測試。

數位腳D4、D5、D6、D7負責供電,每一次只有一個腳位為0,就是上圖的接地。

數位腳D8、D9、D10、D11負責讀取數位訊號,就是上圖的D5。

當按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),其他沒有按下的按鍵都讀取到高電位(1),就可以知道是按下哪一個按鍵。

(一)按鍵147*

先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。

[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。

建立變數[密碼],讓按鍵的值可以顯示出來。

[同時輸出:腳位4輸出1,腳位5輸出1,腳位6輸出1,腳位7輸出0],數位腳D4、D5、D6輸出高電位(1),數位腳D7出低電位(0),就是只有第1行的按鍵[147*]按下去會接地,可以讀取到低電位(0)。

[重複無限次],檢查按鍵按下了沒有。

如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。

程式下載:147.sb2

(二)按鍵2580

先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。

[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。

建立變數[密碼],讓按鍵的值可以顯示出來。

[同時輸出:腳位4輸出1,腳位5輸出1,腳位6輸出0,腳位7輸出1],數位腳D4、D5、D7輸出高電位(1),數位腳D6出低電位(0),就是只有第2行的按鍵[2580]按下去會接地,可以讀取到低電位(0)。

[重複無限次],檢查按鍵按下了沒有。

如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。

程式下載:2580.sb2

(三)按鍵369#

先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。

[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。

建立變數[密碼],讓按鍵的值可以顯示出來。

[同時輸出:腳位4輸出1,腳位5輸出0,腳位6輸出1,腳位7輸出1],數位腳D4、D6、D7輸出高電位(1),數位腳D5出低電位(0),就是只有第3行的按鍵[369#]按下去會接地,可以讀取到低電位(0)。

[重複無限次],檢查按鍵按下了沒有。

如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。

程式下載:369#.sb2

(四)按鍵ABCD

先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。

[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。

建立變數[密碼],讓按鍵的值可以顯示出來。

[同時輸出:腳位4輸出0,腳位5輸出1,腳位6輸出1,腳位7輸出1],數位腳D5、D6、D7輸出高電位(1),數位腳D4出低電位(0),就是只有第3行的按鍵[ABCD]按下去會接地,可以讀取到低電位(0)。

[重複無限次],檢查按鍵按下了沒有。

如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。

程式下載:ABCD.sb2

三、讀取全部的按鍵

確定每一個按鍵的對應關係後,就可以寫一個程式來讀取按鍵結果。

四、連續輸入

上一個程式按下按鍵後,程式就會停止。需要重新再按一次綠旗重新執行程式。

請將程式修改成可以連續按鍵輸入。

五、紀錄輸入

上一個程式按鍵輸入,顯示結果後,就不見了。

請修改程式,將每一次按鍵的結果記錄下來。

六、密碼開門(密碼鎖)

設計一個程式可以比對按鍵結果,如果按鍵輸入和密碼相同就開門。

延伸:

1.可以增加[當收到訊息(開門)],就輸出一個訊號給電鎖開關,就變成真正的電子密碼門鎖了。

2.可以增加[當收到訊息(開門)],就輸出一個訊號給 [繼電器] (第13課),就變成電子密碼開關了,可以控制家電用品。

3.可以使用 [ 伺服馬達為腳位(…)轉動角度為(…)度]  的指令積木,用來控制伺服馬達的轉動角度。當輸入不同的密碼,可以轉動不同的角度,可以觸動不同的開關,做出不同的動作。(第11課)

4.小朋友想想看,按鍵開關還有什麼用途?

——————

註1:參考資料:https://swf.com.tw/?p=917

註2:

資料來源:http://yehnan.blogspot.tw/2013/09/arduinotilt-ball-switch.html

註3:

讀取資料時,常常因為受到環境雜訊的影響,會發生讀取訊號不穩定的現象(有時讀取到 HIGH 有時卻讀取到 LOW),造成讀取判斷錯誤。為了確保它在穩定的狀態,,必須接個上拉電阻或下拉電阻。

詳細說明請參考:http://blog.ilc.edu.tw/blog/blog/868/post/97509/656348

———————————————

相關連結:

新DiFi課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/104089/678192

WFduino(Arduino)課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/97509/641433

————————

為什麼要推Arduino初級班課程為正式課程?

A:

1.程式寫作如果結合外部感應器,可以達成簡單的自動控制功能,進一步讓學生創作一些作品改善生活或是增加樂趣。課程內容適合小孩或初學者,完成初級班課程後,發揮創意再加上市面上的各種感應器,就可以創造各種有用、有趣的作品,讓資訊課不再只是[電腦課]。

2.教育機會均等:適合國小五、六年級以上學生,全年級都上一個學期課的型態,讓全校學生都能接受基礎的Maker資訊課,讓家裡沒有電腦、沒錢上社團、科學班的學生享有平等的受教權。

3.本系列課程,材料便宜(初級班基本材料費每校只要幾千元),程式安裝簡便,學生學習容易(簡單的電子零件,搭配積木式拖拉來完成程式寫作),有完整的教材教案提供老師教學(老師只要依照課程示範,學生創意無限)。

roc

宜蘭縣國小資訊小站

您可能也會喜歡…