ロータリスイッチの使い方

電子工作をする中で、「いくつかの状態の中から1つを選択したい」ということはよくあります。
その際に使うパーツとして、「ロータリスイッチ」(Rotary Switch)というものがあります。

1.ロータリスイッチの概要

ロータリスイッチは回転式のスイッチで、回転軸を少しずつ回すごとに、多数の接点の中のどれか1つだけがオンになるものです。
例えば、接点が3つあるロータリスイッチだと、下図のA/B/CどれかとCommonの間がオンになります。

rotary_switch.png

接点の数が多いものでは、それぞれの接点から線を出すと線の数が多くなるので、そのような形ではなく、オン/オフの組み合わせで、選択された状態を表すようになっていることが多いです。
例えば、8個の状態から選択するロータリスイッチの場合、A~Cの3本のそれぞれピンとCommonのピンの間が以下のように接続されるなどして、組み合わせから状態を判別することができます。

選択された状態ABC
1オフオフオフ
2オフオフオン
3オフオンオフ
4オフオンオン
5オンオフオフ
6オンオフオン
7オンオンオフ
8オンオンオン

2.ロータリスイッチを使った例

実際にロータリスイッチを使った例を紹介します。

2-1.使用したロータリスイッチ

ロータリスイッチにはいろいろなものがありますが、今回はNKKスイッチズの「FR01-SC16P-ST」という型番のものを使ってみました。
FR01-SC16P-STはRSコンポーネンツで購入しました。
RSコンポーネンツでは、ロータリスイッチをはじめとして、各種電子部品を品揃え豊富に取り扱っています。

FR01-SC16P-STは、0~F(16進数)の16通りの状態から1つを選ぶことができるようになっています。
0~Fのそれぞれに対し、1/2/4/8の4本のピンとCommonの間のオン/オフが以下のように組み合わされ、それらから状態を判別することができます。

選択された状態8421
0オンオンオンオン
1オンオンオンオフ
2オンオンオフオン
3オンオンオフオフ
4オンオフオンオン
5オンオフオンオフ
6オンオフオフオン
7オンオフオフオフ
8オフオンオンオン
9オフオンオンオフ
Aオフオンオフオン
Bオフオンオフオフ
Cオフオフオンオン
Dオフオフオンオフ
Eオフオフオフオン
Fオフオフオフオフ

2-2.Arduunoでスイッチの状態を読み取る

簡単な例として、FR01-SC16P-STをArduino Unoに接続し、状態を読み取るプログラムを作ってみました。
FR01-SC16P-STとArduino Unoのそれぞれのピンを、以下の表のように接続します。

Arduino UnoFR01-SC16P-ST
21
32
44
58
GNDCommon

そして、以下のようなプログラムを書き込みます。
Arduinoの2~5ピンの電圧をdigitalRead関数で読み取り、そこから0~Fのどれが選ばれているかを求めます。

#define S1 2
#define S2 3
#define S4 4
#define S8 5

void setup() {
  Serial.begin(115200);
  pinMode(S1, INPUT_PULLUP);
  pinMode(S2, INPUT_PULLUP);
  pinMode(S4, INPUT_PULLUP);
  pinMode(S8, INPUT_PULLUP);
}

void loop() {
  int s1, s2, s4, s8, state;
  char state_h[3];
  
  s1 = digitalRead(S1);
  s2 = digitalRead(S2);
  s4 = digitalRead(S4);
  s8 = digitalRead(S8);
  state = s8 * 8 + s4 * 4 + s2 * 2 + s1;
  sprintf(state_h, "%x", state);
  Serial.print("s1 = ");
  Serial.print(s1);  
  Serial.print(", s2 = ");
  Serial.print(s2);  
  Serial.print(", s4 = ");
  Serial.print(s4);  
  Serial.print(", s8 = ");
  Serial.print(s8);
  Serial.print(", state = ");
  Serial.print(state_h);
  Serial.print("(");
  Serial.print(state);
  Serial.println(")");
  delay(200);
}

プログラムを書き込んだら、Arduino IDEで「ツール」→「シリアルモニタ」メニューを選んでシリアルモニタを開き、その右下の通信速度の欄で「115200bps」を選びます。
すると、0.2秒おきにFR01-SC16P-STの状態が読み取られて、シリアルモニタに表示されます。
スイッチを回すと、それに沿ってシリアルモニタの表示も変わります。