ちょっと予算とかで悩んでたんですが、さっさと買ってなんか面白いもの作れと嫁に煽られたのでぽちぽちといじっています。
まぁ、普通にいろいろする分は普通の人に任せるとして、変態的にはどんな使い方ができるかを考えてみています。
ニンテンドーラボではIRカメラやJoyCon,ToyConなど入力に関しては様々なものが扱えますが、
出力に関しては画面と音、振動、IRLEDなどで、外部機器との連携は難しいようです。
IRLEDの点灯もあまり高速には行えないようです。
最高速で点滅させてもこのスピードのようなのでシリパラ変換みたいな出力はできないかなw#Nintendo_Labo pic.twitter.com/HYZNou1Xnx
— ひろみつ (@bakueikozo) 2018年4月22日
そこで、音による出力を検討してみますが、出力した音を分析して連携するには
外付けの機器では少々重たいものが必要になってしまいます。
そこで思いついたのがDTMF音。一昔前のプッシュホンで使われていた
ピポパ音のことです。
DTMFは電話のダイヤルのほかに、無線によるコード通信などにも使われているため
ワンチップでデコードできるICがリリースされています。
今回はみんなの部品箱 秋月電子で入手できる CM8870PIを使うことにします。
DTMFレシーバー CM8870PI: 半導体 秋月電子通商 電子部品 ネット通販
長らく我が家の部品箱に眠っていました。
さて、DTMFを出力するにはどうすればいいか。
ニンテンドーラボでは、簡単に音階の音を出せるモジュールが準備されていますが、
DTMFを出力するには、周波数を設定して音を出さなければなりません。
これをどうすればいいか。
ニンテンドーラボのモジュール間接続に用いられる信号は、デジタル(0・1)もしくはアナログ(0-1)があるようです。
発音モジュールはデジタル入力を受けたときは単純に発音しますが、
アナログ入力を受けた場合、それを音量変化もしくは周波数変化として扱うことができます。
つまり、ラの音(440Hz)のモジュールに 0.5 を入力し、周波数変化として扱った場合、440 x 0.5で220Hzの音を出力することができます。
さて、では0.5を入力するにはどうすればいいか。
ラボには「カウンタ」と呼ばれる、0-100までのカウントアップをするモジュールがあります。
カウンタは0-100までの値に応じて、0.00-1.00までの値を出力するようです。
(初期設定の場合。設定を変更して上記のマッピングを調整することができます)
つまり、カウンタを目的の値で止めてやればいいわけですが、
カウンタの通常動作は、ボタンなどが一回押されると1加えられる「トリガ」と
一回押されると100まで上昇しきってしまう「ホールド」があります。
めんどくさくなってきたので、実際の組み合わせ回路をもとに説明します。
① NOT
入力を反転する機能がありますが、入力を開放したときには常にデジタル1が出力されます。1固定の定数として使っています。
② Bボタン
コントローラのBボタンが押されたときに1を出力します。開発中にカウンタの設定を変更した場合、リセットするために配置してあります。
③ AND
「④のDカウンタで設定する条件が満たされている間⑤のAカウンタを上昇させる」を実現するためのAND条件です
④ A(アナログ出力)カウンタです。
この回路では79になったときに停止されます。
0-100のカウント値が0-1に変換されるように設定されています。
⑤ D(デジタル)カウンタ
このカウンタの設定がミソです。
①の出力を受けて、0-78の間は1を出力しますが、
79をカウントしたときに出力が0になります。
この出力は④のカウンタに接続されていて、カウンタ同士は同期して動作するため、④のカウンタは79で停止することになります。
⑥ AND
このAND回路は、タッチなどのトリガを受けてカウンタの出力を
発音モジュールに接続する役割を持ちます。
ここでちょっと不思議に思ったのが、カウンタからの出力は0.00から1.00のアナログ値。しかし、タッチなどのトリガはデジタル値です。このANDとは一体?
ああそっか。#NintendoLabo のAND回路、アナログだった場合小さい値が出力される、って言う定義だけで、片方にデジタルの0 1突っ込んだだけでデジタルONがきた時にもう片方のアナログ(0-1)値が出せるのか.. pic.twitter.com/Q6uIL5JgHQ
— ひろみつ (@bakueikozo) 2018年4月24日
その答えが↑でした。良く出来てるなこれ。
⑦ 発音モジュール
さて、これらの出力がうまくミックスされると、
880Hz x 0.79 = 695.2 の音が出力されるはずです。
…ちょっとずれてる?まぁSwitchとiPhone、どちらも音響機器では無いですから、
計測にもずれもあるかもしれません。まぁまぁ計算通り出ているようです。
基準となる音階とカウンタの比率を調整することで、より正確な周波数が出せると思いますが、DTMF用としては十分かと思います。
これを縦横マトリクス分生成してやるとこんなかんじ
さて、実際にDTMFを出力し、デコーダICに食わせて出力をArduino+LCDで受け取っている様子がこちらになります。
ニンテンドーラボで
— ひろみつ (@bakueikozo) 2018年4月25日
IR LEDの点滅で信号を外に出すだけでは不満なのでDTMF音を出力して外部機器を制御する検証(音声出力を占有するのであんまり役に立たない)
たぶん20bit/sぐらいは出せるんじゃない?w
そのうちアップデートとかで外部連携モジュールが出たりしないかなぁ..#NintendoLabo pic.twitter.com/3bktNkM2iO
できたできた。