サイクルコンピュータを自作する — GPS トラッキング

今から数えてちょうど1年前 — 2018 年の 11 月に日本の衛星測位システム 『みちびき』の運用が開始されました

これは米国の GPS と協調して測位精度を向上させたり、2k bps もの伝送量のある信号を送信してセンチメータ級の測位補強情報を提供する日本独自の画期的な取り組みを行ったりしています。

ごく最近までの衛星信号の民生利用では、およそ 20,000 km も離れた位置にある GPS の微弱な信号しか拾えないことが一般的で、誤差も 10.0 m ぐらいあることが当たり前でした。

ロシアの GLONASS の信号が拾えるのは良い機器で、他の衛星(たとえばヨーロッパの Galileo や中国の北斗)の信号まで拾えるモジュールは個人では手が出せないような値段が付いていました。

それが現在では誤差 2.5-3.0 m 程度の高精度モジュールが 2,000 円から 5,000 円ぐらいで市販されていて、その一部は日本の『みちびき』にも対応しています。

さらに SONY に至っては衛星信号受信モジュールを標準搭載したボードコンピュータまで販売しています。これを使うと SONY 製のサイコンを作れます


SONY SPRESENSE メインボード

これから衛星測位システムの活用が本格化し、測位精度も高まってくるとホイールの回転数から移動速度を推定するよりも、距離と時間から速度を求めるほうが正確な数値を得られるのではないか…と思うかどうかは別として、わりと簡単に実装できるので知っておいて損はないかと思われます。

そこで、みんな大好き、GPS 受信機キット (太陽誘電社 GYSFDMAXB) を用意しました。




これと Raspberry Pi を組み合わせると、それだけでも市販のサイコンよりも高機能な玩具が作れます。しかし、どうせ雨で濡れたり、ダウンヒルで飛んでいったりするので、ここではそんなに高価で高性能なものは求めません。

安価で小型で通信機能が使えればいいということで ESP32 を使います。


ESP32 ESP-32S 2個セット NodeMCU-32S ESP32-WROOM-32 開発ボード 2.4GHz WiFi + Bluetooth

これを使って GPS 受信機キットで受信した測位情報を BLE でスマートフォンに転送し、 SQLite にログを残したり、走行記録を地図上にオーバーレイ表示することを考えているわけです。

取り付けようと思えば、液晶ディスプレイなども付けられますが、大きく、重たく、電池消費量が激しくなるだけで実用性があまりないので、個人的には不要に思えます。

また反対に機能を削って走行記録を SD カードに残すだけならば、さらに小型化しつつ稼働時間を伸ばせますが、それでは地味でつまらないので、必要なときだけスマートフォンの液晶ディスプレイを借りる方針です。

BLE 通信で接続するので、うまくやらないとスマートフォンのバッテリを無駄に消費する懸念があります、というか、そこを調べることが最大の目的で GPS もサイコンも本当はオマケです。

ただ、いきなり、スマートフォンのアプリ開発という重たいタスクに取り掛かるのは大変なので、今回は測位情報を Bluetooth で送信するところまでを行います。

まずは ESP32-WROOM-32 のデータシートを見て Pin Layout を確認します。そこから TxD の接続先がわかりますので、線でつないでスケッチを動かしてみます(RxDはいまのところは不要です)。

#include "HardwareSerial.h"
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run 'make menuconfig' to and enable it
#endif

BluetoothSerial SerialBT;
HardwareSerial mySerial(2);

void setup() {
  SerialBT.begin("Hoge");
  mySerial.begin(9600, SERIAL_8N1, 34, 35);
}

void loop() {
  if (mySerial.available()) {
    SerialBT.write(mySerial.read());
  }
  delay(1000);
}

このスケッチをコンパイルしてアップロードすると、ESP32 は Bluetooth で測位情報を送信し続けるようになるはずなので、無事にデータ送信ができているかどうかを確認します。

うまくアップロードを行えない場合は、こちらを参考にしてみてください

送信されたデータを Linux で確認するには rfcomm コマンドを使用してシリアルポートにバインドしてしまえば良いです。

$ sudo bluetoothctl
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# scan on
Discovery started
[bluetooth]# pair 00:00:00:00:00:00 
Attempting to pair with 00:00:00:00:00:00
[bluetooth]# exit
$ sudo rfcomm connect /dev/rfcomm0 1 00:00:00:00:00:00
Connected /dev/rfcomm0 to 00:00:00:00:00:00 on channel 1
Press CTRL-C for hangup
$ sudo cat /dev/rfcomm0 

※ 00:00:00:00:00:00 は架空のMACアドレスです

できましたら、ファイルを標準出力に表示するときと同様に cat で出力できるようになります。上の例ですと、GPS受信機キットの出力をそのまま Bluetooth に流してしまっていますけれども、いちど Arduino Serial Monitor に書き出して内容を確認してから同じものが表示されるかどうかを確かめたほうが安全かも知れません。

ともかく、これで位置情報を表示できていれば、ESP32 側の準備は万端です。

ここまでは難しいことはないのですが、遠隔でセンサデータを取得できるのはいつ見ても楽しいものですね。

スマートフォン側のアプリ開発は、こう簡単にはいきません。

BLE通信が前提になりますので、少しばかり手間と時間がかかります。

いま忙しくて、実際に走行ログを集めに行く暇もないので、だいぶ後回しになりそうな気がしますが、せっかくなので既存のサイコンと同一条件で計測を行って、結果を比較してみたいですね。


つづき: サイクルコンピュータを自作する #2 – みちびき対応 GPS と市販のサイコンの比較実験


関連: Garmin / Strava の走行記録をまとめて表示する

真夏の北海道自転車旅の持ち物

オマケ記事と見せかけて、ある意味、こちらが本編です。

8月の第1週目から3週目に渡る、真夏のおよそ10日間で北海道東部を自転車で周遊する装備を考えました。

前提として、(1)キャンプ泊はせず宿泊施設を利用する、(2)荷物の運搬はリュックサックのみを使用、それにより特殊な輪行袋やハードケースは運搬できないので、(3)移動手段はフェリーと鉄道のみを使用するという3つの条件がありました。

また北海道東部を旅するにあたり、本州との気温差、移動時間の長さ、滞在中の悪天候は当然として、携帯食料品と自転車補修部品の調達、非常時の緊急脱出経路の確保の難しさが懸念されました。




いざという時には、知床や標津でレンタカーを借りて運転することになるので、安全に運転ができる靴を携行することも必須です。

なおかつ、荷物を背負いつつ、1日に 150km から 200km を走行しなければならないので、無制限に荷物を増やすわけにもいきません。

基本装備として予備のタイヤ、タイヤブート、タイヤチューブ、ミッシングリンク、携帯工具、空気入れ、専用のディレイラーハンガーは必須となります。

ディープリムホイールをご使用中なら、バルブエクステンダーもお忘れなく。


PARKTOOLタイヤブート 3枚入 TB-2

雨天走行も考慮して、携帯ルブやレインコートも持参することが理想的です。

それから財布や貴重品、スマートフォン、サイクルコンピュータも欠かせません。

私はロードバイク用の財布として、2年間、ほぼ毎日 ÖGON を使用していますが、機能性でも、耐久性でも、いまのところ、これに敵うものはありません。

サイクルコンピュータはデフォルトの地図ファイルを上書きすると、ナビとして利用できるようになります。

私が一人で自作していた頃には、あまり利用されている方はいないようでしたが、最近では地図ファイルを配布されている方もおられますので、導入の敷居は低くなっています。

何日も続けてライドをつづけていると、その都度、ルートを書き直して登録するなんて実質的に不可能ですし、地図を見ながら行き先を考えるほうが楽です。

そもそも事故や通行止めなどでルート通りに行かないことが多いので、私はもう何年もルートなんて使用していませんし、その必要性をまったく感じません。


[アディダス] トレーニングウェア S2S クロスカプリパンツ [レディース] FTK69

ライド時の装備が整ったら、次に考えるべきは着替えの衣服や靴です。

道北や道東は真夏でも 10-25℃ と気温が低く、風が強いので長袖ジャージに加えてインナーウェアも欲しいところです。

一方で本州や道央は気温が高いので長袖に重ね着などしていらません。

両方を別個に持っていこうとすると、自転車で持ち運ぶには現実的ではない量と重さになってしまいます。そのため、着替えのウェアはインナーとしてもアウターとしても使用できるものを考えたほうが良いです。


SKECHERS スニーカー Elite Flex-Hartnell Elite Flex-Hartnell

それに加えて、折りたたんだ際の体積と質量の最小化、(出先で洗濯することを考慮した)速乾性、汗抜け、着心地などを考慮すると、ここは自然とトレーニングウェアとランニングシューズの組み合わせに落ち着きました。

これらのメリットは、とにかく軽量であり、収納時には小さく折りたためることです。またベルトなどの荷物を減らせる利点もあります。

デメリットは耐久性に信頼がおけない製品が多いことですが、軽量化と引き換えなのでやむを得ない面もあります。

なお、緊急時の運転を考えないのであれば、サンダルでも良いかも知れませんし、いっそペダルとシューズを SPD にしてしまうのも良いかも知れません。

最後に出発前には必要に思えたものの、実際には使う機会がほとんどなかったものです。

リチウムイオン充電池は旅行中に一度も使用しませんでした。

モバイルルータもネットワークに接続できない場所が多すぎて、スマートフォンでテザリングしていることの方が圧倒的に多かったです。

行き帰りの船でも携帯電話ネットワークには接続できても、モバイルルータは使用できない時間の方が長かったです。

USBメモリ(SSD)は撮影した画像のバックアップに使用しましたが、ホテルで借りられるコンピュータにSDカードリーダーが無いことが多く、これならSDカードを多めに持ってきたほうが良かったです。

ボールペンは富良野から米国に絵葉書を出すときに使ったのみです。乗船票の記入などで使用する機会があるかと思えば、そんな機会は一切ありませんでした。

これらの他に PC を持参して、現地到着後にホテルに郵送しています。個人的な事情から必要だったとは言え、これも(通常は)無くても問題ありません。

特別な準備はここで終わりですが、もっとも肝心なのは機材の調子を万全に整えておくことです。

チェーン、クリート、ブレーキシュー、スポーク、ハブなどは新品状態に近ければ、めったに問題を起こしません。

フレームやクランクの破断やSTIレバーの故障は仕方ないにしても、チェーンやスポークの破断までは自己責任です。

定期的に交換しておけば、トラブルを予防できますので、普段のライドから気をつけておくと安心です。

ツーリング用モバイル PC の最適解か – 約 500g の 7インチ ノート PC

日常的に出張を繰り返す私にとって、モバイルPCは無くてはならない存在です。

今までにも Chromebook を Linux マシンとして利用したときの使用感や、仮想環境上にて実行できる高性能なラップトップ PC の購入について述べてきました。

通常の出張においてであれば、こうした既存の PC を持ち運ぶことに何ら不満はないのですけれども、「自転車旅でも PC を持ち運びたい」と考えたとき、さらに小型で軽量な PC への欲求が湧いてきます。

Tabキーで入力補完のできるキーボードが付属していて、ローカルで Shell scripts と Python さえ動く端末があれば、移動中の時間も無駄にすることなくデータの処理が行なえますし、VPN と SSH と Git まで用意できれば、それこそサーバ経由であらゆることが実行できます。

自転車で遠くまで遊びに行ったときの隙間時間(フェリーや飛行機で移動する場合では数時間から数日間)を活用することで、もっと自由に遊べる時間を増やせるわけです。

そんな都合が良いものが無いかと年単位で探し続けていたら、先日、ついに見つけてしまいました。


ONE-NETBOOK Technology OneMix2s(専用デジタルスタイラスペン/WPS Office スタンダード版付属)シルバー[Core m3-8100Y /メモリ 8GB/ PCIe SSD 256GB] ONEMIX2SJ-S2

キーボードと一体型の筐体に、振動で故障しにくい SSD ストレージ、本体質量 515g の重さに 6,500mAh のバッテリー容量という素晴らしいスペックながら、182 x 110 x 17 mm という手のひらサイズの体積の「ノートパソコン」です。

この大きさでタブレット端末ではなくて PC というのが最高に素晴らしいです。

軽量なタブレット端末に Bluetooth キーボードを接続する方法も、もちろん試したことはあるのですが、ファイルアクセスが面倒であったり、レスポンスが悪かったりと、ストレス無くスクリプトを書いて走らせることは困難です。




そうは言っても、普通のノート PC は薄型であっても自転車で持ち運ぶには大き過ぎますし、専用の充電器も荷物になります。また軽量モデルほど高価になる傾向がありますので、廉価モデルには持ち運びに適したものが少ないです。

Chromebook は USB 充電できることと低価格が魅力ですが、本体はあまり小型ではありません。作業用マシンとしての使い勝手もそれなりです。

タブレットは使えなくはありませんけれども、ローカルで実行できることが限定されますので、長時間の作業を続ける環境としては、いろいろと辛いと思います。

作業性 USB充電 質量 価格
ノートPC 700g – 9万円 –
Chromebook 900g – 2.5万円 –
タブレット 230g – 2万円 –
7インチPC 500g – 6万円 –

ところが、7インチPCは携帯性と作業性を兼ね備えていて、PCとしてのスペック的にも全く妥協していません。

その分、本体価格も高価なので、ツーリングに向いていない点があるとしたら(雨に濡らしたり、道路に落下させたりする可能性が高い場面で用いるPCとしては)価格が高過ぎることでしょうか。

ストレージ容量を考えるとパーティションを分割して、デュアルブートにしても良さそうだなと考えると、ますます欲しくなってきます。

仮想マシンを動かすには RAM が心許ないですが、256GB のストレージ容量は2分割しても数年前のノート PC よりも余裕がありますので、確認作業やファイル閲覧用に Windows を残しておけるのも理想的です。

購入すべきかどうかを迷っているのは、ただ一点、遊びに出かけていないときにどれだけ使用機会があるかどうかということに尽きます。

小型化のためにポインティング・スティックと特殊なキーボード配列を搭載した筐体は、通常の用途では使いにくいかもしれません。

キーボードしか使わない私のような原理主義者は OS ごと Debian で上書きすれば良いと考え始めるので、あまり問題にならないと思われるのですが、トラックパッドの方が何かと使いやすいのも違いありません。

現状ではおよそ 1kg の旧いノートパソコンに SD カードから Linux をブートして使用しています。

旧いノートパソコンとは言え、数年前のフラッグシップモデルだった PC だけに、キーボードも使いやすく、スクリーンも広くて、動作速度も快適です。

SSDストレージ容量は時代なりですし、メーカーの補修部品の在庫もそろそろ怪しいところですが、単体での作業性で見たらこちらの方が使いやすいことは明白です(ストレージ容量と稼働時間は、さすがに厳しいですけど)。

使わなくなった時点で郵送してしまえば、携帯性は考えなくても良いですし、ある意味では既に役目を終えた PC の再利用なので、事故による故障や紛失も大きな問題にはなりません。

遊びに出かけている間に使用することはないので、長い移動時間の最中にだけ手元にあれば良いことを考えると、これでも良いかなという気になってきます。

郵送が頼りにできないような場面が出てきたら、その時こそ小型モバイルPCの買い時なのかも知れません。

何れにせよ、このスペックと携行性があれば利用用途はいくらでもありますし、モニターとキーボードを外付けすれば操作性も格段に向上しますので、メイン機として考えても良いななどと思っていると夢が無限に膨らみます。