測距センサ(GP2Y0A21YK)をESP32で使う
しばらくぶりの測距センサー
— ヨ ロ ズ マ サ ム ネ (@munekunsan) 2019年12月26日
障害物等が近づくとeldが光る使用です pic.twitter.com/nyfpk2MfzI
こんにちは、今回は距離測定センサーで遊んでみました。センサーを地面に向けることで地面とセンサーの間の距離が短くなりLEDが点灯している様子です。はい。
- 目標
- 測距センサ概要
- 回路図及びプログラム
- 動作結果
1.目標
まず測距センサを使用してELDを点灯させたり消灯させたりします。距離が短くなれば点灯、遠くなれば消灯するといったセンサー制御を目指します。最終的にはローバーの前に障害物があった場合に停止して方向転換を行うような動きをさせようと考えています。可能なら障害物までの距離を表示するところまでやりたいですが、最悪動けばいいや精神でいきます。
2.測距センサ概要
測距センサは測距方式片方から赤外線を発します。障害物に反射した赤外線を受光部で取得して発射から受光までかかった時間から距離を出します。
データシートによるとGP2Y0A21YKの測定可能距離は10cm〜80cm動作電圧は5V読み取りはアナログ信号出力です。センサーの動作電圧が5Vとの事ですがesp32は0V〜3.3Vまでを4096等分で値を読み込むことができます。データシートを見ると障害物との距離が5cmの時に3.3V近くを出力する様子。実際にarduino unoで試用した時に出力される電圧も最大で3.3Vまで位しか出ないから使うには使えそうと判断しました。
パラメータ | 数値 | 単位 |
---|---|---|
測定可能距離 | 10~80 | cm |
Vcc | 4.5~5.5 | V |
Vo | 0.4~3.3 | V |
配線色 | ピン | ピンNo |
---|---|---|
白 | Vo | 1 |
オレンジ | GND | 2 |
黒 | Vcc | 3 |
購入ページ
http://akizukidenshi.com/catalog/g/gI-02551/
3.回路及びプログラム
esp32でアナログ信号を読み取るにはピンアサインでADCと記述されているピンで読み取る事が可能です。読み取り値は4096で0V~3.3Vの電圧を読み取ります。今回はP25で読み取ります。測距センサーと物体との距離が近いときにLEDを点灯させますのでLEDを付けました。抵抗は1KΩです。
int LED =4;
const int voutPin = 25;
const int volt = 3.3;
const int ANALOG_MAX = 4096;
const int Threshold = 1300; //点灯する電圧値[mV]
void setup() {
Serial.begin (115200);
pinMode(LED,OUTPUT);
}
void loop() {
int reading = analogRead(voutPin) ; //25pinを読み取る
float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;//読み取りした値を電圧に計算する
Serial.print(voltage); //シリアル通信で表示
Serial.println("mV");
if(voltage>Threshold){
digitalWrite (LED,HIGH);
delay (500);//電圧値が1300mV以上はLED点灯
} else if(voltage<Threshold)
{digitalWrite (LED,LOW);
delay (500);//電圧値が1300mV以上はLED消灯
}
}
ざっくりなプログラムの流れは、analogReadで読み取り電圧に計算します。算出した電圧が閾値である1300[mV]を超えたらLEDが点灯して1300以下になると消灯する。つぅ感じでさぁ。
4.動作結果
シリアル通信で表示された電圧値です。
このページのトップに記載したtweetのように動作してしてくれました。おけまるです。esp32で距離測定センサーを使用して距離検知することができました。また、esp32のanalogreadの使い方を習得でしました。今後距離を算出できるようにプログラムを考えたいです。