蟲寄市

Drummaniaコントローラ自作(旧記事)

最終更新:

pentagon

- view
メンバー限定 登録/ログイン

ドラムマニア専用コントローラを自作する(旧記事)


注意:これは古い方の記事です。

何かしら参考になるような記載があるかもしれませんが、興味がある方以外は、
こちらドラムマニア専コン自作(完)
を参照してください。

題名の通り、簡易的な電子ドラムの製作記事です。

トレーニングドラム(ゴムパットのサイレントドラム)を簡易的に音が出るように改造します。
予算は1.5~2万内(結果的には無理でした)!ちなみに音量は一定です。
強く叩いても弱く叩いても一定の音しか出ません。

あそうそう。
ちなみにDrummaniaもこれで楽しめます。
こっちがメインの使い方になるのかな。

ドラマニの家庭用専用コントローラ発売されてるけど、コナミさんには申し訳ないんだけどアレはないですね。
小さすぎるし、スティックただのプラッチックだし、フットペダルはただのマットだしさ。。。

とは言ってもあれで1万以下で発売するのはさすがかな。
価格とサイズの制限があって大変だろうし

何しろパットがちいせぇのが致命的。
一枚の板に全部乗ってるしちょいとツライ

『準備物』


  • 根性

  • トレーニングドラムが必要。
気合のある人は自作しろ。
ただし自作するよりヤフオクで買ったほうが安いぞ。
俺のは4500円くらいで中古でゲッツです。
ちなみにこれを買うと後戻りはできねぇって覚悟が決まるぞ。

  • マイスティック。
こいつは最も重要な品です。
何しろやる気のレベルが変わってくるw

  • USB接続のパソコン用ゲームコントローラ


俺はこいつを購入。
なんと490円です。
ボタンは4しかないけど方向キーも入れればこれで十分。

こいつを改造してドラムとPCをつなぐんです。
通信用として利用します。

  • 電子回路を組むのに必要と思われる部品と工具。

さて次はいよいよ回路部を作るぞ!相当苦労したから、真似る人はありがたく読んでくださいね^-^

『製作開始』


先に言っておくけど、真似る人は自己責任でやってください。
真似したらPCブッコわれたって言われても困りますので。

あ、それと俺は電子は専門外なんです。
ホントは機械が専門で。
今回がんばって電子回路を設計したんだけど回りくどい設計になってると思います。
回路設計できる人は自己で改善したほうがいいです。

(回路設計できる方、よろしければアドバイスお願いします。

はい、じゃぁまずは回路図から。


注意:ドラムマニア専コン自作(完)←こちらにある回路図が最新の回路図です。


こんな感じ。
これだとパットは5コつなげられる。
必要なパーツは回路図を見てそろえてください。

注意点は。

  • 電解コンデンサ2個*極性がああります。
気をつけてください。

  • ECM(エレクトリックコンデンサマイク)*極性があります。
気をつけてください。

  • トランジスタPNPとNPN型の2種類が必要です。
脚は三本あってラベルを手前にみて、左からECBです。
回路図上だと矢印がE頭っぽいのがB。
何もないのがCです。

注意:ドラムマニア専コン自作(完)←こちらにある回路では、トランジスタは1種類しか使いません。

大体の回路の働きを説明すると、まずマイクが振動をキャッチすると最初の2SC1815のベース-エミッタ間に電流が流れる。
するとコレクタ-エミッタ間にも電気が流れて、同じく二個目の2sc1815のコレクタがGNDになる。
すると3つめの1015のコレクタから+の信号が出力されPIC16F84に入力される。
んでPIC19F84でAD変換して対応するピンから5Vを出力。
すると2sc1815に電流が流れコレクタがGNDになることによりUSBコントローラのボタンが押されたと判断される。

さらに500kの可変抵抗で感度を調節できる。

なぜPICが必要なのか


PICとは自分でプログラムすることが可能なICチップのことです。

コンデンサマイクから入力された信号は波なわけです。
その波の通り電気を流すと、ボタンを超連射したことになっちゃいます。
具体的に言うと、「ドン!」という音じゃなくて「ドドドドドン」ってなってしまう。
だからここで波をONとOFFだけのデジタル信号にします。
そうすると一発「ドン!」っていう風に音が出るようになります。


これはまぁ実体配線図。
回路組んだことのない人は参考になるはず。

  • 緑はパーツ
  • 赤は配線
  • 青はジャンパー線

ちなみにこの配線図は開発途中の回路図です。

『余談』


関係ないけど俺が色々試行錯誤した様子をコメントつけて写真で載せておきます。


↑暗中模索して回路設計してるとこ。

↑回路設計で試行錯誤している様子。。。
下のはコントローラの中身

↑かなり煮詰まってきた時の様子。
暫定的にそこそこ綺麗に付け直してみた。
ここで初めてPICをつけてる。

↑いらなくなった基板にちょっとした回路を組んでみた。

2SC1815を基板から外して再利用する時に生きているかどうか調べたかった。
試行錯誤している間に焼けてしまったりするかもしれないから。
そんなわけでチェック用の基板です。

↑こんな感じにボタンを押すとLEDが光る。
2SCがブッコ割れてた場合は光らない。

↑チェック用の基板の裏はこんな感じ。
ワニ口クリップで電源取ってる。

↑そろそろ完成間近な感じの基板。
動作チェックも終って80%完成って所かな。
右下のがPIC。

↑裏とチェック時の様子。
マイクを叩いてみてコントローラが反応しているか見る。

↓ちなみにコントローラと基板を連結する方法は

こんな感じでコントローラ基板のパターンをヤスリとかで削る。
んでそこにハンダを盛ってくっつける。
ピッチが狭いから気をつけて。

↑これがコンデンサマイク

『コントローラ基板』


コントローラの基板がデカイのでいらないところはザクッと切りましょう。

↑こんな基板です

↑これがピンアサイン。
YRWBrouwnはUSBケーブルの色。
DLRiUPは+字キー。
これはGNDとショートすると反応する。

1234は押しボタン。
こいつはtoCとショートすると反応する。


↑さて、こんなん工具で基板を切りますよ~

↑結果こうなりました。
これだけあれば十分。

↑実際に実装+配線するとこんな感じ。
切ったおかげで基板の空きスペースにすっぽり入った。

↑実際に試し打ちです。
今回は2コパットをつないでやってみる。
ナイス。

↑パソコン上でこんなんして遊べます。

『PICのプログラム』


段々面倒になってきたので解説が雑になってきました(笑。
暫定版としてアセンブリ言語で載せておくので参考程度に。

↓PIC16F84用のアセンブリコード。

注意:PIC16F84よりもPIC12F509をオススメします。
12F509用のコードは、ドラムマニア専コン自作(完)にあります。

;ra0 = NC
;ra1 = OUT5
;ra2 = IN5
;ra3 = NC
;ra4 = NC
;rb0 = IN4
;rb1 = IN3
;rb2 = IN2
;rb3 = IN1
;rb4 = OUT1
;rb5 = OUT2
;rb6 = OUT3
;rb7 = OUT4


	include 16f84.h
	
	.osc	hs
	.wdt	off


inp_1	=	rb.3
inp_2	=	rb.2
inp_3	=	rb.1
inp_4	=	rb.0
inp_5	=	ra.2


	org	0ch
	
tim0	ds	1
tim1	ds	1
tim2	ds	1
count1	ds	1
count2	ds	1
count3	ds	1


	org	0
	goto	start
	
start
	mov	!ra,#00100b
	mov	!rb,#00001111b
	clr	ra
	clr	rb
	clr	count1
	clr	count2
	clr	count3


roop
	snb	inp_1		
	call	work1
	snb	inp_2		
	call	work2
	snb	inp_3		
	call	work3
	snb	inp_4
	call	work4
	snb	inp_5
	call	work5
	jmp	roop

work1
	mov	rb,#00010000b
	call	wait_1
	mov	rb,#00000000b
	jmp	roop

work1_2
	mov	rb,#00110000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work1_3
	mov	rb,#01010000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work1_4
	mov	rb,#10010000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work1_5
	mov	rb,#00010000b
	mov	ra,#00010b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop


work2
	mov	rb,#00100000b
	call	wait_2
	mov	rb,#00000000b
	jmp	roop

work2_1
	mov	rb,#00110000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work2_3
	mov	rb,#01100000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work2_4
	mov	rb,#10100000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work2_5
	mov	rb,#00100000b
	mov	ra,#00010b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop


work3
	mov	rb,#01000000b
	call	wait_3
	mov	rb,#00000000b
	jmp	roop

work3_1
	mov	rb,#01010000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work3_2
	mov	rb,#01100000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work3_4
	mov	rb,#11000000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work3_5
	mov	rb,#01000000b
	mov	ra,#00010b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop


work4
	mov	rb,#10000000b
	call	wait_4
	mov	rb,#00000000b
	jmp	roop

work4_1
	mov	rb,#10010000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work4_2
	mov	rb,#10100000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work4_3
	mov	rb,#11000000b
	call	wait_n
	mov	rb,#00000000b
	jmp	roop

work4_5
	mov	rb,#10000000b
	mov	ra,#00010b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop

work5
	mov	ra,#00010b
	call	wait_5
	mov	ra,#00000b
	jmp	roop

work5_1
	mov	ra,#00010b
	mov	rb,#00010000b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop

work5_2
	mov	ra,#00010b
	mov	rb,#00100000b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop

work5_3
	mov	ra,#00010b
	mov	rb,#01000000b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop

work5_4
	mov	ra,#00010b
	mov	rb,#10000000b
	call	wait_n
	mov	rb,#00000000b
	mov	ra,#00000b
	jmp	roop
;**************************************************************************
;			↓タイマー 
;**************************************************************************

;************************* 汎用 nopタイマー *******************************

wait_n
	mov	tim0,#32
wan_0	mov	tim1,#32
wan_1	mov	tim2,#32	
wan_2	nop
	djnz	tim2,wan_2
	djnz	tim1,wan_1
	djnz	tim0,wan_0
	ret
	

wait_1
	mov	tim0,#8
wa1_0	mov	tim1,#32
wa1_1	mov	tim2,#34	
wa1_2	snb	inp_2		
	call	work1_2
	snb	inp_3		
	call	work1_3
	snb	inp_4
	call	work1_4
	snb	inp_5
	call	work1_5
	djnz	tim2,wa1_2
	djnz	tim1,wa1_1
	djnz	tim0,wa1_0
	ret

wait_2
	mov	tim0,#8
wa2_0	mov	tim1,#32
wa2_1	mov	tim2,#34
wa2_2	snb	inp_1		
	call	work2_1
	snb	inp_3		
	call	work2_3
	snb	inp_4
	call	work2_4
	snb	inp_5
	call	work2_5
	djnz	tim2,wa2_2
	djnz	tim1,wa2_1
	djnz	tim0,wa2_0
	ret

wait_3
	mov	tim0,#8
wa3_0	mov	tim1,#32
wa3_1	mov	tim2,#34
wa3_2	snb	inp_1		
	call	work3_1
	snb	inp_2		
	call	work3_2
	snb	inp_4
	call	work3_4
	snb	inp_5
	call	work3_5
	djnz	tim2,wa3_2
	djnz	tim1,wa3_1
	djnz	tim0,wa3_0
	ret

wait_4
	mov	tim0,#8
wa4_0	mov	tim1,#32
wa4_1	mov	tim2,#34
wa4_2	snb	inp_1		
	call	work4_1
	snb	inp_2		
	call	work4_2
	snb	inp_3
	call	work4_3
	snb	inp_5
	call	work4_5
	djnz	tim2,wa4_2
	djnz	tim1,wa4_1
	djnz	tim0,wa4_0
	ret

wait_5
	mov	tim0,#8
wa5_0	mov	tim1,#32
wa5_1	mov	tim2,#34
wa5_2	snb	inp_1		
	call	work5_1
	snb	inp_2		
	call	work5_2
	snb	inp_3
	call	work5_3
	snb	inp_4
	call	work5_4
	djnz	tim2,wa5_2
	djnz	tim1,wa5_1
	djnz	tim0,wa5_0
	ret

↓こっちはHEXです。

:100000000128043065000F306600850186018F01EC 
:10001000900191018619152006193720861859205C 
:1000200006187B2005199D200A2810308600D9204B 
:10003000003086000A2830308600CB200030860051 
:100040000A2850308600CB20003086000A289030E5 
:100050008600CB20003086000A281030860002304F 
:100060008500CB2000308600003085000A28203033 
:100070008600EE20003086000A2830308600CB2033 
:10008000003086000A2860308600CB2000308600D1 
:100090000A28A0308600CB20003086000A282030B5 
:1000A000860002308500CB200030860000308500BD 
:1000B0000A28403086000321003086000A2850308C 
:1000C0008600CB20003086000A2860308600CB20D6 
:1000D000003086000A28C0308600CB200030860021 
:1000E0000A284030860002308500CB200030860090 
:1000F000003085000A2880308600182100308600F4 
:100100000A2890308600CB20003086000A28A030D4 
:100110008600CB20003086000A28C0308600CB2025 
:10012000003086000A288030860002308500CB200F 
:1001300000308600003085000A28023085002D211D 
:10014000003085000A280230850010308600CB2060 
:1001500000308600003085000A28023085002030FB 
:100160008600CB2000308600003085000A2802304F 
:10017000850040308600CB200030860000308500AE 
:100180000A280230850080308600CB2000308600AF 
:10019000003085000A2820308C0020308D0020306F 
:1001A0008E0000008E0BD1288D0BCF288C0BCD2814 
:1001B000080008308C0020308D0022308E00061997 
:1001C0001B20861821200618272005192D208E0BAC 
:1001D000DF288D0BDD288C0BDB28080008308C0015 
:1001E00020308D0022308E0086193D208618432055 
:1001F0000618492005194F208E0BF4288D0BF22884 
:100200008C0BF028080008308C0020308D00223044 
:100210008E0086195F200619652006186B200519C7 
:1002200071208E0B09298D0B07298C0B05290800DD 
:1002300008308C0020308D0022308E0086198120FD 
:100240000619872086188D20051993208E0B1E29EC 
:100250008D0B1C298C0B1A29080008308C002030CB 
:100260008D0022308E008619A3200619AD20861835 
:10027000B7200618C1208E0B33298D0B31298C0B2A 
:040280002F2908001A 
:108000000000000000000000000000000000000070 
:108010000000000000000000000000000000000060 
:108020000000000000000000000000000000000050 
:108030000000000000000000000000000000000040 
:108040000000000000000000000000000000000030 
:108050000000000000000000000000000000000020 
:108060000000000000000000000000000000000010 
:108070000000000000000000000000000000000000 
:10FF00000331366638340000000200011100FFFFA3 
:00000001FF 

今は振動が隣のパットに伝わらないように筐体のほうで試行錯誤してます。
んで今のところ下みたいにクッション材を挟んでますが、なかなかうまくいきません。


この記事は以上です。

関連記事として以下のものも参考にしてください。


。。。
記事メニュー
目安箱バナー