自己焊 SlimeVR Tracker|KitKat PCB、MPU6500 + QMC5883L 製作紀錄
用 KitKat PCB、ESP8266 D1 Mini、MPU6500 和 QMC5883L 製作 SlimeVR tracker,記錄材料、焊接、韌體、校正,以及一塊主板接副板的過程。
簡介
之前把做 SlimeVR tracker 的過程都記了在 Discord,現在回頭一看,很多地方只有照片和一點點文字說明,會有點可惜。所以這篇就把當時的材料、焊接和設定順著整理一下,也把圖片放在對應的步驟旁邊這樣。
Tracker 做出來就是一小塊板子,主要是用魔鬼氈綁在腰、腿、腳之類的位置,然後再到 Server 裡去設定是要放在哪裡。
這次用的是歐陽大鴿子的 KitKat SlimeVR PCB,PCB 是直接拿他的設計去打樣,不是我自己畫的。焊接也有參考他的影片。我主要記錄的是自己怎麼把它做出來,然後接到 SlimeVR Server、VRChat 這樣。
這組用 ESP8266 D1 Mini、MPU6500 和 QMC5883L。後面還有接副板,所以原筆記寫的「雙 MPU6500」是主板一顆、副板一顆,不是單塊主板上塞兩顆。QMC5883L 的韌體和校正也要另外注意,後面會寫到。
材料
當時大部分零件從淘寶買,電池在台灣買,結果光電池就花了 NT$750。整套我記的是 NT$2,000 以下,一塊主板大概 NT$300,主要就是電池貴。那時候也有看蝦皮的價格,中配大概 NT$2,000–3,000,高配就到 NT$3,000–4,000。這些都是當時估的價格,現在買應該要重新算。
材料是 D1 Mini、MPU6500、QMC5883L(我買的模組上印 HA5883)、TP4056 充電板、3.7V 鋰電池、二極體、180K 電阻和 12D19 開關。後面要做副板的話,還要準備副板的感測器、PH2.0 4P 座和連接線。二極體原本要兩顆 1N5817,不過我手上只有 1N5819,後來就先用了手邊的。
PCB 因為那時候剛好可以免費打十片,我就打了五塊主板、五塊副板。
焊之前先測試
焊之前是先測 TP4056 和 D1 Mini。TP4056 接 USB 看燈號,原筆記寫的是「沒有全亮就能用」;D1 Mini 則先試能不能上傳韌體,能傳再焊。這樣至少不用焊完才發現板子不會動。TP4056 的燈號也只能先看個大概,真正接電池前還是要再檢查接線。
QMC5883L 也可能買到有問題的,原 PCB 作者有提到最好讓它跑幾分鐘,看看轉向會不會延遲或反過來。這個可以等接上 Server 再一起看。
下面就照我當時焊的順序放圖。排針長短有時候看照片還是會搞混,裝上去之前先對一下 PCB 的字和模組腳位。
主板焊接
D1 Mini
D1 Mini 附的排針要先拆成幾段。我那時候記「2、2、1、1」,這樣寫其實也不太清楚,看圖比較快。要用到的腳位是 3V3、A0、5V、GND、D2、D1。排針長的那端朝上,對好位置後先焊住,再把上下兩面焊好。
MPU6500 和 QMC5883L
MPU6500 這邊要六根排針,用的是模組上 VCC 到 ECL 那六個孔。短的那端朝上,先焊模組,再把長的那端插進主板,焊下面。我原筆記在這裡寫了「要很平,不要歪」,因為先焊死了才發現歪掉,真的很難再調。
再來是 QMC5883L,只要四根排針。一樣先看一下 PCB 上的方向,焊上面,再翻過來焊下面。這裡照片比較多,就照順序放,方便對一下模組是怎麼擺的。
電量偵測、開關和充電板
接著焊二極體,這段是給電量偵測用的。原本要 1N5817,但我手上只有 1N5819,就先用它。兩顆要看灰色那圈的方向:以這塊 PCB 來說,上面那顆朝下、下面那顆朝上。原筆記說如果不做電量偵測,可以把對應的孔焊通;不過要這樣做的話,還是先對一下原 PCB 的線路,不要隨便短接。
再焊 180K 電阻和 12D19 開關。開關這裡動作要快一點,不要一直用烙鐵燙著。TP4056 則要六根排針,長的朝上,先焊上面再焊下面。焊好後把底下凸出來、刺刺的那段剪平。
接下來就是電池線。照片裡紅、黑兩條線分開接到板上;這邊先對電池、TP4056 和 PCB 的正負標記,不要光看我照片的線色就接上去。焊完也看一下有沒有露出的線碰在一起,鋰電池這段還是小心一點。
燒錄韌體
主板焊好後,接下來是燒韌體。我當時是先裝了 CH341 USB driver,筆記裡也留了 SlimeVR OpenVR Driver 的連結。Server 裝好後,可以到 SteamVR 裡確認 driver 有沒有啟用。
當時有先記下線上燒錄工具:用 USB 接 D1 Mini,在網站選板子和韌體,填 Wi-Fi 資訊後就可以上傳。不過我這組還有 QMC5883L,所以手動刷的部分是用 VS Code 的 PlatformIO IDE,下載 deiteris 的 qmc-mag-new 分支 來改。線上燒錄如果要用,先看選的韌體有沒有支援自己的感測器。
把 project 匯進 PlatformIO 之後,先在 platformio.ini 填 Wi-Fi,再到 src/defines.h 設 D1 Mini、IMU、方向和電量偵測。每個人買的板子和裝的方向可能不一樣,我當時這塊的截圖是下面這樣:
#define IMU IMU_MPU6500
#define SECOND_IMU IMU
#define BOARD BOARD_WEMOSD1MINI
#define IMU_ROTATION DEG_180
#define SECOND_IMU_ROTATION DEG_270
#define BATTERY_MONITOR BAT_EXTERNAL
#define BATTERY_SHIELD_RESISTANCE 180後來我又在筆記補了一句「如果 6500 不行就寫 9250」。這裡是改韌體的 IMU 設定,硬體還是原本的 MPU6500;SlimeVR 文件也有寫 MPU + QMC5883L 要設成 IMU_MPU9250。所以如果照著做,這段應該以你下載的韌體分支為準,別直接照抄上面那張舊圖。改好之後按 PlatformIO 的 Upload。
Server 和校正
接著下載 SlimeVR Server。第一次打開的時候畫面是空的,要把 tracker 開起來,讓它連到 Wi-Fi,Server 才會看到。那時候我先處理五塊主板,一塊一塊校正,再把它們 assign 到要穿戴的位置。
這邊的「校正」有幾個地方要做。MPU + QMC5883L 第一次用需要做 IMU calibration,開機也先把 tracker 平放一下,不要一開機就拿起來轉。穿上身後,還要設定 tracker 的方向和 Body Proportions。
Body Proportions 我自己覺得很重要。身高、手腳長度每個人都不一樣,這裡隨便填,進 VRChat 的動作就會看起來怪怪的。我當時是選 Automatic proportions,戴好 tracker 和 headset、開著 SteamVR,照畫面做動作讓 Server 估算。沒有 headset 的話,也可以先手動設定。
當時也有錄一段tracker 動起來的影片。Server 裡有看到之後,再確認 SteamVR 的 SlimeVR driver 有啟用、tracker 有出現,最後到 VRChat 裡校正。這篇的 Server 截圖是當時的版本;如果介面長得不一樣,就看一下官方 Quick Setup。
1 拖 2
後來還有做「1 拖 2」:副板上焊第二組感測器,用 PH2.0 4P 的座和線接回主板。這樣一塊 D1 Mini 會帶主板和副板兩個位置。前面打的五塊主板、五塊副板都接起來,就是十個 tracker 的位置,但只有五塊主板要各自連 Wi-Fi。
這段原筆記寫得滿短的:焊好 PH2.0 4P 座、接線,然後主板先放著不要動,轉動副板大概 90 度,看 Server 裡的方向有沒有對。副板的方向還要對到韌體裡的 SECOND_IMU_ROTATION。接線和拔線時先關電;真的要自己做的話,可以把上面的照片和原 PCB 的線路一起對著看看。
總結
做到這裡,硬體、韌體和 Server 算是都接起來了。我自己是覺得這套材料費是有壓下來啦,但是要用得順,前面的準備時間還是滿長的。每顆 tracker 的方向、reset 和身體比例都要慢慢調,身高、手腳長度也沒辦法直接抄別人的數值。
Tracker 用久了會有 drift,需要 reset。我當時記到的重置間隔,短的幾分鐘,長的可以到一兩小時,差很多。QMC5883L 也會受附近金屬和磁力影響。我自己的這組沒有留下完整的長時間測試數字,所以目前就先把它當成製作紀錄,不寫成「可以撐多久」的保證。
最後是五塊主板加五塊副板,當時整套材料記在 NT$2,000 以下。照片和步驟先整理到這裡。之後如果再做一組,應該會先看看 KitKat PCB 原設計、焊接影片和 SlimeVR 文件有沒有更新,再決定用哪些零件這樣。(這篇做的時候好像是在2024,在2026/2027應該會有更多更好,又便宜的選擇。)