FSRをArduinoに接続し、FSRを手で押した時の強さを相当する重量で表示してみます。
 FSRの抵抗値を測定するために、次に示す回路を利用します。FSRの抵抗値の変化を、R1とFSRの抵抗値で電源電圧を分圧した出力電圧の変化で検出します。

 FSRの抵抗値と出力電圧の間には、次の関係があります。
        Rf =R1×(Vo /(5V‐Vo)           (1)
 この関係がわかれば、Arduinoのアナログ入力でVoを測定しRfを計算で求めることができます。アナログ入力値 nから電圧を求めるためには、次の式で計算します。
        Vo = n×5V/1024               (2)
(1)式に(2)式を代入して次の式を得ます。
        Rf = R1×(n×5V/1024)/(5V-n×5V/1024)
          = R1×n /(1024-n)           (3)
 ここで求められたFSRの抵抗値から、前回求めたFSRとFSRに加わった荷重との次に示す関係からセンサに加わった値 荷重を計算します。

adrsens130020.jpg 前回示した図はX軸が重量でしたが、今回は(1/Rf)から荷重を求めています。そのためX軸を(1/Rf)にしY軸を荷重に変えました。またEXCELで計算した回帰式をグラフに表示してあります。この回帰式から、次の式でセンサに加わった荷重を計算することができます。
      荷重 = 880.79×(1/Rf)+ 47.962     (4)

 以上の関係をArduino のスケッチにすると次のようになります。
 LCD表示のためのライブラリのヘッダ・ファイルLiquidCrystal.hの読み込みとLiquidCrystal型の変数lcdの生成とLCD表示のためのライブラリ初期化を行います。

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);

 float型の変数としてR1の抵抗値をセットする変数R1に5.1kΩをセットし、FSRの抵抗値をセットする変数rf、求めた荷重の値をセットする変数fgを定義します。int型の変数としてはアナログ入力ポートから読み取った値をセットする変数nを定義します。

float R1=5.1,rf,fg;
int n;

 デバッグのためのシリアル・ポートの初期化を行っていますが、使用しませんでした。LCDの表示を2行にするため、lcd.begin(16,2); で16文字2行表示の設定を行っています。

void setup(){
  Serial.begin(9600);
  lcd.begin(16,2); 
}
 センサの出力をアナログ・ポート1で読み取り、(3)、(4)で示した計算式で荷重fgを求めています。今回テストした結果と前回テストした結果では、回帰式の係数の値が異なりました。変動が大きいので、場合によっては毎回数点のポイントで測定し補正する必要があるかもしれません。しばらく計測を続けてみます。
void loop(){
  n=analogRead(1);
  rf=R1*n/(1024.0-n);
  fg=880.79/rf + 47.962;
// fg= 1273.1/rf + 393.44
 コメントになっているのは今回の回帰式です。同じ荷重でArduinoで測定したFSRの抵抗値も、ディジタル・マルチメータ測定した抵抗値もほぼ同じ値を示しています。計算した値を次のスケッチでLCDに表示しています。
lcd.clear();
  lcd.print("n=");
  lcd.print(n);
  lcd.print(" rf=");
  lcd.print(rf*1000);
  lcd.setCursor(0,1);
  lcd.print("G = ");
  lcd.print(fg);
  delay(500); 
}

 rfの値は小さくなるので、kΩ単位で表示桁が少なくなるので1000倍してΩの単位で表示しています。
 上記のスケッチと同じですが、実際にテストしたスケッチ全体を表示します。


adrsens130030.jpg 電源から5.1kΩの抵抗をブレッドボードでFSRの一方の端子に接続、もう一方のFSRの端子をGNDに接続し、最初に示した回路をブレッドボードに再現しています。JSR のXHP-2コネクタにFSRの端子を差し込み、少しゆるいので0.5mmφのリード線も一緒に差し込んでいます。


adrsens130040.jpg Arduinoのアナログ入力ポートの入力インピーダンスは100MΩとなっています。そのため、今回の抵抗とFSRで組んだ回路にアナログ入力ポートが影響を与えることはありません。インピーダンス変換のバッファは必要ないので、直接Arduinoのアナログ入力で受けています。
<神崎康宏>


トラックバック(0)

このブログ記事を参照しているブログ一覧: ArduinoとFSRで重さを調べる(2)

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/5917







newハイパー・マイコンmbedでインターネット電子工作


マイコンと電子工作 No.6


マイコンと電子工作 No.4


マイコンと電子工作No.1
サポート・ページはこちら