こんにちは、技術研究所のけんたろうです。
今回は2015年のクレスコフェアでアイデア賞を頂いた「みんなのマイク」について、ご紹介いたします。

はじめに

「みんなのマイク」とは、カメラで人の顔の位置を検出してマイクの高さを自動的に調整してくれるシステムです。
マイクスタンドの高さの調整は、通常はそれぞれの人の身長に合わせて手動で行いますが、その高さ調整を自動化することが「みんなのマイク」の目的です。
講演等でステージに人が上がるたびに、講演者または係員の人がマイクの高さを手動で調整する作業の手間が省けるというメリットがあるのです。

○システムの概要と処理の流れについて
システムの全体は、人の顔を検出するカメラ側とマイク側で構成されています。
カメラ側とマイク側の大まかな処理の流れは以下の通りです。

使用した機材

カメラ側は、[USBカメラ] ⇒ [Raspberry Pi 2] ⇒ [ZigBee] を使っており、
マイク側は、[ZigBee] ⇒ [GR-SAKURA] ⇒ [ステッピングモーター]を使っています。
カメラ側からマイク側への顔座標の送信はZigBeeによる通信で実現しています。
他にも、かっこよさを演出させるためにモーターの動きに合わせてLEDを光らせる仕組みも組み込みましたが、あまり重要でないので(笑)今回は割愛します。
上記の機材はすべて、バッテリーで稼働しておりますのでコードがなく自由な配置が可能です。

マイク側の下の部分は、カバーをつけていて見た目はスマートに見えますが、カバーを外すと非常にごちゃごちゃしています。
しかし、このごちゃごちゃ感がエンジニア魂をイキイキさせます。

また、マイコンやモーター以外の部分はすべて手作りとなっており、親しみやすい優しいデザインを意識して主に丸みを帯びた木造です。

最初にして最大の課題

「みんなのマイク」の構想の段階で、一番最初に悩んだのは、マイク側で「モーターの回転運動をどうやって上下運動に変換させるか」ということでした。
数週間チームで話し合った結果、2つの案が出ました。
1つ目の案は、棒にモーター当てて棒をスライドさせるような形でした。
しかし、この案はマイクスタンドの途中にモーターをつける必要があり、見た目がスマートでなくなるために却下となりました。
2つ目の案は、「ナット式」と勝手に呼んでいましたが、回転する軸に回転しないナットのような部分があったとしたら、軸の回転によってナットの部分が上下運動をするという仕組みです。
この方式は構造がやや複雑なのが懸念でしたが、私があっさりプロトタイプを完成させてしまった事と、見た目がスマート(モーター位置は最下部)という理由から採用されました。
1つ目の案でもプロトタイプを作成しており、ボツにはなりましたが、実はカメラ側のUSBカメラの高さを手動調整する部分はこのプロトタイプが再利用されています。

そして、「みんなのマイク」で最後まで悩まされたのがこのナット式の軸の部分でした。
作成した軸の構造はシンプルで、100円ショップ等で売っている”ケーブルをまとめるチューブ”を、パイプに巻き付けて接着しただけです。
しかし、このチューブは使っているうちにマイクの重みなどで伸びてきてしまい、いずれ太くなり軸が回転できない状態に陥ってしまうことが何回もありました。
なので時々巻き直したり補修したり等、、、モーターコントロールのプログラムを作るよりも遥かに多くの時間を費やしてしまいました。。。

開発フェーズにおける工夫

開発当初はモーターコントロールのバグが多く、モーターの回転が止まらずに軸が上方向に外れて飛んでいったり、下方向に行き過ぎて軸を破壊してしまうことが多々ありました。
そこで誤作動時の物理機構の破損を防ぐ為に、GR-SAKURAの汎用ポートにスイッチを接続し、マイクの高さがある特定の箇所に到達するとスイッチがONになりモーターの動作を停止させる機能を追加しました。

スイッチ制御はモーター制御の停止のみならず、運用上でも有効活用できることが、その後わかりました。
モーター制御において、マイクの高さはプログラム上で常に把握している状態だったのですが、数十回とか繰り返し使用しているとプログラム上で把握している位置と実際の高さに差異が発生してしまうのです。この差異を修正するために、マイクの高さが特定の箇所を通過したときに
スイッチがONになるようにし、そのタイミングでプログラム内で持つ高さを実際の高さに補正する機能を追加しました。
この高さ補正スイッチは身長が約165cm(この値は適当)の人がマイクを使った時に作動するようにしています。

作ってみないとわからないこと

私は通常の業務では組み込み系のソフトウェア開発がメインだったので、「みんなのマイク」のようにモーターを制御したりスイッチやLEDも制御したり、物理的な世界へとつながったシステムを作成したのは初めての経験でした。
「みんなのマイク」の構想初期の段階では、正直いいますと「こんなの簡単にできるだろう」となめてました。。。
しかし、実際にやってみるとさまざまな課題に直面し、眠れない夜も多々ありました。
課題と同時に「こんなこともやりたい」とか「デザインを変えたい」など新たな目標も多く発生しました。
ソフトウェア屋としては通常はあまり実感できない「ソフトウェアは劣化しないけれども、物理的な機構は劣化する」こともしっかりと認識しました。
結局のところ、最初から最後まで「とりあえず作って動かしてみて発見して」の繰り返しで「何事もやってみないとわからない」ということを改めて感じました。
そして、今回やってみて一番わかったことは「動くものを作ることは楽しすぎる!とにかく楽しい!」ということでした。
「みんなのマイク」は完成後にクレスコフェアで無事にお披露目することができ、たくさんの方々との出会いや更なるアイデアを頂くことができました。
作成にはとても苦労しましたが、この経験でチーム内の絆が生まれたことや、新たな出会いがあったことは予想外の大きな財産になりました。

最後に

「みんなのマイク」の作成はほとんどが業務時間外で行っていた為、真夜中や土日の活動がメインでした。
真夜中に電動ドリルやノコギリを使って、家族に怒られたりもしました。(笑)
しかし、体はきつくてもそれ以上に発見や楽しさがあり、それが原動力となって突き進めた気がします。この原動力がエンジニア魂なのかもしれません。
皆様方も、ぜひ何かを作ることにチャレンジしてみては如何でしょうか?
私はコンピュータは未だに魔法だと思っていて、熱い思いさえあればなんでも可能だと考えています。
皆様方のエンジニア魂が猛威をふるうことを切に願っています。

このブログを最後まで読んでくださり、ありがとうございました!