步驟1:您將需要:
工具:
烙鐵
焊料
焊料吸盤/編織物
剝線鉗
一把螺絲起子,也許是梅花刀取決于控制器中的螺釘(我的是十字頭)
膠水(最好不是超強膠水,以便以后可以拆開)
材料:
Xbox 360控制器(duh!)
Arduino Pro Mini(或克隆)(最好為3.3V)。如果使用5V版本,則可能需要一個升壓轉換器)
MPU-6050陀螺儀/加速度計
MCP4725 DAC(如果要控制兩個軸,則為兩個) )
一些細導線
一個面包板,因此您可以在焊接前進行所有測試(可選,但建議使用)
第2步:分開控制器
您必須卸下七顆螺釘。其中有六個很明顯,但第七個在標簽后面。我認為刪除它會使您的保修失效,因此,后果自負。許多指南說您需要Torx螺絲刀,但是我的卻是十字頭,因此請檢查您的控制器。
然后,小心地撬開后蓋。如果撬開前面板,則按鈕會溢出,可能會散布到整個房間。從底部將其提起。然后拔下兩個振動電機。 (重量較小的一個應該在左側,重量較大的一個應該在右側)將PCB取出,并取下模擬搖桿上的橡膠蓋。他們只是簡單地拉開了。
下一步是移除左側的模擬搖桿,以免干擾我們的輸入,但是左側的觸發機制妨礙了這種操作。為了將其卸下,您必須從板子的前部拆下電位計的三個引腳,然后從PCB上拆下該機構的蓋。
接下來,請拆下固定左模擬桿的14個引腳。然后拉開搖桿。
步驟3:將組件固定到位
您將請注意,PCB背面和外殼之間有很大的間隙。
我稍后才意識到,但是這是取消在Arduino上重置按鈕的好時機。如果不這樣做,則在重新組裝時如果擰緊其中一個螺釘,它將壓在盒體的背面并使項目停止工作。
我用膠水粘了一塊薄卡粘貼到每個PCB的背面以使其絕緣,然后將其粘貼到控制器的PCB上。我不愿使用膠水,但想不出更好的方法。
圖像中的位置是我能找到的最佳組合。 Arduino位于左側,帶有復位按鈕的邊緣與右側觸發機構的塑料片齊平,另一側位于電線下方,并且拐角盡可能靠近白色連接器。外殼略微隆起,但找不到更好的放置位置。
加速度計在電線的右側。它應該盡可能平坦和筆直,否則您可能需要稍后編寫一些代碼來補償偏移量。請注意,在盒子的背面有一些突出的塑料塊,請務必避免。我發現您可以在突出的塑料片上放一些像口紅這樣的粘性和彩色的東西,然后將后蓋放在上面,看看它留下的痕跡。
DAC進入左下角。如果要控制兩個軸,這里有足夠的空間來堆疊兩個DAC,一個堆疊在另一個之上。您無需將它們粘下來。他們將僅通過焊接連接就可以呆在原處。如果要在它們之間粘貼卡,請確保切開卡,以使SCL,SDA,VCC和GND可以訪問,因為您將從兩側訪問它們。
如果使用兩個DAC,請不要忘記切換地址跳線并禁用其中之一的上拉電阻,如下所述:https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog-converter-hookup-指南
步驟4:焊接導線
現在您已經擁有連接一切。來自所有2/3設備的VCC,GND,SDA和SCL應分別連接到Arduino上的VCC,GND,A4和A5。 DAC是最棘手的部分。如果您有兩個,則必須將它們連接在一起,而在某個地方可以將電源和線路連接到加速度計,同時保持OUT線分開。
DAC的OUT引腳應連接到控制器PCB上的引腳,該引腳曾經是模擬搖桿的中間水平電位器引腳。也就是說,在模擬搖桿所在的位置,頂部有三排針。將其連接到中間一個。如果您有另一個DAC,則以相同的方式將其連接到垂直電位計引腳(左側的行)。更換扳機后,您將無法從背面觸到引腳,因此必須將電線連接至電路板的正面。模擬搖桿區域周圍有一個圓形的塑料“墻”,但是幸運的是其中有一個方便的間隙,您可以將電線穿過。確保電線不會擋住機箱前部的螺絲柱。
我最初的計劃是通過連接到RAW引腳的USB電纜用5V電壓為Arduino供電,但是當我嘗試時,它沒有用。 Arduino沒有運行任何東西,幾秒鐘后Arduino和控制器都關閉了。但是,我發現板子正面靠近黑色外圍設備插座的兩個引腳有一個穩定的3.3V輸出,大概是為外圍設備供電。它適用于VCC和RAW,但我選擇VCC是因為它已經是正確的電壓,并且因為它允許我將其焊接到板底部附近的DAC的VCC線上并節省導線。
請注意,必須從外殼上伸出很多塑料零件,但是如果將電線粘在適當的位置,則只需擔心一次。
所有其中很難用文字來描述,所以我提供了圖片和粗略的圖表。
第5步:對Arduino進行編程
現在您有了對Arduino進行編程。這需要移動控制器上的USB電纜,以便您可以訪問Arduino上的串行引腳。我已經包含了我使用的代碼。它需要Adafruit MCP4725庫,可以在這里找到:https://github.com/adafruit/Adafruit_MCP4725
按原樣,該代碼使您可以遍歷模擬搖桿的整個運動范圍通過將控制器向左90度均勻移動,向右90度均勻移動,并通過將其保持平坦狀態將其保持在中間。
它通過計算X的反切線來獲得控制器的角度軸g力除以Z軸g力。這意味著它可以在控制器垂直,平坦或兩者之間有任何角度時使用。 (更多信息,請訪問:https://www.digikey.com/en/articles/techzone/2011/may/using-an-accelerometer-for-inclination-sensing)
在我的控制器上有效,但是其他控制器可能需要不同的電壓,使其無法對齊。我認為找到電壓范圍的最佳方法是反復試驗。許多游戲都會為您顯示模擬搖桿運動的滑塊,但是我發現確定運動的最準確方法是在Linux上使用jstest。 (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API)它為您提供-32,767到32,767之間的數字,而不是圖形,因此您可以確切地知道操縱桿的位置。將控制器和Arduino USB插入串行適配器,加載jstest并嘗試不同的DAC值,直到達到范圍的頂部和底部,并記下每個范圍。對我來說,它是1,593-382。
第36行是特別令人感興趣的地方:
dacvalue = (controllerangle + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;
目前尚不清楚它的作用。簡單來說,它獲取控制器的角度(以弧度為單位,在?1.57和?-1.57之間測量),并將其轉換為DAC的1593至382之間的值。如果您有不同的DAC范圍,則需要更改該行。
該行可以寫為:
dacvalue = (controllerangle + ) / + 0.5;
使用和是您需要更改的數字。 等于控制器角度(pi)的范圍除以DAC值的總范圍。 (范圍的頂部減去范圍的底部)這可以使您盡可能地改變電壓,盡管結果將超出所需的范圍。這就是為什么您需要的原因。 等于乘以范圍的底部再加上控制器運動范圍的一半。 (pi/2)將運動范圍的一半相加,以確保它不是負數,然后將乘以范圍的底部,以確保其與所需的范圍同步。
轉換時小數點為整數,C ++不舍入。取而代之的是,它會舍去小數,因此9.9變成9。最后加0.5可以確保一半以上的內容都可以到達下一個整數,因此可以四舍五入。
一旦您上傳了程序,make
第6步:重新組裝控制器
將控制器拆回的方式與您拆開控制器的方式相同(減去左側)模擬棒。現在應該可以工作了。我發現沒有明顯的延遲,而且比使用模擬搖桿要好得多。因為它使用加速度計,所以會受到突然運動的影響,但是您必須格外注意它。
步驟7:可能的改進
可以進行一些改進。其中包括:
使用較少的電磁線
將所有內容蝕刻到一個旨在適合控制器外殼的PCB上
重新連接左側的模擬桿并將支腳連接到Arduino上的模擬輸入,以便它們可以用于調整Arduino
獲取無線控制器的后殼并將項目放入電池倉(這需要將電池USB電纜孔)
責任編輯:wv
-
控制器
+關注
關注
112文章
16442瀏覽量
179003 -
陀螺儀
+關注
關注
44文章
791瀏覽量
98875 -
Xbox
+關注
關注
0文章
187瀏覽量
16949
發布評論請先 登錄
相關推薦
評論