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