稼働中

マイクロビット(e_15)FC-51 赤外線障害物検知センサー

FC-51

赤外線障害物検知センサモジュールFC-51を使って見ようと思います。FC-51の外観は下図です。赤外光を放出し、障害物から反射した戻りの赤外光を受光し、コンパレータLM393で基準値と比較して障害物検出します。

FC-51外観

接続例

FC-51の電源は3〜5Vなのでmicro:bitから供給できます。FC-51の出力をPin0に接続します。Pin0をデジタル入力に設定します。FC-51の出力は障害物があるときにLowになります。その際に障害物LED(緑)が点灯します。

FC-51の接続例
※micro:bitのピン配置図は「https://tech.microbit.org/hardware/edgeconnector/」からの引用です。

実体配線の写真です。

FC-51実体配線

FC-51が障害物を検知し障害物LED(緑)が点灯した状態です。

検知時に緑LED点灯

赤外LEDの発光確認

ちなみに目視では見えませんが、以下のようにデジカメなら赤外LEDの発光が確認できます。左砲弾型LEDの中央に発光しているLEDダイスが見えます。ワイヤーボンディングも見えています。

赤外線LED点灯確認

スクリプト

FC-51が障害物を検知すると単純にLowを出力するだけです。Pin0をデジタル入力に設定してFC-51の出力を調べます。


from microbit import *
pin0.set_pull(pin0.PULL_UP)

while True:
    sleep(1000)
    out=pin0.read_digital()
    print(out)

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


>>> %Run 1217_fc51_02.py
1           # 障害物なし
1
1
0           # 障害物検知
1
1
0           # 障害物検知
1

白い紙、黒い紙で検知する距離を測ってみました。
白い紙 ~19cm
黒い紙 ~ 6cm
赤外線の反射率で大きく変わりました。黒と白の識別ができそうです。

受光素子の出力(写真で左リード)を測定して閾値を調べてみます。
Pin1をアナログモードにして電圧換算します。


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.set_pull(pin0.PULL_UP)
pin1.set_pull(pin1.NO_PULL)

while True:
    sleep(1000)
    out=pin0.read_digital()
    r_vir=pin1.read_analog()              # 受光出力を読み電圧値に換算
    vo_mv=u_map(r_vir, 0, 1024, 0, 3200)  #3200mv 実測値 
    vo=vo_mv/1000
    print('%2d'%out, '%4.2f' %vo)

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


>>> %Run 1217_fc51_01.py
 1 2.55
 1 2.46
 1 2.36
 1 2.31
 1 2.24
 0 2.20         # このあたりが閾値
 0 2.12
 0 2.07
 0 2.17

この閾値を可変抵抗で調整すれば障害物の検知する距離などを調整できそうです。

まとめ
micro:bitでFC-51赤外線障害物検知モジュールを使ってみました。接続も簡単で障害物の検知ができました。また赤外線の反射率が大きく違う障害物ならその判別ができそうです。