Arduinoでリードスイッチを使う

Arduino
Arduino+ドア用リードスイッチ実験

リードスイッチ

概要

リードスイッチという名前を知らない人は少なくないと思うのですが、実は身近によく使われています。

この写真のようなものがドアや窓についているのを見たことはないでしょうか?実はこれがリードスイッチです。

リードスイッチとは、通常時はオフ・磁石を近づけるとオンになるスイッチの一種です。磁石とセットでパッケージになっている製品も多く、上の写真もその一つです。リード線のついている方にリードスイッチ、もう一方には永久磁石が入っています。

磁石側(リード線のついていない方)をクリップに近づけるとこの通り…。

磁石側を窓やドア、リードスイッチ側を窓枠やドア枠に取り付けると、窓やドアが閉じていれば磁石とリードスイッチが向かいあうようになりオン、窓やドアが開いていればオフとなり、開閉状態を電気的に知ることができるのです。

マイクロスイッチなどと異なり非接触で動作します。磁石側とリードスイッチ側のあいだに数mm~ものによっては数cm程度の隙間が空いていても問題ないため、取り付け位置や取り付け対象の動作範囲にそれほど精密さが要求されません。構造も簡単で安価なため、昔からよく使われています。

ちなみに、『リードスイッチ』の『リード』は reed =『蘆』のことです。クラリネットやオーボエなどの『リード楽器』の『リード』と同じ単語です。動く接点部分のイメージでしょうか。
『リード線』の『リード』は 『流す』『導く』などの意味の単語 lead です。英語ヒアリングで日本人が苦手な(苦笑)LとRの違いです。

構造と動作原理

リードスイッチの構造は簡単です。

密閉されたガラス容器の中に、強磁性体(磁石によくくっつく金属)の接点が2つ封入されています。接点は通常の状態では接触せず、わずかな隙間が空くように配置されています。

磁石がリードスイッチに近づくと、強磁性体の接点は磁化され、その磁力によってお互いに引き合います。これによって接点同士が接触し、電流が流れるようになります。

磁石がリードスイッチから遠ざかると、接点は磁性を失います。すると自らの弾力によって元の形にもどり、接点同士が離れて隙間ができます。これで電流が流れなくなります。

欠点

長く、また広く使われているリードスイッチですが、欠点もいろいろあります。

・まず、機械的なスイッチのため、チャタリングが発生しやすいです。オンになった回数が重要な用途では、電気的またはソフトウェア的な対処が必要です。

・振動に弱いです。磁化された接点が引き合う力はそれほど強くなく、軽く触れている程度だと思って下さい。

・弾性変形を繰り返す構造のため、寿命が短いです。

・多くの場合、磁性体は高温になると磁化されにくくなります。そのためリードスイッチも高温の環境では動作が鈍くなります。

・薄いガラスの容器のため、外力が加わると破損してしまいます。小型の製品では、端子を曲げようとするだけでガラスケースが割れてしまうことがあります。

いろいろ挙げましたが、この後の実験のようにプラスチック等のパッケージに内蔵されリード線も取り付けられた製品を使い、マイコンからドアや窓の開閉状態を調べる、というような用途ならば、強度やチャタリング、振動の問題はあまり気にしなくても良いでしょう。

製作と実験

使用部品

名称・型番数量備考
ドアセンサースイッチSPS-3201磁石とリードスイッチのセット、ドア取付ネジつき

ドアセンサースイッチ SPS-320

この記事冒頭の写真のコレです。2つの部分に分かれていて、リード線がついている方の中身はリードスイッチ、線がついていない方の中身は永久磁石です。

強度に不安のあるガラス管リードスイッチをABS樹脂のケースに納めているため、機械的強度という点では非常に扱いやすくなっています。ケースにはドア/ドア枠に取り付けやすいようにネジ穴もついています。長さ10mmの木ネジもセットです。

なお、リードスイッチにも定格電圧・定格電流・定格電力があります。接点が非常に小さいからか、小型タクトスイッチやマイクロスイッチよりさらに定格が厳しいこともあるので、設計の際には気をつけて下さい。今回の実験のように5V電源・ほとんど電流の流れないハイインピーダンスの入力端子に使うのなら問題ないですが、直接電力をオン/オフする用途にはまず使えないと思います。

回路

リードスイッチは電気的には普通の接点スイッチと同じため、『デジタル入力』のタクトスイッチのときの回路とほぼ同じです。プルアップにはArduinoの内蔵プルアップ抵抗を用い、今回は電流制限抵抗も省略した最小限の構成にしました。

タクトスイッチの実験と同じく、スイッチがオンのときにD3の入力値が0、オフのときに1になります。

配線

ArduinoのGND端子、D3端子とリードスイッチを直結します。リードスイッチには極性がないので、どちらのリード線をどちらの端子に繋いでも同じです。

プログラム

C++
#define SENSOR_PIN 3

void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN, INPUT_PULLUP);
}

void loop() {
  Serial.println(digitalRead(SENSOR_PIN));
  delay(200);
}

プログラムの解説

定数の設定
C++
#define SENSOR_PIN 3

例によって入力に使う端子番号を定数 SENSOR_PIN に定義しています。

setup()関数
C++
void setup() {
  Serial.begin(9600);
  pinMode(SENSOR_PIN, INPUT_PULLUP);
}

setup()関数では2つのことをやっています。

Serial.begin(9600);はPCとの通信のためにシリアル通信を初期化しています。

pinMode(SENSOR_PIN, INPUT_PULLUP); では、外部にプルアップ抵抗をつけていないので INPUT_PULLUP を指定して内蔵プルアップ抵抗を有効にしています。

loop()関数
C++
void loop() {
  Serial.println(digitalRead(SENSOR_PIN));
  delay(200);
}

digitalRead(SENSOR_PIN) で入力端子の値を読み取り、Serial.println() でその読み取り値をシリアル通信でPCに送信しています。値はArduino IDEのシリアルモニタ等で読み取ることができます。

短時間に何度も読み取ってもしょうが無いので、 delay(200); で1回の読み取り毎に200msのウェイトをとっています。この時間は好みで変えて下さい。

実行

通常は1、磁石を近づけると0です。このリードスイッチでは、2cm程度まで近づいたところで反応するようです。

まとめ

  • リードスイッチは、磁石を近づけることでオンになるスイッチである
  • 回路やソフトウェアは、普通のスイッチと同じように扱える

コメント

タイトルとURLをコピーしました