xor

二兎を得るか、一兎をも得ざるか

【USB木魚】叩くと光りながら般若心経が入力できるUSB接続型木魚を作ってみた【作り方解説 & ソースコード公開】

動画で全てを察してください。

どうしてこんなものができたのか

  • 定期的にネットで話題にあがる(らしい)「ラベルがUSBコネクタに見える木魚」をたまたま4月末に見かけたので、木魚にUSBコネクタつけるぐらいならできるか…… と思い部品を購入。
  • コネクタをつけたところでいわゆる「自作キーボード」にすることを思い立つ。「それEnterキー入力にしなよ」というアドバイスもあり、何かしら入力できるようにしてみようとする。
  • 祖母が亡くなって3週間目ぐらいのことだったので、ほぼ無宗教状態だったのが毎日読経するぐらいに般若心経が身近になる。せっかくなので木魚から入力させたらいいじゃんと思いこの作品に至る。

気を紛らわせる感じでほぼ無感情に作っていたので個人的にはそこまで面白いとは思っていなかったのですが、Twitter公開するとたくさんの方に笑っていただけたようでよかったな、と思いました。
また「欲しい」との声を多数いただいたのですが、現時点では量産もできず、これで稼ぐつもりも一切ないので、ひとまず作り方とソースコードを公開する次第です。

自分で作れる人はチャレンジ、やる気はあるけどわからない人はアドバイスしますのでご連絡ください。これ読んでる製造業者さん、もしいらっしゃったら作り方もソースコードもご自由にご利用ください。商品化の際はぜひお声がけください。

クラウドファンディングやるべきか…?

木魚本体の作成

1. 必要な部品類

これらのほか、ハンダゴテ・ハンダ・銅線およそ30cmほど・ニッパ・カッター・彫刻刀・ハンドドリル・ピンセット・両面テープなど、小物部品や基本的な工具類が必要です。

2. 木魚に穴を開けてUSBコネクタを通す

まずシールを剥がし、USBの標準Aメスコネクタをあてがって外径を鉛筆で描き、ハンドドリル(100円)で何個か穴をあけます。次いでそこに彫刻刀(100円)で切り込みを入れて穴同士を繋げつつ、繊維方向への剥がれに気をつけながら四角く彫り進めて穴を拡げていきます。

標準Aメス-マイクロBオスケーブルを、マイクロB側から穴に入れます。標準Aメスの上下方向に注意しながら完全に四角穴にハマるまで押し込み、木魚の口からマイクロBオスのコネクタが飛び出る状態にします。

3. Pro Microとセンサ類を接続する

木魚は一旦置いておき、銅線を使ってPro Micro(または互換基板)とセンサ、NeoPixelを接続します。
接続する端子の組み合わせは以下の通り。

センサ・LED 端子 Pro Micro 端子
3軸加速度 (MMA8451) VIN VCC
3軸加速度 (MMA8451) GND GND
3軸加速度 (MMA8451) SDA 2
3軸加速度 (MMA8451) SCL 3
NeoPixel +5V VCC
NeoPixel GND GND
NeoPixel Din 10
コンデンサマイク VCC VCC
コンデンサマイク GND GND
コンデンサマイク AUD A0

コンデンサマイクに関しては今回はとりあえず接続しているものの、現在のソフトウェア(v0.1)では使用していないので、実装しなくてもかまいませんが、将来的に使用するかも。
→ v0.2で利用必須となりました。

まず加速度センサとコンデンサマイクを接続します。銅線を適当な長さで切り、ハンダ付けしていきます。接続できたら両面テープ(3Mの肉厚なやつがおすすめ)でPro Micro基板の上に貼り付けて固定します。

NeoPixelはテープを5個分で切り、10cm程度の長さの銅線3本でPro Microと接続します。NeoPixelテープ表面に信号方向の矢印が描かれていますが、その矢印の最も根元側の3つの端子を使用するようにしてください。(反対側だとDin端子ではなくD0端子と書かれており、ここと接続してはいけません)

4. 基板類を木魚の中にいれる

NeoPixelテープの裏面には両面テープが貼られていますが、両端それぞれ剥離紙を1cmぶんほど剥がしたらニッパでその剥離紙を切り取り、そこに別の厚手の両面テープをくっつけてからNeoPixelテープを木魚の上面内側にはめこみ、貼り付けて固定します。NeoPixelに元々からついている両面テープは絶対に糊面ごと剥がしてはいけません。(経験上裏面の配線パターンが剥がれて途中で点灯しなくなったりする)

次に、口から飛び出ているマイクロUSBコネクタをPro Microに接続し、ピンセット等を使って木魚の中に入れます。USB標準Aメスのコネクタの下側の隙間にPro Microを配置するようにすると、うまく「押さえ」になって固定されるようになります。

3軸加速度センサモジュールには表面に座標系のマークがありますが、それを参考にしながら、木魚内で次のような方向で固定されるように設置してください。

Z軸:木魚の打面に対して垂直上方向が正
Y軸:矢印が木魚の口の方向を向くように

ソフトウェアのインストール

1. Arduino IDEの準備

電子工作界隈であればだいたい知っていると思いますが、持っていない場合はインストールしておきます。もちろんフリー。
Software | Arduino

2. Pro Micro向けのボードライブラリのインストール

Arduino IDEでPro Microを使えるようにするためのボード拡張をインストールします。手順は以下を参考に。(英語なので難しそうであれば適宜翻訳などを使ってネ)

github.com

インストールが終了したら、ボード選択は「SparkFun Pro Micro」にしたうえで、プロセッサは「ATmega32U4 (5V, 16 MHz)」を選んでおいてください。ハードウェアが5V版なのに3.3V版で書き込んでしまうとクラッシュの原因となります。そうなった場合は以下の手順で復旧できますが、木魚からPro Microを再度取り出さなければいけないためちょっと面倒です。

http://digilife.bz/blog/?p=5025digilife.bz

3. 必須ライブラリのインストール

Arduino IDEのメニューのツール > ライブラリを管理… からライブラリマネージャを開き、以下の4つのライブラリをインストールします。検索窓にライブラリ名を入力してそれっぽいやつが出てきたらそのまま最新版をインストールしちゃってください。

リンクは参考用のGitHubリポジトリです。

4. ソフトウェアのダウンロード

リポジトリはこちら。
読み方? もくぎょおーえす、でいいと思います(適当)

github.com

木魚に搭載されたリアルタイムOSとしては世界初と思われる(※要出典)

以下はパッケージ(といってもZIPにしただけ)のリリースページです。こちらから最新の mokugyOS-package.zip をダウンロードして解凍しておいてください。

github.com

4-1. 般若心経データをEEPROMに書き込む

今回のソフトウェアでは、定数データである般若心経文字列は「EEPROM」という領域に保存してから使う方式をとっています。

omoroya.com

プログラム本体の入るフラッシュメモリやOSが動作するSRAMがかなり窮屈なので、このEEPROMへの書き込みをするプログラムは別途で用意しています。解凍したZIP内の SutraWriter > SutraWriter.ino をArduino IDEで開いてください。

  1. 木魚をUSBケーブルで接続
  2. Arduino IDE > ツール > ポート から それっぽいデバイスを選択(COM3とか/dev/usbmodem143301とかそういう感じのやつ)
  3. Arduino IDE > ツール > シリアルモニタ を開いておく
  4. 書き込み(ウインドウ左上の矢印ボタン)
  5. シリアルモニタをチェックして、下記のようなそれっぽいデータの羅列が見えていればOK

この「SutraWriter」は別リポジトリとして以下で公開しています。

github.com

デフォルトでは般若心経(Heart Sutra)が書き込まれていますが、経典からバイト列への圧縮変換方法が理解できれば自分でお好きな経典を書き込むことも可能です。この方法については以下の別記事にまとめてありますので参考にしてください*1 *2

zenn.dev

4-2. mokugyOSを書き込む

ZIP内の mokugyOS > mokugyOS.ino を開き、SutraWriter同様の手順で書き込みを行ってください。
書き込み後、木魚の口からレインボーな煩悩が溢れ出ていれば書き込み成功です、お疲れ様でした。よき読経ライフを!

5. 設定もろもろのやり方

ZIP内の mokugyOS > Config.h にユーザー設定可能な全ての項目が載っています。
日本語コメントで注釈を書いているのでそれを参考に変更して再度書き込みを行ってください。

使い方

※木魚の方向だとか叩き方その他の問題についてはGitHubのIssueをご覧ください。

モード切り替え

木魚を立てると単色発光します。
その状態で左か右に傾けると色が変化して「モード切り替え」をすることができます。
切り替え後、元のように寝かせるとそのモードの動作が開始されます。

発光色 モード
読経キーボード
シリアルデバイス
MIDIバイス
十字キーパッド
マウス
混色(ほぼ白) ゲーミング

起動直後は青色の「読経キーボード」モードになっています。
カラーバリエーションは国際仏旗と同様のものとしました。

ja.wikipedia.org

読経キーボードモード(青)

USBキーボードとして認識され、叩くたびに般若心経が入力される標準的なモードです。木魚を立ててモード切り替え状態にして再び寝かせると読経位置がリセットされ最初に戻ります。

シリアルデバイスモード(黄)

USBシリアル接続デバイスとして認識され、叩き動作と4方向の傾斜の合計5種類の入力を検知してそれぞれ1バイトのメッセージを送ります。PC側で何かしらのソフトウェアを作り、そちらに各種お経を組み込むことで、汎用的な読経環境を構築することができるかもしれません。現状は開発者向けです。シリアルに送るそれぞれのメッセージは設定変更可能です。

MIDIバイスモード(赤)

USB MIDIバイスとして認識され、叩くと固定のノートオン信号を送出します。任意のDAW上でVOCALOID類似のボーカルシンセプラグインなどを鳴らすことで合成音声による読経を行うことができます*3MIDIチャンネルとノート番号は設定変更可能です。

十字キーパッドモード(白)

USBキーボードとして認識され、叩き動作によるEnter入力と、傾斜動作による4方向の矢印入力ができるモードです。設定変更により4方向入力はWASDキーにすることもできます。

マウスモード(樺)

USBマウスとして認識され、叩き動作による左クリック入力と、360度傾斜で自在にマウスカーソルを動かすことができるモードです。

ゲーミングモード(混)

USBキーボード・マウス両方で認識され、現状では上下傾斜がWキーとSキー、左右傾斜がマウスカーソルの左右移動、叩き動作が左クリックとなっています。FPS向けとしては到底足りないので、ひとまずMinecraftで少しだけ使える設定としています。


作り方 & ソースコード & 使い方はここまで!
長ったらしい記事になってしまいました。。。

紹介していただいた媒体一覧

みなさま、くだらないネタなのに盛り上げてくださってありがとうございました!


*1:Zenn記事では「般若心経をSRAMではなくFlash上に配置するために」と書いていますが、結局それでも容量が厳しくてEEPROM配置になっています。

*2:実際に別の経典に書き換える場合、「HeartSutra.h」(SutraWriterリポジトリ側)をデータ列として書き換えつつ、変換後の実際のタイピング候補を格納するための「Chanting.h」(mokugyOSリポジトリ側)も書き換える必要があり少々複雑です。そのうち改善するかもしれません。

*3:PiaproStudioのような実際のボカロ用VST/AUプラグインMIDIリアルタイム入力に非対応のため不可。ポケミクのようなNSX-1搭載デバイスMIDI INすることが必要。