更多

    動手做 STEM 設計拍子機(三)

    前文提及設計拍子機是一個跨科學習活動,因此當中既需要具備各科基本能力,也需綜合作成品。過往綜合科學科部分中,我們明白到電阻值改變,電路中的電流和電壓便會改變。以下是資訊科技科部分。

    在資訊科技科部分中,我們需使用一個與可變電阻非常相似的電子元件 — 電位器( Potentiometer )。電位器與變阻器的結構相似,是一個有三個接口的電子零件,當中有兩個固定接點,另外有一個轉動接點。當電位器被轉動時,轉動接點與兩個固定接點的電阻值便會改變,兩邊便會形成不同的分壓比率。

    設計概念中,需使用 10KΩ 的電位器, 並配合 Arduino UNO 底板來製作一個「圖像拍子機」。
    設計概念中,需使用 10KΩ 的電位器, 並配合 Arduino UNO 底板來製作一個「圖像拍子機」。

    按一般操作旋鈕的習慣,順時針轉動電位器順時針增大訊號,逆時針轉動是減少訊號,故此在下面 10KΩ 電位器圖片中,左邊接腳和右邊接腳會分別接駁到 Arduino 電腦版的 GND 和 5V 位置,中間的接腳是訊號輸出,就可以製造出順時針旋轉時,中間接腳與左邊接腳 GND 的電阻值會變大,電壓輸出亦會同樣增加的效果。

    電位器和 Arduino UNO 接駁方式。
    電位器和 Arduino UNO 接駁方式。

    Arduino 的類比數碼轉換器

    Arduino 內置了類比數碼轉換器( Analog to Digital Converter, ADC ),在 Arduino Uno 底板中,可使用的類比接口為 A0 到 A5 輸入,可讀取 0 到 5V 的電壓輸入,解析度為 10 個位元,總共有 1,024 個不同的數值,讀取到的值是由 0 到 1,023 。

    按照下列的電路圖,將電位器的三個接口,連接到 Arduino 的 GND 、 5V 及 A0 :

    1309kid04p19

    按著上圖的線路接駁,就可以把電位器作為拍子機的輸入,並利用 Arduino 的 A0 類比接口讀取電壓變化,並將數據轉換為不同速度的節拍。

    撰寫圖像節拍器程式

    接著是利用編程軟件 mBlock ,來建立圖像拍子機。首先要認識 mBlock 有「彈奏鼓聲」的方塊,其中第一個數字是代表不同的樂器,例如 1 是代表軍鼓,第二個數字是「拍子」的意思,即是等待多少時間(秒),便會打一
    下鼓,例如在下面的方塊中,便會每 0.5 秒打一下鼓,同樣道理,設定「拍」為 2 時,表示每 2 秒打一下鼓。

    於聲音裡面找出「聲音」裡面找出「播放聲音」方塊。
    於聲音裡面找出「聲音」裡面找出「播放聲音」方塊。

    量度音樂速度 BPM

    音樂速度可以每分鐘多少拍( Beats per minute , BPM )作量度單位,很多時是表示一個特定的音符,例如四分音符,在一分鐘內出現的次數。當形容一首歌的速度為 120BPM 。那即是說在這首歌中,每分鐘有 120 個四分音符,當然 BPM 的數值越大,音樂速度便越高。

    因此,如果想製造出 BPM 為 120 的拍子時,「彈奏鼓聲」方塊的「拍子」設定就是 60 / 120 = 0.5 (因為一分鐘有 60 秒),即是每半秒製造出一下鼓聲。

    當明白到 BPM 和音樂速度的關係後,就可以繼續編寫程式,把電位器作為這個拍子機的輸入,並且控制拍子的速度。

    參考一般市面上機械式拍子機的速度範圍,我們先定下拍子機的最高和最低的節拍速度,分別是 40 ( Grave )和 208 ( Prestissimo ),因此會設計由左至右轉動電位器時,音樂速度可以從 40 調節到 208 。剛才介紹了 Arduino 的類比接口為 A0 ,可讀取到的值是由 0 到 1,023 ,即時說,我們要將 0 至 1,023 這個範圍的數值,轉換至 40 至 208 這個範圍的數值,因此設計了以下這個數學函式:

    1309kid04p21

    在上述公式中的為拍子速度 BPM , x 為 A0 類比接口讀取得到的數值。

    在 mBlock 程式中,建立數學函式的方法可參照下圖。為簡化拍子機的製作,就會產生整數 BPM 速度的拍子,故此於下列的函式中,我們加了一個四捨五入的處理,令到計算出來的 BPM 的數值是一個整數,而不是有小數點後的數字。

    [row][third_paragraph]

    設計上用 Arduino UNO ,若過往 mBlock 未曾安裝,就需要在「控制器」勾選。
    設計上用 Arduino UNO ,若過往 mBlock 未曾安裝,就需要在「控制器」勾選。

    [/third_paragraph][third_paragraph]

    現在接機械人模組就會出現 Arduino 相關方塊;然後於「運算」裡將相關方塊組合拉出及填寫數字。
    現在接機械人模組就會出現 Arduino 相關方塊;然後於「運算」裡將相關方塊組合拉出及填寫數字。

    [/third_paragraph][third_paragraph]

    圖中就是拍子機的組合方塊。
    圖中就是拍子機的組合方塊。

    [/third_paragraph][/row]

    下期待續……

    您會感興趣的內容

    相關文章