DEV Community

張旭豐
張旭豐

Posted on

用搖桿做一個「姿勢控制器」——自己定義什麼叫「動一動」

用搖桿做一個「姿勢控制器」——自己定義什麼叫「動一動」


阿哲在那個下午拿著 PS5 搖桿想到的事

那天阿哲在客廳玩《蜘蛛人》。

蕭爾博士在地鐵站裡追著他跑。阿哲把搖桿往上一推——蜘蛛人跳到天花板。往下推——蹲下滑鏟。

他下意識在想的卻是另一件事:

「我如果把這個動作感應,變成家裡的互動裝置,會怎樣?」

比如客廳的燈,可以用一樣的手勢控制。

往上推 = 燈變亮。

往下推 = 燈變暗。

往左往右 = 顏色切換。

不需要應用程式,不需要配對。只要把搖桿插上 Arduino,燈就跟著動。

他把手上的 DualSense 放下,打開露天拍賣。


這個裝置會做什麼

用一個搖桿,同時控制兩件事:LED 亮度 + 顏色。

上下動 = 亮度(暗 ↔ 亮)

左右動 = 顏色(暖黃 ↔ 冷白 ↔ 彩色漸層)

這個裝置的本質是:讓你的手勢變成指令。


所需材料(露天拍賣可買,NT$ 計價)

材料 規格 價格
Arduino Nano 兼容版 NT$130
雙軸搖桿模組 KY-023(X+Y 類比輸出) NT$55
RGB LED 燈條 WS2812B(30顆燈) NT$120
麵包板 + 杜邦線 必要的配角 NT$50
總計 NT$355

露天拍賣一天到貨,今天訂明天組裝。


原理:搖桿怎麼知道你在往哪推

搖桿內部是兩個互相垂直的電位計(可變電阻)。

往上推:Y 軸電位計電阻變小,Arduino 類比值從 512 往 0 變。

往下推:Y 軸電阻變大,Arduino 類比值從 512 往 1023 變。

往左往右:X 軸電位計做出同樣的事。

推搖桿 → 電位計電阻改變 → 類比電壓改變 → Arduino 讀到 0-1023 的數值
Enter fullscreen mode Exit fullscreen mode

接線步驟

KY-023 搖桿模組        Arduino Nano
─────────────────────────────────────
VCC(5V)  →    5V
GND        →    GND
X(VRX)   →    A0
Y(VRY)   →    A1
SW(按鈕) →    D2(可選)

WS2812B LED燈條         Arduino Nano
─────────────────────────────────────
5V(供電)  →    5V(建議外接USB供電)
GND         →    GND
DIN          →    D6
Enter fullscreen mode Exit fullscreen mode

⚠️ 阿哲的叮嚀:搖桿模組的 VCC 接 5V(不是 3.3V),類比讀值才會完整。


Arduino 程式碼

#include <Adafruit_NeoPixel.h>

#define JOYSTICK_X   A0
#define JOYSTICK_Y   A1
#define LED_PIN      6
#define NUM_PIXELS  30

Adafruit_NeoPixel strip(NUM_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(115200);
  strip.begin();
  strip.show();
}

void loop() {
  int xRaw = analogRead(JOYSTICK_X);
  int yRaw = analogRead(JOYSTICK_Y);

  // X軸控制色相(0-65535)
  uint16_t hue = map(xRaw, 0, 1023, 0, 65535);

  // Y軸控制亮度:往上推=亮,往下推=暗
  uint8_t brightness = map(yRaw, 0, 1023, 255, 0);

  uint32_t color = strip.ColorHSV(hue, 255, brightness);
  for (int i = 0; i < NUM_PIXELS; i++) {
    strip.setPixelColor(i, color);
  }
  strip.show();

  delay(50);
}
Enter fullscreen mode Exit fullscreen mode

需要 Adafruit NeoPixel 函式庫:Arduino IDE → 草擬碼 → 匯入程式庫 → 管理程式庫 → 搜尋「Adafruit NeoPixel」→ 安裝。


為什麼手勢比按鈕更直覺

按鈕是二元選擇:開或關。

搖桿是連續空間:你可以停在中間任何一個位置,輸出一個「中間值」。

當你用搖桿控制亮度,你可以說「我要七成的亮度」。

漸層,是設計感的起點。


阿哲的三個延伸方向

① 變成 MIDI 控制器

把搖桿的 X/Y 值轉換成 MIDI CC 訊號,插上電腦就可以在 GarageBand 或 Ableton 裡控制參數。

② 改成小遊戲控制器

用 Processing 在電腦上畫一個迷宮球遊戲,球滾動的方向和速度由搖桿即時控制。

③ 加上「鎖定」功能

搖桿往下按(SW 腳)可以當確認鍵。往上推開燈 → 按下去「鎖定」——燈就停在那裡不動。


完成之後

把搖桿插上 Arduino。

往上推——燈變亮。往下推——燈變暗。往左往右——彩虹流動。

你可以停在任何一個位置,它就會停在那一格。

現在你不只是「開關燈」,你是「用整個房間表達你的情緒」。

而且從今天起,你的控制介面是你自己做的。


你可以從這裡開始

  1. 露天拍賣搜尋「Arduino 搖桿模組 KY-023」
  2. 露天拍賣搜尋「Arduino Nano WS2812B 套件」
  3. 預估今天或明天到貨
  4. 下載 Arduino IDE(免費,官方網站有中文版)
  5. 把上面的程式碼複製貼上,燒錄進去

做出來的那一刻,你會一直玩,停不下來。

Top comments (0)