2014年7月12日 星期六

力敏電阻 FSR (Force Sensing Resistor)

image
一直很想做一台壓力均勻度的感測裝置,來取代公司裡面用感壓紙的測試方式,畢竟量化的數據還是比目視判定顏色好得多。所以就 google 力感測元件的時候,找到的這個力敏電阻 (FSR),小小一片要 200 多大洋,抱著好奇的心態買了一個玩玩看!

FSR 的 datasheet 可以點這裡下載。

簡單的來說,FSR 一個可以根據受力大小產生不同電阻變化的原件,猛然一看這個簡介想說:挖賽找到了好東西!以後可以用這個元件搭配 Arduino 來搞一套壓力感測裝置!但打開 datasheet 一看軟一半:
Its force sensitivity is optimized for use in human touch control of electronic devices. FSRs are not a load cell or strain gauge, though they have similar properties. FSRs are not suitable for precision measurements.

阿~ FSR 不適合精準的測量阿!想說完蛋了買錯元件,不過後來心路一轉反正感壓紙測量準確度也沒多高,有比沒有好,就繼續往下研究 FSR 這個元件了。

首先說一下 FSR 的基本原理:本身他是一個電阻,隨著感受到了力量越大,電阻會逐漸變小力量和電導(conductance=1/r) 成正比,所以我們可以經由感應到的電阻值回推受力大小。
image

可惜的是,這個元件的精準度不算好,下方的 datasheet 可以知道:
1. 元件可以感應的力量範圍 100g~10kg
2. part to part 之間的重複性不高.....,簡單來說每個 FSR 在相同力道下,反應出來的電阻值會在 +/- 25% 之間飄
3. 單一元件相同力量的重複測試也會在 +/-5% 間飄
整體來說,FSR 只能反應出一個大概的值,無法做超精準的測量。
image

說完基本原理,其實在 Arduino 上的接線也非常簡單,只要搭配一個 220ohm 電阻做個分壓電路就可以了。
image
IDE sketch :

int fsrData;
const int fsrPin = A0;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  fsrData = analogRead(fsrPin); // 將讀取到的數值轉為 0~1023 之間的數字
  Serial.print("FSR value is:");
  Serial.println(fsrData);
}

fsrData 的資料是分壓的電壓值,我們也可以轉換成電阻值:
image
Vo = 220 / (Rfsr+220) *5
Rfsr=220 * (5/Vo-1)
其中 Vo 是我們讀取的到 fsrData (0~1023 之間的數字),我們可以把它轉換成電壓值
Vo = fsrData / 1024 *5
代回算式中可以得到
Rfsr = 220* [5/(fsrData/1024*5)-1]

當然如果只是單純作為 sensor 用,有 Arduino 轉換的 0~1023 之間的數字就很夠用了,下面是我用 FSR 做的一個 LED 亮燈裝置,壓得越大力 (影片裡面我真的按超大力的!) 的時候 LED 亮得越多。






3 則留言:

  1. 您好,想請教您個問題
    如果我想要把壓力數值顯現在電腦上,可以照著您上述的方法接線和設定嗎
    完全不懂Arduino,所以看不太懂您的程式碼和接線,不好意思
    謝謝

    回覆刪除
    回覆
    1. 可以歐,但基本上我的電路只能顯示分壓電壓或電阻,真實的壓力值可能沒辦法轉換

      刪除
  2. 如果每次掛載的物品重量都相同,看起來線性,但輸出會線性跳嗎?還是會飄忽不定?? 誤差會很大嗎?
    如果是長時間按壓像影片最後會處於線性,所以掛載同樣重量又慢慢減少,是否也同是線性變化? 只是值會一直變嗎?

    回覆刪除

Anything That's Worth Chatting

Related Posts Plugin for WordPress, Blogger...