動画で全てを察してください。
うちのUSB木魚、パソコンに接続するとキーボードとして認識されて、叩くと煩悩みたいな発光しながら般若心経が入力できるようになりました。 pic.twitter.com/KuI7bshXTZ
— うこ (@ukokq) May 12, 2021
どうしてこんなものができたのか
- 定期的にネットで話題にあがる(らしい)「ラベルがUSBコネクタに見える木魚」をたまたま4月末に見かけたので、木魚にUSBコネクタつけるぐらいならできるか…… と思い部品を購入。
- コネクタをつけたところでいわゆる「自作キーボード」にすることを思い立つ。「それEnterキー入力にしなよ」というアドバイスもあり、何かしら入力できるようにしてみようとする。
- 祖母が亡くなって3週間目ぐらいのことだったので、ほぼ無宗教状態だったのが毎日読経するぐらいに般若心経が身近になる。せっかくなので木魚から入力させたらいいじゃんと思いこの作品に至る。
気を紛らわせる感じでほぼ無感情に作っていたので個人的にはそこまで面白いとは思っていなかったのですが、Twitter公開するとたくさんの方に笑っていただけたようでよかったな、と思いました。
また「欲しい」との声を多数いただいたのですが、現時点では量産もできず、これで稼ぐつもりも一切ないので、ひとまず作り方とソースコードを公開する次第です。
自分で作れる人はチャレンジ、やる気はあるけどわからない人はアドバイスしますのでご連絡ください。これ読んでる製造業者さん、もしいらっしゃったら作り方もソースコードもご自由にご利用ください。商品化の際はぜひお声がけください。
クラウドファンディングやるべきか…?
木魚本体の作成
1. 必要な部品類
木魚
今回使ったのはこちら。元ネタと同じ商品のようです。
USB標準Aオス-標準Aオス ケーブル
いわゆるUSBの規格外なやつです
USB標準Aメス-マイクロBオス ケーブル
100円ショップで買えるやつです。OTGでなくても良い。
simple-sumple-20.at.webry.infoバイ(任意)
木魚叩くやつです。おりん棒で叩いてはいけません(たぶん)
Twitterで(自分が)叩かれるかと思ったけど意外とそうでもなくて安心しているざぶとん(任意)
動画では100円ショップに売ってた「テーブルの脚用ざぶとん」なるものを使用しています。ATMega 32U4 (5V/16MHz) 互換基板
Pro micro スイッチサイエンス版www.switch-science.com
今回はスイッチサイエンスさんのPro Micro「モゲナイマイクロ」を使用しました。
32U4互換であればなんでもOKです。3軸加速度センサ
Adafruit MMA8451 三軸加速度センサwww.switch-science.com
もしくは Adafruit Triple-Axis Accelerometer - ±2/4/8g @ 14-bit - MMA8451 : ID 2019 : $7.95 : Adafruit Industries, Unique & fun DIY electronics and kitsWS2812B(NeoPixel)互換のLEDテープ・5個分
今回は工具箱にあったNeoPixelの余りを使用しましたが、買うなら以下あたりがおすすめです。 www.shigezone.com
フルカラーシリアルLEDモジュールwww.switch-science.comコンデンサマイク
(任意)
加速度センサだけでうまくとれるかわからなかったのと、スイッチサイエンスさんで購入するにあたり送料無料の3000円に到達させるために一応入手したものです。 エレクトレットコンデンサマイクモジュールwww.switch-science.com
もしくは SparkFun Electret Microphone Breakout - BOB-12758 - SparkFun Electronics
→ mokugyOS v0.2より必須になりました(GitHub参照)。
これらのほか、ハンダゴテ・ハンダ・銅線およそ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を使えるようにするためのボード拡張をインストールします。手順は以下を参考に。(英語なので難しそうであれば適宜翻訳などを使ってネ)
インストールが終了したら、ボード選択は「SparkFun Pro Micro」にしたうえで、プロセッサは「ATmega32U4 (5V, 16 MHz)」を選んでおいてください。ハードウェアが5V版なのに3.3V版で書き込んでしまうとクラッシュの原因となります。そうなった場合は以下の手順で復旧できますが、木魚からPro Microを再度取り出さなければいけないためちょっと面倒です。
http://digilife.bz/blog/?p=5025digilife.bz
3. 必須ライブラリのインストール
Arduino IDEのメニューのツール > ライブラリを管理… からライブラリマネージャを開き、以下の4つのライブラリをインストールします。検索窓にライブラリ名を入力してそれっぽいやつが出てきたらそのまま最新版をインストールしちゃってください。
- FreeRTOS
feilipu/Arduino_FreeRTOS_Library: A FreeRTOS Library for all Arduino AVR Devices (Uno, Leonardo, Mega, etc) - NeoPixelBus by Makuna
Makuna/NeoPixelBus: An Arduino NeoPixel support library supporting a large variety of individually addressable LEDs. Please refer to the Wiki for more details. Please use the gitter channel to ask questions as the GitHub Issues feature is used for bug tracking. - MIDIUSB
arduino-libraries/MIDIUSB: A MIDI library over USB, based on PluggableUSB - Adafruit MMA8451 Library
adafruit/Adafruit_MMA8451_Library: Arduino library for the MMA8451 Accelerometer sensors in the Adafruit shop- 関連ライブラリの Adafruit Unified Sensor Driver はインストール不要です。こちらには非依存のため。
4. ソフトウェアのダウンロード
リポジトリはこちら。
読み方? もくぎょおーえす、でいいと思います(適当)
木魚に搭載されたリアルタイムOSとしては世界初と思われる(※要出典)
以下はパッケージ(といってもZIPにしただけ)のリリースページです。こちらから最新の mokugyOS-package.zip
をダウンロードして解凍しておいてください。
4-1. 般若心経データをEEPROMに書き込む
今回のソフトウェアでは、定数データである般若心経文字列は「EEPROM」という領域に保存してから使う方式をとっています。
プログラム本体の入るフラッシュメモリやOSが動作するSRAMがかなり窮屈なので、このEEPROMへの書き込みをするプログラムは別途で用意しています。解凍したZIP内の SutraWriter > SutraWriter.ino をArduino IDEで開いてください。
- 木魚をUSBケーブルで接続
- Arduino IDE > ツール > ポート から それっぽいデバイスを選択(
COM3
とか/dev/usbmodem143301
とかそういう感じのやつ) - Arduino IDE > ツール > シリアルモニタ を開いておく
- 書き込み(ウインドウ左上の矢印ボタン)
- シリアルモニタをチェックして、下記のようなそれっぽいデータの羅列が見えていればOK
この「SutraWriter」は別リポジトリとして以下で公開しています。
デフォルトでは般若心経(Heart Sutra)が書き込まれていますが、経典からバイト列への圧縮変換方法が理解できれば自分でお好きな経典を書き込むことも可能です。この方法については以下の別記事にまとめてありますので参考にしてください*1 *2。
4-2. mokugyOSを書き込む
ZIP内の mokugyOS > mokugyOS.ino を開き、SutraWriter同様の手順で書き込みを行ってください。
書き込み後、木魚の口からレインボーな煩悩が溢れ出ていれば書き込み成功です、お疲れ様でした。よき読経ライフを!
5. 設定もろもろのやり方
ZIP内の mokugyOS > Config.h にユーザー設定可能な全ての項目が載っています。
日本語コメントで注釈を書いているのでそれを参考に変更して再度書き込みを行ってください。
使い方
※木魚の方向だとか叩き方その他の問題についてはGitHubのIssueをご覧ください。
モード切り替え
木魚を立てると単色発光します。
その状態で左か右に傾けると色が変化して「モード切り替え」をすることができます。
切り替え後、元のように寝かせるとそのモードの動作が開始されます。
発光色 | モード |
---|---|
青 | 読経キーボード |
黄 | シリアルデバイス |
赤 | MIDIデバイス |
白 | 十字キーパッド |
樺 | マウス |
混色(ほぼ白) | ゲーミング |
起動直後は青色の「読経キーボード」モードになっています。
カラーバリエーションは国際仏旗と同様のものとしました。
読経キーボードモード(青)
USBキーボードとして認識され、叩くたびに般若心経が入力される標準的なモードです。木魚を立ててモード切り替え状態にして再び寝かせると読経位置がリセットされ最初に戻ります。
シリアルデバイスモード(黄)
USBシリアル接続デバイスとして認識され、叩き動作と4方向の傾斜の合計5種類の入力を検知してそれぞれ1バイトのメッセージを送ります。PC側で何かしらのソフトウェアを作り、そちらに各種お経を組み込むことで、汎用的な読経環境を構築することができるかもしれません。現状は開発者向けです。シリアルに送るそれぞれのメッセージは設定変更可能です。
MIDIデバイスモード(赤)
USB MIDIデバイスとして認識され、叩くと固定のノートオン信号を送出します。任意のDAW上でVOCALOID類似のボーカルシンセプラグインなどを鳴らすことで合成音声による読経を行うことができます*3。MIDIチャンネルとノート番号は設定変更可能です。
十字キーパッドモード(白)
USBキーボードとして認識され、叩き動作によるEnter入力と、傾斜動作による4方向の矢印入力ができるモードです。設定変更により4方向入力はWASDキーにすることもできます。
マウスモード(樺)
USBマウスとして認識され、叩き動作による左クリック入力と、360度傾斜で自在にマウスカーソルを動かすことができるモードです。
ゲーミングモード(混)
USBキーボード・マウス両方で認識され、現状では上下傾斜がW
キーとS
キー、左右傾斜がマウスカーソルの左右移動、叩き動作が左クリックとなっています。FPS向けとしては到底足りないので、ひとまずMinecraftで少しだけ使える設定としています。
作り方 & ソースコード & 使い方はここまで!
長ったらしい記事になってしまいました。。。
紹介していただいた媒体一覧
ねとらぼさん
nlab.itmedia.co.jpAbemaTVさん(Abema Newsチャンネル 2021年5月14日 22:00〜 放送回)
ケンコバさん鋭いな、ばーちゃんが先日亡くなってなかったら自分もコレ作ってなかったと思うんだよね #abemaprime #abema pic.twitter.com/96aXIGif2i
— うこ (@ukokq) May 14, 2021
abema.tvKAI-YOUさん
kai-you.netWorkship MAGAZINEさん
goworkship.comマウザーエレクトロニクスさん
ゲーミング木魚⁉
— マウザーエレクトロニクス (@MouserElecJapan) July 21, 2021
「貼付されたシールがUSB標準Aメスに見える木魚」があり、標準Aメスコネクタを用いて元ネタに忠実なデザインを意識したそう🤣
うこ(@ukokq)さん、ありがとうございます!#マウザーDIY
<使用部品>
加速度センサー開発ツール:https://t.co/lKfmqFYMg9pic.twitter.com/18QwGapRcJ
みなさま、くだらないネタなのに盛り上げてくださってありがとうございました!
*1:Zenn記事では「般若心経をSRAMではなくFlash上に配置するために」と書いていますが、結局それでも容量が厳しくてEEPROM配置になっています。
*2:実際に別の経典に書き換える場合、「HeartSutra.h」(SutraWriterリポジトリ側)をデータ列として書き換えつつ、変換後の実際のタイピング候補を格納するための「Chanting.h」(mokugyOSリポジトリ側)も書き換える必要があり少々複雑です。そのうち改善するかもしれません。
*3:PiaproStudioのような実際のボカロ用VST/AUプラグインはMIDIリアルタイム入力に非対応のため不可。ポケミクのようなNSX-1搭載デバイスにMIDI INすることが必要。