ESP32

ESP32で赤外線障害物回避センサモジュールを試してみます

赤外線障害物回避センサモジュールがお手頃価格だったので、試しに購入してみました。最初は、赤外線で距離を測定できるセンサかと思ったのですが、どうやら違ったようです。単純にセンサの範囲に入ったものが検知できるようです。

とりあえずせっかく購入したので、試してみたいと思います。

ESP32と赤外線センサの接続

ESP32と赤外線障害物回避センサモジュールを接続していきます。

準備するもの

今回使用するものは以下になります。

  • ESP32
  • ブレッドボード
  • ジャンパーワイヤー
  • 赤外線障害物回避センサモジュール
  • LED
  • 抵抗(220Ω)

赤外線障害物回避センサモジュール

赤外線センサは、Amazonから「LM393 IR赤外線障害物回避センサモジュール」を購入しました。

赤外線を送信して反射した赤外線を受信することで、障害物を認識するセンサのようです。

主な仕様は以下になります。

  • 3.3V〜5Vの動作電圧
  • 2〜30cm、35度からの検出モジュール

中央についているボリュームを設定することで、検知する距離を変更できます。

接続

部品を以下のように接続していきます。

プログラム作成

赤外線センサーの入力を監視して、LEDをON・OFFするプログラムを作成します。

const int IR_SENSOR = 5;  // 赤外線センサ
const int LED = 12;       // LED
byte lastSt = 0xFF;       // 前回赤外線センサ状態
byte fixedSt = 0xFF;      // 確定赤外線センサ状態
unsigned long smpltmr = 0;  // サンプル時間

void setup() {
  pinMode(IR_SENSOR, INPUT);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
  Serial.begin(115200);
}

void loop() {
  if(millis() - smpltmr < 40) return;
  smpltmr = millis();

  byte st = digitalRead(IR_SENSOR);
  int cmp = (st == lastSt);
  lastSt = st;
  
  if(!cmp) return;
  
  if(st != fixedSt){
    fixedSt = st;
    st = (~st) & 0x01;
    Serial.print("Sensor:");
    Serial.println(st);
    digitalWrite(LED, st);  // LED制御
  }
}

プログラムを簡単に説明します。

8行目で今回使用する赤外線センサを入力設定で定義しています。

14~31行目のloop()関数で赤外線センサの入力値を監視して、障害物を検出したらLEDをONする処理を行っています。

今回もセンサからの入力値が「1,0,1,0,1,0・・・」と最初パタパタの値が変わるので、チャタリング除去の処理を入れています。

処理としては、18行目で赤外線センサからの入力値を取得してから、26行目でその取得した値を反転して、29行目で反転した値でLED制御を行っています。

赤外線センサの入力値は、障害物未検出で「1」、検出すると「0」になります。障害物検出時にLEDをONにしたいので、設定値は反転しています。

動作確認

実際に接続して、動作を確認してみます。

とりあえず何も調整せずに障害物を近ずけてみると、LEDが点灯しました。反応は結構よさそうです。赤外線センサの基板についているLEDも同じく、障害物を近づけると点灯して、遠ざけると消灯します。

どの程度の範囲でセンサが使用できるのか確認してみます。

まずは、ボリュームを半時計周りで止まるまで回します。この状態が最小になるので、センサの近距離に障害物を設置して、今度はLEDが点灯するまでボリュームを回します。

この状態が、センサが反応する最小距離になります。おそらくセンサごとに個体差があると思われますが、今回使用したものは、最小距離が5cmぐらいでした。

今度はボリュームを時計回りで止まるまで回します。これで、ボリュームが最大になりLEDが点灯した状態になります。センサが反応しないように障害物がないところで、今度はLEDが消灯するまでボリュームを回します。

この状態が、センサが反応する最大距離になります。今回使用したものは、最大距離が30cmぐらいでした。

個体差はあると思いますが、今回使用したセンサのボリュームで調整できる障害物の検出範囲は、5~30cmでした。仕様では2~30cmになっていましたが、閾値近辺での利用を考えている場合は注意が必要かもしれません。

まとめ

ESP32で赤外線障害物回避センサモジュールを試してみました。

最初は距離が測れるのかなと思っていたのですが、障害物の検知センサでした。動作としては、センサ範囲内に障害物があれば検知するといった感じですが、使い道は多いのではないかと思いました。

使い方も簡単で、さらにお手頃価格なので、ラジコンの前後左右などにセンサを付けて障害物回避をやってみるのも面白そうだと思います。

距離も測定できる赤外線センサもあるので、今度はそちらも試してみたいと思います。

【参考図書】