|
|
|
|
壓力感應器原理及偵測 |
|
|
|
|
|
|
|
|
ADC(Analog To Digital)的介紹 |
|
|
|
|
|
|
類比數位轉換 |
|
|
|
|
|
|
|
|
|
|
|
|
|
類比訊號經由IC的AI(Analog Input)腳位輸入至IC內,會經由ADC(Analog To Digital Converter)將類比訊號轉換為數位的數值,使程式能夠讀取,並且能夠用來在程式中進一步運算或是換算為需要的輸出。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
類比數位轉換的例子 |
|
|
|
|
|
|
|
|
|
|
|
|
|
例如,讀取的溫度感測器的類比訊號後,在程式中轉換為實際溫度的數值,再從七段顯示器上顯示出來,我們才能直覺地知道溫度感測器偵測到的溫度是多少。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
類比數位轉換的數值對應關係 |
|
|
|
|
|
|
|
|
|
|
|
|
輸入的類比信號的電壓,經過ADC轉換後的數值,將會是如下圖表示的對應關係。在程式中讀取到的AI數值,也就是ADC的轉換值。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
下圖以一個二元一次直線方程式的函數圖形,來表示輸入的類比信號的電壓與ADC轉換後的數值的對應關係。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在程式中,我們可以將讀取到的ADC數值經過這個方程式的轉換,得到電壓的數值,由此程式中便能夠知道AI讀取的電壓。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
薄膜式壓力感測器介紹 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
薄膜式壓力感測器受到壓力時,會改變兩個接點之間的電阻值,我們可以利用電阻的改變,以簡單的分壓電路來製造出電壓的變化,另IC能夠以AI的方式讀取到電壓的改變,藉此間接地偵測到壓力的變化。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
壓力感測電路原理 |
|
|
|
|
|
|
|
|
|
|
|
|
薄膜式壓力感測器受到壓力時,會改變兩個接點之間的電阻值,在電路當中我們將薄膜式壓力感測器式同為一個可變電阻,將這個可變電阻安裝在分壓電路中,當可變電阻阻值變化時,就能夠製造出電壓的變化。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
分壓電路的運作原理,可參考克西荷夫分壓定律。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
下圖說明了薄膜式壓力感測器的電阻變化時,經過分壓電路產生的電壓變化情形 |
|
|
|
|
|
|
請注意電壓將會在一個變化區間之中,後續的程式中我們將會使用到變化區間的最大值與最小值。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Micro:Bit線路組裝 |
|
|
|
|
|
|
|
|
|
|
Micro:Bit偵測電路介紹 |
|
|
|
|
|
|
|
|
|
|
|
|
彈射座使用一組壓力感測器線材,將壓力感測器連接至Micro:Bit的AI腳位上。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Micro:Bit壓力感測線路圖 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
將裸露的電線部分捲成圓圈狀 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
將電線鎖接在Micro:Bit |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
組裝完成的壓力感測電路 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
使用方程式來編寫程式 |
|
|
|
|
|
|
|
|
|
|
使用方程式的概念 |
|
|
|
|
|
|
|
|
|
|
|
|
|
在彈射座的壓力偵測程式中,我們將使用到將偵測的ADC類比訊號值進行分級顯示的功能,我們將偵測有效區間值分為0~9級,以函數圖形表示如下: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
此函數可以二元一次方程式來計算,我們可以將方程式修改如下: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
依照這個方程式的計算,我們就可以代入adc的值換算為Grade分級值。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
在程式的世界中,使用了許多許多各種方程式來解決各種問題,也發展了許多許多數學的方法或是應用數學的演算法,來簡化複雜的計算或是判斷,使其最終能夠以程式的方式進行運算並且得到我們需要的結果,數學及方程式在程式的世界中佔有極為重要且不可取代的角色。 |
|
|
|
|
|
|
|
|
|
|
|
|
使用方程式的優點 |
|
|
|
|
|
|
|
|
|
|
|
|
1. 簡化計算的程式碼 |
|
|
|
|
|
|
參考下面的對照範例,使用方程式判斷分級僅需要一行程式碼,而使用if-else判斷分級則需要十數行程式碼。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2. 能夠快速改變設定值 |
|
|
|
|
|
|
使用方程式判斷分級能夠將必要的參數變成變數,成為變數的好處在於能夠快速地修改關鍵的變數,更進一步能夠以使用者介面或通訊修改參數,使程式或是裝置具備更大的使用彈性。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
3. 容易進行程式的修改,並且減少程式修改時的錯誤 |
|
|
|
|
|
|
參考下面的對照範例,使用方程式判斷分級僅需要修改兩個變數,而使用if-else判斷分級則需要修改十行程式碼中的數值,容易造成修改時的錯誤。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
4. 減少處理器運算的次數 |
|
|
|
|
|
|
能夠增快程式執行的時間,或能夠使用成本較低的處理器進行運算,能夠節省成本。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5. 減少記憶體的使用量 |
|
|
|
|
|
|
能夠使用成本較低的處理器進行運算,能夠節省成本。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
平均值濾波器 |
|
|
|
|
|
|
|
|
|
|
甚麼是濾波器 |
|
|
|
|
|
|
|
|
|
|
|
|
實務上,類比訊號都會因為電壓的穩定度不足,造成漣波,還有各種外界的干擾造成許多不穩定的狀況,一般稱之為雜訊。 |
|
|
|
|
|
|
由於漣波及雜訊的問題,造成讀取到的ADC數值不穩定,數值以很快的速度跳動,最終使顯示出來的值因為不停的改變而難以被人們辨認,通常就以濾波器的方法來解決這些漣波及雜訊造成的不穩定狀況,使最終顯示出來的結果能夠容易被人們辨認。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
濾波器有以電路,如電容、各種濾波電路的方式製成,也有以程式來製作一個濾波器演算法的方式,這裡將介紹一種應用最廣泛、也最簡單的濾波器演算法-平均值濾波器。 |
|
|
|
|
|
|
|
|
|
|
|
|
平均值濾波器介紹 |
|
|
|
|
|
平均值濾波器也常被稱為算數平均濾波法,方法為連續取N個ADC取樣值進行算術平均運算。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
平均值濾波器的特性 |
|
|
|
|
|
|
|
|
|
|
|
|
平均值濾波器的特性 |
|
|
|
|
|
|
|
|
|
|
|
|
|
N值較大時,計算出來的結果值平滑度較高,但靈敏度較低。 |
|
|
|
|
|
|
N值較小時:計算出來的結果值平滑度較低,但靈敏度較高。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
所以根據我們需求的平滑度及靈敏度,我們需要在程式中設定好N值大小,讓輸出的反應較為適當。 |
|
|
|
|
|
|
|
|
|
|
|
|
平均值濾波器的優缺點比較: |
|
|
|
|
|
|
|
|
|
|
|
|
優點 |
缺點 |
- 適用於對一般為隨機干擾的信號進行濾波。
- 具有一個平均值,信號在某一數值範圍附近上下波動,不因特殊狀況出現突波。
- 調整參數至適當反應的狀態相當容易。
- 程式碼簡單,容易編寫。
|
- 對於測量速度較慢、或要求數據計算速度較快的實時控制較不適用。
- 需要較大的記憶體(RAM),在成本極精簡的MPU/MCU上無法使用。
|
|
|
|
|
|
|
|
|
|
|
|
|
程式實作 |
|
|
|
|
|
|
|
|
|
|
壓力偵測測試程式 |
|
|
|
|
|
範例程式 : Program \pressure_test.py |
|
|
|
|
|
|
|
|
|
|
|
|
|
1. 在Button A按下的動作時,讀取壓力偵測的ADC類比信號值,並且使用LED矩陣顯示ADC類比信號值。 |
|
|
|
|
|
|
2. 以此程式測試確認壓力偵測實際使用的ADC類比信號值區間,讓後續的程式能夠使用適當的偵測區間進行分級。 |
|
|
|
|
|
|
3. 沒有壓力時,按下Button A,紀錄顯示的ADC類比信號值為最小區間值。 |
|
|
|
|
|
|
4. 最大壓力力時,按下Button A,紀錄顯示的ADC類比信號值為最大區間值。 |
|
|
|
|
|
|
|
|
|
|
|
|
Level-1程式說明 |
|
|
|
|
|
範例程式 : Program\level_1.py |
|
|
|
|
|
|
|
|
|
|
|
|
|
1. 將壓力偵測的ADC類比信號值,分為0~9等級,以方便LED矩陣顯示即時的壓力變化 |
|
|
|
|
|
|
2. 將max_adc變數設為最大區間值。 |
|
|
|
|
|
|
3. 將min_adc變數設為最小區間值。 |
|
|
|
|
|
|
4. 壓力偵測的ADC類比信號值小於低於最小的ADC區間值時,顯示悲傷圖形。 |
|
|
|
|
|
|
5. 壓力偵測的ADC類比信號值大於等於低於最大的ADC區間值時,顯示笑臉圖形。 |
|
|
|
|
|
|
6. 顯示結束時,暫停200ms以降低顯示速度,以利讀取分級值。 |
|
|
|
|
|
|
|
|
|
|
|
|
Level-2程式說明 |
|
|
|
|
|
範例程式 : Program\level_2.py |
|
|
|
|
|
|
|
|
|
|
|
|
|
1. 改進壓力偵測的ADC類比信號值分級的程式,以二元一次直線方程式計算的方式計算分級值。 |
|
|
|
|
|
|
|
|
|
|
|
|
Level-3程式說明 |
|
|
|
|
|
範例程式 : Program\level_3.py |
|
|
|
|
|
|
|
|
|
|
|
|
|
1. 使用平均值濾波器改善ADC類比信號值跳動,導致使用者不易確定目前壓力級數的問題,以改善使用者的操作經驗。 |
|
|
|
|
|
|
2. 取消暫停200ms之動作,觀察顯示分級值的反應速度及平滑效果,並調整緩衝區取樣的總數至最佳效果。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|