稼働中

マイクロビット(e_16)RCWL-0516 レーダー方式動体センサー

RCWL-0516

RCWL-0516はドップラーレーダー方式マイクロ波モーションセンサーモジュールです。micro:bitでRCWL-0516を使って見ようと思います。RCWL-0516の外観は下図です。L型のピンヘッダを付けて使いました。

RCWL-0516外観(部品面)RCWL-0516外観(裏面)

検出範囲はテーパー角度120度未満内で7メートル以内だそうです。
検知するとOUTが3.3V(HIGH)になり2sec間保持します。
3V3は3.3Vを出力しますが他の電源としては使用できないそうです。
CDS(写真左の右下)はCdSを外付けして日中に検出をオフにすることができるらしいです。(使ってません)

接続例

以下の図が接続例です。動作電圧は4.0-28Vなので別途電源が必要です。5V電源を使いました。供給電源が5VでもOUTの出力は3.3Vなのでmicro:bitのPin0に直接接続しました。また、出力が目視できるようにLEDをつなぎました。

RCWL-0516接続例

以下は実体写真です。

RCWL実体写真

スクリプト

RCWL-0516が動体物を検知すると単純にOUTからHIGH(3.3V)を出力するだけです。micro:bitのPin0をデジタル入力に設定してRCWL-0516の出力を調べます。
実際に使用するときはRCWL-0516で動体検知後のアクション、例えばブザーを鳴らすなどが続くと思いますが、ここでは検知だけを試しています。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
# pin0:read_digital
pin0.set_pull(pin0.PULL_UP)

while True:
    sleep(1000)
    out=pin0.read_digital()     # RCWL-0516のOUTを読む
    print('OUT %2d'%out)

実行結果です。(ThonnyのShellに表示されます)


>>> %Run 1218_rcwl_0b.py
OUT  0
OUT  0
OUT  0
OUT  1          # モーション検知
OUT  1          # 保持
OUT  1          # 保持
OUT  0
OUT  0
OUT  0
OUT  1          # モーション検知
OUT  1          # 保持

OUT信号と2OUT信号の比較

他のサイトでは敏感に検知していると記載されてましたが、私が使用した感じでは鈍い感じがしました。
調べてみるとRCWL-9196の12pinの信号(2OUT 2nd stage Op-amp output)を調べている記事がありました。(http://7ujm.net/micro/rcwl.html)詳細な回路図などはhttps://github.com/jdesbonnet/RCWL-0516が参考になりました。

RCWL-0516モジュールのOUT信号とIC RCWL-9196の12pinの信号を比べて見たいと思います。
無理矢理ですがIC RCWL-9196の12pinに直接リードを付け引き出し、micro:bitのPin1に接続しました。先の接続図に追加はこれだけですので接続、実体図などは省略します。

RCWL-9196の12pin


#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
# データを振幅比で換算(map)
def u_map(value,a_min,a_max, b_min,b_max):
    y= (value-a_min)/(a_max-a_min) * (b_max-b_min)+b_min
    return y
# pin0:read_digital pin1:read_analog
pin0.set_pull(pin0.PULL_UP)
pin1.set_pull(pin1.NO_PULL)

for i in range(600):        # 収集するデータ数
    sleep(100)
    out=pin0.read_digital()
    r_vir=pin1.read_analog() # pin1でRCWL-9196の2OUTの信号を得る
    vo_mv=u_map(r_vir, 0, 1024, 0, 3300)    # 3300mv
    vo=vo_mv/1000                           # mV >> V
    print('%2d'%i,"  ",'%2d'%out,"  ", '%4.2f' %vo) # 結果表示

実行結果です。(ThonnyのShellに表示されます)このデータを表計算ソフトで整理しました。


>>> %Run 1218_rcwl_01.py
 0     0    2.01        # データ番号 OUT 2OUT
 1     0    1.99
 2     0    2.03
 3     0    2.05
 4     0    2.06
 5     0    2.07
 6     0    2.11
 7     0    2.18
 8     0    2.16
 9     0    2.08
10     0    1.99
11     0    2.17
12     0    2.15
(以下、省略)

データをグラフ化した結果です。以下は全データのグラフです。
600個のデータ

0~100までのデータを部分的にみると検知後のOUT出力の保持は約2秒間のようです。sleep(100)で繰返しているのでだいたい横軸は値×100msecです。また検知は2.0V±500mVを超えるとOUT出力されるようです。

0~100までのデータ

500~600までのデータを部分的にみるとsleep(100)の分解時間で読み切れてない2OUTデータがありそうですが、概ね2.0V±500mVがOUT出力される閾値のようです。

500~600までのデータ

2OUTデータの閾値±500mVを下げれば動体検知がシビアになるように思います。ちなみに閾値±300mVにして確認してみました。
測定した結果のグラフだけ記載しておきます。(スクリプトは記載してません)
下図の緑線が2OUTデータを閾値±300mVにした線です。非常に敏感になったと思います。2OUTデータを直接micro:bitで読込んで処理した方が調整しやすいかも知れません。

閾値±300mV

まとめ

micro:bitで動体検知センサーRCWL-0516モジュールを使って見ました。モジュールに実装されているIC RCWL-9196の2OUT信号をmicro:bitで処理して動体検知の感度を調整してみました。