目的
ラップタイムは、スマートフォンの内蔵GPSのままで十分です。 自作GPSで変わるのは、走行ラインとGの細かさです。
内蔵GPSは、iPhoneもAndroidも毎秒1回しか測位しません。 時速100kmで走ると、測位と測位の間に車は28m進みます。 その28mをどう走ったかは残りません。 コーナーは数本の直線をつないだ形になり、そこで掛かっていたGもならされます。
毎秒25回測位するGPS受信機を外付けすれば、同じ区間で車が進む距離は1.1mまで縮みます。 走った弧も、そこで掛かっていたGも、そのまま残ります。
| スマホの内蔵GPS | 自作GPS | |
|---|---|---|
| 測位 | 毎秒1回 | 毎秒25回 |
| 時速100kmで、測位と測位の間に進む距離 | 28m | 1.1m |
| スマホの置き場所 | 空が見える場所に固定する | どこでもよい(アンテナだけ外へ) |
| 費用 | 0円 | 約1.1万円 |
差は走行ラインにそのまま出ます。下は同じコーナーを記録したものです。
筑波サーキット コース2000で、サーキットが発行する個別ラップ表と 23ラップを1本ずつ照合しました。
| トランスポンダーとの差 | 平均 0.023秒 |
|---|
同じコースで、スマホの内蔵GPSの115ラップも照合しました。 こちらも平均 0.026〜0.101秒差で、取りこぼしも余計なラップもありません。 ラップタイムが内蔵GPSのままで十分なのは、この照合によります。
仕様
| GNSSチップ | u-blox NEO-M9N(外付けアクティブアンテナ1m付属) |
|---|---|
| 測位レート | 25Hz(40msごと・欠測なし) |
| 水平精度 | 実走で ±0.31〜0.34m |
| G・ジャイロ | BMI270 を 25Hz で読んで送信 |
| 通信 | Bluetooth 5(ESP32-C3) |
| 電源 | USB 5V・約70mA |
| 技適 | M5Stamp C3U が取得済み |
購入
部品は4点です。アンテナも六角レンチも本体に付属します。 下の価格はあくまで参考です。
品名のリンクは参考です(上の3点はスイッチサイエンス、ケースはメーカーのタカチ電機工業)。 ほかの通販サイトでも買えるので、型番で探して、手に入るところで購入してください。 価格は2026年10月に調べたもので、店によっても時期によっても変わります。
| 品名 | 備考 | 価格の目安 |
|---|---|---|
| M5Stack用GNSSモジュール | NEO-M9N / BMI270 / BMM150 / BMP280 アンテナ1m・ネジ(アンテナ端子用)・六角レンチ付き |
¥9,174 |
| M5Stamp C3U Mate | ESP32-C3・USB-C直結で書き込み可 ピンヘッダ・六角レンチ同梱 |
¥1,386 |
| ジャンパワイヤ オス-メス |
M5Stack用GNSSモジュールとM5Stamp C3U Mateを接続するのに使う(6本) | ¥671 |
| タカチ SW-100B プラスチックケース |
内寸 95.6 × 60.6 × 27.5mm スナップインのはめ込式 |
約¥300 |
| 合計の目安 | 約 ¥11,500 | |
- USB-Cケーブル(データ通信対応のもの。充電専用では書き込めません)
- はんだごて(ピンヘッダを付けるため・GNSS側の線をピンに直付けするため)
- パソコン(Windows / Mac)
- 六角スペーサーとネジ(GNSSモジュールをケースに留めるため。M2のナイロン製。 例: M2 六角スペーサーのセット)
- 両面テープ(Stampをケースに貼るため)
組み立て
C3U Mateに付属のピンヘッダをはんだ付けして、GNSSモジュールのM-Busコネクタから6本つなぎます。
C3U Mate は白いプラスチックのカバーが付いた状態で届きます。 付けたままではピンヘッダをはんだ付けできません。 ネジで留まっているので、C3U Mateに付属の六角レンチで外してから付けてください。
| GNSS側(M-Bus) | Stamp側 | 用途 |
|---|---|---|
| 3V3 | 3V3 | 電源 |
| GND | G | 電源 |
| 16 | G5 | GNSSのUART(GNSS→Stamp) |
| 12 | G6 | GNSSのUART(Stamp→GNSS) |
| 21 | G7 | IMUのI2C(SDA) |
| 22 | 10 | IMUのI2C(SCL) |
G と G5 は別物です
数字が付かない単独の G だけがGNDです。
G5 G6 G7 は信号のピンで、
2桁のピンには G が付きません(10 20 21)。
単独の G は基板に3か所あります。
右側を下から数えて4番目を使ってください(下)。
G は3か所ありますが、使うのは丸を付けた
右側を下から数えて4番目です。
GNSS側の基板には番号が印字されています。数えるのではなく、印字された番号で合わせてください。
奇数側は GND が3つ続くので、数え始めを間違えやすい並びです。
3V3 は基板の裏に、数字ではなく 3V3 と書かれています(下)。
22 はどこにも印字がありません——
反対側の列の、21 の真向かいです。
3V3 はこちら。ラベルから伸びる白い線の先(赤丸)がそのピンです。
ジャンパのメス端子をGNSSモジュールのソケットに挿すこともできますが、 振動で抜ける恐れがあります。
反対側に出ているピンへ、線を直接はんだ付けしてください。 隣のピンと触れないようにしてください。 Stamp側は挿したままで構いません(抜けやすいのはGNSS側です)。
DIPスイッチ
基板の左から RX ・ TX ・ PS の3つ。ONは上側です。
| スイッチ | 設定 |
|---|---|
| RX(左・4個) | 1番だけON |
| TX(中・4個) | 3番だけON |
| PS(右・3個) | 全部OFF |
ケースに入れる
タカチ SW-100B にGNSSモジュール(54 × 54mm)とStampを並べて収まります。実機で確認済みです。 穴あけが2か所(アンテナのケーブルとUSB-C)要ります。ABSなのでピンバイスやリーマーで開けられます。 これとは別に、下のスペーサーを留める穴も開けます。
GNSSモジュールは六角スペーサーでケースの底にネジ止めします。 取り付け穴は M2 です。 スペーサーとネジは別に購入してください(上のほかに要るものにリンクがあります)。 部品面を下に向けて留めるので、部品がケースの底に当たらない高さのものを選びます。
Stampは両面テープでケースの底に貼ります。
Gを測っているセンサー(BMI270)はGNSSモジュールに載っています。 Stampにセンサーは無いので、こちらは動いても記録は変わりません。
内寸の高さは 27.5mm です。はんだ付けした所と曲げた線が積み上がると、 フタが閉まらなくなることがあります。
プログラムのインストール
書き込むプログラムは、GNSSモジュールから毎秒25回の測位とGを受け取り、 ひまわりサーキットが読める形にしてBluetoothで送るものです。 測位レートなどGNSSモジュール側の設定も、起動のたびにこのプログラムが送ります。
1. Arduino IDE を入れる
arduino.cc から Arduino IDE 2.x を落とします。
Windows
- 「Windows」のインストーラー(
.exe)を落とす - 実行して、そのまま進める
- 途中でドライバのインストールを聞かれたら許可する
Mac
- Apple Silicon か Intel かを選ぶ。 分からなければ、画面左上のリンゴマーク >「このMacについて」で確認する
.dmgを開いて、Arduino IDE を「アプリケーション」へドラッグする- 初回起動で「開発元を確認できません」と出たら、 アプリを右クリック(control+クリック)して「開く」を選び、もう一度「開く」を押す
2. ボードマネージャにURLを足す
設定画面を開いて、「追加のボードマネージャのURL」に次の1行を貼ります。
| Windows | ファイル > 基本設定(Ctrl+,) |
|---|---|
| Mac | Arduino IDE > 設定…(⌘+,) |
https://espressif.github.io/arduino-esp32/package_esp32_index.json
3. esp32 の 3.2.1 を入れる
- ツール > ボード > ボードマネージャ(左端のアイコンからも開けます)
- 「esp32」で検索し、esp32 by Espressif Systems を見つける
- バージョンのプルダウンから 3.2.1 を選ぶ
- インストールを押す
1GB近く落ちるので、回線によっては数分から十数分かかります。 既定で選ばれているのは最新版なので、必ずプルダウンを開いて選び直してください。
4. ライブラリを入れる
Gを読むためのライブラリを1つ入れます。これが無いと書き込みのときにエラーで止まります。
- ツール > ライブラリを管理(左端のアイコンからも開けます)
- 「BMI270」で検索し、SparkFun BMI270 Arduino Library を見つける
- インストールを押す
ほかに必要なものがあれば、Arduino IDE が「一緒に入れますか」と聞いてくるので、 すべてインストールを選んでください。
5. ボードを設定する
| ボード | ツール > ボード > esp32 > ESP32C3 Dev Module |
|---|---|
| USB CDC On Boot | ツール > USB CDC On Boot > Enabled |
ほかの項目は既定のままで動きます。USB CDC On Boot を忘れるとログが出ません。
6. ファームを書き込む
プログラム本体をここから落とします。
このプログラムは MIT ライセンスです(zip の中の LICENSE)。改造も再配布も自由にどうぞ。
1つ前で入れたライブラリは同梱していません。SparkFun BMI270 Arduino Library は SparkFun の表記、
その中の Bosch BMI270 Sensor API は BSD-3-Clause、esp32 Arduino core は LGPL-2.1 と Apache-2.0 です。
- 落とした
HimawariGPS.zipをダブルクリックして展開する - 出てきた HimawariGPS フォルダの中の
HimawariGPS.inoをダブルクリックして、Arduino IDE で開く - USB-Cケーブル(データ通信対応のもの)でStampを繋ぐ
続いて、つないだStampのポートを選びます。
| Windows | ツール > ポート > COM3 など。挿したときに増えたものを選ぶ |
|---|---|
| Mac | ツール > ポート > /dev/cu.usbmodem で始まるもの |
あとは左上の→(書き込み)を押すだけです。
買ったばかりのStampは、工場出荷時のプログラムがUSBを掴んでいることがあります。 USBを抜いて、中央のボタンを押したまま挿し直してください。 2〜3秒押し続けてから離すと必ず認識されます。一度書き込めば、以後は普通に見えます。
それでも出てこなければケーブルを疑ってください。充電専用のUSB-Cケーブルでは、 電源は入る(給電される)のにポートに出てきません。
動作テスト
- 書き込みが終わったら、USB-Cは繋いだままにする
-
Arduino IDE の ツール > シリアルモニタを開く
(Windows:
Ctrl+Shift+M/ Mac:⌘+Shift+M) -
画面の下に出たシリアルモニタの右上の数字を
115200 baudに変える。 既定は 9600 で、そのままだと文字化けします - 何も出ていなければ、USB-Cを一度抜いて挿し直す(下のログは起動のときだけ出ます)
Himawari GPS 起動 / GNSS 38400 bps / RX=5 TX=6
[CFG] GNSS へ設定を送る
[CFG] NMEA を停止(GGA/GLL/GSA/GSV/RMC/VTG)
[CFG] UBX-NAV-PVT を有効化
[CFG] 測位レート 40 ms を指示
[CFG] 実測 25.5 Hz(期待 25 Hz): OK
[BLE] "Himawari GPS 0548C8" として広告開始
[GNSS] 25 Hz(測位 25 / 衛星 10 / fixType 3) / BLE 未接続
IMU: 生 X +0.060 Y -0.005 Z -1.001 / 送る 前 -0.005 左 +0.060 上 +1.001 g
見るところ
- 25 Hz と出ていれば、GNSSとの配線は正解です
- 測位 25 が0のままなら、まだ衛星を掴んでいません
- IMU の行が出ていれば、I2Cの2本も正しく繋がっています
- 名前の末尾6桁は機体ごとに違います。上のログの
0548C8は一例です - 上は要点だけの抜き書きです。ほかに
[I2C]と[IMU]の行も出ます
室内や窓際では衛星を捕まえられません。初めての測位は20〜40秒かかります。
衛星が6個を超えて fixType 3 になれば成功です。
アプリからの登録
- ひまわりサーキットの設定を開く
- 外部GPSの登録画面でスキャンする
- 一覧に出た
Himawari GPSで始まるGPS受信機を選んで登録する - 登録したGPS受信機のスイッチをONにする
Himawari GPS を選びます(iPhoneの画面)。
動作確認(実走行)
取り付け
部品面を下、アンテナのコネクタを車の前に向けて固定してください。 この向きを前提に、ファームがセンサーの軸を車体の前後左右へ直して送ります。
違う向きで付けると、横Gの左右が逆になります。
- 本体は助手席の足元など、なるべく平坦で固定できるところに置きます。 グローブボックスの中は床が傾いていることがあります
- アンテナだけダッシュボードの上など、空が見える場所に出します
- わずかな傾きは問題ありません。停車中に傾きぶんをアプリが測って引きます
電源
USBで給電します。消費は70mA程度なので、5000mAhのモバイルバッテリーで30時間以上もちます。 シガーソケットからのUSBでも構いません。夏の車内は60〜70℃になるので、 モバイルバッテリーは車内に置いたままにしないでください。
走り出す前に
コースイン画面で「通過」したあとの計測画面、その右上にあります。
| 緑 | 測位が届いています。これでOK |
|---|---|
| オレンジ | Bluetoothは繋がっているが、測位がまだ届いていない |
| 灰色 | 繋がっていない |
緑以外のときは内蔵GPSで記録されます。