2017-11-02

彩虹控2改造-IIDX類比轉盤篇


IIDX彩虹控2的轉盤訊號在PC看是把類比一次推到底
這在HDD下選歌時會很難微調,但有個簡單的改造法

網路上有很多人在分享自製遊戲控制器心得,其中Arduino開發板是很熱門的選項
透過燒錄程式與極簡單的外部電路就能做成遊戲控制器
這邊為求改裝方便,只需要把轉盤部分的電路並聯到新控制板,然後燒程式
再多接一條USB線出來插電腦就好了,反正Config沒有限定只能用一個裝置
其他按鍵的功能就繼續用控制器原本的功能

需要材料:
Arduino Leonardo或Pro Micro 開發板一個 (其他型號不適用此作法)
細電線兩條 (30cm左右)
MicroUSB線一條 (從開發板接到電腦用)
焊接工具跟螺絲起子

Arduino開發板建議選用便宜方便的Leonardo或SparkFun Pro Micro(小尺寸)
兩種原則上是一樣的東西,重點是支援USB裝置模擬比較方便,這邊用Pro Micro示範

(不一定要跟這家買,我看他運費便宜所以就了兩片來玩)

程式部分可以用其他玩家開發的現成資源
例如LEONARDOjoy (作者: INSERTNAME HERE from /PSUN/)
原本的設計是SDVX控制器,這邊我只取編碼器的程式出來,改編成遊戲手把的類比訊號
精簡程式還能增加輪詢(Polling)速度,底下程式的掃描頻率平均約1ms
同時使用外部中斷(Interrupt)方式讀取轉盤位置,盡量提高反應速度
#include <Joystick.h> //模擬遊戲手把,1個類比軸
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,0,0,
true,false,false,false,false,false,false,false,false,false,false);

//裝置設定
float IIDX_GEAR = 60; //轉盤齒數 (建議輸入實際規格)
float IIDX_TT = 0;

boolean A_set = false;
boolean B_set = false;
enum PinAssignments
{encoderPinA = 0,
encoderPinB = 1};

void setup(){
Joystick.begin(); //左類比X範圍
Joystick.setXAxisRange(-IIDX_GEAR/2,IIDX_GEAR/2);

//編碼器中斷
attachInterrupt(2, doEncoderA, CHANGE);
attachInterrupt(3, doEncoderB, CHANGE);
pinMode(encoderPinA, INPUT_PULLUP);
pinMode(encoderPinB, INPUT_PULLUP);
}

void loop()
{
if(IIDX_TT<-IIDX_GEAR/2||IIDX_TT>IIDX_GEAR/2) //若數值超過上下限範圍
IIDX_TT=constrain(IIDX_TT,-IIDX_GEAR/2,IIDX_GEAR/2)*-1; //乘-1(反數)
Joystick.setXAxis(IIDX_TT); //更新轉盤訊號
}

//外部中斷編碼器程式
void doEncoderA()
{
if( digitalRead(encoderPinA) != A_set )
{
A_set = !A_set;
if ( A_set && !B_set )
++IIDX_TT;
}
}

void doEncoderB()
{
if( digitalRead(encoderPinB) != B_set )
{
B_set = !B_set;
if( B_set && !A_set )
--IIDX_TT;
}
}
燒程式碼需要下載Arduino IDE,步驟簡單而且很多教學能參考,這邊不贅述

硬體改造方面
把轉盤的兩個訊號分接拉到Arduino,只有兩條線,與本來的電路並聯就好


如果你的控制器內部看起來跟我的差異很大,一般轉盤需要的也就4條線
兩條訊號,一條供電,一條接地,如果不止四條線或不懂那些是要拉的訊號線
請找專業一點的人來幫忙判斷
當然,接錯的話可能會有零件損壞,改造風險請自行負擔

轉盤背後的判定原理其實跟編碼器旋鈕完全一樣(滾球滑鼠也都一樣)
原本的按鍵繼續由本來的電路板控制,本來的轉盤訊號也能繼續用
使用類比轉盤時多插一條USB線,專門給Arduino做類比轉盤判定

其實正常來說應該要拉電跟接地的線路,但因為兩個電路通常會一起使用
供電就繼續由本來的控制器負責,轉盤訊號也會送去本來的控制器
接地的部分因為兩邊都會插到同一台電腦,剛好透過USB達到共同接地

如果內部直接改成共接地的話,單插本來控制器時
本來控制器的轉盤訊號會失效,所以別誤接多餘的線路
然後把電路板跟電線固定好別被轉盤絞到
照片中接線的位置是轉盤感應器,實際上從感應器到轉盤電路板中間都可以接
我自己是改在轉盤電路板上 (左下角標示K1 K2處鑽洞裝排針)



如果一切都成功的話,兩條USB線(遊戲控制器跟Arduino各一條)插到同一台電腦
本來彩虹控轉盤轉按鈕的訊號應該還能用,Arduino也會抓到轉盤的訊號
然後在HDD Config介面,選Analog頁面進行設定,靈敏度則以程式碼內轉盤齒數為準
如果轉動方向跟程式不同的話,把兩條電線順序對調即可 (變成K1到RX0,K2到TX1)
不方便再動線路的話請從程式碼內做修改 (++IIDX_TT 跟 --IIDX_TT 兩邊對調)

附帶一提,彩虹控2的電路板長這樣,他們是拆現成的PS相容手把來跳線


接線板上還有預留空位,順便把沒用到的L3/R3接過來備用


我本來聽說彩虹控2.5(RBC2+)有新增模擬類比轉盤的功能
但我看VIRGOO JAPAN 公式ストア一直都是缺貨狀態


雖然缺貨,但我知道這品牌是中國來的
寫信詢問日方供貨狀況之外,我也上淘寶找了該品牌官方店的聯絡人
中國方面也沒把產品上架但有供貨,報價500 CNY,也就是台幣兩千三左右
日本代理那邊含國際運送也才賣台幣一千四左右,中國原廠比代理還貴一千
跟中國方面講這狀況想殺價也不理我,最後才決定自己做
改造上如果還有問題,可以留言討論

1 則留言:

那克魯斯 提到...

另外提一下,其實DJ轉盤也可以裝編碼器,電路搭配有現成方案
彩虹控的轉盤軸心25mm有空心軸編碼器能裝(電梯用品)
手感嘛..................有夠靈敏,轉起來滿爽的
但這遠比AC用料還高級,萬一習慣就回不去了 XD

然後虹控2.5升級套件日本說還有一套,要買可以寫信問