Arduino第34課按鍵(上拉電阻)

按鍵:可以控制通路或斷路的開關,一般使用為按下為通路,放開為斷路。(註1)

微動開關、水銀開關、滾珠開關、磁簧開關等也都是同樣的原理,可以控制電路的通路或斷路,也都可以適用本課的教學及範例。

小學生用2腳的,比較不會接錯方向。(最近發現針腳容易折斷)

注意:

如果是四腳的開關,請學生要注意方向,翻開背面,以中間的溝槽為分界,AB相連,CD相連,AB和CD不相通。

如果沒有溝槽的,直接如上面的接線圖插入麵包板試試看,如果還沒按按鍵就會亮,那就拔起來轉90度再插下去,試試看是否變成需要按按鍵才會亮。

一、直接控制LED亮或熄滅

 

利用Arduino的5V供電,經過按鍵接LED再接電阻再接GND,形成一個迴路

按下開關,形成通路,LED亮

鬆開開關,LED熄滅

二、運用Arduino的數位輸入來控制LED亮或滅

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

上拉電阻:

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

使用下面積木宣告

注意:

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

—————————-

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

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

開關直接接數位腳D8輸入,省去外接上拉電阻的麻煩 。

注意:

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

———————————-

 

按鍵一邊接地(GND),另一邊接一條訊號線到數位腳D8當作判斷輸入訊號。

數位腳D11接紅色LED正極,再串接220歐姆電阻後接地(GND)。

加上[說(讀取數位腳位(8))],可以從螢幕上看到讀取(輸入)的結果。

如果按鍵按下時,數位腳D8得到0(低電位),這時就給數位腳D11輸出一個高電位(1),讓紅色LED亮。

否則(沒有按鍵按下時),數位腳D8是1(高電位),這時就設定腳為11為低電位,讓紅色LED熄滅。

程式下載按鍵.sb2

延伸:

1.請同學思考[重複執行]這個積木可不可以去掉?

2.試試看去掉後的執行結果有什麼不同?

3.加上蜂鳴器,讓按下時蜂鳴器會響。

三、彈奏鼓聲

按鍵後LED亮,並使用電腦喇叭發出鼓聲

重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(8)的值。

如果按鍵按下時(數位腳位8的值=0),就給數位腳11輸出一個1(高電位),讓紅色LED亮,並[彈奏鼓聲]

可以選擇發出不同的[鼓聲]及節拍。

程式下載按鍵(鼓).sb2

四、打擊樂

將程式的[彈奏鼓聲]改為[播放聲音],可以選擇發出不同的[聲音]

選取程式的[音效],點選新聲音的小喇叭圖示

選擇要播放的聲音檔(可以先點檔案內的小三角形試聽),按[確定]。

這次選敲鑼。

重複執行:判斷按鍵是不是有按下按鍵。

如果按鍵按下時(數位腳位8的值=0),就給數位腳11輸出一個1(高電位),讓紅色LED亮,並發出鑼聲的音效。

程式下載按鍵(鑼).sb2

五、打擊樂(修正)

如果按下按鍵不放開,會發現鑼聲被中斷變成不像鑼聲。

改成[播放音效…..直到播放完畢],可以讓鑼聲完整的播完。

程式下載按鍵(鑼)修正.sb2

六、播放音樂

重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(8)的值。

如果按鍵按下時(數位腳位8的值=0),就給數位腳11輸出一個1(高電位),讓紅色LED亮,並播放音效。

選擇長一點的音效,變成按下按鍵播放一首音樂。

程式下載按鍵(音樂).sb2

七、播樂器聲音

如果將程式的[播放音效],修改為使用[設定樂器為..],加上[彈奏音符……]的指令,就可以發出更悅耳的聲音了。

使用[設定樂器為(…)],可以選擇不同的樂器

使用[彈奏音符(音階)(…)拍,來設定(音階)和節拍。

程式下載按鍵(樂器).sb2

八、改變主角造形

主程式跟上面一樣,再多加[下一個造型]及[播放音效]指令,當按下按鍵,播放音效並改變主角造型。

加上[移動5步],讓小貓看起來像在走路。

程式下載按鍵(造型).sb2

九、主角做特效

直接用按鍵控制螢幕主角做特效動作。

增加錄音效果

1.點選[音效],再點[麥克風]圖樣,再點黑色圓點開始錄音

圓點變成紅色,開始錄音,錄好,再按一下,完成錄音。

按[編輯]可以作一些簡單的剪輯。

   

不斷的判斷按鍵是不是有按下。

如果按鍵沒被按下,就說 [請按按鍵!]。

如果按鍵按下時,就說[啊!我被按了],並做魚眼效果及播放錄音音效。

程式下載按鍵(效果).sb2

延伸

1.改用其他特效試試看。

2.可再增加聲音效果,或變換造型,或移動…….

十、演奏自編歌曲

按下按鍵就彈奏演奏自編歌曲。

主程式:

設定樂器種類,上圖[設定樂器為1] 是鋼琴。

重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(8)的值。

如果按鍵按下時(數位腳位8的值=0),就給數位腳11輸出一個1(高電位),讓紅色LED亮,並演奏自編歌曲。

否則就輸出一個0(低電位)給數位腳11,讓LED熄滅。

製作音樂積木

因為歌曲常常有一些重複的曲段,所以用積木來編排,節省程式長度,比較簡潔。

如果想要變換樂器聲音,只要更改[樂器種類]就可以了。

以小星星為例,主要分成3段,各用了2次。

主程式變得很簡短。

:如果使用[製作一個積木]來寫程式的好處就是程式比較有規律,修改、除錯都比較容易。

程式下載演奏歌曲(整首).sb2

延伸

1.學生自由創作不同的音樂

2.如何加快音樂節奏?

3.增加蜂鳴器,使用蜂鳴器來演奏樂曲。

十一、按鍵演奏歌曲

按下按鍵就彈奏一個單音,重複按下按鍵,開始演奏出一首完整的歌曲。

主程式

設定樂器種類,上圖[設定樂器為1] 是鋼琴。

重複執行:演奏歌曲的音樂積木。

製作音樂積木

[等待讀取數位腳位(8)=0],判斷按鍵是不是有按下按鍵,如果按下按鍵,就進行下一步[彈奏音符…….],發出一個音。

將歌曲音符編排好,當按下按鍵時,就彈奏一個音符。

這樣就可以依序將歌播完。

因為歌曲常常有一些重複的曲段,所以用積木來編排,節省程式長度,比較簡潔。

如果想要變換樂器聲音,只要更改[樂器種類]就可以了。

以小星星為例,主要分成3段,各用了2次。

主程式變得很簡短。

:如果使用[製作一個積木]來寫程式的好處就是程式比較有規律,修改、除錯都比較容易。

程式下載按鍵演奏歌曲.sb2

延伸

1.學生自由創作不同的音樂

2.如何加快音樂節奏?

3.增加蜂鳴器,使用蜂鳴器來演奏樂曲。

十二、計數器

按一次按鍵,計數器加1,計算按鍵次數。

做一個計數器變數。

一開始先將變數計數器值設為0

重複執行:判斷按鍵是不是有按下按鍵,讀取數位腳位(8)的值。

如果按鍵按下時(數位腳位8的值=0),就給數位腳11輸出一個1(高電位),讓紅色LED亮,並將計數器的值加1

程式下載按鍵(計數器).sb2

十三、計數器(修正)

上面的程式跟我們的需求是不符的,按一下會跳很多次。

因為按下去以後,數位腳8會一直收到低電位直到放開,所以計數器的值就一直加上去了。

要如何修正呢? 

[等待讀取數位腳8=0] ,等待按下按鍵,按下後就亮綠燈,並讓計數器的值加1。

[等待讀取數位腳8=1],等待放開按鍵,放開後就關燈,再繼續下一個計數。

程式下載按鍵(計數器)修正.sb2

延伸

1.增加倒數計時功能,限制時間內的按鍵次數才有效

2.比賽看哪一組在時間內的按鍵按最多

3.將按鍵換成水銀開關,夾在頭上變成搖頭晃腦比賽

十四、檯燈開關(兩段式開關)

同一顆按鍵,按第一次燈亮,再按燈滅,再按燈亮,再按燈滅….。

程式下載檯燈開關.sb2

延伸

增加蜂鳴器線路,讓按下按鍵時蜂鳴器也會同時響。

十五、兩段式開關(雙色燈)

兩顆LED,按下按鍵,其中一個LED亮,第二次再按下時LED燈滅,換另一個LED亮。兩顆LED輪流亮。

程式下載兩段式開關.sb2

十六、搶答

按鍵判斷用的訊號線分別接D6、D7、D8

提供LED正極的杜邦線分別接D9、D10、D11

先設定數位腳位6、7、8為[INPUT_PULLUP]。

重複執行,檢查哪一個按鍵先按下。

按下的按鍵輸入腳位為0,就執行哪一隊先答題,讓LED亮燈,說出隊伍名稱,然後停止[這個程式],以免另一隊也按了,也亮燈。

程式下載搶答.sb2

延伸

1.加上自動倒數,時間到後發出[喵]聲,聽到[喵]聲三隊開始搶答。

2.改為搶答結束後,10秒再繼續搶答。

十七、按鍵電子琴

按鍵判斷用的訊號線分別接D4、D5、D6、D7、D8

蜂鳴器正極接D12

先設定數位腳位4、5、6、7、8為[INPUT_PULLUP]。

重複執行,檢查哪一個按鍵按下。

按下的按鍵輸入腳位為0,就讓蜂鳴器播出一個二分之一拍相對應頻率的聲音。

不斷的判斷哪一個按鍵被按下,就發出相對應頻率的聲音。

程式下載電子琴.sb2

延伸

1.增加按鍵,增加音階,可以彈奏出更多樂曲。

2.加上RGB LED,彈奏每一個音階時RGB LED會顯示一種顏色。

3.增加按鍵,可以變成計算機,可以結合LED顯示器顯示計算結果。

十八、創作應用

音樂樓梯

使用適合的按鍵開關,將蜂鳴器改成大喇叭,加一些裝飾,就成了第一課看到的[音樂樓梯]了。

註:要真的實用還有一些細節要改進,例如:接線要堅固,加裝擴音線路才能讓喇叭發出夠大的聲音……….

英語單字學習機

十九、打地鼠

組合不同顏色LED和按鍵,看到那一個顏色的燈亮,就按那個燈旁的按鍵,按對加分,按錯扣分。再加上計分和時間限制(倒數計時)

二十、反應測試

測試你的神經反應:

準備好時,按下按鍵,隨機時間後LED亮,看到亮燈,要立刻按下按鍵。螢幕上顯示你看到亮燈到按下按鍵的反應時間。

按鍵一邊接地(GND),另一邊接一條訊號線到數位腳D8當作判斷輸入訊號。

數位腳D11接紅色LED正極,再串接220歐姆電阻後接地(GND)。

按綠旗後的說明

開始先出現主題及說明頁,等待按鍵開始。

如果按下按鍵,數位腳D8收到低電位,小貓出現。

等待放開按鍵,才開始隨機選擇亮燈時間。

計時器歸零,重新計時,並顯示時間,一直到再一次按下按鍵,停止程式。

程式下載反應測試.sb2

延伸

加裝一組蜂鳴器。

準備好時,按下按鍵,隨機時間後LED亮,並且蜂鳴器發出聲音,看到亮燈或聽到聲音,要立刻按下按鍵。螢幕上顯示你看到亮燈或聽到聲音到按下按鍵的反應時間。

二十一、電子骰子

按下按鍵,LED開始變化不同顏色,鬆開按鍵,停在某一顏色。按鍵按下時間不同,最後停止時的顏色不同。

接RGB三色LED和一組按鍵。

按鍵電路中拉一條訊號線到數位腳D8當作判斷輸入訊號,RGB三色LED分別接D9、D10、D11控制顏色變化。

製作一個[顏色]變數存放隨機變數,控制輸出的顏色。

[腳位8模式設為INPUT_PULLUP],設定數位腳8為上拉電阻輸入。

接著不斷的偵測有沒有按下按鍵。

如果有按下按鍵就先關閉上次亮的顏色,然後隨機讓D9、D10、D11其中一個輸出1(高電位),那個顏色就亮起來。

鬆開按鍵時,D8沒有訊號輸入,燈就停止隨機亂閃顏色。

程式下載電子骰子.sb2

延伸

1.比大小:紅色代表1,綠色代表2,藍色代表3,看看誰骰的比較大。

2.改接7顆LED,排成骰子的點數形狀,模擬擲骰子的情形亮不同的燈。

3.加上[說…..積木],說出燈亮的顏色

4.增加蜂鳴器,按下按鍵時發出聲音,增加聲音效果。

二十二、顏色猜猜機

設計一個遊戲機器,讓玩家猜顏色。

在螢幕上先出現三個顏色讓玩家選擇(猜),選好後玩家按下麵包板上的按鍵,三個顏色的LED燈開始亂數閃爍,鬆開按鍵時,某一個顏色的燈恆亮,如果猜中顏色,就說[猜對了],如果猜錯,就說[猜錯了]。

接RGB三色LED和一組按鍵。

按鍵電路中拉一條訊號線到數位腳D8當作判斷輸入訊號,RGB三色LED分別接D9、D10、D11控制顏色變化。

螢幕畫面

主程式

開始先將說明圖片移到定點。

製作一個[選色]變數存放點選的顏色代號。

製作一個[顏色]變數存放隨機變數,控制輸出的顏色。

[腳位8模式設為INPUT_PULLUP],設定數位腳8為上拉電阻輸入。

說出遊戲使用方法。

等待按下按鍵。

如果按鍵按下時,數位腳位D8得到0,就開始隨機讓D9、D10、D11其中一個輸出1(高電位),讓LED亮,再暗,再亮另一個顏色………。

直到放開按鍵,數位腳位D8得到1

然後判斷答對了嗎?

使用[說(……)]的擴充積木可以將文字轉換為聲音,讓程式真的說出來。

藍色角色

程式開始先將顏色圖片移到定點。

當被選中,就將選色變數設為9,做為主程式判斷對錯的依據,並說出選色結果。

如果選的是其他顏色,會收到其他顏色的廣播,就將自己隱藏。

綠色角色

程式開始先將顏色圖片移到定點。

當被選中,就將選色變數設為10,做為主程式判斷對錯的依據,並說出選色結果。

如果選的是其他顏色,會收到其他顏色的廣播,就將自己隱藏。

紅色角色

程式開始先將顏色圖片移到定點。

當被選中,就將選色變數設為11,做為主程式判斷對錯的依據,並說出選色結果。

如果選的是其他顏色,會收到其他顏色的廣播,就將自己隱藏。

程式下載顏色猜猜機.sb2

延伸

1.增加蜂鳴器,在按鍵時發出特殊聲音,答對或答錯時也可以發出不同的音樂。

2.答對或答錯時更換不同的造型。

3.修改程式,猜完後,等待10秒再繼續猜

注意:

win10或Mac系統,才可以使用[說(……)]的擴充積木可以將文字轉換為聲音,讓程式真的說出來中文,否則只能說英文。

二十三、平交道緊急按鈕

上、下紅燈模擬平交道燈號,中間的綠、紅燈是火車燈號,緊急時按下「緊急按鈕」,火車燈號轉為紅燈,火車司機看到就趕快將火車停止。 

六年級藍培誠同學作品。

———————————-

註1:

微動開關、水銀開關、滾珠開關、磁簧開關等也都是同樣的原理,可以控制電路的通路或斷路,也都可以參考本課的教學及範例。

微動開關

水銀開關

資料來源:https://zh.wikipedia.org/wiki/%E6%B0%B4%E9%8A%80%E9%96%8B%E9%97%9C

水銀開關,又稱傾側開關,是電路開關的一種,以一接著電極的小巧容器儲存著一小滴水銀,容器中多數注入惰性氣體或直接真空。

注意:

水銀對人體及環境均有毒害,故此使用水銀開關時,請務必小心謹慎,以免破損導致水銀漏出;在不再使用時,也應該妥善處理。

滾珠開關:可以控制通路或斷路的開關,也可用來偵測是否傾斜。

金屬小管子有兩隻腳,在管子內有一顆或2顆金屬球,當管子成直立狀態,也就是腳朝下時,金屬球會落下接觸管子內的兩個接觸點接通兩隻腳,形成通路,若管子傾斜到一定程度後,就會斷路。(註2)

圖片來源:https://bizweb.dktcdn.net/100/017/780/files/sw520.png?v=1457663311199

(圖片來源:https://www.google.com.tw/imgres?imgurl=http%3A%2F%2Fwww.blswitch.com%2FimageRepository%2Fbfbe8424-8c62-4274-b377-2e20941ac321.jpg&imgrefurl=http%3A%2F%2Fwww.blswitch.com%2Fpro%2FpmcId%3D22.html&docid=_TsMRczrkXut7M&tbnid=KN_apMOscuRCMM%3A&vet=10ahUKEwjT8pbstNDVAhXHVZQKHRfrBkEQMwgrKAgwCA..i&w=500&h=380&bih=633&biw=1280&q=%E6%BB%BE%E7%8F%A0%E9%96%8B%E9%97%9C&ved=0ahUKEwjT8pbstNDVAhXHVZQKHRfrBkEQMwgrKAgwCA&iact=mrc&uact=8 )

彈簧開關:

金屬小管子裡面,有一個導電彈簧及導電接腳,在晃動的時候,彈簧及導電接腳互相接觸,形成通路。

圖片來源:http://www.ksdkg.com/uploadfile/CKEditor/20093211504386.jpg

磁簧開關


(圖片來源:http://ming-shian.blogspot.tw/2013/01/blog-post.html )

註2:

參考資料 :https://zh.wikipedia.org/wiki/%E4%B8%8A%E6%8B%89%E7%94%B5%E9%98%BB

在數位電路中,上拉電阻(英語:Pull-up resistors)是當某輸入埠未連接設備或處於高阻抗的情況下,一種用於保證輸入訊號為預期邏輯電平的電阻元件。他們通常在不同的邏輯器件之間工作,提供一定的電壓訊號。

https://www.arduino.cc/en/Tutorial/DigitalPins?fbclid=IwAR3qqeVu_HWTB9Tx0YtPc196drXjb0xvJxGWZ3dA5b8B_RW9VmiXHqaqKvc

註3:

按鍵模組:將按鍵連接好電阻,固定在板上模組化,方便使用。

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

相關連結:

新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

roc

宜蘭縣國小資訊小站

您可能也會喜歡…