拙著「上手に稼ぐカラ売りテクニック」が発売されました。
株価が下がる局面で利益を得ることができる「空売り」について、詳しく解説した本です。
自由国民社刊で、定価1,512円(税込)です。
ロータリスイッチの使い方
電子工作をする中で、「いくつかの状態の中から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の状態が読み取られて、シリアルモニタに表示されます。
スイッチを回すと、それに沿ってシリアルモニタの表示も変わります。