読者です 読者をやめる 読者になる 読者になる

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

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

距離センサー GP2Y0A21 を試す

距離センサー GP2Y0A21 を試す

赤外線を使用した測距モジュール
赤外線LEDとPSD(position sensitive detector)を使用して、非接触で距離を検出することができます。
・測距範囲:10~80cm
・出力:アナログ電圧出力
・寸法:29.5×13×13.5mm
・用途:ロボット・アミューズメント等
・電源:4.5~5.5V
※付属ケーブルの単品販売もございます→ C-05684
※検出距離が違う測距モジュールもあります。
 GP2Y0A02YK(20cm~150cm)<I-03158>
 GP2Y0A710K(1m~5.5m)   <I-03157>

とにかく注意すべきは、最初からついてきたケーブルの、赤 が GND で、黒 が Vcc であること。

私は、赤と黒を切断して、繋ぎ直しました。

配線

アナログ電圧主力なので、ADコンバーターに刺します。8ビットADコンバーターです。

3(4番目)に刺しました。

f:id:pongsuke:20160722173042j:plain

コーディング

#!/usr/bin/env python

import time
from datetime import datetime as dt
import sys
import spidev

spi = spidev.SpiDev()
spi.open(0,0)


def readAdc(channel):
        adc = spi.xfer2([6+((channel&4)>>2),(channel&3)<<6,0])
        data = ((adc[1]&15) << 8) + adc[2]
        return data

def convertVolts(data):
        volts = (data * 3.3) / float(4095)
        volts = round(volts,4)
        return volts

def convertDistance(volts):
        dist =  60 / volts
        return dist

if __name__ == '__main__':
        try:
                while True:
                        tstr    = dt.now().strftime('%Y/%m/%d %H:%M:%S')

                        data = readAdc(3)
                        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:
                spi.close()
                sys.exit(0)

距離の計算が、よくわからない。

というか、そもそも、秋月からリンクが貼られているデータシートと、シャープのデータシートと、

同梱されていた印刷物の資料の、グラフが異なる。

同梱されていた参考資料では、 15cm で、最高の 2.8v に成るかのような表記だ。

ものすごくざっくりだと、距離 cm = 60 / volts なのかな・・・。