子育てしながらエンジニアしたい

現在 4 歳 女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

ESP32 (Arduino) でアナログ距離センサー GP2Y0E02A を使う

ESP32 を仕事でいろいろ使っています。
といってもこれまでは I2C をはじめとしたデジタル信号しか使っていませんでした。
今回、アナログ信号による距離センサーを使うことになったので記録しておきます。

アナログ距離センサー GP2Y0E02A (Sharp)

akizukidenshi.com

秋月電子で購入。
電源電圧は 3.3V なので、ESP32 で使えます。
距離を電圧に変換してくれます。

測距範囲は 4cm ~ 50cm。
アプリケーションノートによると、距離に応じて以下の電圧が出力されます。

距離 電圧 (Min) 電圧 (Typ) 電圧 (Max)
50cm 0.3V 0.55V 0.8V
10cm 1.9V 2V 2.1V
4cm 2.1V 2.2V 2.3V

ESP32 との接続

f:id:edosha:20190514140126j:plain
ESP32 と GP2Y0E02A の接続

GP2Y0E02A の端子は以下のようになっています。

f:id:edosha:20190514140534p:plain
GP2Y0E02A の端子

これを ESP32 と次のように接続します。

ESP32 GP2Y0E02A
3v3 VDD
GND GND
IO35 Vout(A)
3v3 GPIO1

なお今回は Vout(A) を ESP32 の IO35 に接続しましたが、別のピンでも大丈夫です。
以下のサイトでアナログに使えるピンを解説してくれています。

ht-deko.com

距離センサーを常に使用する場合は GPIO1 と 3v3 を直結で良いようですが、
スタンバイなどを実装したい場合は IO ピンと接続するみたいです。
詳しくはアプリケーションノートで...

Arduino スケッチ

取得した距離をシリアルで送信します。

void setup() {
    // put your setup code here, to run once:
    Serial.begin(115200);
}

void loop() {
    // put your main code here, to run repeatedly:
    delay(100);

    long distA = 0;
    int i;

    // 100 回取得した結果を平均化
    for (i = 0; i < 100; i++)
    {
        distA += analogRead(35);
    }
    distA /= 100;

    long distAns1 = map(distA, 0, 4095, 0, 330);
    long distAns2 = map(distAns1, 55, 220, 50, 4);
    int distResult = distAns2;

    Serial.printf("Dist: %d cm\n", distResult);
}

こんな感じで出力されます。

f:id:edosha:20190514141512p:plain
GP2Y0E02A の出力

やってみて気づいたのですが、最小距離の 4cm を下回ると 65 cm が出力されるようです。
このへんは要注意ですね。

まとめ

ESP32 でアナログ距離センサー GP2Y0E02A を使いました。
Arduino と同様に ESP32 でも analogRead が簡単に使えました。