ホールセンサーの原理とジョイスティック入力
ラジコンカーのコントローラ(ミニ②)では、従来の可変抵抗式ではなく ホール効果センサー を使ったジョイスティックを読み取ります。 磁石と半導体の組み合わせで、つまみの角度を電圧として取り出す仕組みです。
ホール効果とは
半導体に電流を流しながら磁石を近づけると、電流に直交する方向に電圧が生じます。 これを ホール効果 といい、ジョイスティック内の小型センサー 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 33 — INPUT_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 で同様に読める | 同左 |
この技術が使われているプロジェクト
ホール効果ジョイスティックは、ラジコンカー製作記のコントローラ側で使う予定の核心部です。