拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
ロータリスイッチの使い方
電子工作をする中で、「いくつかの状態の中から1つを選択したい」ということはよくあります。
その際に使うパーツとして、「ロータリスイッチ」(Rotary Switch)というものがあります。
1.ロータリスイッチの概要
ロータリスイッチは回転式のスイッチで、回転軸を少しずつ回すごとに、多数の接点の中のどれか1つだけがオンになるものです。
例えば、接点が3つあるロータリスイッチだと、下図のA/B/CどれかとCommonの間がオンになります。
接点の数が多いものでは、それぞれの接点から線を出すと線の数が多くなるので、そのような形ではなく、オン/オフの組み合わせで、選択された状態を表すようになっていることが多いです。
例えば、8個の状態から選択するロータリスイッチの場合、A~Cの3本のそれぞれピンとCommonのピンの間が以下のように接続されるなどして、組み合わせから状態を判別することができます。
| 選択された状態 | A | B | C |
|---|---|---|---|
| 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の間のオン/オフが以下のように組み合わされ、それらから状態を判別することができます。
| 選択された状態 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|
| 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 Uno | FR01-SC16P-ST |
|---|---|
| 2 | 1 |
| 3 | 2 |
| 4 | 4 |
| 5 | 8 |
| GND | Common |
そして、以下のようなプログラムを書き込みます。
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の状態が読み取られて、シリアルモニタに表示されます。
スイッチを回すと、それに沿ってシリアルモニタの表示も変わります。
