Arduino第34課按鍵(上拉電阻)
按鍵:可以控制通路或斷路的開關,一般使用為按下為通路,放開為斷路。(註1)
微動開關、水銀開關、滾珠開關、磁簧開關等也都是同樣的原理,可以控制電路的通路或斷路,也都可以適用本課的教學及範例。
注意:
如果是四腳的開關,請學生要注意方向,翻開背面,以中間的溝槽為分界,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顯示器顯示計算結果。
十八、創作應用
音樂樓梯
使用適合的按鍵開關,將蜂鳴器改成大喇叭,加一些裝飾,就成了第一課看到的[音樂樓梯]了。
https://youtube.com/watch?v=SByymar3bds
註:要真的實用還有一些細節要改進,例如:接線要堅固,加裝擴音線路才能讓喇叭發出夠大的聲音……….
英語單字學習機
十九、打地鼠
組合不同顏色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