ドラムマニアのコントローラーの自作
注意:この記事は古い記事です。参考程度にはなるかもしれませんが、これからドラムマニアコントローラを自作しようという方は、新しい記事であるドラムマニア専コン自作(完)を参照してください。
KONAMIから専用のコントローラが発売されていますが、あまりにも小さすぎます。あれではゲームセンターのドラムマニアは再現できないため、実寸大のコントローラーを自作することにしました。
と言っても、YAMAHAからDTXという素晴らしい電子ドラムが発売されています。
DTXは、PSのコントローラー端子が備えられているため、パソコンやPSにそのまま接続できます。。
ただし、DTXは7万円もするため、ゲームのために買うのはどうかと思います。
ということで、電子ドラムではなくトレーニングドラムを購入して、トレーニングドラムを専用コントローラーに改造することにしました。
と言っても、YAMAHAからDTXという素晴らしい電子ドラムが発売されています。
DTXは、PSのコントローラー端子が備えられているため、パソコンやPSにそのまま接続できます。。
ただし、DTXは7万円もするため、ゲームのために買うのはどうかと思います。
ということで、電子ドラムではなくトレーニングドラムを購入して、トレーニングドラムを専用コントローラーに改造することにしました。
まずは、音検出装置の製作から。
こちらは、いろいろなホームページを参考にして試行錯誤してできた回路です。
私は、電子回路に関してはプロではないため、かなり適当な部分があります。
「こうした方が良いのでは」、などという意見があったらコメントしてもらえると助かります。
私は、電子回路に関してはプロではないため、かなり適当な部分があります。
「こうした方が良いのでは」、などという意見があったらコメントしてもらえると助かります。
↓ドラムパット一個あたりの回路図。
ドラムパートを5コつけるのであれば、下記の回路が5コ必要になります。
to PICは、12F509の4番ピンへ。
ドラムパートを5コつけるのであれば、下記の回路が5コ必要になります。
to PICは、12F509の4番ピンへ。
※今度全体の回路図を載せます
↓完成した全体像。
↓あまり見せたくないけど裏側
↓パソコンとの接続は、PSのコントローラーを使います。
PSのコントローラを小さくするため、いらない部分は切り落としてしまいます。
PSのコントローラを小さくするため、いらない部分は切り落としてしまいます。
↓反対側も切り落とします
↓コネクタ部を取り外す場合は、配線の色の順番を覚えておいた方が良いです。
↓PSのコントローラーのピンアサイン。pintel君、いつもありがと!
12F509の5番ピンから各ピンに配線します。
12F509の5番ピンから各ピンに配線します。
↓実際に搭載したところ
↓PICのソースコードです。
hexファイルはコチラ
hexファイルはコチラ
;********************************************************************** ; * ; 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 0xC8 ;TIM1の設定。通常はここをいじる。 MOVWF TIM1 ;TIM1=200(0xC8) 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
PICを5個使います。1コのPICで5コのパッドを制御しようと思ってやってみましたが、PICは同時に2つの命令を実行できないので、同時押しで不具合が出ました。
なので、PICは5コ使った方がよいです。
なので、PICは5コ使った方がよいです。
とりあえず今日はココマデ。