■ PIC-BASIC でPSDを使う ■

SHARPの赤外線測距センサー「GP2D12」の測定値を PIC-BASIC で読み取ります。
(データシートはココからダウンロードできます。)

外光や気温によって出力Vが変化しますが、精密測定を目標としていないので一切無視して大雑把にいきます。
なお、今回の作業では PIC-BASIC活用ブック 「5-5 簡易ロジックアナライザを作る〜A/D変換機能を生かす@」を参考にさせていただきました。

■回路
接続ケーブルにはロボット王国で売られている 「即距センサー接続ケーブル:RBSCGP」を勧めます。これを使えばピン配置を間違える事はありません。
回路図ではセンサーを正面から見た場合のピン配置で書き記しました。

PSDからの出力Vは PIC-BASIC のA/D変換用のポートにつなげます。 ここでは0チャンネルを使用しています。
電解コンデンサはベースボードからの電源にノイズ成分がのっていたので取り付けたものです。 測定結果が安定しているようなら取り付ける必要はないと思います。

■プログラム
GP2D12を使う上での注意点は2点あります。
 @1回の測定に38ms±9.6msかかる
 Aその結果が5ms後に出力される
なので『60ms間隔で数回測定したものから最大/最小を除いた値を平均して値を求める』というロジックで組んでみました。 LCDには測定値と電圧を出力します。
プログラムは変数 vcc に455を設定しています。これはベースボードからの電源供給が4.55Vだったからです。 外部電源とかで5V供給できている場合は 500 を設定しましょう。
'	PIC-BASIC でPSDを使う
'
DIM vcc		AS WORD
DIM cnt 	AS WORD
DIM cin(5)	AS WORD
DIM vmax 	AS WORD
DIM vmin 	AS WORD
DIM v		AS WORD
DIM vH		AS WORD
DIM vL		AS WORD
DIM i		AS LONG
DIM idxMax	AS LONG
DIM idxMin	AS LONG

vcc = 455

INITLCD
WHILE 1
    ' --------------------5回計測
    FOR i = 0 TO 4
        ADC 0,0,cin(i)
        SLEEP 60
    NEXT i
    ' --------------------最大/最小を除外
    vmax = cin(0) : idxMax = 0
    vmin = cin(0) : idxMin = 0

    FOR i = 1 TO 4
        IF  vmax > cin(i) THEN
            idxMax = i
            vmax = cin(i)
        ENDIF
        IF  vmin > cin(i) THEN
            idxMin = i
            vmin = cin(i)
        ENDIF
    NEXT i
    ' --------------------集計
    cin(idxMax) = 0
    cin(idxMin) = 0
    cnt = cin(0) + cin(1) + cin(2) + cin(3) + cin(4)
    ' --------------------平均を算出
    IF  idxMax = idxMin THEN
        cnt = cnt / 4
    ELSE
        cnt = cnt / 3
    ENDIF

    GOSUB LCDOUT
    SLEEP 500
WEND
END

LCDOUT:
    ' --------------------測定値から電圧算出
    v  = ( cnt * vcc ) / 1023
    vH = ( v /   100)
    vL = ( v MOD 100)
    ' --------------------LCDに表示
    SETPOS 0, 0
    IF  vL < 10 THEN
        PUTLCD "ch0=",cnt,"  ", vH ,".0", vL, " V  "
    ELSE
        PUTLCD "ch0=",cnt,"  ", vH ,".",  vL, " V  "
    ENDIF
    RETURN
 

■測定結果
PSDを立てた状態で固定して実験開始。このような結果になりました。
データシートにあるとおり、至近距離で距離とともに減ってきた値が増加に転じます。厄介ですね。

黒い板(高15cm×幅22cm)
距離 cmA/D値電圧 V 距離 cmA/D値電圧 V
3 4001.8 25 2801.2
4 6052.7 30 2501.1
5 5802.6 35 2301.0
10 5302.4 40 2200.9
15 3701.6 45 2000.9
20 3001.3 50 1970.8
最遠1450.6

500mlのアキカン
距離 cmA/D値電圧 V 距離 cmA/D値電圧 V
3 2601.2 25 2601.2
4 4652.0 30 2351.0
5 4452.0 35 2251.0
10 5602.5 40 2251.0
15 3601.6 45 2251.0
20 2951.3 50 2301.0
最遠1500.7

PSDの測定範囲も調べてみました。PSDの軸線上から5cm単位にずらして測定しています。 ↑はPSD上側、↓はPSD下側(コネクタのある側)を意味します。
データシートにあるとおり、PSD上側の反応が下側と比べ若干強くなっています。

500mlのアキカンで測定範囲の測定
距離 cm 10↓ 5軸線上 ↑ 510
5 140 (0.6)140 (0.6)470 (2.1) 148 (0.7)140 (0.6)
10 140 (0.6)140 (0.6)515 (2.9) 175 (0.8)140 (0.6)
15 140 (0.6)145 (0.6)375 (1.7) 170 (0.8)140 (0.6)
20 140 (0.6)145 (0.6)305 (1.4) 170 (0.8)140 (0.6)
25 140 (0.6)143 (0.6)280 (1.2) 168 (0.7)140 (0.6)
30 140 (0.6)143 (0.6)272 (1.2) 166 (0.7)140 (0.6)
35 140 (0.6)141 (0.6)259 (1.2) 157 (0.7)139 (0.6)
40 140 (0.6)140 (0.6)225 (1.0) 184 (0.8)140 (0.6)


あらゆる被害についてオイラは一切の責任を負いませんのでご了承を。
記載漏れや間違いなどありましたらご指摘よろしくお願いします。


■戻る