★ 英語学習&ドラムマニアのホームページ ★

★ 英語学習&ドラムマニアのホームページ ★

設計段階


設計



さて、電子ドラムを自作してみようなどと言い出してしまったからには、何となく今後の方針を決めなくてはいけませんね。

作るべきものとして、下のような感じになるでしょうか。

 1.ドラムそのもの
 2.PCとドラムを繋ぐインターフェイス部分
 3.PC上で使うためのドライバ

どれをとっても、結構大変そうだ。。。





ドラムそのものを設計する


さて、ドラムそのものを作るといっても、今回は「電子ドラム」です。
でっかい音を鳴らすような「生ドラム」を作るのとは訳が違います。

ポイントは、「スティックで叩いてもほとんど音が鳴らない、でも叩いたことはPC上で検知される」ということです。


叩いても音が鳴りにくい? でも叩いたことを検知したい?
これを両立させるにはどうしたらよいのでしょうか?

まず、叩いても音がしないものとしては、一般的に楽器屋で売られている「ドラム練習用パッド」を使うのがベストでしょう。

まあ、それ専用に作られているので、叩き心地や静音性は抜群なはずでしょう。

ということで、これは決定。

 「叩くものとしては、ドラム練習用パッドを採用」




叩いたことを検知する


さてさて、ドラム練習用パッドを叩くものに採用したのはいいのですが、どうやって「パッドが叩かれたことを検知」すればよいのでしょう?

最終的にPCに電気信号として入力することになるので、何らかの電気的なセンサーが必要になるのは分かります。

では、どんなセンサーが良いのでしょうか。

正直言って、私もわかりません。

ネットでいろいろ調べましたが

 「振動センサ」

がいいのではないかと思いました。

しかし、調べてみると、振動センサは防犯用としてガラス戸につけたりするようなものばかり。用途が限定されてます。これを無理やりドラムに応用するってのも、なんか無理がありそう。

そこで、ちょっと考えてみました。

その結果、小難しいことは考えず、すなおに「マイク」を使えば良いのでは、との結論に。

相当昔にロボットを工作したことがありますが、たしか触覚部分にマイクがついており、手を叩く、あるいは壁にぶつかったとき、方向を変えて進むというものでした。

そう、

 振動を拾う = 音を拾う

なのです!!

ということで、ドラムのパッドが叩かれたかどうかを検知するセンサーとしては、

 「マイク」

を使うことにしましょう。




パッドにマイクを付ける


さて、パッドが叩かれたことをマイクで検知するというところまで設計できましたが、どこにつけましょう?

パッドを叩いてみると、音は小さいですがかなりの振動があるようです。
特にパッドの裏面に来る振動は大きいようです。
耳をパッドの裏面に当てて、軽く表面を叩くと良く分かります。

この振動をマイクで拾ってあげれば、何とかなりそうな気がしてます。




振動を拾う

私の記憶が確かならば、マイクに音が入ってくると、コイルに微小な電流が発生されるはずです。

これをトランジスタで増幅してあげれば、叩かれたかどうかを電気信号にすることが出来るはず!!

作成した回路はこんな感じでしょうか。

 (回路図は後ほど掲載)

可変抵抗を微妙に調整することで、どの程度の強さで叩けば反応するか、というところを決定できます。

しかしこの「感度」は、PC上で調整できた方が明らかに便利なので、最初に微調整した後はいじらないで済むようにしたいです。

そこで、流れた電流の強さ=叩かれた強さ をデジタル信号に変換する素子があればよいですね。

これを実現する素子は普通に存在します。

ということで、回路図はこんな感じ。

 (回路図は後ほど掲載)

とりあえず、センサ部分はこんな感じでOKでしょう。

このようなパッドを6つほど用意することでドラムのセットが出来上がります。





PCとの通信


さて、パッドを叩いた振動を電気信号に変えることができたので、次はこの信号をPCに送ることを考えましょう。

6つのパッドをひとまとめに束ねて、PCとの信号のやり取りを行いたいと思います。

そこで登場するのが、「PICマイコン」です。

1つのパッドにつき2ビットの情報を使うことにして、6つのパッド分で12本の入力ピンを持つPICマイコンを採用しましょう。

また、PCへの出力は「RSー232C」を想定します。
PICの出力をRS-232C用に変換するチップがありますので、比較的簡単にRSの通信が行えます。


パッドAだけが軽い力で叩かれた場合を考えましょう。

そのときはパッドAの入力として2ビットで

 01

とします。その他は叩かれていないので、

 00

とします。

これを知らせるために、

 010000000000

という12ビットの信号をPCに送ることにしましょう。

これは、

 00000100 00000000

という2バイト(アルファベット2文字分)の情報を送信することに相当します。

PICでは、各パッドからの入力情報を、上のような2バイトの信号に変換して出力するプログラムを焼いておきます。

この程度であれば、それほど大変なプログラムにはならないはずです。

 (ソースコードは後ほど掲載)





ドライバを書いてみよう

さて、PICからRS-232C経由でドラムの叩かれた信号が届きます。
これをPCで受け取るプログラムを書いてみましょう。

RS-232Cのデータを受信するプログラムは、APIが用意されているので比較的簡単に書けます。

 (ソースコードは後ほど掲載)

送られてくる2バイトの情報を受け取ることが出来ました。

これが出来れば、あとはその信号に応じて音を鳴らすだけです。




某ドラマニ風ゲーム:DTXManiaと連携したい


えぇ、、、正直言いまして、これが最終目的なんですが、正直言いまして、どうやれば良いか分かりません。。。

しかし某製品「Soul Drum」でもきちんと動いていたようなので、何らかの方法で(多分ジョイスティックなどのゲームポートに準拠したやり方で)上記の信号を変換してあげればうまく反応してくれるんじゃないかなあ、、、と思っとります。

この辺は調べつつ、報告していきたいと思いますんで、宜しくお願いします。



○PCとの接続方法を検討する(2004.6.30)


前回は「RS-232C」を用いて通信を行えばよい、と書きましたが、
最近のノートPCなどにはシリアルのケーブルが繋がらないものも増えているようで、
別の接続方法を検討したほうが良いかと思いました。

そこで登場するのが、「USB」です。

実はPICで「USB」の通信をするのはそれほど難しくないようです。
私個人的な実績としては、「RS-232C」しか経験がないですが、
ここらでひとつ、「USB」の通信にも挑戦してみようかと。

USB通信には、PICの他にUSB通信用のICが必要です。
これは600円から800円程度の値段で買えるそうです。
PIC本体と同じくらいの値段になりますが、まあそれほど高いわけでもないので良しとしましょう。

USBで通信するには、PIC側の通信プログラムが必要なのはもちろん、
Windows上で動作するドライバを作らなければなりません。

しかし!!

汎用のUSBドライバってものが存在します。
使い方はとっても簡単(だそうです)!

ただし、実際に通信してみないと、「遅延」がどの程度生じるのかが分かりません。
USBの装置は、得てして「遅延」が発生するので。。。

ドラムとしてはこの遅延は許されざる現象なので、実験してやってみようかと思ってます。

今日はこの辺で。




★ドライバからDTXManiaへキー入力を行う(2004.7.3)

 以前の設計段階では、ドラムが叩かれた信号とDTXManiaとの連携は分からない、と書きましたが、ひとつアイデアが浮かんだため、実験してみました。

 当初は「ゲームポート」を介してドラム信号を渡せばよいのでは、、と書きましたが、DTXManiaはキーボード入力でドラムを叩けるため、ドライバ上でキー入力を制御してあげればよいことを思いつきました。

 それでは早速、、、と思いきや、プログラミングの環境が無かったので、急遽VC++ Ver.6.0 をインストール。 ドキュメントのMSDNライブラリが無かったため、ネット上で調べることに。

・キーボードを制御する

 ネットでいろいろ調べた結果、「キーボードから入力があったとき、どのキーが押されたかを調べる」というものは、頻繁に出てきます。しかし、今回やりたいことは、
 「プログラム上で、任意のキーを入力したい」
ので、全く逆です。

 まずは、「どのキーが押されたか」を調べるWindowsAPIを調べました。それをもとに、MSDNライブラリで調べ、関連するAPIを調べることに。

 すると、、、あるでないかい! 仮にキー入力を発生させるAPI。サンプルとしては、「NUMLOCK」を自動的にON/OFFさせるソースが。実際にやってみると、キーボード上のLEDが点滅するじゃあありませんか。

 次は当然、「DTXMania」を起動させて実験したくなりますね。このソフトでは、「z」のキーが押されると、ハイハットが鳴ります。なので、サンプルプログラムを改造して、「z」が押されたことにしてみる。

 しかし、、、「DTX」は全く無反応。

 でも、VC++のエディタ上で試すと、「z」が入力されたことになって、zの文字が、ダダダ、、、、と出てきます。ゴールは近し。

 「DTX」は比較的重たいアプリなので、zの入力に気づいていないのかも。。。そう思ってちょっと改造。

 仮想的にキー入力するAPIには、「ON」と「OFF」の2つがあり、それを連続に呼んでいるのがまずいのでは、、、と思い、2つのAPIの間にスリープを入れてみる。

 すると、、、「DTX」を起動した後、上記のサンプルを起動。すると、ハイハット鳴りまくりです!!!

 おっしゃあ!!! これで、一番の懸念事情が解決された!!
 あとは、USBのドライバを作るのと、ドラム本体を作るのと、PIC回路を作るのと、、、、 やること多すぎ、、、。

 当初はセンサ回りから作ろうと思ってましたが、パーツを買いに行く時間も無く、電子工作キットも全く無いので、まずはPC回りから攻めようか、、、と思い、「DTX」のキー入力を試しました。

 進捗:10%程度か。



© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: