PS3のハードウェアハックを考えるに、何もxfpsを経由しなくても直接DualShock3のボタンのオンオフを電気的にコントロールしてしまえばいいんじゃないのってのはすぐに(というか真っ先に)思いつくわけで。
でも、コントローラを改造するのは躊躇するため、手を出せずにいました。が、思い切ってやってしまいました。
L1, R1のタクトスイッチから配線を引っ張り出しました(´ε` )
こいつらの導通/非導通を制御出来ればいいんですよね。
では、どうするか。
ちょっと古い教科書的解答ですと、1チップマイコンのDigitalOutをトランジスタ等を介してリレーにつなぎ(1チップマイコンのDigitalOutでは直接リレー駆動できるだけの電流を流せないから)、リレーをオンオフする、なんでしょうけど、今や便利なICがあります。
MAXIMって会社は面白い半導体製品を色々作ってますね。MAX395は、SPI接続で計8個のオンオフスイッチを制御できます(・∀・)
ただし、導通時の抵抗がMAX100Ω(仕様値)、実測で95Ωほどあるのですが、100ΩくらいならDS3側で十分オンオフを判別できました。
本当は、AVスイッチ用のMAX4573が欲しかったのですが(こっちはMAX35Ω)、小売ではDigiKeyでしか見つけられず、高いし送料かさむし、ということで、RSでも売ってたMAX395を入手しました。
このMAX395をArduinoに接続します。
なんとも、単純な配線で済ませることができます(・∀・) 抵抗とかコンデンサとか使わないし~。ただ、MAX395にV+とGNDをつなぎ、SPI用の4本の配線(MOSI, MISO, SCKと、SlaveSelect)をつないで、MAX395の8つ分のスイッチ配線組をピンヘッダーに引き出しただけで完成!
ArduinoはNanoをおごりました。
Arduino側のプログラム(サンプル)はたったこれだけだし。( ´ー`)y-~~
1つのスイッチのオンオフが1ビットに対応していて、8つのスイッチ=8bit=1byteのデータをSPIで送るだけです。
これだけ簡単に複数のスイッチのオンオフ制御ができるとなると、夢広がりんぐですw#includeconst int slaveSelectPin=10;
void setup(){Serial.begin(115200);SPI.begin();}
void loop(){if(Serial.available()>0){int inByte=Serial.read();if(inByte=='0'){int max395_value=0x00;digitalWrite(slaveSelectPin, LOW);SPI.transfer(max395_value);digitalWrite(slaveSelectPin, HIGH);Serial.println("All Off");}if(inByte=='1'){int max395_value=0x01;digitalWrite(slaveSelectPin, LOW);SPI.transfer(max395_value);digitalWrite(slaveSelectPin, HIGH);Serial.println("#0 ON");}}}
0 件のコメント:
コメントを投稿