測距センサを使ってみる

装置全景 Arduino

ご依頼をいただいたので、超音波測距センサが使い物になるのかを検証してみた。
まずは、m5atomにセンサをつないだ装置で、距離データが出るかテスト。

装置全景
装置は、m5atomのIOポート(G26,G32)に、センサーを繋げただけの簡単なもの。
このセンサーで対象物をちゃんと測距してくれるかが肝となる。

#include "M5Atom.h"

#define TRIG_PIN 26
#define ECHO_PIN 32

int flush_counter = 0;

// FastLEDライブラリの設定(CRGB構造体)
CRGB dispColor(uint8_t r, uint8_t g, uint8_t b) {
  return (CRGB)((r << 16) | (g << 8) | b);
}

void displed(int r, int g, int b) {
  for (int i=0;i<25;i++){
    M5.dis.drawpix(i, dispColor(r, g, b));
  }
}

void setup() {
  M5.begin(true, false, true);  // 本体初期化(UART有効, I2C無効, LED有効)

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  // LED全消灯(赤, 緑, 青)
  displed(0, 0, 0);

  delay(50);       // Delay 50ms.
}

void loop() {
  long duration, distance;
  
  // TRIGピンをLOWにしてからHIGHにする
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  
  // ECHOピンのパルスの長さを測定
  duration = pulseIn(ECHO_PIN, HIGH);
  
  // 距離を計算(音速は約34300 cm/s)
  distance = (duration / 2) / 29.1;
  
  // 測定結果をシリアルモニタに送信
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
  
  if (distance < 10) { 
    displed(255, 0, 0); 
  } else if (distance < 30) {
    displed(255, 255, 0); 
  } else {
    flush_counter++; 
    if (flush_counter > 10) { 
      flush_counter = 0;
      M5.dis.drawpix(12, dispColor(0, 0, 255));
    } else {
      displed(0, 0, 0);
    }
  }

  delay(100); // 0.1秒待機

  M5.update();  //本体のボタン状態更新
}

久しぶりのm5Atomで、思い出しながら。あ、ネットで検索すると概ね同じようなコードが出てきますね。
30cm以内10cm以内
対象物はまだ手元にないので、装置の前に自分が近づいて、データが出力されているのかどうかを調べる。一応、10cm以内で黄色、30cm以内で赤色になっているっぽい。

シリアルモニタ
シリアルモニタ上の出力