workshop/ArduinoBasis/switch

スイッチの基礎

一般にスイッチにはいくつかの種類がありますが,まずは具体的に見てみます. もっとも安価なものに,タクタイルスイッチという部品があります.これは一般的にモーメンタリスイッチ と呼ばれるもので,押している間だけ内部の回路が通電する,というものです.下の回路図で試してみます. 一般的にタクタイルスイッチには電極が4つあります.内部的には単純に通電するかしないかなので,実際には 2本あれば十分です.これはタクタイルスイッチが様々な電子部品で利用される際,マトリクススキャン等の スイッチセンシングにおいて,電極がそれぞれ2つづつあると基盤的に都合が良いことが多いからです.では 実際にStart Simulationボタンを押し,ブレッドボード上のボタンを押してみてください.

シミュレーションを開始すると,はじめから点灯しているLEDがひとつあります.これは抵抗からスイッチに接続された 電極がLEDの電極につながり,グランドへ流れることで点灯しているわけです.また左半分の2つのLEDはスイッチをおす ことで点灯します.これは右半分の電極が,左半分の電極と通電したことで,電源→抵抗→LED→GNDへと電流が流れた 結果です.ボタンを押すと右下のLEDの光が小さくなりますが,これは抵抗から流れる電流値がそれぞれのLEDに分散するためです.

ArduinoでスイッチのON/OFFを判別

では次にArduinoを利用して,スイッチのON/OFFを判別してみます.先のスイッチの原理を頭に入れたところで, どのようにすればスイッチを利用してHIGH, LOWを作り出せるか考えて見ます.スイッチの片側を5V,もう片方をGNDに つなげておけば,スイッチを押した際にHIGH,LOWの切り替えができる,とかんがえる方がいるかもしれません. これは誤りです.電源(5V)とグランド(GND)を直結させることをショートといい,様々な機器の故障につながります. 電源とグランドを接続する際は必ず抵抗を挟まなければ,抵抗が限りなく小さくなり,大電流が流れてしまいます. そこで,一般的にこのような場合にはスイッチと数KΩの抵抗を利用して,HIGH/LOWを切り替えるようにします. 具体的には下記の回路図で確認してください.スイッチの抵抗には5.1KΩ,LEDの抵抗には390Ωを利用しています.

チャタリング

実際に動作を確認したところで,Arduinoのコードを見て下さい.loop()関数内で,スイッチの状態をdigitalRead()関数を 利用して読み取っているのですが,delay(10)を挟んで二度読み込みをしています.これはなぜでしょうか?

このようなスイッチにはその機構にバネが利用されており,実際にボタンを押した時や離した際に,そのバネが震えて チャタリングと呼ばれるON/OFFを瞬間的に繰り返す減少が起こりえます.これによるご作動を回避するため,このような スイッチの入力処理には少し時間をおいてからもう一度をの状態が間違いないかを確認するいわゆるチャタリング処理を追加 しておくのが定石です.


Copyright (c) 2015 Tetsuaki BABA all rights reserved.