赤外線距離センサー GP2Y0A21YK0F

この記事では電子部品「GP2Y0A21YK0F」の紹介をします。

GP2Y0A21YK0Fとは

GP2Y0A21YK0Fは赤外線を利用して距離を測定することのできる、いわゆる距離センサーの一つです。 距離を測ることで、ぶつからずに移動する車やロボットを作ることができます。

GP2Y0A21YK0Fの使い方

距離センサーには様々な種類がありますが、それぞれ距離を測定する方法がかなり異なります。まずはこのGP2Y0A21YK0Fがどのように距離を測っているか知っておくことは大事でしょう。
赤外線距離センサー GP2Y0A21YK0Fには、赤外線を発する部分と赤外線を受けとる部分があり、正面のものに赤外線が反射したときの反射角度による電圧の変化によって距離を測定します。

すなわち、GP2Y0A21YK0Fは測った距離をそのまま出力してくれるわけではなく、電圧値を返します。距離を扱いたい場合、電圧値と距離の関数から距離を計算しなければなりません。電圧値と距離にどのような関係があるのかはデータシートから参照することができます。

http://www.sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y0a21yk_e.pdf

GP2Y0A21YK0Fは10cm〜80cmが測定できるセンサーなので、この区間のグラフを近似できる計算式を作ればよいことになります。実際の計算式は次のプログラムを書くところで一例を紹介します。

obnizでGP2Y0A21YK0Fを使ってみる

GP2Y0A21YK0Fには3つの端子があります。下図左から電源、GND、出力電圧になっています。回路としては、電源とGNDを正しく接続し、出力電圧を読み取ればいいことになります。

obnizでは各ピンがどのような役割を果たすか設定することができます。プログラムで設定していきましょう。

<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://obniz.com/js/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/[email protected]/obniz.js" crossorigin="anonymous"></script>
  </head>
  <body>

    <h1>Distance Sensor test</h1>
    <div id="output"></div>
    <script>
      var obniz = new Obniz("OBNIZ_ID_HERE"); // obnizに接続
      obniz.onconnect = async function() {
        obniz.io0.output(true); // 0番ピンをオン(5V)にする
        obniz.io1.output(false); // 1番ピンをオフ(0V)にする
        obniz.ad2.start(function(val) { // 2番ピンをad2として扱うことで電圧読み取りができる
            let distance = 19988.34 * Math.pow((val / 5.0) * 1024, -1.25214) * 10; // 電圧から距離へ変換
            $("#output").text(distance + " mm"); // id=outputのHTMLタグの値を変更
        })
      }
    </script>
  </body>
</html>

プログラムを開くと画面上で数字が変化していると思います。センサーに手を近づけたり遠ざけたりして値が変わるのを見てみましょう!
なお、上記のコード(script部分)はobniz パーツライブラリを使って以下のようにシンプルに書き直せます。

var obniz = new Obniz("OBNIZ_ID_HERE"); // obnizに接続
obniz.onconnect = async function() {
    var sensor = obniz.wired("GP2Y0A21YK0F", {vcc:0, gnd:1, signal:2}); // 各接続端子を指定
    sensor.start(function(distance) {
        $("#output").text(distance + " mm");
    })
}

GP2Y0A21YK0Fを含む、obniz パーツライブラリにあるパーツは、電圧値からの変換式など面倒な処理がすでに実装されているため、スムーズに使うことができます。
他にも色々な関数が実装されているので、ぜひ使ってみてください!