對上一次我們簡介了快思邏輯,今天我們來製作量度高度的工具。首先我們需要有以下的材料:

1. Micro:bit
2. 紙巾筒 (可用多張白紙或硬卡紙捲成筒狀)
3. 橡皮圈 x 4

 

組裝:
我們把Micro:bit和電池盒水平的放到紙巾筒的前端,接然而用像皮圈固定(如下圖)。

 

之後,我們來進入編程部分。首先,我們會利用Micro:bit 的加速計(accelerometer)來量度一下角度。我們需要了解加速計的原理。以下是一個觀察後得出來的結果:

我們知道,當加速計和地面成水平時x 和z的讀數接近0,而 y 的讀數最大值為1024。如果我保持紙巾筒90度向上,x為 -1024,y和 z即變成接近0。因此,當您傾斜Micro:bit時,x加速度計將從0變為-1024,而y加速度計將其鏡像並從1024變為0。當我們知道這些讀數後,我們就需要解決如何把加速計的讀數變成角度,使我們可以計算高度。

X、Y、Z三軸的方向定義如下:

注意Z 是穿透的。

 

其實這問題不太難但你要們你的物理讀好⋯⋯我即想起當年教紙飛機班時和現時DSE物理(我不是DSE年代,都是問現職老師⋯⋯)上的一個理論:斜板問題Inclined Plane!知道公式後,再看以下的圖一切變得簡單了吧!因此,傾斜角度是x加速度計與1g之比的反正弦(arcsine)。那為什麼x / 1g的比率等於對角線/斜邊?

 

因此,基本上式就是簡單的反正弦運算。因為傾斜角度與x加速度矢量相反的角度一致。通過找到x與重力的反正弦值1024就可以找到該角度。

 

因為要用到反正弦(arcsine),我們需要轉換到Javascript 那邊來編程。詳細:按我

 

程式碼如下:

input.onButtonPressed(Button.A, function () {
    x = input.acceleration(Dimension.X)
    angle = Math.asin(x / 1024);
    degree = angle * 180 / Math.PI
    serial.writeLine("" + degree)
})

let degree = 0
let x = 0
let angle = 0