M5 stackで作るバイク(等)ロガー製作 随時更新

2021年1月13日IT,M5stackDIY,バイク

前回色々情報を集めたバイク用ロガーをすこしずつ作っていきます。

随時更新なのでたまに情報が増えてるかもしれません。

githubでソースコードを公開しています。

https://github.com/crowpilot/m5-motorcycle-logger

raspberry piやJetsonでも似たようなの作れると思いますが今回は開発が簡単なM5stack Fireで作っていきます。

IMUが最初から入っているgrayを使います。姿勢データとりたいし

Groveポートがたくさんあって色々楽なM5stack Fireで作ります。

grayでもできるけど…

集めた資料はこちら

完成してる機能一覧

  • バンク計
  • 前後G計
  • 時計/ラップタイマー
  • ログ機能
  • ブラウザへのログ表示

作成中の機能

  • スプリットタイム
  • ログ表示の洗練
  • 横G
  • バイクへの取り付け
  • いまどこ通報(バッテリー駆動時)

ピンアサイン

16,17 RXD/TXD PSRAM ポートCは加工必須らしい、現在チェック中

36,26→16,17 GPS UART2

13,5 sigfoxRXD TXD

0電源

15LED

参考リンク

1.バイクの停車位置発信装置→別出しします→やっぱ一個にします

ボードをスタックさせると厚くなりすぎて目立つ→防犯効果が減少する

あと、ピンがかぶる

というわけで、この機能は別のボードで作ってシート下などに設置しようと思っています。

  • 電源投入時GPSとリンクさせる
  • リンク完了後3GかLPWAでslackにgoogle mapアドレスを送る
  • 電源が落ちたあとどうするか…
  • slackは最初の一回だけ。あとはSDカードに記録しておく○完了
  • GPSの時刻情報は使う○完了

広い駐輪場に置いたり何かの拍子に移動してしまったバイクの位置をslackなどに送信しておく機能をつけたいと思います。

が、GPSって最初に場所拾うまでけっこう時間かかりますね。最初に位置情報得た時に動くようにしなきゃ

ネット越しにバイクの位置情報データを送る方法は以下を検討中

  • Soracom 3Gモデム
  • sigfox
  • lora
  • その他LPWA

soracom 3Gの方がモジュールが薄くてアンテナも内部なのでコンパクトに作れます。

消費電力的にはsigfoxです

soracom 3Gモジュールについて

ピンアサインの16,17は、port.Cと衝突するためGPS関連が使えなくなる。→FireのGPIOポート(黒)に接続することにしました。

ただし、M5stack FireだとPSRAMともかぶります。勘弁してくれ

→sigfoxボードを外したらピンアサイン変更用のdipスイッチが隠れてました。

これなら使えます。たぶん

soracom 3Gを使うのは開発工数が増えるのでやめます。sigfoxに変更→sigfoxも16,17番使ってるんですが…

入手のしやすさは同じくらい?

soracom ボードを買うときは

3Gはsoracomの出してる3Gボード使います。小売店はほぼ完売なのでsoracomで注文するしかなさそう

僕はアキバのマルツでラス1買いました。

https://soracom.jp/products/kit/3g_module_m5stack/

simカードも忘れずに soracomのsimは従量制です。

チュートリアルはここ

slackとの接続について

slackとの接続は直接API叩きたい(IFTTTが有料化してよくわからんくなったので)

httpsの証明書をハードコートすればいけるらしい

GPS moduleを使っているのですが電波を拾ってくれないのでUnitに切り替えます。

それに伴ってエンコーダモジュールも必要になります。(現在取り寄せ中)

2.ホーム画面

こっからがメインになってきました

最近のバイクに無い情報を出しておきたい

↑この目標を忘れないようにする。バイクに表示されてるデータはいらない

  • 前後G
  • バンク
  • 横G
  • 時刻

あたりがほしい

以下検討メモ

無難なのは時計?

通常時は時計(mode0)

ラップタイム(停止、結果表示 mode1)

ラップタイム作動中(mode2)

として作っていきます。

IMU入ってるのでバンクと前後Gをとる

その他、外気温と気圧計つけたら天気の変わり目が分かっていいかも

グラフ表示できるようにしたい。→した

UI

MFDっぽい感じで

ボタンを押すと四角で囲む

IMU情報表示

ラップタイムとかGPSそっちのけでIMU表示作ったらいい感じになってしまった

グラフはsprite機能を使って流してるのでログってるわけではない

バンク表示は作ってる会社ある

https://www.protec-products.co.jp/products/bankmeter/

せっかくなのでアナログ風表示にしてみた。過去にADI作ったときと違いptichやrollを計算してくれるライブラリが入ってる。→色々ダメだったので結局自前で調整しました。Ins.cppでいじってます。

計算内容はmahonyquaternionなので僕がADI作ったときと同じ

バンク表示の傾き方向とかはバイクが傾いた方にインジケータが傾く方式にした。

IMU数値の補正にカルマンフィルタ使いたい。ログ取るとき厳密な方がいいし

ロボット工学のセンサ系の本いくつか読んでみる事にする。

しばらくAHRS値がオーバーシュートしていたのですが、原因はMahony AHRS内で指定されている計算周期がずれているからでした。

結局ライブラリのgetAhrsDataは使えなかったのでMahony AHRS部だけ取り出して色々いじってあります。

ラップタイムについて

メイン+スプリットタイム?

操作は手動停止?→まずは手動で動くようにする

http://n-and-u.jugem.jp/?eid=1020503

参考になりそうなサイト。ラップタイマーの各計測方法が解説されてる。

大きなサーキットには磁石が入っててラップタイマーを操作するらしい。センサーは9軸IMU使えば磁力変化とれるけどもっとシンプルなのかも

GPSならログと一緒にとれるかも

周回判定まわりのプログラムどうしよう。当たり判定と同じでいいのかな?

ラップタイムプログラムについて

表示は 分分:秒秒.ミリ秒 秒の表示を大きくする。

スタートとストップ機能が必要。スプリットタイムはどうしよう。周回ごとのタイムを表示するスペースもある

M5stackでストップウォッチを作るにはいくつか手段がある。

Ticker

ハードウェア・タイマ

millis()

Tickerは簡単に実装できる。ハードウェアタイマ(timer_系)の方が精度は高い

ガチラップタイマーってわけではないのでガチ計測は必要ないものの一応メモ

ハードウェアタイマーで作りたい場合、サンプルプログラムESP32-RepeatTimer を参考にすること

millis()で実装するのが早そう→採用

開始時刻を変数に入れてmillis()と比較する。

millis()のオーバーフローまでは動く

外気温計

Adafruit_BMP280

Adafruit_SHT31

のライブラリを使用すればすぐ動く

データの閲覧について

スマホやPCから閲覧できるようにしたい。

ネットへの接続は不要にしたいがブラウザで表示させたい

M5stack内にwebサーバを立てて対応

M5stack内にhttpサーバを立ててブラウザから走行ログを確認できるようにする。

ログ.csvの選択

GPSを白紙グラフにプロット

適度な時間間隔ごとにプロットすれば速度の変化を点間距離で可視化できるかもしれない。

点の色を各種情報にする

ヒゲ付き点があれば各種Gを表現しやすい。

D3.jsでグラフを作成

SDWebServer.inoを改造してアクセスポイントモードにする。→した

広告