create every day - 福野泰介の一日一創

オリジナル電子楽器「バイナリリコーダー」をつくろう! IchigoJam音階周期対応表

2016/08/13 23:55:00
#KidsIT #IchigoJam #sound 

コンピューターサイエンスにおけるリコーダーを目指す「IchigoJam」で電子リコーダーをつくってみました。


こちらがIchigoJamのPLAY文で使っている音階周期表です。IchigoJamでは画面を1ライン出力するタイミングでSOUNDピンの制御を行っている関係で、ちょっと音痴です。

IchigoJam MML 音階周期対応表

BEEP 60,30:WAIT 30:BEEP 54,30:WAIT 30:BEEP 48,30 OK PLAY"CDE" OK

どちらもドレミと鳴りますね!これを使って、音階を決める3つのタクトスイッチと、オクターブを上げるタクトスイッチ1つで演奏できる「バイナリリコーダー」をつくってみましょう。

タクトスイッチとは、IchigoJamにひとつついているボタンのこと。ブレッドボードやユニバーサル基板にもぴったりなサイズで、1つ10円と安い!(タクトスイッチ(黒色): パーツ一般 秋月電子通商 電子部品 ネット通販

まずはハードウェアづくり。

IN1とIN4はIchigoJam側でプルアップ(何もつながない時1になるように電源電圧に高めの抵抗でつながっていること)されているいるので、そのままタクトスイッチを経由してGNDにつないでしまえばOKです。プルアップのないIN2とIN3は、信号線側に10kΩの抵抗を通じてVCCにつないで自分でプルアップしましょう。(後日、IchigoJamプリントのIN編つくります)

つぎにソフトウェア、プログラムはこんな感じです。

10 LET[0],0,60,54,48,45,40,36,32,0,30,27,24,22,20,18,16 20 M=0 30 N=~IN()&#F:WAIT3:L=~IN()&#F:IF N><L N=M 40 IF N><M ?N:BEEP [N],60:M=N 50 GOTO 30

INコマンドで4つの入力をまとめて取得して、押された時に0になるので、~を使って反転。4bit以外は使わないので、2進数で`1111である16進数の#Fでビット積&を使ってそれ以外を0に(マスクする、という)します。また人間にはぴったり同時押しができないので、WAIT3を挟んで2回取得して、同じ値になった時だけ有効としています。

タクトスイッチ3つの状態が1〜7の時にドレミファソラシをBEEPコマンドで鳴らします。BEEPに渡す数値は上記IchigoJam音階表から拾ってきます。オクターブスイッチが押された時が9〜15なので、ひとつ高いド〜シの値を配列にいれておきます。

バイナリリコーダー音階対応表


バイナリリコーダーでドレミファソラシドと演奏している動画 on Vine

半音を使いたい場合は、このように改造してください。平均律にこだわることなく、自分の好きな音律のバイナリリコーダーや、その他楽しい楽器にしてみましょう!音痴が気になる方は、PWMコマンドを使って正確な音律づくりにも挑戦してみましょう!(ヒント、平均律 - Wikipedia

10 LET[0],0,60,57,51,48,45,42,40,38,36,34,32,30,28,27,25

バイナリリコーダー音階対応表(半音対応バージョン)

音を鳴らすタイミングをボタンではなく、息を吹きかけることで音量をコントロールできたら、よりリコーダーっぽくなるかも?

息を吹きかけ、0.137V発電している様子


モーターと羽は壊れたおもちゃのドローンから取り出してみました。壊れたおもちゃは部品取りして再利用!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image