距離センサー GP2Y0A710K を試す
GP2Y0A710K を試す。
データ
特徴
・赤外線とPSD(position sensitive detector)を使用し非接触で距離を測定することができます。
・1m~5.5mまで測定可能です。
・超音波方式より狭い領域での測距が可能です。(音響反射等の影響を受けない)
・距離に反比例した出力電圧。
わかりやすいアナログ出力です。
主な仕様
・寸法:58×17.6×22.5mm
・消費電流:30mA(typ)
・電源電圧:DC5VDC
(4.5~5.5VDC)
配線がややこしい。
図を見て、スタンプが有る側から見て、右が 1 だ!
ケーブルを挿すとこうなる。
右から1,2,3,4,5 だから、
1,4 は GND, 2,3(青と黒) は Vcc, 4(白) は Vo だ!
配線
ADコンバーターは、MCP3008(10bit)を使用しています。
MCP3008 Vdd(16), Vref(15) -> Raspberry Pi 3.3v MCP3008 AGND(14), DGND(9) -> Raspberry Pi GND MCP3008 CLK(13) -> Raspberry Pi GPIO 11 (SCLK) MCP3008 DOUT(12) -> Raspberry Pi GPIO 9 (MISO) MCP3008 DIN(11) -> Raspberry Pi GPIO 10 (MOSI) MCP3008 CS/SHDN(10) -> Raspberry Pi GPIP 8 (CE0)
MCP3008 と、ADコンバーターとRPIの接続。
MCP3008 Vcc -> Raspberry Pi 5v MCP3008 GND -> Raspberry Pi GND MCP3008 Vo -> MCP3008 CH0(1)
別に、MCP3008 の CH0 じゃなくて、1でも7でも構いません。
下記 channel がそれに対応します。
コーディング
距離の計算は、こちらを使わせていただきました。
$ cat GP2Y0A710K.py #!/usr/bin/env python import time import sys import spidev spi = spidev.SpiDev() spi.open(0,0) channel = 0 # MCP3008 10bit def readAdc(channel): adc = spi.xfer2([1,(8+channel)<<4,0]) data = ((adc[1]&3) << 8) + adc[2] return data def convertVolts(data): volts = (data * 3.3) / float(1023) volts = round(volts,4) return volts def convertDistance(volts): # dist = 250 / volts dist = ( 9.5974 / volts ) -3.0086 return dist if __name__ == '__main__': try: while True: data = readAdc(channel) volts = convertVolts(data) dist = convertDistance(volts) print("adc : {:8}".format(data)) print("volts: {:8.2f}".format(volts)) print("dist : {:8}".format(dist)) time.sleep(1) except KeyboardInterrupt: pass spi.close() sys.exit(0)
追記
参考資料を見ると
7-8 電源ライン安定化の為、製品近傍のVcc-GNDに 10μF以上のバイパスコンデンサを、、、 7-9 350ma以上の電源を・・・
と書いてあった。
RPI 5v は、私の場合 2.0A 給電しているから、 2000 - 900 = 1100mA だせるから、問題ない。