ESP32 (Arduino) でアナログ距離センサー GP2Y0E02A を使う
ESP32 を仕事でいろいろ使っています。
といってもこれまでは I2C をはじめとしたデジタル信号しか使っていませんでした。
今回、アナログ信号による距離センサーを使うことになったので記録しておきます。
アナログ距離センサー GP2Y0E02A (Sharp)
秋月電子で購入。
電源電圧は 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 との接続
GP2Y0E02A の端子は以下のようになっています。
これを ESP32 と次のように接続します。
ESP32 | GP2Y0E02A |
---|---|
3v3 | VDD |
GND | GND |
IO35 | Vout(A) |
3v3 | GPIO1 |
なお今回は Vout(A) を ESP32 の IO35 に接続しましたが、別のピンでも大丈夫です。
以下のサイトでアナログに使えるピンを解説してくれています。
距離センサーを常に使用する場合は 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); }
こんな感じで出力されます。
やってみて気づいたのですが、最小距離の 4cm を下回ると 65 cm が出力されるようです。
このへんは要注意ですね。
まとめ
ESP32 でアナログ距離センサー GP2Y0E02A を使いました。
Arduino と同様に ESP32 でも analogRead が簡単に使えました。