2013/09/18

Arduino練習:彎曲感測器(flex/bend sensor)

上一篇嘗試了壓力感測器(Force-Sensitive Resistor),這一篇則玩玩看彎曲感測器(flex/bend sensor),用法跟電路都差不多。

基本上它就是個電阻,根據我買的產品資料規格書,平常狀態下電阻值約25kΩ,彎曲後電阻值會上升,大概會到100kΩ。

向Adafruit買的壓力感測器,生產廠商是Spectra Symbol。


電路圖如下,在5V與GND之間串聯彎曲感測器(電阻)與10kΩ,將類比腳位A0接到兩者之間。


實際照片。


底下是程式碼。

#define led_pin 11
#define flex_pin A0

void setup()
{
  Serial.begin(115200);
  pinMode(led_pin, OUTPUT);
}

void loop()
{
  int flex_value = analogRead(flex_pin);
  int led_value = map(flex_value, 0, 1023, 0, 255);
  analogWrite(led_pin, led_value);
  Serial.println(flex_value);
  Serial.println(led_value);
  Serial.println("-------------");
  delay(500);
}

當彎曲感測器在平常狀態下,flex_value的值大概在325,因電路的電壓是5V,Arduino類比腳位的解析度是10位元(0~1023),325 / 1024 * 5 = 1.59,代表該處電壓是1.59,5 - 1.59 = 3.41,也就是說彎曲感測器左右兩端的電位差是3.41。若相信此時彎曲感測器的電阻值是25kΩ,5 / (25000 + 10000) * 25000 = 3.58,嗯,差不多,沒錯。

然後若折彎彎曲感測器,它的電阻值就會上升,那麼flex_value的值就會越來越小,連帶地讓led_value的值越小,LED就會越暗。

6 comments:

  1. 我想請問一下
    我想讓彎曲感測器彎折的時候,led完全滅掉要怎麼做呢!?

    ReplyDelete
    Replies
    1. 那就是把彎曲感測器當做數位開關,只分辨兩種情況,

      讀取後
      int flex_value = analogRead(flex_pin);

      小於某值的話,代表彎曲程度較大,所以熄滅LED。
      if(flex_value < SOME_VALUE){
      digitalWrite(LED_PIN, LOW);
      }
      else{
      digitalWrite(LED_PIN, HIGH);
      }

      Delete
  2. 想請問一下,如何把9999counter與彎曲感測器(當開關時彎曲動作)作結合呢!?
    我目前在做一個專題,其中包含這部分,但一直卡在這地方!!!

    ReplyDelete
  3. 我想做一個把彎曲感測器當開關,彎下去時計數counter電路開始計數,數到設定的數時,輸出一信號可使led燈亮滅

    ReplyDelete
    Replies
    1. 嗯,很好啊,請加油。
      :D

      Delete