← Hub に戻る Library 基礎知識

ホールセンサーの原理とジョイスティック入力

ラジコンカーのコントローラ(ミニ②)では、従来の可変抵抗式ではなく ホール効果センサー を使ったジョイスティックを読み取ります。 磁石と半導体の組み合わせで、つまみの角度を電圧として取り出す仕組みです。

ホール効果とは

半導体に電流を流しながら磁石を近づけると、電流に直交する方向に電圧が生じます。 これを ホール効果 といい、ジョイスティック内の小型センサー IC がこの性質を利用しています。

スティックを傾けると、内部の磁石がセンサーに対して相対的に動き、 出力電圧が連続的に変化 します。可変抵抗のように接点が擦れないため、 ドリフト(経年劣化)が起きにくいのがメリットです。

ジョイスティックの構造(ミニ②で使った部品)

Switch Pro 交換用のホール効果ジョイスティックを分解すると、ざっくり次の構成になります。

X 軸センサー オレンジ系モジュール — アナログ出力(SIG)を 1 本
Y 軸センサー 黒系モジュール — X とは別の SIG ライン
各センサーのピン VCC / GND / SIG の 3 ピン(メーカーにより並びが異なるのでテスター確認必須)
Push SW クリック用の独立した 2 ピン(デジタル入力)

ESP32 での読み取り方

SIG ピンは アナログ電圧 を出します。ESP32 では analogRead() で おおよそ 0〜4095(12bit)の数値に変換できます。

本プロジェクトではセンサー VCC を 3.3V にそろえているため、 出力もおおむね 0〜3.3V の範囲に収まり、追加の分圧回路は不要 です (実測で中央値とレンジをキャリブレーションするのが確実)。

配線の考え方(v4 確定)

X SIG GPIO 36(ADC)
Y SIG GPIO 32(ADC)
Push GPIO 33INPUT_PULLUP、押下で LOW
VCC 3V3(HAT)
GND 共通 GND
ソフト側のコツ: 起動直後にスティックを中央に置いた状態で数回サンプリングし、 中心値(オフセット) を記録します。読み取り値から中心を引き、 小さな揺れは デッドゾーン で無視すると操作が安定します。

コードのイメージ

static constexpr int PIN_JOY_X = 36;
static constexpr int PIN_JOY_Y = 32;
static constexpr int PIN_JOY_SW = 33;

pinMode(PIN_JOY_SW, INPUT_PULLUP);

int rawX = analogRead(PIN_JOY_X);
int rawY = analogRead(PIN_JOY_Y);
bool pressed = (digitalRead(PIN_JOY_SW) == LOW);

可変抵抗式との違い

可変抵抗(カーボン) ホール効果
摩耗 接点擦れでドリフトしやすい 接触部が少なく長寿命志向
出力 抵抗比で電圧変化 磁界と電流の関係で電圧変化
読み取り どちらも MCU の ADC で同様に読める 同左

この技術が使われているプロジェクト

ホール効果ジョイスティックは、ラジコンカー製作記のコントローラ側で使う予定の核心部です。

実機配線の詳細(非公開メモ)→ docs/hardware/m5-joycon-stick.md