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

Wio LTEで遊んでみる(その5:3軸デジタル加速度センサーとGPS)

More than 1 year has passed since last update.

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

今回は3軸デジタル加速度センサーとGPSを使ってみる。

〇センサー

3軸デジタル加速度センサー
GPS

3軸デジタル加速度センサーとGPSの組み合わせで何ができるのかわからないのでノープランで開始してみる。

〇3軸デジタル加速度センサー

まずは、
Download the Digital Accelerometer(±16g) Library
とあるので前回同様に専用ライブラリをDLしてインクルード。
前回と違うのはGit Hubへのリンクなので、ZIPにしてDL。
3d_01.PNG
あとはそのままインクルードさせればOK。

Step1: Plug it onto the I2C port of your Grove - Base Shield.
って書いてるのでI2Cに刺してみる。

#include <WioLTEforArduino.h>
#include <ADXL345.h>          // https://github.com/Seeed-Studio/Accelerometer_ADXL345

#define INTERVAL    (100)

WioLTE Wio;
ADXL345 Accel;

void setup()
{
  delay(200);

  SerialUSB.println("");
  SerialUSB.println("____ START ____________________________________");

  SerialUSB.println("### I/O Initialize.");
  Wio.Init();

  SerialUSB.println("### Power supply ON.");
  Wio.PowerSupplyGrove(true);
  delay(500);
  Accel.powerOn();

  SerialUSB.println("### Setup completed.");
}

void loop()
{
  int x;
  int y;
  int z;
  Accel.readXYZ(&x, &y, &z);
  SerialUSB.print(x);
  SerialUSB.print(' ');
  SerialUSB.print(y);
  SerialUSB.print(' ');
  SerialUSB.println(z);

  delay(INTERVAL);
}

上記はサンプルスケッチそのまま。
実行してみれば値そのものは簡単に表示される。
image.png

が、意味がわからない。。
いや、スケッチをみればX,Y,Z軸を表しているのはわかるが、この値を見て「どう動いたか?」を導出するのはもう一段階めんどくさそう。
なので、とりあえず棚上げ。
揺れたかどうかのチェックぐらいに使えるものとでも思っておけばいいのか?
簡易震度計にでも使えそうかなと思う反面、これで「どれくらい揺れたか?」みたいなものを収集しようと思うと悩みそう。

※振動チェックに使いたかったらこの辺のサイトが参考にさせてもらえそうな気配
https://ambidata.io/samples/vibration/vibration/
https://zigsow.jp/review/286/264527

で、この時点で地震とかで揺れたらその地点のGPSを取得できるんじゃね?
というアイデアが。
ついでにその情報もSlackとかに流してみたいな。

ただ、震度チェックの部分がちょっとややこしそうなので、先にGPSへ。

〇GPS

・・・
さっそくどこに刺すのかがわからない。
いくつかサイトをふらふらしていたら以下に[UART]とあるので刺してみる。
https://iot.firstfournotes.com/wiolte/grove-gps/

とりあえず情報は取得できた。窓際じゃないとやはり取得はできないのね。
gps_01.PNG

が、これだけだと読みにくい。
なので、上記のサイトをそのまま参考にTinyGPS++」を使用して読みやすくする。

#include <WioLTEforArduino.h>
#include <TinyGPS++.h>

//状態に対する色設定
#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

WioLTE Wio;
TinyGPSPlus gps;

void setup()
{
  delay(200);

  SerialUSB.println("");
  SerialUSB.println("____ START ____________________________________");

  SerialUSB.println("### I/O Initialize.");
  GpsBegin(&Serial);
  Wio.Init();
  Wio.LedSetRGB(COLOR_SETUP);

  SerialUSB.println("### Power supply ON.");
  Wio.PowerSupplyGrove(true);
  delay(500);

  SerialUSB.println("### Setup completed.");
  Wio.LedSetRGB(COLOR_NONE);
}

void loop()
{
  Wio.LedSetRGB(COLOR_MAGNETIC);
  const char* data = GpsRead();
  if (data != NULL && strncmp(data, "$GPGGA,", 7) == 0) {
    SerialUSB.println(data);
  }
  Wio.LedSetRGB(COLOR_NONE);
}

////////////////////////////////////////////////////////////////////////////////////////
//

#define GPS_OVERFLOW_STRING "OVERFLOW"

HardwareSerial* GpsSerial;
char GpsData[100];
char GpsDataLength;

void GpsBegin(HardwareSerial* serial)
{
  GpsSerial = serial;
  GpsSerial->begin(9600);
  GpsDataLength = 0;
}
void displayInfo()
{
    SerialUSB.print(F("Location: ")); 
    if (gps.location.isValid()) {
        SerialUSB.println(gps.location.lat(), 6);
        SerialUSB.println(gps.location.lng(), 6);
    } else {
        SerialUSB.println(F("INVALID"));
    }
}

const char* GpsRead()
{
  while (GpsSerial->available()) {
    char data = GpsSerial->read();

    if (gps.encode(data)) {
      displayInfo();
    }


    if (data == '\r') continue;
    if (data == '\n') {
      GpsData[GpsDataLength] = '\0';
      GpsDataLength = 0;
      return GpsData;
    }

    if (GpsDataLength > sizeof (GpsData) - 1) { // Overflow
      GpsDataLength = 0;
      return GPS_OVERFLOW_STRING;
    }
    GpsData[GpsDataLength++] = data;
  }

  return NULL;
}

////////////////////////////////////////////////////////////////////////////////////////

※SETUP時にLEDをつけるのがわかりやすくてちょっと気に入ったので流用。

gps_02.PNG

こんな感じ。わかりやすい。

簡易震度計まではあと一息な感じではあるが、とりあえず今回はここまで。
とりあえずスタートアップとしてついてきていたセンサー類はひとしきり触ってみたことになるのかな。
これらとSORACOMの通信も組み合わせて「簡易震度計」を目指してみようかと思う。

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
ユーザーは見つかりませんでした