花點心思改造一下,利用打造一個不錯的遊戲控制器。選擇了自行車,把自行車的後輪架起來,操控起來實在很自然。基本設計如下:
· 自行車車頭 ——> 賽車方向盤
· 自行車腳踏 ——> 賽車油門
· 自行車左剎車 ——> 賽車腳剎
· 自行車右剎車 ——> 賽車手剎或氮氣加速
工具/原料
自行車一臺,自行車騎行臺一隻。
霍爾傳感器模塊,微動開關,LPC2013最小系統模塊,電子羅盤模塊,加速度傳感器模塊
ULINK調試器、電腦一臺,MDK keil4開發環境,萬用表
玩電子的必備工具:電烙鐵,錫線,吸錫器,螺絲筆一套,鑷子,防水膠布,臺鑽,紮帶等等,反正焊接電路板該有的都要有。
設計和製作
設計思路
一般遊戲方向盤都在方向盤和油門剎車上裝有線性電位器,當玩家打方向盤或踩下油門剎車的時候,電位器的阻值改變,然後是通過AD轉換測量加到電阻器的變化電壓,從而得知方向盤或油門剎車的改變量,再通過MCU或usb芯片與電腦通訊。
由於不太懂usb通訊方面的知識,就直接取得方向盤的主電路板來製作。
只要輸入一個相應電阻給方向盤的主電路板,便可以讓它進行工作,發送相應數據給上位機,而我們要做的工作,就是使用一些傳感器,來測量自行車的一些參數(速度,車頭轉向,是否剎車),通過MCU處理後,改變數字電位器,接入到方向盤的主電路板中,便可。以上便是圖紙
工具和材料
上面有說
以下是方向盤拆解
把方向盤拆開,測量一些參數:
方向盤線性電位器的最大阻值,左右方向方向盤均打盡的阻值,方向盤居中的阻值。
未踩下剎車時的阻值,踩盡剎車時的阻值。
未踩下油門時的阻值,踩盡油門時的阻值。
經過測量發現,剎車和油門共用一個線性電位器。而對於方向盤來說,方向盤居中時,其電位器阻值剛好是最大阻值一半,如此一來,就沒有必要過多關注其電阻值了。雖然如此,選用的電位器相差不要超過一個數量級為好。
電路設計與焊接
1. 由於買回來的ARM7 2103模塊已經是最小系統,所有管腳直接引出,因此只需要將其管腳用板略為引伸,接上座子,方便安裝便可。整個MCU模塊所用到的管腳有——SPI0管腳,I2C0管腳,外部中斷2個,一些GPIO口接指示LED、觸動開關(可有可無),UART0管腳(調試輸出數據用,可有可無)等。
2. 把方向盤的主電路板和轉接板取出來,焊到一塊萬用板上,焊上接線座,方便安裝。
3. 為了方便安裝,我另外還給兩個霍爾傳感器和加速度傳感器、電子羅盤加焊了幾塊電路板,加上接線座子。
模塊詳細介紹
1.霍爾傳感器(測量自行車的速度)
霍爾傳感器模塊是這樣工作的,3個管腳,VCC腳,GND腳,DATA腳,缺省狀態DATA腳輸出低電平,若有磁石靠近,產生磁場切割,便會輸出一個高電平,當磁石遠離傳感器,又恢復低電平。
所以在自行車的腳踏邊上貼上一個磁石,把兩個霍爾傳感器模塊裝到腳踏經過的兩邊位置,在踩自行車時,通過計算兩隻霍爾傳感器的時間差,來獲得騎車人踩單車的速度,由此對應賽車油門的深淺。
2.電子羅盤,加速度傳感器模塊(測量自行車的轉角)
我使用的這款電子羅盤的芯片型號為HMC5883L,I2C接口,75HZ的數據讀取頻率,沒太多好說的,上電覆位,通過I2C接口設置好工作參數和工作模式,就可以讀取數據了。數據的模式是地磁在XYZ軸的分量,還搞得不是非常懂。XYZ軸的基準與芯片的位置有關。不過取出數據按照芯片手冊計算,就可以測得與地磁的夾角。
模塊上還有一個ADXL345加速度傳感器,一樣是I2C接口,主要是因為自行車的車頭旋轉平面並不是完全水平的,因為自行車的車頭軸(不知道是不是這樣稱呼)與地平面有一個夾角,所以就導致了——整個模塊無法工作在水平面中,也就是說電子羅盤的XY軸形成的平面,不與水平面平行,Z軸的地磁分量肯定不為0,至少大部分時間不為0。
說了這麼多ADXL345加速度傳感器就是用來測量水平傾角,對電子羅盤的數據進行校正的。
事實上,我另外還買了一個模塊,上面集成了一個加速度傳感器和一個角速度傳感器,本來是怕一個加速度傳感器有誤差,可以進行取平均值來校正,後沒有使用。
美中不足的是,因為使用了電子羅盤,所以每次開始玩的時候,都需要校正,因為自行車的位置不同導致了車頭居中朝向不一致,因此需要初始化。甚至在玩的時候,玩得太嗨,動作太大,導致自行車位移,也要不斷地校正。
最好的方式,還是在車頭上安裝一個轉動電位器來取代電子羅盤,但是考慮到電位器的安裝需要合適的齒輪,安裝起來很麻煩,也沒有模具,所以就罷了。
3.微動開關(剎車,氮氣加速)
在自行車剎車裝上兩個微動開關,開始的方案是壓力傳感器,如此一來,剎車的參數便是模擬量,但安裝的問題太過於麻煩,所以就採取了開關量的方式來進行。
微動開關直接接入了方向盤的電路板中,不通過ARM7 LPC2103電路板。
4.數字電位器MCP42050。
最大量程50K歐姆,SPI通訊接口,2個電位器,精度為50K歐/256,已經是非常夠用。在初始設定中,油門深淺(即車速)分10個等級,方向盤每5度設為一個等級,左右各90度便是32個等級。綽綽有餘。
5.LPC2103模塊。處理數據用。
6 最後編程、調試
1.我使用了小型操作系統Ucos,分成4個任務。
任務1:指示燈亮滅。
任務2:電子羅盤數據讀取,加速度傳感器數據讀取,進行數據處理得到轉角並寫入一全局變量中。
任務3:霍爾傳感器的數據處理,將時間間隔(車速)寫入一全局變量中。
任務4:根據速度和轉向2個全局變量的數據,把對應的電阻值寫入數字電位器中。