2015年4月28日 星期二

專題-S4A-達標計分器-基礎數位輸出輸入的練習

專題-S4A-達標計分器--基礎數位輸出輸入的練習


本主題可用於運動計數、分組計分

利用S4A偵測按鈕模組輸入,在LED及螢幕上輸出,當達成目標時LED閃爍同時鈴聲大作,恭喜達成目標。



材料:(本教案使用預設為粗體設備)

1.      Arduino開放式硬體,建議預先上傳好S4A韌體
2.      感測器擴充板V4V5均可使用,有擴充板接線比較簡單,無擴充板也能使用
3.      按鈕模組(按下為false)、碰撞模組、紅外線模組均可使用(※模組使用不同程式寫法稍有差異)
4.      LED模組、人魚燈LED模組、RGB全彩LED模組(共陰)、七彩燈模組均可使用,或以LED+220歐姆電阻取代(※模組使用不同電路連接稍有差異)
5.    雙母頭杜邦彩虹排線

準備工作:

電腦事先安裝S4A、喇叭、麥克風


=========================================================================

開始上課!


連接本專題Arduino硬體與模組如下圖













按鈕模組連接電路說明

按鈕模組為數位輸入,因此其訊號輸出(OUT)要接到Arduino的輸入端,可接到D2(D3),擴充板則接在S2(S3)S代表信號的意思,就是Arduino板子上的數位輸出入D0-D13,裡面的D2D3S4A裡被用來做數位輸入偵測,連接腳位如下:
   按鈕模組    Arduino
   =======    ======
    OUT  ←→ S2(D2)
    VCC  ←→ V(5V)
    GND  ←→ G(GND)

RGB全彩LED連接電路說明


RGB全彩LED模組有分共陽或共陰,接線和控制方法各有不同,本例以比較直覺之共陰極模組為主,除了“-”即為接地GND外,另三隻接腳分別為三原色的控制訊號,我們把它分別接至擴充板上的S10S11S13,也就是Arduino板上的D10D11D13,連接腳位如下:
   RGB模組       Arduino
   =======       =======
    - (GND)   ←→ G(GND)
    R(RED)   ←→ S13(D13)
    G(GREEN) ←→ S11(D11)
    B(BLUE)  ←→ S10(D10)
====================================================================================

按鈕程式測試、撰寫與說明

以數位輸入用法(本專題將以此為範例):


  本專題將按鈕輸入接在ArduinoD2數位輸入接腳,因此在S4A中請觀察sensor board上的Digital2欄位的值,當我們未按下按鈕時值為true,而按下按鈕時值變為false(※每批模組不同,有的恰恰相反),這樣的方式將按鈕視為數位輸入,寫程式時就要用數位輸入的方法來判斷,例如下列程式會在按下按鈕時發出Do的鋼琴聲。

類比輸入用法:

  如果你將按鈕模組接到類比輸入A0~A5也能用,但是這時就要觀察Sensor boardAnalog0~5的數字,例如:我如果將它接在A0輸入,那你會發現沒按按鈕,A0值為1023,有按按鈕,A0值變成0,因此上面的程式就會變成這樣的寫法,必須找一個可以分辨出10230的中間的任何值(本例用500最為哨兵值,非一定要用500),利用大於小於,甚至是等於來做判斷。

 LED程式的測試、撰寫與說明

數位控制三原色輸出(本專題將以此為範例)

  LED使用數位方式點亮的話,僅有兩種狀態,意即亮或不亮,而本次使用的RGB全彩彩LED,如果以數位方式控制的話,除了接地腳外,控制腳位接在ArduinoD10/11/13(S4A1.5版以後D12也能使用),則顏色會有2*2*2=8種顏色(包含全滅)
下圖程式即是將三原色以0.1秒的時間間隔輪流點亮(未混色)

下面程式則是數位方式隨機混色輸出

PWM控制三原色全彩輸出:

  如果想要全彩輸出,腳位得接在D5/6/9,則可利用PWM(脈波頻寬調變)給予0~255階不同的亮度,因此3隻控制接腳即可以256*256*256呈現16777216色組合,就是全彩的意思。下方程式即是以每0.1秒的間隔,隨機混和1677萬色全彩輸出,色彩的組合可以參考網路查詢“RGB配色表”。

=====================================================================

“達標計分器”專題實作開始:


本達標計分器可用於教師分組學習時為每組學生計分,每組使用1個按鈕1個顏色的燈,因此1Arduino6個按鈕、2RGB全彩燈即可做成六組的達標計分器,本專題僅以一組為例,可自行延伸。
一開始可設定本次目標分數,然後課程進行中小組得分即可按鈕1次加1分,如果達標就會燈光閃爍加響鈴大作恭賀一番。

先新增一個變數“達標分數”,然後在程式中以提問積木將達標分數設定進來。

(本程式有誤,其實不需用到變數,迴圈裡也不用減一,請等待下次修正程式)
做一個迴圈,設定執行次數為達標分數,每次在按鈕狀態切換時(由沒按→有按),就將達標數減去1,因此如果達標分數為10分,本迴圈就會執行10次,執行完10次達標分數就會變成零,迴圈也會結束,此時利用廣播積木將訊號“恭喜達成目標”傳送出去。

利用廣播積木的原因是因為要讓文字、音樂、控制LED的動作同時多工發生,所以我們分別將文字、音樂、控制LED的動作設定在個別的接收廣播中,以達到多工的作用,聲音或音樂可先由聲音資料庫中匯入或自行錄音準備好如下圖。


廣播部分程式如下:

然後我們可再增加,當我們每次按鈕時也閃兩下燈,再播點音效以增加互動趣味性,這樣就完成我們的程式了!最後程式就如下圖。


是不是很有趣呢?

想一想,如果要擴充第二組,模組、線路該怎麼接?程式要怎麼改呢?


想一想,本專題亦可將按鈕換成觸碰感測器,也會有一樣的效果嗎?如果換成其他的感測器模組呢?會變成甚麼樣的輸入才能控制呢?程式又要怎樣改呢?


例:如果換成紅外線則運用更廣,可以測量仰臥起坐、伏地挺身、跑操場圈數的運動量,創意可以無限發揮歐,是不是很迷人呢?


課程影片


沒有留言:

張貼留言