mBlock & Arduino(5)可變電阻、ADC 與節拍器


在〈mBlock & Arduino(4)利用 PWM 模擬類比訊號〉中,我們試著使用 PWM 來模擬類比訊號輸出,其中談到 Arduino 腳位 A0 到 A5,實際上是用來做為類比訊號輸入,在這一個主題中,我們將使用這些腳位,並搭配可變電阻(Variable Resistor)來製作一個節拍器。

認識可變電阻

為了要能調整節拍器的速度,我們需要一個可調元件,在這邊使用可變電阻,顧名思義,藉著調整電阻器上的旋鈕,就可以改變電阻值,可變電阻上會標示歐姆數,可分為 A(對數型)、B(線性型)與 C(反對數型),分別代表旋轉角度與歐姆值的變化關係,以我手邊的這顆可變電阻為例,標示為 A10K,表示為 A 型可變電阻,最高電阻值為 10 KΩ。

A10K 可變電阻

可以看到可變電阻有三個接腳,外側兩個接腳兩邊都可以分別接 GND 與電源,而中間的接腳與另兩個接腳之間的電阻值,會因為旋轉角度而不同:

A10K 可變電阻

視外側接腳哪個銜接 GND 而哪個銜接電源,可變電阻順時針與逆時針旋轉時的電阻值會分別是增加或減少,一般我們操作旋鈕的習慣是順時針增大訊號(例如音量),逆時針減少,因此,如果是上頭照片中的 A10K 可變電阻,左邊接腳會接 GND,右邊接腳會接電源,中間是訊號輸出,這麼一來,順時針旋轉時,中間接腳與電源間的電阻值會變小,因而電壓輸出會增加,逆時針旋轉則電壓會降低。

類比數位轉換器

Arduino 內建類比數位轉換器(Analog to Digital Converter, ADC),可使用腳位 A0 到 A5 來個 ADC 輸入,可讀取 0 到 5V 的電壓輸入,解析度為 10 個位元,也就是讀取而得到的值是 0 到 1023。

如果要讀取可變電阻的輸出,可以如下銜接電路:

類比數位轉換器

我們打算利用可變電阻改變電壓,並利用 Arduino 的 ADC 腳位讀取電壓變化,轉換為節拍 BPM(Beats per minute)。

撰寫節拍器程式

在 mBlock 中,有個「彈奏鼓聲…」的方塊,其中「拍」的設定值,是指每幾秒打一下鼓,例如,下面這個方塊是指每 2 秒打一下鼓,同理類推,設定「拍」為 4 時,表示每 4 秒打一下鼓:

彈奏鼓聲...

因此,如果你想要 BPM 為 120 時,「拍」的設定就是 60 / 120 = 0.5,也就是半秒打一下鼓,我們希望轉動可變電阻時,BPM 可以從 40 到 208,因此設計了以下這個公式:

彈奏鼓聲...

為了顯示目前設定的 BPM,使用了 Scratch 中的貓咪來顯示目前的 BPM,而為了無聊一點,讓 Scratch 中的貓咪會隨著節拍而放大、縮小,這樣在視覺與聽覺上,都可以有節拍感…XD

彈奏鼓聲...

聽說人走路的節奏是 112 BPM,要不要實際寫個程式聽聽看呢?

彈奏鼓聲...