前文提及設計拍子機是一個跨科學習活動,因此當中既需要具備各科基本能力,也需綜合作成品。過往綜合科學科部分中,我們明白到電阻值改變,電路中的電流和電壓便會改變。以下是資訊科技科部分。
在資訊科技科部分中,我們需使用一個與可變電阻非常相似的電子元件 — 電位器( Potentiometer )。電位器與變阻器的結構相似,是一個有三個接口的電子零件,當中有兩個固定接點,另外有一個轉動接點。當電位器被轉動時,轉動接點與兩個固定接點的電阻值便會改變,兩邊便會形成不同的分壓比率。
按一般操作旋鈕的習慣,順時針轉動電位器順時針增大訊號,逆時針轉動是減少訊號,故此在下面 10KΩ 電位器圖片中,左邊接腳和右邊接腳會分別接駁到 Arduino 電腦版的 GND 和 5V 位置,中間的接腳是訊號輸出,就可以製造出順時針旋轉時,中間接腳與左邊接腳 GND 的電阻值會變大,電壓輸出亦會同樣增加的效果。
Arduino 的類比數碼轉換器
Arduino 內置了類比數碼轉換器( Analog to Digital Converter, ADC ),在 Arduino Uno 底板中,可使用的類比接口為 A0 到 A5 輸入,可讀取 0 到 5V 的電壓輸入,解析度為 10 個位元,總共有 1,024 個不同的數值,讀取到的值是由 0 到 1,023 。
按照下列的電路圖,將電位器的三個接口,連接到 Arduino 的 GND 、 5V 及 A0 :
按著上圖的線路接駁,就可以把電位器作為拍子機的輸入,並利用 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 這個範圍的數值,因此設計了以下這個數學函式:
在上述公式中的為拍子速度 BPM , x 為 A0 類比接口讀取得到的數值。
在 mBlock 程式中,建立數學函式的方法可參照下圖。為簡化拍子機的製作,就會產生整數 BPM 速度的拍子,故此於下列的函式中,我們加了一個四捨五入的處理,令到計算出來的 BPM 的數值是一個整數,而不是有小數點後的數字。
[row][third_paragraph]
[/third_paragraph][third_paragraph]
[/third_paragraph][third_paragraph]
[/third_paragraph][/row]
下期待續……