---
# System prepended metadata

title: 20220207 伴伴學：Will來分享Wii無線手把之3D飛鼠改造術
tags: [活動共筆]

---

---
tags: 活動共筆
---


# 20220207 伴伴學：Will來分享Wii無線手把之3D飛鼠改造術

## 簡介
改造的 wii 把手是左手把手，名稱是 Nunchuk ，因為是發行超過十年以上的熱門電玩產品，也有很多副廠的產品，目前的二手與副廠價格都很便宜。大約150元就可以買到。
Nunchuk詳細文件可見[wiibrew](http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck)(英文)

用 Nunchuk 來製作 3d 飛鼠的優點：
* 便宜好取得
  身為 2000 年左右的遊戲主機，現在拍賣多的是清倉貨。
  而且不論是原廠、二手、副廠，基本上都可以用
* 電路容易修改
  連接介面可直接用 Arduino 讀取，雖然接頭特殊但是採用標準 I2C
  因此只需要連接 3.3V、GND、SCL、SDA 四支腳即可操作
* 自帶多個開關
  一個(3DOF)三自由度加速度計，一個XY軸類比搖桿以及兩個按鍵
  若後續改造有需要，還可以切電路板當做加速度計與兩個類比+兩個按鈕的功能板


wii nunchuk 函式庫
https://github.com/infusion/Fritzing/tree/master/Nunchuk
注意這個函式庫用A2 A3當做電源，且是調用AVR的語法。
如果用的 MCU 不是Arduino那幾顆，記得把nunchuk_init_power()這個函式去掉。

```Arduino=
// Change TWI speed for nuchuk, which uses Fast-TWI (400kHz)
Wire.setClock(400000);
```
將程式碼中的 400k 改為 200k 才能正常讀取。
    
```Arduino=
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) // Only Arduino UNO
/**
 * Use normal analog ports as power supply, which is useful if you want to have all pins in a row
 * Like for the famous WiiChuck adapter
 * @see https://todbot.com/blog/2008/02/18/wiichuck-wii-nunchuck-adapter-available/
 */
static void nunchuk_init_power() {
    // Add power supply for port C2 (GND) and C3 (PWR)
    PORTC &= ~_BV(PORTC2);
    PORTC |= _BV(PORTC3);
    DDRC |= _BV(PORTC2) | _BV(PORTC3);
    delay(100);
}
#endif
```

20220305 紀錄
使用 arduino leonado 開發板來做，需要注意腳位，之前就遇到這問題，以為跟 arduino uno 的腳位一樣，結果是訊號一直抓不到....



## 成果
學友 oliver 的計劃
https://github.com/Oliver0804/ESP32_SpaceRat

學友 黑貓 的程式
https://github.com/minexo79/Wii-NunChuk-Mouse

## 材料
https://www.facebook.com/photo/?fbid=10158722909716375
https://www.ruten.com.tw/item/show?22110103950655
https://www.ruten.com.tw/item/show?21941230459066

## 參考資料
[HyperController](https://github.com/mnesarco/HyperController)
* 基於 Arduino 的設備，用於 FreeCAD 和其他內部的 3D 空間導航和操作。這被描述為一個周末專案供我自己使用，但結果非常令人滿意，所以我把它作為開放硬體發佈到 FreeCAD 社群分享。