EMC_Fastest

 簡易な早押し判定機システムの製作例のご紹介です。
 押しボタンの入力インターフェイスにArduinoボード、判定処理や表示インターフェイスにPCやスマホ上のTcl/Tkスクリプトを使い、お手軽ながらもそこそこ高機能なシステムを試作してみました。


能書き(経緯)

 ちょいちょい参加してるカラオケオフがあるのですが(mixi 谷山浩子コミュニティー)。関西開催のもので近年幹事を担ってくださってる方がサービス精神旺盛な人で、折に触れて余興を設けたりしてくれるのですね。そんな余興のひとつとして一時期「イントロクイズ」をやってたことがあって。その際また凝ったことに、単に挙手で済ませるんじゃなくて、市販キットの早押し判定機を用意して来られたのです(共立プロダクツ ワンダーキット「早押し判定2」を箱に収めたもの)。
 これ。実務的には挙手で充分と思うのだけれども、思いの外、気持ち的な盛り上がりに寄与した印象でした。なんとなくクイズ大会やってる気分が高まった気が(笑)。「早押し判定機って、思ってたより楽しいかもな」、と。

 なのですが…その判定機には実用上少々難がありまして…。

 つまり、あってもなくても実のところあんまり変わんない!(爆)

 そこで刺激を受けた自分が色気を出し、キットに用意されてる出力端子を使って、外部スピーカー繋いでみたり、外部出力をArduinoボードで取り込んでPCで画面表示してみたりして(ランプ表示させたりするのは機材や電源の準備が大変なので)遊んでいたのですが…。
 Arduinoボード使うなら、キットの機能は単独でまるっと実装できちゃいそうですよね…。キット自体、主要機能の実装にはPICマイコン(PIC16F886)を使ってるみたいだし。更に、どうせ表示の拡張にPC使うなら、Arduinoボードの役割は接点入力に限定して、処理は全部PCでやっちゃってもいいんじゃない? プログラムの自由度も高いし。と。

 そんなこんなで…、発端となったカラオケオフはさておいて、意外と面白みのありそうな早押し判定機システムを市販キット使わず自前で試作してみたのが本記事の製作例です。
 コンセプトは「なるべく自分で作らない」。回路設計とかしない。なるべく工作しない。抜ける手は抜く。そして機材はなるべくコンパクトに。そんな方針。

 前述の市販キットもキットはキットなので、組み上げはもちろん、ケースや押しボタンなど機構部品の選定・加工の手間はどうしても要ってくるのですよね…。
 では完成市販品はどうかというと、これが意外と選択肢ないみたいで。探した範囲では1商品しか見当たらなくて、ある程度の回答者数に対応しようとすると、コストやら荷物やらが嵩んできそう。
 Bluetoothなどで相互接続して使うスマホアプリなんてのもあるようで、それはそれで使えるならいいですが、スマホ持ってない人は?とか、互換性は?とか、接続設定手間取らない?とか、自分の感覚ではそれはそれで面倒そうにも。事前動作確認とかやんにくいですしね…。

 そんな中で。実用に耐える性能があるかどうかは相当に怪しいけれども(笑)、比較的手軽な早押し判定機システム構築事例として、どなたかの参考になれば幸いなところです。


概要


機能


特徴


システム構成

図 システム構成 写真 判定状況

ハードウェアの製作

 基本的には、Arduinoボードに押しボタンスイッチを繋ぐだけのハードです。工作は機構周りだけ。
 なので各々好きなように作れば良くて、いくらも工夫のしようがあろうと思います。自由に作りましょう。
 ここではあくまで試作例の紹介だけ。


インターフェイスボックス

 ケース加工と接点信号の配線です。
 ブレッドボードを使うことでArduinoボードの固定加工と基板配線を端折ってます。
 試作例では他用途への流用を念頭に、接点入力端子数をEMC_Fastestの対応入力数より多い20とし、QIコネクターを使ってピンアサイン変更の余地を残しています。


押しボタン

 スイッチの加工と配線です。
 スイッチとコネクターを直結することで信号ケーブルなどの配線加工を端折ってます。信号ケーブルには市販のオーディオ延長ケーブル(ステレオ可)を使います。
 市販のものをコネクター変換(ないし付け替え)して使ってもいいかも知れません。


ソフトウェアのダウンロードとインストール


Arduinoスケッチ

 「sketchbook」フォルダ内の「EMC_Arduino_FastestX_????????.ino」をArduino IDEで開いてArduinoボードにコンパイル・書き込みしてください。

 0-19番ピンをプルアップされたデジタル入力に設定し、順次ループチェックして(ただし0,1,13番はスキップ)今回ON(0)かつ前回値と違っていればピン番号をシリアル通信に流すだけのシンプルなスケッチです。
 Arduino Megaなど多ピンボード対応に拡張する場合は改修が必要です。


ホストコンピューター Tcl/Tkスクリプト

 スクリプト自体は特別のインストール操作は不要ですが、Tcl/Tkインタープリタが未導入の場合はそのインストールが必要です。詳細はここでは割愛しますが、WindowsとAndroidの場合についてだけ、簡易にご紹介しておきます。なおここで紹介するインタープリタには本スクリプトで使用している拡張パッケージが同梱されていますので別途の導入は不要です。


使い方


M5StickC BluetoothSerial.hによる無線化支援の試み

 見栄えはさておき、まずまずのものが出来たかな…と思ってはいるのですが…(自画自賛)。一点心残りがありまして…。「システム全部有線接続は、利用環境によってちょっと配線が邪魔くさいかな…?」っていう(まぁ外部ディスプレイや外部スピーカーは無線化可能ですが)。それで少し色気を出して、部分的な無線化を模索してみました。

 無線機能の乗った小型でピンが多くて安価なArduinoボードは制作時点で国内では流通していなくて、どうもボード選択で対応する道は見つからなさそう。外付けの無線モジュールは特殊な仕様(TWELITEとかXBeeとか)のものが多くて、PCやスマホと直接話せる仕様(BluetoothとかWLANとか)で手軽なものが少なそう。
 そんな中で出会ったのが風雲児 M5StickC。「これは…」というわけです。
 M5StickCはGPIOが少ないので単品で早押し判定機を構成するには不向きですが、Arduinoボードと組み合わせれば多入力化出来ます。むしろM5StickCにはシリアル通信の無線化中継に専念してもらえば、製作済みの早押し判定機を無改造で無線化出来るんじゃ…。という目論見で試してみたのが本章の取組です。


システム構成

 前述システムのインターフェイスボックスとホストコンピューターの間にM5StickCを割り込ませます。

図 無線化 システム構成 写真 無線化 配線状況 写真 無線化 配線加工状況

ソフトウェアのダウンロードとインストール

 前掲の配布アーカイブに含まれています。別途のダウンロードは必要ありません。
 Arduinoボード用のArduinoスケッチとホストコンピューター Tcl/Tkスクリプトの取り扱いも同じです。

 M5StickCのソフトウェアは「sketchbook」フォルダ内の「EMC_M5StickC_BTSerialBridge_????????.ino」をArduino IDEで開いてM5StickCにコンパイル・書き込みしてください。

 Arduino IDEについてくるサンプルスケッチの「SerialPassthrough」をベースに、BluetoothSerial.hによるBluetoothシリアルポートとGROVE I/Fのハードウェアシリアルを115200bpsでブリッジするだけのスケッチです。
 動作視認用にLEDを点灯させる機能を追加しています。同様の目的でM5StickCのディスプレイ表示を記述したコードを書いていますがバッテリーの消耗を抑える目的で、コメントアウトしています。
 また使っていない標準シリアルポートとハードウェアシリアルポートを初期化するコマンドが残っていますが、コメントアウトが面倒だっただけです、気にしないで下さい(爆)。


使い方

スクリーンショット 無線化 ポート選択状況 Windows

 有線版と同じです。ポートの選択で目的のM5StickCに対応するBluetoothの仮想シリアルポートを指定するだけの違い。

 条件が定かでないのですが、作者のWindows環境(Windows 10 Home)ではM5StickCをBluetoothペアリングすると仮想COMポートが2つないし3つ出来、実際に使えるのはその中のどれか1つ、という状況になります。
 原因究明できておらず、とりあえず「そんなものなのかな?」とその都度場当たりで適当に選んで試しながら使ってます(苦笑)。



所感

 思った以上に普通に動きます。少し試した印象では、遅延もあまり気になりません。
 回答者と出題者の席が離れている場合など、利用価値あるかも知れません。


ホストコンピューター-Arduinoボード間通信にFirmataプロトコルを使った実装

 「なるべく自分で作らない」をコンセプトにしている本システム。当初はArduinoボードのスケッチも作らずありもので済ませる方針でした。つまりホストコンピューター-Arduino間通信に既存の標準プロトコルを使う。そういう目的のためにArduinoで標準的に利用されているプロトコルに「Firmata」というものがあり、本システムでも概ね機能実装が完了するまで、それを使って開発を進めていました。
 が。試行錯誤を重ねる中で幾つかのデメリットがメリットを上回ることが分かってきたため、最終的にFirmataの使用を断念し、区別のためFirmata使用版に「F」、不使用版に「X」の添字をつけることにしました。

 廃止した実装なので紹介の意味はろくにないのですが、Firmataという特徴的な技術を使ってみた例として、参考までに供養しておこうと思います。


ホストコンピューター-Arduinoボード間通信にFirmataプロトコルを使うメリットとデメリット

メリット
デメリット

ソフトウェアのダウンロードとインストール


システム構成と使い方

 Firmata不使用版と同じです。ソフトウェアの処理が違うだけ。
 なおFirmata使用版は開発終了で、以後の手直しはありません。


開発履歴(だいたい)


更新履歴(だいたい)


このページから抜けるいさな工房HP トップ / @nifty
サイト管理者:岩橋伴典 as いさな (E-mail:jo3emc@jarl.com / Twitter:@jo3emc)