マイクロビット(e_16)RCWL-0516 レーダー方式動体センサー
RCWL-0516
RCWL-0516はドップラーレーダー方式マイクロ波モーションセンサーモジュールです。micro:bitでRCWL-0516を使って見ようと思います。RCWL-0516の外観は下図です。L型のピンヘッダを付けて使いました。
検出範囲はテーパー角度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が動体物を検知すると単純に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に接続しました。先の接続図に追加はこれだけですので接続、実体図などは省略します。
#!/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
(以下、省略)
0~100までのデータを部分的にみると検知後のOUT出力の保持は約2秒間のようです。sleep(100)で繰返しているのでだいたい横軸は値×100msecです。また検知は2.0V±500mVを超えるとOUT出力されるようです。
500~600までのデータを部分的にみるとsleep(100)の分解時間で読み切れてない2OUTデータがありそうですが、概ね2.0V±500mVがOUT出力される閾値のようです。
2OUTデータの閾値±500mVを下げれば動体検知がシビアになるように思います。ちなみに閾値±300mVにして確認してみました。
測定した結果のグラフだけ記載しておきます。(スクリプトは記載してません)
下図の緑線が2OUTデータを閾値±300mVにした線です。非常に敏感になったと思います。2OUTデータを直接micro:bitで読込んで処理した方が調整しやすいかも知れません。
まとめ
micro:bitで動体検知センサーRCWL-0516モジュールを使って見ました。モジュールに実装されているIC RCWL-9196の2OUT信号をmicro:bitで処理して動体検知の感度を調整してみました。