Raspberry Pi Pico(d_18)GP2Y0A21YK 赤外線距離センサ
GP2Y0A21YK 距離センサ
GP2Y0A21YKはシャープ製のPSD赤外距離センサです。10~80cm間の距離を測定できます。
距離測定やタッチレススイッチなどの用途に使えるようです。
※micro:bitの記事e_06からRaspberry Pi Picoで使えるように追記、修正等をしました。
外観
GP2Y0A21YKの外観写真です。(以後はGP2Y0A21YKと記載します)
接続例
GP2Y0A21YKの電源電圧は4.5V~5.5Vなので外部電源が必要です。
Raspberry Pi Picoで測定するために、GP2Y0A21YKの出力端子をRaspberry Pi PicoのADC0(GP26)に接続しています。
GP2Y0A21YKの説明
データシートから抜粋してGP2Y0A21YKの説明します。
GP2Y0A21YKは下図のように、赤外線LED (infrared emitting
diode)、PSD(position sensitive detector)、信号処理回路を集積した小型高性能測距センサです。
LIGHT EMITTER :赤外線LED
LIGHT DETECTOR:PSD
※ GP2Y0A21YKのデータシートから抜粋
原理的にはPSDに反射物体が A 点と B 点では、PSD 上の光スポット位置が変化します。
この位置を電気的に信号処理することにより、反射物体の位置(距離)を検出することができるそうです。
※ GP2Y0A21YKのデータシートから抜粋
GP2Y0A21YKのデータシートには反射物体との距離とGP2Y0A21YKのアナログ出力値のグラフがあります。
測定距離は10~80cmです。
このグラフの近似式を用いて距離を算出します。何かの資料では
距離 = 27.22×電圧 Vo^(-1.2027)
とありました。今回はこの値を使います。
※ GP2Y0A21YKのデータシートから抜粋
ちなみに記事e_06ではVoと距離のグラフを読みとってエクセルなどの表計算でグラフ化して近似式を求め、
距離L(cm)=26.8995*出力電圧Vo^-1.3003 を使って計算しました。
スクリプト
GP2Y0A21YKのスクリプトは以下のようにしました。class ‘ADC’を使います。
Raspberry Pi PicoにあるADC(アナログ-デジタル変換)を使います。
5秒ごとにセンサと白い画用紙との距離を変えて測定できるようにしました。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。
※Raspberry Pi Pico単独で動作させるには’main.py’としてRaspberry Pi Picoにuploadして使います。
pico_gp2y0a21yk_01b.py
#!/usr/bin/env python
# -*- coding: utf-8 -*
from machine import Pin,ADC
import time
res=3.3/(2**16) #16bit ADC 3.3V/65536
for i in range(15):
adc=ADC(0) # or ADC(Pin(26)), ADC(26)
vo=adc.read_u16()*res
dist=27.22*vo**(-1.2027)
print('%3d' %i,'%6.4f' %vo,'%6.1f' %dist)
time.sleep(5)
実行結果
結果は以下のようになりました。※Thonnyのshellに表示されます。
10-80cmの距離では、ほぼ正確に距離測定出来ているようです。
>>> %Run -c $EDITOR_CONTENT
0 0.3989 82.2 # 80cm
1 0.4553 70.1 # 70cm
2 0.5189 59.9 # 60cm
3 0.6035 50.0 # 50cm
4 0.7301 39.7 # 40cm
5 0.7881 36.2 # 35cm
6 0.8921 31.2 # 30cm
7 1.0798 24.8 # 25cm
8 1.3385 19.2 # 20cm
9 1.6891 14.5 # 15cm
10 2.4208 9.4 # 10cm
11 2.9212 7.5 # 8cm
12 3.1469 6.9 # 6cm
13 2.9913 7.3 # 4cm
14 1.3425 19.1 # 2cm
>>>
まとめ
Raspberry Pi PicoでGP2Y0A21YKを使って距離測定ができました。距離測定や非接触スイッチなどに使えそうです。