第2回 スイッチ
1.やってみよう
(1) 図1に示す実験回路を作りなさい。
図1.実験回路
(2) Arduinoのプログラミング環境に、つぎのプログラムを入力しなさい。
int x; void setup() { pinMode(13, OUTPUT); pinMode(2, INPUT_PULLUP); } void loop() { x = digitalRead(2); if (x == 0) { digitalWrite(13, 1); } else { digitalWrite(13, 0); } }
(3) 書き込みボタンを押してプログラムを実行し、スイッチを押すとLEDが発光することを確認しなさい。
2.解説
マイコンボードにスイッチを接続するには、ディジタル端子を5Vに接続し、スイッチを0Vに接続するのが基本になる。
図2(a)に示すように、スイッチをオフにすると端子が5Vになるため、マイコンには1が入力されることになる。一方、図2(b)に示すように、スイッチをオンにすると端子が0Vになるため、マイコンには0が入力されることになる。
図2.スイッチによるディジタル入力の確認:(a) 1が入力される場合, (b) 0が入力される場合
このように、あらかじめディジタル端子を5Vに接続しておくことで、スイッチをオフにするとディジタル端子の電位を5Vに引き上げるしくみをプルアップと呼ぶ。
もっとも、ディジタル端子をそのまま5Vに接続してしまうと、スイッチをオンにしたとき、5Vと0Vがショートしてしまい、過大電流によって回路を破壊してしまうおそれがある。そのため、こうした回路では、抵抗をはさんでディジタル端子を5Vに接続することが定石になっている。これをプルアップ抵抗と呼ぶ。
マイコンボードにスイッチを接続するには、本来、こうしたプルアップ抵抗を接続する必要がある。しかし,Arduinoのディジタル端子にはあらかじめプルアップ機能が内蔵されており、端子のモードをINPUT_PULLUPに設定するだけで,プルアップ機能を有効にすることができる.
3.課題
(1) スイッチを押すたびにLEDの消灯と点灯が切り替わるプログラムを作りなさい。
(2) タクトスイッチのかわりに、傾斜スイッチ、リードスイッチ、ディップスイッチなどを使って回路を作り、それぞれのスイッチの動作を確認しなさい。
4.ヒント
スイッチを押すたびに動作が切り替わるプログラムを作るには、スイッチを押した瞬間を検出するしくみについて考える必要がある。こうしたしくみをエッジ検出と呼ぶ。
図3に示すように、現在のスイッチの状態と、直前のスイッチの状態を比較し、スイッチの状態が変化した瞬間を判定するのがエッジ検出のポイントになる。なお、チャタリングの問題を避けるには、20ms程度の時間間隔でスイッチを検出することがひとつの解決策になる。
図3.エッジ検出
Last Modified: May 17 12:00 JST 2016 by Naofumi Aoki
E-mail: aoki@ime.ist.hokudai.ac.jp