Help us understand the problem. What is going on with this article?

Wio LTEで遊んでみる(その4:磁気スイッチと超音波距離センサー)

More than 1 year has passed since last update.

Grove IoT スターターキット for SORACOMで遊んでみるの続き。

今回は磁気スイッチと超音波距離センサーを使ってみる。

〇センサー

磁気スイッチ
超音波距離センサー

とりあえずの目標は
磁気でスイッチが入ったら、その時の正面の対象物への距離をログにでも出力してみる。
※追加でやるとしたら、一定距離以内だったらLEDが光るようにしてみるとか

かな。

今回も各スケッチ例を見てみると、どっちもWIOLTE_D38を使うように書いてる。
前回を参考にして、磁気スイッチをD20にしてやってみることにする。

〇磁気スイッチ

#include <WioLTEforArduino.h>

//#define MAGNETIC_SWITCH_PIN (WIOLTE_D38)
#define MAGNETIC_SWITCH_PIN (WIOLTE_D20)
#define INTERVAL            (100)

WioLTE Wio;

void setup()
{
  Wio.PowerSupplyGrove(true);
  pinMode(MAGNETIC_SWITCH_PIN, INPUT);
}

void loop()
{
  int switchState = digitalRead(MAGNETIC_SWITCH_PIN);
  SerialUSB.print(switchState ? '*' : '.');

  delay(INTERVAL);
}

電源ONする処理を追加したぐらい。

で試してみたところ、動いているっぽいのだが、肝心の「磁気検知」の部分が今一つな印象。

mag_01.PNG

磁石をくっつけたり離したりしているのに、反応したり(*の部分)しなかったり。。
磁石の磁力が弱いのか?

ちょっと改造。
ログの出し方などを参考
https://www.seeed.co.jp/blog/20180118a/

#include <WioLTEforArduino.h>

//#define MAGNETIC_SWITCH_PIN (WIOLTE_D38)
#define MAGNETIC_SWITCH_PIN (WIOLTE_D20)
#define INTERVAL            (500)

//状態に対する色設定
#define COLOR_SETUP 0, 10, 0
#define COLOR_MEASURE 0, 0, 10
#define COLOR_MAGNETIC 10, 0, 0
#define COLOR_NONE_MAGNETIC 0, 0, 10
#define COLOR_NONE 0, 0, 0


WioLTE Wio;

void setup()
{
  SerialUSB.println("____START____________");
  SerialUSB.println("### I/O Initialize.");
  Wio.Init();
  Wio.LedSetRGB(COLOR_SETUP);
  SerialUSB.println("### Power supply ON.");

  Wio.PowerSupplyGrove(true);
  delay(5000);

  pinMode(MAGNETIC_SWITCH_PIN, INPUT);

  Wio.LedSetRGB(COLOR_NONE);
}

void loop()
{
  int sensorValue = digitalRead(MAGNETIC_SWITCH_PIN);
  if(sensorValue == HIGH)//if the sensor value is HIGH?
  {
    //磁石あり
    Wio.LedSetRGB(COLOR_MAGNETIC);
    SerialUSB.print('*');
  }
  else
  {
    //磁石無し
    Wio.LedSetRGB(COLOR_NONE_MAGNETIC);
    SerialUSB.print('.');
  } 

  delay(INTERVAL);
}

これだと上手くいった。
mag_02.PNG

おそらくだが、PowerSupplyGroveとpinModeの間にdelayが入ったのがポイント?
ちょっと間が必要なのかもしれない。
※というか、ログ処理以外だとそれしか足していないし。

〇超音波距離センサー

上記の磁気センサー処理に超音波距離センサー処理を足してみる。
単純にスケッチ通りに追記すればいいかというとそうでもない模様。
Ultrasonic.hが無いよ
とのエラー

http://wiki.seeedstudio.com/Grove-Ultrasonic_Ranger/
に Download the UltrasonicRanger Library from Github.
と記載されている通り、ダウンロードして、ライブラリをインストール。
※ZIPを解凍してどっかにコピーするのかと思ったら、IDEでそのままインクルードできた

処理そのものはほぼ悩むことなく実装。

#include <WioLTEforArduino.h>
#include <Ultrasonic.h>      // https://github.com/Seeed-Studio/Grove_Ultrasonic_Ranger

//#define MAGNETIC_SWITCH_PIN (WIOLTE_D38)
#define ULTRASONIC_PIN  (WIOLTE_D38)
#define MAGNETIC_SWITCH_PIN (WIOLTE_D20)
#define INTERVAL            (500)

//状態に対する色設定
#define COLOR_SETUP 0, 10, 0
#define COLOR_MEASURE 0, 0, 10
#define COLOR_MAGNETIC 10, 0, 0
#define COLOR_NONE_MAGNETIC 0, 0, 10
#define COLOR_NEAR 10, 10, 10
#define COLOR_NONE 0, 0, 0

Ultrasonic UltrasonicRanger(ULTRASONIC_PIN);


WioLTE Wio;

void setup()
{
  SerialUSB.println("____START____________");
  SerialUSB.println("### I/O Initialize.");
  Wio.Init();
  Wio.LedSetRGB(COLOR_SETUP);
  SerialUSB.println("### Power supply ON.");

  Wio.PowerSupplyGrove(true);
  delay(5000);

  pinMode(MAGNETIC_SWITCH_PIN, INPUT);

  Wio.LedSetRGB(COLOR_NONE);
}

void loop()
{
  int sensorValue = digitalRead(MAGNETIC_SWITCH_PIN);
  if(sensorValue == HIGH)//if the sensor value is HIGH?
  {
    //磁石あり
    Wio.LedSetRGB(COLOR_MAGNETIC);
    SerialUSB.print('*');
    measure_distance();
  }
  else
  {
    //磁石無し
    Wio.LedSetRGB(COLOR_NONE_MAGNETIC);
    SerialUSB.print('.');
  } 
  delay(INTERVAL);
}

void measure_distance()
{
  long distance;
  distance = UltrasonicRanger.MeasureInCentimeters();
  SerialUSB.println("");
  SerialUSB.print(distance);
  SerialUSB.println("[cm]");

  if(distance<20)
  {
    Wio.LedSetRGB(COLOR_NEAR);
  }
}

処理結果はこんな感じ。
mag_03.PNG

上限値とがどれくらいなのかわからんが、これぐらいの値までは返ってきた。
mag_04.PNG

0になっているものあったので超音波が戻ってこなかったら0になるのかな?

しれっと距離が20cm未満の場合はLEDの色が変わるようにもしている。
遊んでみると結構面白い。
動画で撮るとわかりやすい気もするが、めんどくさいので割愛。

所感

よく考えるといまのところSORACOMのSIMの部分は最初にHarvestにアップロードした以外はまったく使ってない。
残っているGPSモジュールあたりを使うときに地図アプリに表示させるようなものにしてみればいいかもしれない。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした