製品レビュー|電子機器9:焦電人感センサ(SB612B)
1.概要
購入した製品の使い方および感想用記事です。
今回は「焦電型赤外線センサーモジュール(焦電人感センサ)(600円/個(税込))」をレビューしました。
※最終的にうまくいかなかったのですが、コードは間違っていないと思いますのでご参考までに
1-1.基本仕様
焦電センサ(pyroelectric sensor)を使用した人感センサーモジュールであり、人体を検知します。プリント基板(PCB:printed circuit board)上にフレネルレンズを有したPIR(Passive Infrared Ray)センサ(人感センサ)が搭載されています。
1-1-1.仕様の概要
基本の概要は下記参照。
電源電圧:DC3.3-12V
ドレイン電流 (絶対最大定格):≤30uA
遅れ時間:2s-3600S, adjustable
Blockade time:2S
Trigger mode:Repeatable triggered
Lux(ルクス:照度の単位):adjustable
検出最大距離:≤8m
検出最大角度:≤115•
出力電圧:3.3V High/Low level signal or Open-Collector Output
動作温度:-20℃-+55℃
赤外線センサ:dual element, low noise, high sensitivity
なお、使用環境として下記は非推奨となっています。
環境条件が急激に変化する
大きな衝撃や振動
赤外線を妨害する弊社物(ガラスなど)
直接太陽光が当たる
エアコンやヒーターなどから直接風があたる
1-1-2.ピン配置
ピンの配置は下図の通り
DC-INPUT:供給電圧(DC3.3V-12V)
TEST:出力用のTESTピン
High level信号:3.3V
信号無し(low level signal ):0V
LOAD+:anode of the load
LOAD-:cathode of the load. Voltage of the load and .
DC-INPUT are the same. Max current with load is 100mA.DARK_ADJ:ルクス(照度)の調整
DELAY_TIME:遅れ時間の調整
1-1-3.Schematic Diagram:回路図
【モジュール】
【BM612(センサー本体)】
1-2.詳細仕様
1-2-1.感度調整
本モジュールのSENSつまみを回してPIR(人感)センサの閾値(threshold)を調整できます(つまみは下図右)。
SENSの電圧と閾値には線形の関係がありますが、$${\frac{VDD}{4}}$$以上だと閾値は飽和します。
1-2-2.遅れ時間の調整
本モジュールのSENSつまみを回して遅れ時間の調整が可能です。
下図・下表に電圧と遅れ時間の関係を示します。
2.製品原理
製品の動作原理に関する部分を説明します。
2-1.人体からの赤外線放射
赤外線サーモグラフィで人体の熱画像が撮影できたり非接触体温計で体温が計測できる原理と同じで、人体からは電磁波がでており特に赤外線領域の波長が多いです。
放出されるエネルギー量はステファン・ボルツマンの法則より下記式で計算されます。なお物質は黒体(表面反射をせず全ての赤外線を吸収する物体)と仮定しています。
$$
E[W/m^2]= \sigma T^4=5.67 \times 10^{-8} T^4
\\\sigma:ステファン・ボルツマン定数 ( 約5.67 \times 10^{-8} , \text{W m}^{-2} \text{K}^{-4} )
\\T:絶対温度[K]
$$
また波長に対する放射強度を表す方式としてプランクの法則があります。全波長に渡って積分すると放射強度が算出でき、これがステファン・ボルツマンの法則となります。
$$
B_\nu(\lambda, T) = \frac{2hc^2}{\lambda^5} \frac{1}{exp({\frac{hc}{ k_BT\lambda}}) - 1}
$$
T:絶対温度[K]
λ:波長
ℎ :プランク定数
𝑘B:ボルツマン定数
𝑐:光速度
プランクの法則における波長分布には極大値(放射強度が最大となる波長点)が存在し、数式を微分すれば計算可能なはずであり、結果として近似解が$${\lambda_{max}=\frac{b}{T}}$$に近づくはずです(多分)。
プランク分布が理論的に確立する前から、「黒体から放出される放射の分光放射発散度が最大となる波長λmは、黒体の絶対温度Tに反比例する」というウィーンの変位則が発見されており、下記式となります。
$$
\lambda_{max}=\frac{2.8977729\times 10^{-3}}{T}
$$
ウィーンの変位則に人間の体温(36℃)を入れるとλ$${\lambda_{max}=9.4μm}$$となります。つまり人体から放射される電磁波の最大エネルギーの波長は赤外線(2.5~25μm)であり、赤外線を検出すれば人体の有無が検出できます。
2-2.PIRセンサ:計測原理
人間や動物から放射される赤外線を受動的に検出する物を受動型赤外線センサ(Passive Infrared Sensor = PIRセンサ)と呼びます。。 中でも人体を選択的に広いエリアで安定して捉えるPIRセンサが焦電型yroelectric)赤外線センサ、すなわち焦電効果を利用したパイロセンサです。
焦電体と呼ばれる物質の温度が変化したとき、その表面に電荷が現れる現象を焦電効果といいます。誘電体のうち、ある種の物質は外部電界を加えなくても自発的に分極しているものがあり、これを焦電体と呼びます。自発分極は焦電体の温度に依存するため、焦電体の温度をT [K]から(T + ∆T)[K]に変化させると自発分極の大きさが変わります。
表面電荷は自発分極の変化ほど早く温度変化に対応できないため、焦電体の表面では自発分極の変化分だけ電荷を短時間観測できます。 この電荷の流れを焦電流といい、焦電体の両面の電極間に高インピーダンスの負荷を接続して電圧として検出できます。
2-3.PIRセンサ:構造
【Rg、FET】
まず焦電体を適当な大きさに加工し、その両面に電極を形成して焦電流を取り出せる構造にした素子と、非常に小さい電流を電圧の変化として検出するための抵抗を接続します。この抵抗は、FETのゲート端子に接続されるためゲート抵抗(Rg)と通称されます。
人体から放射される赤外線によって発生する焦電流は非常に微弱なため、電圧測定が容易なように抵抗値の変換を行います(インピーダンス変換)。これにはリーク電流が小さく、且つ入力インピーダンスの高いFET(電界効果トランジスタ)を用います。
【光学フィルタ】
人体から放射される9.4µm近辺の赤外線だけを選択的に取り出すため、焦電型赤外線センサの窓に装着されているものを光学フィルタと呼びます。
下図に代表的な光学バンドバスフィルタ(5.0µmカットオン・フィルタ)の特性を示します。おおよそ5µm~14µmの波長領域だけを取り出すことが出来ています。
2-4.フレネルレンズ
フレネルレンズ(Fresnel lens)とは、レンズ表面に同心円状の切れ込みを入れ、角度をつけてカッティングを施したレンズのことです。光を絞って遠くに送るには明るい光源と大きなレンズ系が必要となりますが、それを避けるために球面レンズの表面部分を細かく分解し、ぎざぎざの段差をつけ、プリズムを並べたように配置することで、レンズの大きさや厚みを抑えることができます。
3.部材購入
3-1.購入品
部品は本体のみ購入しました。
3-2.準備必須品
その他必需品は下記の通りです。
マイコン/シングルボード(Raspberry Pi/Pico)
ブレッドボード
ジャンピングワイヤー
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
Raspberry Piも組み込み関数と標準ライブラリで対応できるため、追加の環境構築は不要です。
5.使用前の準備
5-1.はんだ付け
本製品の既にピンがつけられているため、はんだ付けは不要です。
5-2.部品の組付け
部品の組付けはジャンパー線を使用して下記の通り繋ぎました。
【Raspberry Pi】
$$
\begin{array}{|c|c|c|} \hline \textbf{No.} &\textbf{センサー} & \textbf{Raspberry Pi} \\
\hline \text{1} & \text{VCC} & \text{PIN4(5V)}\\
\hline \text{2} & \text{GND} & \text{PIN6(GND)}\\
\hline \text{3} & \text{TEST} & \text{どのGPIOでもOK}\\
\hline \end{array}
$$
【Raspberry Pi Pico】
$$
\begin{array}{|c|c|c|} \hline \textbf{No.} &\textbf{センサー} & \textbf{Raspberry Pi Pico} \\
\hline \text{1} & \text{VCC} & \text{PIN40|VBUS(5V)}\\
\hline \text{2} & \text{GND} & \text{PIN38(GND)}\\
\hline \text{3} & \text{TEST} & \text{どのGPIOでもOK}\\
\hline \end{array}
$$
5-3.センサーの感度調整
センサーの感度(SENS、DARK_ADJ、DELAY_TIME)を調整します。調整値は下記記事参照のこと
6.MicroPythonスクリプト(Pico)
Micropythonのコードは下記記事を参考にさせていただきました。
6-1.任意:デバイス接続の確認
本装置は通信しないため配線の目視確認のみです。
[IN]
-
[OUT]
-
6-2.コードの設計思想
設計思想は下記の通りです。
3.3Vでも動作するが安定性を考慮して5Vの電源を供給
出力はアナログ(0~3.3V)ではなく0/1のデジタル(0/3.3V)のため、どのGPIOでもOK
構造がシンプルのため、うまく動作するなら使いやすい
6-3.スクリプト実行
スクリプトを作成し、実行しました。
本当なら通常は0が出力され、人が近づいたらTESTピンから3.3Vの電圧がかかるためPINは1を検知するはずです。ただ、私のセンサは動作しませんでした。
[IN]
from machine import Pin
import time
sensor = Pin(16, Pin.IN, Pin.PULL_DOWN)
while True:
print(sensor.value())
time.sleep(1)
[OUT]
0
0
0
0
念のためにADCでアナログ値も確認してみました。センサは0/1の出力しか出さないため、結果として0の値が出続けました。
[IN]
from machine import Pin, ADC
import time
adc = ADC(Pin(26))
while True:
val_raw = adc.read_u16()
val_Volt = val_raw * 3.3 / 65535
print(f'電圧:{val_Volt:.2f}V')
time.sleep(1)
[OUT]
電圧:0.40V
電圧:0.40V
電圧:0.41V
電圧:0.40V
電圧:0.41V
電圧:0.40V
7.Pythonスクリプト(Raspberry Pi)
Raspberry Piでも実行しました。コードは下記記事参照しました。
7-1.任意:デバイス接続の確認
本装置は通信しないため配線の目視確認のみです。
[Terminal]
-
7-2.スクリプト実行
スクリプトを作成し、実行しました。
こちらもセンサが反応しませんでした。多分センサが壊れてるような気がします。
[IN]
import RPi.GPIO as GPIO
import time
GPIO_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN,GPIO.IN)
while True:
if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
print("反応あり!")
time.sleep( 1 )
else:
print("反応なし")
time.sleep( 1 )
[OUT]
反応なし
反応なし
反応なし
反応なし
8.所感
簡単な所感は下記の通り
センサのつまみを調整しても、部屋の明るさ変えても、機器をRaspberry Pi/Picoで試しても動作しない・・・・・何故だ・・・・
参考資料
別添1 Python関係
別添2 技術関係
あとがき
解決してから次いきたかったけど、センサがシンプルなのでもう解決方法がセンサ不良以外考えられない。そもそも出荷前検査とかどうしているのだろうか