蟲寄市

ドラムマニア専コン自作(完)

最終更新:

pentagon

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

ドラムマニア専コン自作(完)


この記事は、ラムマニア専コン自作Drummaniaコントローラ自作に関するまとめページみたいなものです。
興味があれば以下の記事も参考にしてください。


わざわざ自作せずとも、YAMAHAのDTXやrolandのV-Drumとかを買えばいいのですが、1度着手してしまった手前後にひけなくなりました(笑)
と言うわけで、音を検出して反応するドラムマニアの専用自作コントローラーがついに完成しました。

まずは前作の反省点から。

↓これが前作の音検出回路です。PIC16F84Aを1つ使っています。

PIC1つで、5つの音を検出をしています。ここで問題なのが、PICは、基本的には同時に1つの作業しかできない点です。
つまり、2パッドの同時押しができないわけです。一応、微小な時間差で同時押しを再現していますが、音楽ゲームなだけに致命的な問題です。

いろいろ考えた挙句、16F84Aから12F509にマイコンを変えました。12F509(12C509A互換)は100円程度という価格で、何度でも書き換えができるため開発向けです^-^
んで、低価格であることをいいことに、このマイコンを5つ使うことにしました。マルチマイコンなら同時押しも完璧です^-^

あと、前作の自作専用コントローラは、いまいち反応が遅いように感じられました。今回は反応速度も向上させたいところです。

↓今回の全景。

↓今作の全部景2

↓回路を作るのも大変でしたが、実は、振動対策が一番大変でした。
となりのパッドに、振動が伝わってしまうと、隣のパッドまで反応してしまって厄介なのです。
そこで、パッドの下にクッション材を敷きました。

↓さらにコンデンサマイクに遮音シートを巻いて、周囲の雑音を拾わないようにしました。

↓こんな感じ。

↓パッドの上にさらにゴムパッドを敷きました。これで完璧。

↓bassDrum部分です。バスドラは、音を検出するのではなく、まんまペダルを踏むとボタンがポチっとおされる仕掛けにしました。

↓メインの基盤です。可変抵抗を指でつまめるタイプにしました。
また、パッドを叩くと対応したLEDが光るようにしました。これで、いちいちパソコンを使わなくても、感度調節ができます。
こんな感じで感度の調節が楽にできます。

↓裏面です。

↓基盤はこんな感じで取り付けました。

↓前回はUSBから5Vをとりましたが、今回はPICを5コ使っているので念のためACアダプターから別電源を引きました。

↓前回、ちょっと反応が遅かったのでいろいろ調べてみたところ、DDPがレスポンスいいとの情報をゲット。ということで、USB接続ではなく、PSコントローラを改造してDDP接続することにしました。

回路図

一応回路図を載せておきます。失敗しても自己責任でお願いします。

↓1パッドあたりの回路図です。実際にはこの回路が5コ必要になります。
点線枠の抵抗値を自分なりにいろいろ調整してください。反応感度が変わります。

PICが必要な理由

PICを介さないでPCに入力すると、パットを一発叩いただけでも連打扱いになってしまう。
だからPICには、入力の一発目を検出して、0.07秒くらい入力を受け付けないようにプログラムしておく。
PICを使わなくても実現できるんだろうけど、
PICなら入力を受け付けない時間を正確かつ自由に変更できるから便利なのです。

12C509に書きこむプログラムのソースファイルです。

;**********************************************************************
;                                                                     *
;    Filename:Drummania_Controller_ECU.asm                            *
;    Date:2008-11-15                                                  *
;    Device:PIC12F509                                                 *
;                                                                     *
;    Author:penta                                                     *
;    HomePage:http://www33.atwiki.jp/pentagon/                        *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Program_Notes:                                                   *
; - GP3がHighになると、所定時間GP0がLowになる                         *
; - 所定時間中はGP3への入力は受け付けない(チャタリング対策のため)   *
; - おまけで所定時間中はGP1がHighになる(確認用LEDを取り付けるため)  *
;                                                                     *
;**********************************************************************
;                                                                     *
;***** PIC12F509 のピン配置                                           *
;                          _____                                      *
;               +5V--(Vdd)1| U  |8(Vss)--GND                          *
;                    (GP5)2|    |7(GP0)-->PS_Controller               *
;                    (GP4)3|    |6(GP1)--10KΩ--LED--GND              *
;        +5V--SW--+--(GP3)4|____|5(GP2)                               *
;                 |                                                   *
;               10KΩ                                                 *
;                 |                                                   *
;                GND                                                  *
;                                                                     *
;**********************************************************************

	LIST      P=12F509	;プロセッサの機種を指定する
	#INCLUDE  P12F509.INC	;プロセッサの変数定義の指定

	__CONFIG  0x0A		;コンフィグ・ワードの設定
				;コードプロテクトしない。
				;ウォッチドッグタイマを使用しない
				;外部リセットを使用しない
				;内蔵クロックを使用する

;****************************** Note **********************************
;        __CONFIG  _CP_OFF & _WDT_OFF & _MCLRE_OFF & _IntRC_OSC       *
;                                                                     *
;     --    --   --   --   --   --   -- MCLRE  CP  WDTE FOSC1 FOSC0   *
;bit  11    10    9    8    7    6    5    4    3    2    1    0      *
;      0     0    0    0    0    0    0    0    1    0    1    0(0x0A)*
;**********************************************************************

;***** 変数の定義
;	ORG	0x07
TIM1	EQU	0x07		;タイマーカウンタ
TIM2	EQU	0x08		;タイマーカウンタ
TIM3	EQU	0x09		;タイマーカウンタ

;***** 
;	ORG	0x3FF		;リセット・ベクター
;				;12F508 は 0x1FF番地
	ORG	0x000		;プログラム実行開始番地
	MOVWF	OSCCAL		;OSCCAL レジスタファイルを更新

;****************************** Note **********************************
; 内蔵クロックを使用する場合は工場出荷時にリセットベクター 0x3FF 番地 *
; にインストラクション 'MOVLW k' であらかじめ書き込まれている補正値を *
; 読込んで 'OSCCAL' レジスタの値(上位7ビット)を更新する必要がある   *
; 内蔵クロックを使用しない場合は、'MOVWF OSCCAL'は不要                *
;**********************************************************************

;***** ポートの初期設定
;
	MOVLW   0x08		;GP3を入力ポートに(001000)
	TRIS    0x06		;(f=6)
	MOVLW   0xDF		;T0CSは'0'、GP2は出力ピン
	OPTION			;OPTIONレジスタに書き込む

;***** START

START:


GP0_OFF	MOVLW	B'000001'	;GP0をHighに。
	MOVWF	GPIO		;この時、PSコントローラは反応しない
SW1	BTFSS	GPIO,3		;GP3がHighになったら次のステップをスキップ
GOTO	GP0_OFF			;GP3がLowならGP0_OFFに戻る

GP0_ON  MOVLW   B'000010'	;GP0をLowに。GP1(確認用LED)をHighに。
        MOVWF   GPIO		;GPIOレジスタファイルに書き込む

        CALL    DELAY		;タイマールーチンのよびだし
	GOTO	GP0_OFF


;***** タイマールーチン

;****************************** Note **********************************
;公式                                                                 *
;T={4(TIM2)((TIM3)+1)+3}*0.4*(10/4)<μS>                              *
;TIM2=10,TIM3=249でT=0.010003s                                        *
;TIM1=100(0x64)で約1秒                                                *
;通常は、TIM1をいじって時間を調節する。                               *
;**********************************************************************

DELAY
		MOVLW	0x07		;TIM1の設定。通常はここをいじる。
		MOVWF	TIM1		;TIM1=7(0x07)。0.07秒
WA1		MOVLW	0x0A		;TIM2の設定。TIM2=10(0x0A)
		MOVWF	TIM2
WA2		MOVLW	0xF9		;TIM3の設定。TIM3=249(0xF9)
		MOVWF	TIM3
WA3		NOP
		DECFSZ	TIM3,F
		GOTO	WA3
		DECFSZ	TIM2,F
		GOTO	WA2
		DECFSZ	TIM1,F
		GOTO	WA1
		RETLW	0		;RETURNの代用

		END

↓hexファイルです。
:020000040000FA
:100000002500080C0600DF0C0200010C2600660724
:10001000050A020C26000D09050A070C27000A0C28
:100020002800F90C29000000E902130AE802110A6D
:06003000E7020F0A0008C0
:021FFE000A00D7
:00000001FF


実際にたたいているとこの動画

ちゃんと反応してますよ-0-
これで家でドラムマニアができます^-^


感想

これでDTXmaniaやPS2用のDrummania、アーケードHDDで起動したアーケード版Drummaniaで思う存分、練習できます。

2年近くかかってしまいましたが、ようやく完成です。もう思い残すことはありません。ゲーセンのパッドの方が叩き心地はよいけど、自作コントローラののほうが反応はいいです。軽いタッチでも反応してくれます。
記事メニュー
目安箱バナー