マイクロビット(e_06)GP2Y0A21YK 赤外線距離センサー
GP2Y0A21YK
シャープのGP2Y0A21YK 赤外線距離センサモジュールを使ってみます。以下がセンサーの外観です。モジュールのデータシートをみると 10 ~ 80 cmの距離が測定できます。
接続例
モジュールのピン配置は以下のようになっています。電源電圧は4.5~5.5Vなのでmicro:bitから供給できません。5Vの外部電源が必要になります。
以下のようにmicro:bitとGP2Y0A21YKを接続しました。出力電圧Voは3.3Vを超えないようなのでmicro:bitのpin0に直接接続しました。pin0のモードはアナログ入力にして、read_analog()で読み込みます。
※micro:bitのピン配置図は「https://tech.microbit.org/hardware/edgeconnector/」からの引用です。
また、データシートから出力電圧Voと距離のグラフからエクセルなどの表計算ソフトでグラフ化し、近似式を求めました。以下の 距離L(cm)=26.8995*Vo^-1.3003 を使って計算しようと思います。
スクリプト
スクリプトは以下のようにしました。※thonny-microbitを使っています。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
import math
# 電圧換算
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
Vs=3300 # 電圧換算のための電源電圧 mv
# GP2Y0A21YK distance measuring sensor unit
# L = 26.8995xVo^-1.3003 26.9183*Vo^-1.2351
# 一応、NO_PULLに設定しておく
pin0.set_pull(pin0.NO_PULL)
while True:
v_read=pin0.read_analog() # Voを読み込む
vo=u_map(v_read,0,1024,0,Vs) # 電圧に換算する
v_out=vo/1000 # mvをVにする
l_cm=26.8995*pow(v_out,-1.3003) # 近似式に代入して距離を算出する
print('Vout %06.2f ' % v_out,'L cm %06.2f ' % l_cm) # 結果表示
sleep(1000*7)
実行結果です。(ThonnyのShell表示、ThonnyのSTOPアイコンで停止)
厚紙の衝立を7秒内に移動させて測定しました。まあまあ合っています。
>>> %Run b1121_ir_dist_0b.py
Vout 003.19 L cm 005.95 # 5cm
Vout 002.78 L cm 007.13 # 10cm
Vout 001.76 L cm 012.85 # 15cm
Vout 001.39 L cm 017.58 # 20cm
Vout 000.99 L cm 027.36 # 30cm
Vout 000.76 L cm 038.14 # 40cm
Vout 000.64 L cm 047.87 # 50cm
Vout 000.52 L cm 063.57 # 60cm
実測値から近似式
前述の近似式はデータシートから求めました。実測値から近似式を求めてみます。実際に距離を変えてVoを実測定して表計算で近似式を求めました。その結果 距離L(cm)=26.9183*出力電圧Vo^-1.2351 になりました。
実測から求めた近似式に変更して再測定をしました。ぴったりとは行きませんでしたが、50、60cmの値は近くなりました。
>>> %Run b1121_ir_dist_0b.py
Vout 003.18 L cm 006.44 # 5cm
Vout 002.62 L cm 008.19 # 10cm
Vout 001.80 L cm 013.02 # 15cm
Vout 001.56 L cm 015.49 # 20cm
Vout 001.01 L cm 026.71 # 30cm
Vout 000.76 L cm 037.50 # 40cm
Vout 000.60 L cm 050.25 # 50cm
Vout 000.52 L cm 060.46 # 60cm
まとめ
micro:bitで赤外線距離センサーモジュールGP2Y0A21YKを使ってみました。GP2Y0A21YKでの距離測定ができました。だいたい近い値になりました。10~40cmくらいにある物体の有無を調べるには簡単に使えそうです。