M5Stack 90°/180°赤外線反射ユニット(OP・90/OP・180)

概要

上記のユニットが日本でも販売されました。ちょっと前に入手していましたが、触ってみました。こちら1.56ドルのものがスイッチサイエンスさんだと209円で販売と、一個あたりの利益が不安になる商品となっています!

商品

外見はこんな感じです。

GROVE端子ですが、PORT Bですのでデジタル端子での通信になります。

裏側です。90度は直角に曲がっています。180度は平らになっています。

反対側です。この隙間に赤外線LEDとセンサーが入っています。

極性はあまり意味がないですが、ダイオードのマークがある方から赤外線がでています。反対側で受信しています。

このスリットに遮断物を入れるとこのスイッチがONになります。

単純スケッチ例

int OP_PIN = 33;

void setup() {
  Serial.begin(115200);
  delay(100);

  pinMode(OP_PIN, INPUT_PULLUP);
}

void loop() {
  Serial.printf("ir receive: %d\n", digitalRead(OP_PIN));
  delay(100);
}

M5StickCなので、GPIO33に接続されています。スリットにカードなどをいれて遮断すると入力がHIGHになります。

割り込みスケッチ例

int OP_PIN = 33;

void IRAM_ATTR op_change() {
  Serial.printf("ir receive: %d\n", digitalRead(OP_PIN));
}

void setup() {
  Serial.begin(115200);
  delay(100);

  pinMode(OP_PIN, INPUT_PULLUP);
  attachInterrupt(OP_PIN, op_change, CHANGE);
}

void loop() {
  delay(1);
}

入力の割り込みを入れることも可能です。ただし、ものすごくチャタリングをするのでこのままだと使いにくいと思います。

チャタリング低減スケッチ例

const int OP_PIN = 33;

QueueHandle_t xQueueOP;

void IRAM_ATTR op_change() {
  uint8_t data = digitalRead(OP_PIN);
  xQueueOverwriteFromISR(xQueueOP, &data, NULL);
}

void setup() {
  Serial.begin(115200);
  delay(100);

  // キュー作成
  xQueueOP = xQueueCreate(1, sizeof(uint8_t));

  // ピン設定と割り込み設定
  pinMode(OP_PIN, INPUT_PULLUP);
  attachInterrupt(OP_PIN, op_change, CHANGE);
}

void loop() {
  uint8_t data = -1;
  BaseType_t ret = xQueueReceive(xQueueOP, &data, 0);
  if (ret != 0) {
    Serial.printf("ir receive: %d\n", data);

    // Skip wait
    delay(5);
  }

  delay(1);
}

キューを使って、変化があった最後の値を取得しています。通常の速度であれば問題ないですが高速でON、OFFを繰り返すとまだチャタリングが発生している気がします。

類似センサー

スリットの距離がある場合にはこちらのレーザーTX/RXユニットで同じようなことができます。

人感センサーなどはPIRを利用したほうがよいと思います。これ以外にもTOFなどの距離センサーや、サーモカメラなどいろいろな類似センサーがあります。

まとめ

窓や扉とかがしまったがを確認するためのセンサーだと思いますが、なかなか使うのは難しいセンサーだと思います。使い方を工夫すると、結構楽しいことに使えと思いますが、他のセンサーでも実現できることが多いはずですので難しいですね。

とはいえ、圧倒的に安いセンサーですので大量に使ったり、とりあえず使ってみるのにはいいと思います。

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。