「VIA LIBRIS」は、ペーパーバックのサイズの宝の本だ。特別なコンパスと、「コールド」「ウォーム」「ホット」といったヒントが表示される絵文字盤で、あらかじめ設定されている場所にユーザーを導く。その場所(ショップなど)に到着すると、隠されたスロットからギフトカードが飛び出て、ユーザーはビックリする。新しい場所は、ボタンを押せばいつでもプログラムできる。どの本も手作りで、同じ物はふたつとない。美しくて、何度でも使える。私はこれを、友人や家族にギフトカードを贈るときに使っている。ギフトカードが飛び出すと、その場所にいる意味がすぐにわかり、その場で使える。とっても楽しい仕掛けだ。
VIA LIBRISにはArduino Pro Mini(プリント基板の裏側)が1つ、磁気センサー、加速度センサー(コンパスの傾きを補正するため)、GPSモジュール、サブマイクロサーボ(ヒント盤を回転させる)、そして、何度も失敗を繰り返して完成させたカスタム・デザインの連続回転するギヤードモーターサーボ(コンパスの針を動かす)が使われている。
このプロジェクトは、Kenton Harrisの逆ジオキャッチング・ボックスにヒントを得たものだ。箱の中に隠されている場所に誰かを導くというアイデアが、とても気に入った。
VIA LIBRISは、ちょっと古い感じに仕上げてある。昔のメカニカルな雰囲気が好きだからだ。ヒント盤を回転させるサーボなどのハードウェアの機能は、わざとこういう形にしてある。ディスプレイやLEDを並べて情報を表示させれば、ずっとシンプルで見栄えもよく仕上がっただろう。しかし、私はあえて難しいメカニカルな方向に進むことにした。だって、それではスマートフォンアプリと変わらないではないか。
私は、デザインをしてプロトタイプを作るまでに、早いうちにアイデアを切り替えている。たとえば、モーター(サーボ)は2つまでと決めた。最初は、コンパス、ヒント盤、ギフトカードの押し出し機構を3つのサーボで動かすつもりで設計していたのだが、それをサーボ2つで済ませるようにしなければならなくなった。3つのサーボを収めるスペースがないことと、もう1つは、モーターの磁気が、方向を感知する繊細な電子コンパスに干渉してしまうためだ。これは数ある中での1つの妥協に過ぎないが、早い時期に気がついたので別の方法に転向できた。それにしても、サーボ2つでこれを行うのは相当なチャレンジだった。詳しくは後で説明する。
私は、Arduinoを使ったメカニカルなプロジェクトが好きだ。ハードウェアとソフトウェアの組み合わせなので、ソフトを変更するだけでメカの動きを簡単に変えることができる。ハードウェアを作り直すよりもずっと早い。たとえば、ヒント盤に使用したサブマイクロサーボには、回転の仕方にばらつきがあることに気がついた。20度回転させる場合でも、サーボごとに違いが出るのだ。「コールド」「ウォーム」「ホット」の位置はサーボごとに変えてある(つまり本ごとに違っている)。対策には2つの案があった。微妙に角度が異なるヒント盤に合わせてマークのシールを貼る方法と、もう1つは、まったく同じにマークを付けたヒント盤の回転角度を、それぞれソフトウェアで調整する方法だ。ソフトウェアで調整するほうが、ずっと簡単だ。いずれにせよ、コンパスのほうはソフトで微調整しなければならなかった。
プロジェクトを始めて早い時期に、私はプリント基板のデザインを行った。適度なサイズがあるので、いろいろなデザインが可能だった。Arduino Pro Mini、Adafruit Ultimate GPS、サーボコントローラー、電子コンパスと、いくつものモジュールを搭載しなければならなかったのだが、ここで大きな決断を迫られた。それらのモジュールの機能を1枚の基板の上にまとめてしまう方法もあった。しかし、それは当時の私の能力を超える作業であり、時間もなかった。細かい表面実装パーツをたくさん買い込んでハンダ付けする必要もあった。
そこで、違う方法をとることにした。AutodeskのEAGLEを使ってマスター基板をデザインし、Arduinoなどのモジュールをそのままハンダ付けするというものだ。それでも、まだ複雑ではある。両面構造で、基板の表側にGPSモジュール、裏側にArduinoが配置される。しかし、EAGLEはこうしたデザインにも対応してくれた。
基板のデザインを製造業者に送る前に、自分で作って試してみることにした。雑な作りではあったが、確かに動いた。そのとき気がついたのは、GPSモジュールの下には大きなグランド面が必要だということだ。Arduinoやサーボから発せられる電子ノイズから、GPSの微弱な信号を守るためだ。これは、EAGLE上で簡単にできた。
私はこの基板を10枚発注した。しかし、発注前にテストしたはずなのだが、できてみてデザインにエラーがあることを発見してしまった。そして、すべての基板の何本かのパスを修正した。10枚だからよかったが、100枚とか大量の数だったら大変な騒ぎになるところだった。プリント基板は、製造を発注する前に3回はテストしておこう。とくに多層構造のボードではちょっと大変なのだが、やるしかない。私の轍を踏まないでほしい。
プロトタイプには、3枚の透明アクリルの部品が必要だった。プラスチック業者で切り出してもらい、厚紙で作ったテンプレートを使って自分で穴を開けた。10枚だからこれでいいが、もっと多く製造するとなれば、穴も含めてレーザーカットするべきだろう。
3Dデザインでは、大きな失敗をしでかしてしまった。2つのサーボで、コンパス盤、ヒント盤、ギフトカードの押し出しという3つの異なる動作をさせることにしたわけだが、構造が複雑になり、大変に苦労した。ヒント盤を回転させるサーボはギフトカードの押し出しも担当する。カードは、相手をビックリさせるために、本の下側の秘密のスロットから「ポン」と飛び出させたかった。その押し出しメカニズムは、ヒント盤がGPSで指定した場所に「到着した」と示したときにトリガーしなければならない。
最初、私は3Dデザインに時間をかけない方針を打ち出した。代わりに、いくつかのバージョンの押し出し装置を試作することにした。作ったのは5種類。1つは大きな安全ピンを使っているが、すべてバネで動く仕組みだ。このデザインには、いくつもの制約があった。まずは押し出し装置を収めるスペースが小さいこと。そして、ヒント盤の動きにも制約を受ける。
新しいバージョンを作るたびに、私は2つの問題のうちの1つに遭遇した。うまく作動するが製作が馬鹿みたいに難しいか、製作は簡単だが動作がいまひとつという問題だ。これは、友人や家族にプロトタイプを渡し始めたころにわかった。私には、簡単に製作できるデザインが必要だった。何カ月もかけていくつものバージョンを作ったが、どれにも個別の問題があった。
バージョン5が失敗したとき、私はついに降参して、3D CADモデリングに手を出すことにした。Autodesk Fusion 360を使って、週末の何時間かを費やし、デザインを完全に組み合わせた。実際の押し出し装置を作らなくとも、画面の中で部品を組み立てれば、それらが連動して動く。いろいろな制約箇所が目で見られるし、実物を組み立てなくても、いろいろな種類の押し出し装置を試すことができる。うまく動かないときは、「やり直し」をクリックして、別のものを試せばよい。
私は毎日数時間ずつ、一週間以上、いろいろなアイデアを試してみた。最終的に、信頼度の高い、何度も繰り返し使える方式のものを3Dプリントパーツで完成させた。デザインには、トータルで10時間かかった。最初からこうしておけば、何週間、何カ月分ものイライラを経験せずに済んだのだ。私の失敗から学んで、最初から3Dモデリングを使って欲しい。
モデリングには、いくつかの貴重なオマケが付いてくる。押し出し装置の3つの部品を簡単にプリントできるし、3Dデザインを写実的にレンダリングできるし、前にも書いたようにアクリル板でレーザーカットするための2Dのベクトル画像にもできるし、押し出し器の仕組みを表すアニメーションも作れる。ちょっと時間はかかるが、やるだけの価値はある。私はこのアニメーションを、このプロジェクトの長いバージョンの動画に使った。ご覧になりたい方は、私のプロジェクトのウェブサイト をどうぞ。
Arduinoのコード(スケッチ)は、Arduinoに必要なすべての機能を担当させるもので、製作には少々手間がかかった。いろいろな外部機器との入出力も含まれている。Adafruit Ultimate GPS Breakoutはシリアル通信を使用する。LSM303電子コンパスはI2Cを使う。サーボはデジタルピンを使う。私が自作したコンパス用のサーボはアナログピンに値を返す。ユーザーに気づかせるために、小さな振動モーターも入っており、これもまたArduinoのデジタルピンに接続されている。
Arduinoは、スケッチの書き込みにシリアル接続を使用する。しかし、Arduinoにはシリアルポートは1つしかない。GPSモジュールもシリアルポートを使うのだが、そのためにスケッチの書き込みとぶつかってしまう。理想的には、シリアルインターフェイスをソフトウェアで代替するSoft Serial Arduinoライブラリーを使って、GPSモジュールをデジタルピンに接続できればよいのだが、最初のバージョンでそれを試したところ、Soft Serialもサーボもまったく動いてくれなかった。お互いのタイミングが干渉してしまうのだ。そこで、プリント基板に簡単なジャンパーを設けて、1つのシリアルポートを使い分けることにした。ジャンパーを引き抜けば、GPSが切断されてスケッチの書き込みが可能になるという仕組みだ。これは、ハードウェアの不足をソフトウェアで補うという考え方だ。
製作中、私はあらゆるステップの写真を撮り、ノートを取った。特別なツールの設定なども記録している。だから、組み立てや製造のためのガイドはすぐに作れる。みなさんも、ぜひプロジェクトの記録を残していただきたい。数多く製造したいときに役に立つ。家族や友人のためにたった10台作ろうという場合にも、とても便利だ。それほど時間は取られない。それから、コードにはできるだけコメントを入れておこう。
作っていて気がついたのだが、リード線、とくにサーボのコードの取り回しが、小さなスペースの中では難しかった。最初に作った10枚のプリント基板では、この問題を解消する方法はなかったが、すぐにそこを改良したプリント基板の新バージョンをデザインした。こうした改良は、思いついたらすぐに実行することが重要だ。多くのMakerがそうだろうと思うが、プロジェクトにはいくつかの段階があり、その間を行ったり来たりしながら作業しているはずだ。何週間とか何カ月後に、前の段階に戻ってくることもある。そのときに、改良すべき点をはっきり憶えているとはかぎらない。
実際に使えるプロトタイプを完成させると、楽しいテストの時間となる。私はそれを、クラフト用品店で買った、洒落た「ブックボックス」に収めた。私は、冒険好きな友人や家族に、近くの店のギフトカードを組み込んだVIA LIBRISを渡してテストしてもらうことにした。場所は、ArduinoのEEPROMに書き込んである。彼らには最低限の説明しかしていない。中にギフトカードが入っていることは、誰も知らない。彼らがVIA LIBRISのスイッチを入れて「宝探し」を開始し、ビックリするところを私は見たかった。それは大成功だった。1人の友人は電話をかけてきて、「この箱が示す方向に歩いているときは、何がなんだか訳がわからなかったけど、その店の前に到着して、その店のギフトカードが飛び出した。最高だよ!」と話してくれたのが、とても嬉しかった。
貴重な意見ももらえた。このボックスでは、「宝物」の場所がどのくらい遠くにあるのかがわからない。距離を示すことも可能だが、私はそこも謎にしておきたかった。与えられるヒントは「コールド」「ウォーム」「ホット」の3つだ。テストをしてくれたある人は、宝探しを開始するときに、どれだけの距離を移動しなければならないのかを知りたいと言っていた。車で行く距離なのか、自転車か歩きで行けるのか? そこで私は、車か徒歩かがわかるマークをヒント盤に追加した。また、相手に渡すときに、どれくらいの距離を移動するのか、ざっくり教えることにした。
予想外の問題もあった。私と離れて暮らしている母の場合、宝探しをしている間にコンパスが正しい方向を示さなくなってしまった。そんなはずはないと思った。計算が狂うはずがない。しかし私は、方向を計算するための三角法の関数にエラーがあったことを発見したのだ。私の家の周囲では、そのエラーによる誤差はほとんどわからなかったのだが、遠く離れた場所では、それが大きく影響してしまう。簡単に修正できる問題だったが、母のことがなければ気がつかなかっただろう。
もう1つ、音を出してはどうかという意見ももらった。子どもたちも楽しめるようにということだ。とてもいい考えだ。新しいバージョンには、Adafruit Audio FX Sound Boardを組み入れようと思う。小さなスピーカーから、愉快な音がランダムに出てくる。そのためにはプリント基板のデザインをまた変更しなければならないが、大した手間ではない。幸いなことに、Arduino の上に、サウンドボードにぴったりの空きがある。
このプロジェクトは、楽しくてためになるものだった。そして今回私は、いろいろな教訓を学んだ。
まずは、改良の記録を細かに取っておくこと。ハードウェアもコードも同じ。私は、各バージョンに変更を加えた日付と内容を詳細に記録している。大変な量だが、その記録は命綱だ。何ヶ月かの中断の後にプロジェクトに戻ってきたときに、どこから再開したらよいかが一発でわかる。
2つめは、そもそもの動機をハッキリとさせて、それに集中することだ。私の場合は、Arduinoとメカニズムの組み合わせを楽しむというのが動機だった。Arduinoもメカニズムも、私をうまく引っ張ってくれた。
3つめは、パーツリストを作ることだ。買った店、価格、サイズなども記録しておこう。大量に作りたくなったときに、パーツリストがどうしても必要になる。
最後に、プロトタイプが完成したら、かならずテストすること! まずは自分で、いろいろな環境で、さまざまな使われ方を想定して行うことだ。思ったとおりに動かなくても、気を落とさないことだ。私のギフトカード押し出し装置のときもそうだったが、テストを通して潜在的な問題点を洗い出すのだ。それから、友人や家族にテストしてもらう。そのとき、必要と思われる説明書を作っておこう。相手は、それを初めて手にしたお客さんだと思うとよい。あとは黙って、彼らがそれをどう使うか、その様子を観察する。すべてのユーザーについて歩いて細かに説明ができるわけではないからだ。
私はこのプロジェクトをもとに、プロトタイピングガイドを製作した。大なり小なり、あらゆるプロジェクトにとって大切な教訓が書かれている。
[原文]