Raspberry Pi 備忘録 / Mbedもあるよ!

Raspberry Pi であれこれやった事の記録

距離センサー GP2Y0A710K を試す

GP2Y0A710K を試す。

データ

特徴
・赤外線とPSD(position sensitive detector)を使用し非接触で距離を測定することができます。
・1m~5.5mまで測定可能です。
・超音波方式より狭い領域での測距が可能です。(音響反射等の影響を受けない)
・距離に反比例した出力電圧。
 わかりやすいアナログ出力です。

主な仕様
・寸法:58×17.6×22.5mm
・消費電流:30mA(typ)
・電源電圧:DC5VDC
(4.5~5.5VDC

f:id:pongsuke:20160722181359j:plain

f:id:pongsuke:20160722182334j:plain

配線がややこしい。

図を見て、スタンプが有る側から見て、右が 1 だ!

ケーブルを挿すとこうなる。

右から1,2,3,4,5 だから、

1,4 は GND, 2,3(青と黒) は Vcc, 4(白) は Vo だ!

f:id:pongsuke:20160722182839j:plain

f:id:pongsuke:20160722181307j:plain

配線

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 がそれに対応します。

コーディング

距離の計算は、こちらを使わせていただきました。

arkouji.cocolog-nifty.com

$ 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 だせるから、問題ない。