長い前置き
世はCOVID-19に侵略され、人類は死の恐怖に慄いていた。
というほど私個人としては深刻ではない。医者ではないからだ。ワクチンも2回打てた。最近のエネルギー政策で河野ワクチン担当大臣の動きは残念に思うことが多いが、とりあえず接種ができたのでその点は感謝したい。
話がずれた。私自身はワクチンを接種できたものの、子供達はまだ幼いこともあり接種できる年齢ではない。また、ワクチンを接種したからといって感染しないわけではなく、むしろ感染・未発症の状態でミツバチの受粉の如く感染者を増やしてしまう、いわゆるブレイクスルー感染の当事者にもなりかねないと思っており、元々の引きこもりな性格も相まって基本的に外出はしたくない。
とはいえ、家から出るなと言われると出たくなるのもまた人の常である。外に出るのは怖い、しかし出たい。
そんなことを考えながら部屋にこもっていると、おなかの周りが膨れてきている。健康診断でも脂肪肝と断罪された。いわゆる肥満体型である。これはまずい。ということで、自宅でできる運動を楽しくやる方法を考えた結果、ステッパーとGoogle Street Viewを組み合わせて歩くと景色が変わるというシステムを思いついた。なお当初はルームランナーとの連動を考えたが、妻から「あれは家でやるとベルトの擦れる音がマジでうるさい」とありがたい指摘をいただきステッパーに切り替えた。
Street Viewとの連携は作り込みをしようとすればAPI叩いて専用アプリを開発など難しい方向にいくらでも思いを馳せることができるが、趣味でスクリプト10行くらい書いて喜んでいるあまりにもハイレベルな私の技量だと老後までかけてもできる気がしない。ふと思いつきWeb検索すると、キーボードでGoogle Street Viewを操作できることがわかった。Arduino系でキーボードをエミュレートすれば思いのほか簡単に実装できるのではと思い立ち、できるだけ安価・コンパクトを意識して試行錯誤した結果、思いのほか簡単に(といっても自分の技量だと1週間くらい夜なべしたが)実装できた。
用意するもの
- ステッパー
私はこのために新規購入した。だってストリートビュー連動やってみたかったんだもん。
ストレートステッパーやらツイストステッパーやらとあるらしいがサイドステッパー型を購入した。負荷が比較的高めのものが多いらしく、またそのサイドステッパー型の中でも連続60分対応の エアロライフ サイドステッパー にした。 - Digisparkまたはその互換機(Attiny85系)
機器の形態や構成にもよるが、現時点ではUSB端子に直接挿せるタイプではなくMicro-USBがついたタイプを利用している。 - ホールセンサIC SK8552G
光センサだと周りの明るさに左右されるかと思い磁力を使う方式にした。 - タクトスイッチ等のスイッチ類
ステッパーに載っている最中にボタンを押せればなんでもよい。 - マグネット
ホールセンサICを反応させるためのマグネット。ダイソーで売っていたネオジム磁石にしてみた。 - 配線材(基板、コード類、ケース等)
作り方や工夫した点
Digisparkに入れ込むコードや結線方法あたりはGithubで共有してしまったのでそちらを参照いただければと。
ということでここでは工夫したというか試行錯誤した点を備忘録的に書いておこうと思う。
今回Digispark系を採用した理由として、なにせ安価でコンパクトであることが大きい。
私の入手先はうろ覚えだがおそらくコロナ禍前のShigezoneの店頭で、半導体が品薄になる前でもあったため1個200円くらいで入手した記憶がある。
そのサイズを得た代償として、入出力端子が極端に少ない。元々P0からP5まで6本のI/Oしかないうえ、USBを使うとP3,P4が利用不可となりP5はオートリセットに使うらしく、利便性を損なわずに安定的に使えるのはP0,P1,P2の3端子しかない。これで全ての入出力をこなす必要がある。
そこで悩んだ結果、公開しているコードでは以下の設定にしている。
- P0 : ホールIC入力
- P1: LED出力
- P2 : タクトスイッチ入力
手元のデバイスは配線の都合上P0とP2を逆転させているのはご愛嬌。
P1をLEDにしているのは、オンボードLEDの紐付けがP1とされているのでなんとなく合わせた。
当初はタクトスイッチ入力を考えておらず、妻から「右とか左とか向けられればいいのに」と言われたことに対し「Attny85のボードはそのコンパクトさ故に入出力端子が少なくて云々」とオタク丸出しの早口で捲し立てるように反論したものの、一晩寝た後にふと、ステッパーの位置検出と組み合わせれば1ボタンで左右のキーコードを変えることを思いついたときには脳汁が出た。
コーディングは1年以上ぶりでArduino言語(Cだけど)の型などもすっかり忘れフィーリングでやってみたところ、コンパイルは通るもののまったく想定と異なる動きを見せるというスーパーな技を繰り出して自爆するなどしながら進めた結果、なんとか動くものが仕上がった。
プロトタイプはありあわせの基板2枚と配線材箱にぶち込まれていた謎の細いケーブルを撚って絡まりにくいようにした1ペアの撚り線コードを直接半田付けした、もう見た目もあったものじゃなかったが、これがとりあえず動いた。
本体側にテープでベタ貼りしている段ボールは磁石とホールセンサICを近づけるためのスペーサである。やっつけ感がすごい。
この段階だと踏み込んだ瞬間(ホールICで磁気を検知した瞬間)に前に進む実装だったが、左右方向の調整がしづらいことが分かったうえ、当初実装しないはずだった左右方向の動作が実際はほぼ必須の動作だったことが分かったことから、反対側に踏みかえる瞬間(ホールICで磁気を検出しなくなった瞬間)に前に進む実装に変更した。
左右方向の動作がほぼ必須というのは、キーボードで前に進む入力をした場合、道なり「ではなく」映っている映像の真正面に進もうとする。例えば一本道でもゆるく左に曲がっているような道をキーボードで進もうとすると、何歩か前進してから左に向きを変えないとやがてあらぬ方向を見ながら何もない横道に逸れようとしてぶつかり横滑りするような動作を見せる。よって、キーボードで進もうとすると実は左右に向きを変える動きは重要であることが分かった。
全体的に調子が良くなったので、早速本番用として2代目を作成した。今度は新たに入手した小さめの基板とタカチのケース SW-65S (本体側)と TW5-3-5G (コントローラ側)を使い、ホールIC検知インジケータとしてのLEDはコントローラ側に取り付けて現在のセンサーの反応を手元で見られるようにした。ケース加工は大変に不器用な自分の能力が最大限に発揮され、Micro USB端子にUSBケーブルを挿すときは中で基板が若干歪んでいる気がしないでもないがもう挿さればこっちのもんである。3m離れれば近視の自分ではもうなにも見えないので気にしないことにする。
本体内にDigispark互換機とホールセンサICを組み込み、以下の接続となるようにした。
[PC]—USBケーブル—[デバイス本体]—4芯電話用ケーブル—[コントローラ](LEDとタクトスイッチ)
電話用ケーブルを使ったのは、両端がRJ11コネクタになっていて脱着が容易だから。我が家には見境なくそこらじゅうを破壊しまくる体長1m前後の怪獣が2名ほどおり、また見境なくそこらじゅうを掃除しまくるロボット掃除機が1台ほどいるため、使わない時にはケーブル類を片付けておかないとどうなるか分かったもんじゃないのである。モジュラージャックも秋月で手配した。なお、2代目作成中にモジュラージャック1個が殉職した。予備を買っておいたよかったとともに我ながら不器用は伊達じゃないなと思った。
使ってみて分かったこと
以前Twitterでこんなことを書いた。
残念ながらホームセンターではないが、これは冗談抜きにずっと歩ける。ステッパーのレビューで「Youtubeや映画を見ながらだと飽きません」等と書いている方が多いが、正直そんなレベルではないと個人的には思う。
ただ、実際に歩いてみて分かったのは、行ってみたい旅行先なんかより、自分の実家周辺など「自分としてはよく知っているけど最近行ってないな」みたいなところを歩くと止まらない。正確には気になるところを立ち止まってキョロキョロしながら(ここで左右ボタンが予想外に活きていたりする)ではあるが、あちこちをふらついているうちにあっという間に時間が過ぎている。
以前行った観光地として新婚旅行で行った海外の街なんかもフラついてみたが、街を歩いたところで正直飽きる。観光地から観光地までは基本的に車移動だったので街並み自体はそこまで記憶がなく、しかも街並みはだいたい少し歩くとその土地のパターンが分かってくるのでダレてくる。よって、生活に馴染みのあるところに近いところのほうがより歩くということが分かった。
ということで、興味がある方はぜひお試しあれ。
もし機会があればどこかに持ち込んで他の方にも試していただき、この感じを味わって欲しいなと思っている。
コメント