製品レビュー|電子機器13:圧力(感圧)センサー(FSR406)
1.概要
購入した製品の使い方および感想用記事です。
今回は「圧力センサーFSR406(1,040円/個(税込))」をレビューしました。
1-1.基本仕様
INTERLINK ELECTROICS社製のFSR(Force Sensing Resistors)はPTF(Polymer Thick Film:高分子厚膜フィルム)デバイスの一種です。センサ部に圧力を加えると抵抗値が減少し、リニアなアナログ出力を得ることができます。
センサ部裏面に両面テープが付いていますので、剥離紙を剥がすだけで基板等に貼り付け可能です。
FSRにはシリーズがあり、今回はFSR406を使用します。
1-2.FSRセンサの動作確認
まずはシンプルに電源▶LED▶抵抗(FSR)▶GNDに繋ぎ、LEDのの照度を確認しました。強く触ると抵抗値が小さくなるため、よりLEDが光っていることが確認できました。
1-1-1.仕様の概要
基本の概要は下記参照。
電源電圧:データシートの参考値DC5.0V
感圧範囲:0.2~20N
出力:アナログ出力(AO)
出力電圧:電源電圧と接続する外部抵抗で変化(データシート参照)
1-1-2.一般的な回路図
下図の通り(詳細は追って解説)
今回は実装しませんが、複数のFSRセンサを設置する時は下図の通り。
1-2.詳細仕様
1-2-1.FSRの抵抗値と力の関係図
下図の通り。圧力が無いと抵抗が無限に近づくため電流は流れません。
1-2-2.出力電圧の関係
回路図の通り、外部接続する抵抗$${R_{M}}$$(測定抵抗)の値により、加えた力に対する電圧値は変化します。電源電圧$${V+=5V}$$において、各抵抗値における出力電圧の関係は下図の通りです。
$$
V_{OUT}=\frac{R_{M}V+}{(R_{M}+R_{FSR})}
$$
1-2-3.センサの構成
下図の通り
※GUSSETは信号を通すラインを乗せるための当て板を意味していると思います。
2.製品原理
製品の動作原理に関する部分を説明します。
2-1.圧力センサ
圧力には絶対圧、ゲージ圧、差圧があり、圧力の検出には下記のようなものがあります。
前の記事における気圧センサはダイヤフラムの変化量をピエゾ抵抗型や静電容量型で検出するMEMSが主流でした。
INTERLINK ELECTROICS社の圧力センサFSR(Force Sensing Resistor)は特許取得済みの技術です。
2-2.FSR:Force Sensing Resistorとは
FSRの基本構造は薄いair gap(スペーサーでギャップを作っている)で2枚の膜が分離されています。
片方の膜は2セットの電気的に独立した互いにかみ合った指(interdigitated fingers)を持ちます。
もう片方の膜はFSR Inkが塗布されています。
FSR Inkのマイクロスコープ画像は下図の通りである。圧力を加えて二つの基板(substrates)がくっつくと、FSR表面の微小な突起(microscopic protrusions)が表面の互いにかみ合った指(interdigitated fingers)に短絡(Short)します。
加える力で接触する突起(protrusions)が変わるため抵抗が変わります。
2-3.オームの法則
オームの法則は電圧V、電流I、抵抗Rに対して下記式が成り立つ法則です。つまり電圧は電流と抵抗に比例します。
$$
\begin{aligned}
電圧V&=I\times R
\\&=電流[A]\times抵抗[Ω]
\end{aligned}
$$
2-4.合成抵抗
抵抗(を持つ機器)は同一回路内に複数接続することができ、接続方法により直列回路と並列回路の2種があります。各回路の抵抗の合計値が合成抵抗であり、回路ごとにより計算方法が異なります。
【直列回路/直列抵抗】
直列接続では抵抗器が一列に接続され、同じ電流が各抵抗器を通過します。この接続における合計の抵抗値は、各抵抗の値の和に等しくなります。
$$
\begin{aligned}
R_{\text{total}} &= \sum_{i=1}^n R_i
\\&= R_1 + R_2 + \cdots + R_n
\end{aligned}
$$
【並列回路/並列抵抗】
並列接続では各抵抗器の一端が共通の点に接続され、他端も別の共通の点に接続されます。この方式では電圧は各抵抗器に同じであり、合成抵抗値は各抵抗の値の逆数の和の逆数になります。
$$
\begin{aligned}
\frac{1}{R_{\text{total}}} &= \sum_{i=1}^n \frac{1}{R_i} \\
&=\frac{1}{R_1} + \frac{1}{R_2} + \cdots + \frac{1}{R_n}
\end{aligned}
$$
2-5.分圧回路
2-5-1.抵抗が2個
分圧回路とは「抵抗器を直列に接続し、抵抗器間の電圧(分圧)を計測する回路」です。前述の通り直列回路には下記特性があります。
合成抵抗は各抵抗値の合計$${R_{\text{total}} = \sum_{i=1}^n R_i}$$となる
各抵抗を流れる電流量は同じ
上記より、各抵抗にかかる電圧$${V_i}$$の合計は電源電圧と同じ
例として、下図のように抵抗を2つ直列に接続した回路だと、抵抗間の電圧$${V_m}$$は下記式の通りです。つまり「抵抗間の電圧は合成抵抗と後流の抵抗の比に依存する」ことが分かります。
$$
電流I=\frac{電源電圧V}{合成抵抗R_c}=\frac{V}{R_1+R_2}
$$
$$
\begin{aligned}
抵抗間の電圧V_m&= IR_2 \\
&=(\frac{V}{R_1+R_2})\times R_2 \\
&=V\times \frac{R_2}{R_1+R_2}
\end{aligned}
$$
よって、下図のように抵抗$${R_1}$$(今回はセンサ)の後流に別の抵抗器$${R_2}$$を付けることで、抵抗間の電圧を調整することが出来ます。
2-5-2.抵抗が複数
前提として考えは前述と同じでありすべてオームの法則に準じます。
抵抗が複数ある場合、特定点の電圧値$${V_m}$$は上流の合成抵抗$${R_U}$$と下流の合成抵抗$${R_L}$$から$${V_m=V\times\frac{R_L}{R_U+R_L}}$$で求めることが出来ますが、計算が手間です。
そこで各抵抗においてどの程度電圧が低下(電圧降下)を各抵抗$${R_i}$$にかかる電圧$${V=IR_i}$$から算出できます。
3.部材購入
3-1.購入品
部品は本体のみ購入しました。
3-2.準備必須品
その他必需品は下記の通りです。
抵抗器はADCの仕様に合わせて選定すればよいですが、5V電源の場合10Nで$${V_{OUT}}$$=約3.3Vになる10kΩ抵抗でよいと思います。また、LEDがあると動作検証に便利です。
マイコン/シングルボード(Raspberry Pi/Pico)
ブレッドボード
ジャンピングワイヤー
10kΩ抵抗器
4.環境構築
4-1.マイコン準備
センサを制御するためのシングルボードやマイコンの準備を行います。
Raspberry PiやPicoの準備は下記記事参照のこと
Raspberry PiにGPIOを制御するためのライブラリが無い場合は”RPi.GPIO”を事前にインストールしておきます。
Picoの場合はMicropythonを使用できるようにしておきます。
[Terminal]
pip install rpi.gpio
4-2.ライブラリのインストール
4-2-1.Case1:Pico
Raspberry Pi Picoは組み込み関数と標準ライブラリで対応できるため、追加の環境構築は不要です。
4-2-2.Case2:Raspberry Pi
外付けADCを使用しない場合、Raspberry Piは組み込み関数と標準ライブラリで対応できるため、追加の環境構築は不要です。
※ADCが無いとタッチの有無程度しか判定できません。
5.使用前の準備
5-1.はんだ付け
本製品の既にピンがつけられているため、はんだ付けは不要です。
5-2.部品の組付け
部品の組付けはジャンパー線を使用して下記の通り繋ぎました。
仕様書で参考回路図が記載されています。▷の記号が増幅器(オペアンプ)??かどうかが分かりませんが、回路としては分圧回路を用います。つまりFSR(センサ)とGNDの間に抵抗を挟み、その間の電圧を計測します。
※テーブル形式では表現できないため、詳細は図参照
後流に挟む抵抗器の仕様はデータシートを参照します。数値的には10kΩが良いと思います。私は手持ちの抵抗器が330Ωしかないため、頑張って9個直列に繋いで約3kΩの自家製抵抗器を用いました。
またセンサの動作確認用にLEDも挟み込みました。
【Raspberry Pi】
今回は未実装
【Raspberry Pi Pico】
$$
\begin{array}{|c|c|c|} \hline \textbf{No.} &\textbf{センサー} & \textbf{Raspberry Pi Pico} \\
\hline \text{1} & \text{V+} & \text{PIN40|VBUS(5V)}\\
\hline \text{2} & \text{GND} & \text{PIN38(GND)}\\
\hline \text{3} & \text{GND以降} & \text{GPIO26(ADC0)}\\
\hline \end{array}
$$
6.MicroPythonスクリプト(Pico)
Micropythonでコードを作成しました。下記参照しました。
6-1.任意:デバイス接続の確認
通信はないため、外観チェックだけしておきます。
[IN]
-
[OUT]
-
6-2.コードの設計思想
設計思想は下記の通りです。
力により電圧が変わるため、出力をADCでとれるようにした。
他は特になし
6-3.スクリプト実行
スクリプトを作成し、実行しました。
値を取得でき、かつ力をより加えると電圧の変化とともにLEDの照度も大きくなることを確認できました。
[IN]
from machine import Pin, ADC
import time
#ADCから電圧値取得
adc = ADC(Pin(26)) #GPIO26 ADC0
while True:
val_raw = adc.read_u16() #デジタル値(0-65535)取得
volt = val_raw * 3.3 / 65535 #電圧値(0-3.3V)に変換
print(f'Raw Value: {val_raw}, Voltage: {volt:.2f}V')
time.sleep(1)
[OUT]
Raw Value: 256, Voltage: 0.01V
Raw Value: 208, Voltage: 0.01V
Raw Value: 272, Voltage: 0.01V
Raw Value: 21077, Voltage: 1.06V
Raw Value: 24469, Voltage: 1.23V
Raw Value: 272, Voltage: 0.01V
Raw Value: 43162, Voltage: 2.17V
7.Pythonスクリプト(Raspberry Pi)
Raspberry PiはADCがないため外付けADCが必要となります。
※Raspberry PiのGPIOのINPUTの電圧閾値はHigh 1.34~3.3Vのはずです。今回の結果より、RPi.GPIOのGPIO.input()を用いれば、ちょっと触った時は検出できませんが、強めに触った時のON/OFFは検出可能です。
(抵抗器を10kΩ使えば、ちょっと触った分も検出可能なはず)
8.所感
簡単な所感は下記の通り
シンプルなアナログ出力であり、抵抗次第でRaspberry Pi PicoのADCがもつ0~3.3V範囲内に調整できるのは試験がしやすくてうれしい
I2Cのようなシリアル通信などコードが手間だけど、その分ICの中で頑張ってくれるから配線はSDA/SCLの2本を繋ぐだけでよかった。アナログ出力だとコードは楽(ADCで電圧値みるだけ)だけど、ハードウェアの理解が無いと動作できないし、間違えると装置壊す可能性あるのが怖い。
参考資料
別添1 Python関係
別添2 技術関係
あとがき
そろそろコードよりハードウェアの知識で躓くことが多くなってきた・・・・・
さてどうやって改善しようかな
この記事が気に入ったらサポートをしてみませんか?