はらぺこらいおん

日々、思ったことを。

センサー部品まとめ

今まで使ったセンサーをまとめます。
後からデータは追記していきます。

距離センサー

超音波センサー

特定のパターンの超音波を出し、それが対象物にあたり戻ってくる時間を計測することで、対象物との距離を得ます。
音は気温によって速度が変わるので温度センサーを一緒に使い、補正をすると精度が若干上がります。
計算に使う音の速さは約340m/sです。(気温15℃の環境下)
例えば気温15℃の環境で10ミリ秒で超音波が戻ってきた場合、340m/s × 10 × 1000^(-3) s / 2 = 1.7mと求まります。
最後に2で割っているのは、戻りまでの時間は対象物との往復の時間になるため、実際の対象物との距離を求めるためには2で割る必要があります。
超音波距離センサー HC−SR04: センサ一般 秋月電子通商 電子部品 ネット通販
こちらのセンサーは最初から半田付け不要で、すぐに使うことができます。

Arduinoにはパルスが戻ってくるのを待つ関数(pulsuIn)が用意されていますので、この関数で戻りのパルスを受信するまでの時間を計測できます。
デフォルトでは1秒でタイムアウトします。
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=2450

Raspberry PiなどではpulsuInがないため、パルスを送った後、戻り(In)のGPIOポートが0の間はループを継続し、 1になったらループを抜けるという処理を行うプログラムを書けば擬似的にpulsuInができます。ただ、ずっと0でループしていると、 反射波が得られなかった場合、無限ループに陥るため、時間をカウントしてタイムアウトする処理は必要になります。
Pythonのプログラムとしては以下のようになるかと思います。

# Define port
TRIGGER_PORT_ID = XX
ECHO_PORT_ID = YY

# Pulse Trigger 10usec
GPIO.output(TRIGGER_PORT_ID, True)
time.sleep(0.00001)
GPIO.output(TRIGGER_PORT_ID, False)

start = time.time()
wait = start
TIMEOUT_THRESHOLD = 1 #sec

while GPIO.input(ECHO_PORT_ID) == 0:
  start = time.time()
  if ((start - wait) > TIMEOUT_THRESHOLD):
    print 'target object not found'

while GPIO.input(ECHO_PORT_ID) == 1:
  stop = time.time()

pulse_in = stop - start

気をつけるべきこととしては、Arduino(5V)の場合は大丈夫ですが、Raspberry PiArduino(3.3V)を使っている場合、 センサーに5Vを印加した際の戻りをそのまま入力してしまうと、破損の恐れがあるので、抵抗などで分圧してあげる必要があります。

ドップラーセンサー(ミリ波)

ドップラーセンサーはドップラー効果を利用して、対象物との距離の変化を得ます。
ミリ波をセンサーから出し、対象物にあたり戻ってくる波を計測するのは超音波センサーと同じですが、
その際に時間ではなく、周波数の変化から対象物が移動しているかどうかを求めます。
対象物かセンサーに対して相対的に近づいている場合、対象物の速度に応じて戻ってくる周波数は高くなります。
反対に離れている場合、対象物の速度に応じて戻ってくる周波数は低くなります。
これにより、対象物が近づいているか、離れているかがわかります。
ドップラーセンサーモジュール(24GHz)DIP化セット NJR4265 J1(24GHz): センサ一般 秋月電子通商 電子部品 ネット通販
こちらのセンサーは少し細かい半田付けが必要になります。
センサー単体でも動作可能で近づく、離れるといった動きに応じてLEDを点灯させることができます。
また、シリアル通信(UART)を使ってArduinoRaspberry Piと検知情報やセンシングする閾値の設定などを行うことができます。

赤外線センサー

赤外線の距離センサーは、赤外線を発光し、その反射光の強さで対象物との距離を得ます。 超音波センサー(音)と比べて指向性を高くできるのが特徴です。 ただし、対象物の色によって光の吸収率(反射割合)が異なっているため、絶対的な距離を正確に求めることには不向きかもしれません。

距離ごとに製品がラインナップされています。

1〜5.5m
シャープ測距モジュール GP2Y0A710K: センサ一般 秋月電子通商 電子部品 ネット通販

0.2〜0.8m
シャープ測距モジュール GP2Y0A21YK: センサ一般 秋月電子通商 電子部品 ネット通販

出力値は電圧のアナログ値となるため、ArduinoなどのAnalog Inポートに入力し、電圧値から距離を求めます。

レーザーセンサー

レーザー測距センサ ToF(Time−of−Flight): センサ一般 秋月電子通商 電子部品 ネット通販

動体センサー

ドップラーセンサー

距離センサーのドップラーセンサーを参照。

温度センサー

温度センサーは温度によって発生する物理現象を計測することで温度を得ます。
原理はこちらのサイトに詳しく載ってます。
まめ知識 温度計測について - 横河電機

今回はこちらのセンサーを使いました。
温度だけでなく、湿度、気圧も計測することができます。 BME280使用 温湿度・気圧センサモジュールキット: センサ一般 秋月電子通商 電子部品 ネット通販
半田付けが必要になりますが、I2CとSPIで通信でき、I2C用のプルアップ抵抗も付属しています。

BME280 – スイッチサイエンス
こちらのサイトに非常に詳しく使い方が載っており、またArduino/Pythonのサンプルコードもあるので、勉強になりました。

センサーが立ち上がったすぐは値が不安定で信頼できる値が取れるまで数秒待つ必要がありました。

湿度センサー

温度センサーを参照。

気圧センサー

温度センサーを参照。

土壌湿度センサー

9軸センサー

ジャイロセンサー

加速度センサー

方位センサー

光センサー

照度センサー

カラーセンサー

焦電センサー

音センサー(マイク)

空気センサー

においセンサー

ホコリセンサー

CO2センサー

CO2など特定の気体の濃度を計測するのに用いられる手法としてNDIRがあります。 NDIR(Non Dispersive InfraRed)は、対象の気体が持つ赤外線の吸収特性を使って濃度を計測します。 詳しくは以下のURLを見てみてください。

http://www.irsystem.com/application/sensor/ndir.html

CO2センサーは各社より発売されていますが、ロット単位で購入しなければならないものも多く、 個人で購入する場合、こちらのセンサー(MH-Z19)が比較的安く、1単位で購入できます。

NDIR CO2 SENSOR, CO2 SENSOR,Infrared carbon dioxide gas sensor-Winsen Electronics

購入は以下のAliExpressからできます。

https://ja.aliexpress.com/item/1PCS-module-MH-Z19-infrared-co2-sensor-for-co2-monitor-Free-shipping/32371956420.html?spm=2114.13010608.0.0.c5etPL

ピンヘッダーは付属していないので、5pinと4pinのものがあると便利です。

センサーからの情報取得は、シリアル通信(UART)を使ってArduinoRaspberry Piで取得できます。

PWMを使用して値を取得するプログラムを以下の記事に書きました。

pictzzz.hatenablog.com

GNSS全球測位衛星システム