Arduino GPSロガー (Pro Mini 3.3V版)

道路施設の維持管理のために適切な予防保全が必要と言われていますが、人口が減少がしていく中で山間の生活道路の質を維持するために、コストをかけずに客観的な情報を蓄積していけるシステムが望まれているのではないでしょうか?

Arduino GPSロガーは路面のデコボコの振動を加速度センサーにより定量化しGPSによる位置情報とともにSDカードに記録して路面診断用のデータを蓄積するツールです。

使用するパーツ
Arduino Pro Mini 328 3.3V 8MHz(スイッチサイエンス 1,243 )
あるいは互換機 EasyWordMall Pro Mini モジュール Atmega328 3.3V 8M Arduino用 (EasyWordMall 375円)

GPS受信機キット (秋月電子通商 2200円)1PPS出力付き

マイクロSDカードスロットDIP化キット(秋月電子通商 300円)

MPU-6050 使用 3軸ジャイロスコープ・3軸加速度センサー モジュール(GY-521)(Umemoto LLC 198円)

動作の概要
電源はIoT機器用モバイルバッテリー cheero Canvas 3200mAhがお勧めです。一般的なモバイルバッテリーでは消費電力が小さすぎて自動的に給電が停止してしまいます。USBケーブルの電源線から5VをPro MiniとGPSモジュールに給電し、Pro Miniから供給される3.3VでSDとGY-521に給電します。
GPSから日付、時刻、緯度、経度、捕捉衛星数を読み取ります。加速度・ジャイロセンサーから約50msec毎に200回データを読み取り、進行方向の加速度の平均値と標準偏差、上下方向の加速度の平均値と標準偏差、左右方向の回転角速度の平均値と最大値と最小値を求めます。
測定の周期はおよそ14秒でしたが、日付から自動生成されるファイル名のファイルmm_dd.txtにカンマ区切りで追記されます。

16.12.31追記
GPSでの時刻はUTC(世界協定時)で出力されるので日本では9時間加算する必要があります。日付の繰り上がりなどを考えると面倒なのでUTCで我慢していましたが、落ち着いて考えると日本時間の9時にファイルの日付が変わるのでそれはそれで面倒です。時差を反映させるTimeというライブラリを見つけましたので、実装しました。

データ表示
オープンソースソフトウェアのQGISを使用して表示します。国土地理院のタイル地図に測定点を表示します。例として振動が大きかったポイントは赤い大きな星印、振動が少なかった地点は小さな丸印で表示しています。
結線
(Arduino Pro Mini 3.3V)
[GPS–Pro Mini]
5V–5V
GND–GND
RXD–NC
TXD–D2

[SD–Pro Mini]
DAT2–NC
DAT3–D10
CMD–D11
VDD–3.3V
CLK–D13
VSS–GND
DAT0–D12
DAT1–NC
SWB–NC
SWA–NC

[GY-521–Pro Mini]
VCC–3.3V
GND–GND
SCL–A5(SCL)
SDA–A4(SDA)
XDA–NC
XCL–NC
ADD–NC
INT–NC

[LED–Pro Mini]
RED LED–D9
GREEN LED–D8

時差対応版

UTC版

 

QGIS上でGoogle Satelliteに表示した例です。三陸海岸を探索していた軌跡です。

“Arduino GPSロガー (Pro Mini 3.3V版)” への 13 件のフィードバック

  1. 測定周期を変えるには、どうすればいいのですか?

    1. こんにちは、
      時差対応版プログラムの行番号で説明します。
      振動などを常時モニターするという狙いでプログラムを作りましたので、加速度などの測定周期は行番号198のdelay(50)でおよそ50msec間隔にしています。行番号161のcount=200で、200回測定したら統計データを記録しています。
      計算上は記録周期は50msec*200=10secですが、処理時間等がかかるのでSDには14秒間隔で記録されていました。
      記録する間隔を変更するには目的に応じて行番号161と198の数値を変更するのが良いと思います。

  2. もう一つ
    arduino unoで動作確認したんですが、取得したデータはシリアルモニタにはでるのですが、sdカードに保存できてないのですが、原因はわかりますか? 電圧は3.3vまで降下しています。

    1. こんにちは、
      SDは3.3Vで読み書きしないといけないので、UNOを使い場合は注意が必要です。(私はPro Mini 3.3V版を使っているのでそのまま接続できました。)
      Arduino UNO SDをキーワードに検索するとUNOでSDカードに記録する方法について書いてあるサイトが見つかると思います。
      私がよく参考にさせてもらっている「なんでも作っちゃう、かも。」さんが参考になると思います。
      http://arms22.blog91.fc2.com/blog-entry-502.html

      SDに記録できると便利なので頑張ってください。

  3. こんにちは
    google earthでデータ表示することは、可能ですか?

    1. こんにちは、
      QGISのOpenLayers pluginを使ってGoogle MapsのSatelliteを表示してGPSログをプロットすることができます。

      1. ほんとにありがとうございます

  4. こんばんは 
    配線を変えたいのですが、SDのCMD–D14
    CLK–D16 , DAT0–D15にするとき、プログラムを変更する必要はありますか?

    1. 私はSPIの標準的に指定されているピンでしか使ったことがないのでわかりませんが、
      https://www.arduino.cc/en/Reference/SD
      に書いてあることによればピンを変更するのは難しいのではないかと思います。ISCPというピンが付いているボードならばそれを使う選択肢があるようです。
      https://garretlab.web.fc2.com/arduino_reference/libraries/standard_libraries/SPI/index.html

      私も最近Nanoで3,5,9,10,11-pinをカウンター動作で使う必要があり、ISCPでSDを使う検討をしたのですが、10-pinがネックで断念しています。10-pinの代わりに4-pinを使っている例もあるのでできるのかもしれません。
      チェレンジうまくいったら教えてください。

  5. Koji様
    初めまして。
    私はバイクでローカルレースを楽しんでいる者です。
    バイクの走行データを記録したくて色々検索しているうちにこのページにたどり着付きました。
    早速、スケッチをコピーさせて頂きますコンパルを行ったのですがエラーが出てしまいました。
    Tynigpsに関係する様なのですが、よく解らないのが正直なところです。このスケッチを使うに辺り何か中点は有りますでしょうか。素人質問で申し訳ありません。

    1. こんにちは オノデンさん

      書かれているエラーの状況から考えて可能性が高いものを書いてみますが、外れているかもしれません。以下の対応でダメな場合は「エラーをコピーしてコメント欄にペースト」してみてください。

      “TinyGPS”はGPSからシリアルで受け取った大量の文字列を必要な部分だけを取り出しやすくするライブラリです。この機能を使うためにはインストールが必要になります。インストールされていなければコンパイルの時にエラーが出ます。
      インストールする方法は以下のURLが参考になると思います。
      https://garretlab.web.fc2.com/arduino/libraries/installation/index.html
      ライブラリマネージャーの「検索をフィルタ…」にTinyGPSと入力するとTinyGPSのインストール欄が表示されると思います。
      使っているライブラリは六個ですが、四個(SPI,SD,Wire,SoftwareSerial)は標準でインストールされていたと思います。TinyGPSとTimeLibはライブラリマネージャーで各自インストールする必要があります。

  6. 返信ありがとうございますオノデンです。
    お恥ずかしい話ですがTinyGPSとTinyGPS++の違いでした。
    TinyGPSをインストールする事で無事コンパイルする事が出来ました。
    次の段階として私の使用しているESP-WROOM-02に合わせて
    ピン配置の変更に挑戦中です。

コメントは受け付けていません。