Arduino-スイッチの使い方
当記事では、Arduinoでスイッチを使う方法を詳しく解説します。
ArduinoのDigital I/O(デジタル入出力)の関数を使ったプログラムで、スイッチの入力状態を読み取ります。
なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。
スイッチはどんな電子部品?
スイッチは一般家庭でも多く使われており、照明、テレビ、エアコンなどの電化製品で電源の入切、メニューの選択で普段から使っていると思います。
スイッチを電子部品として考えると、以下のように「状態が切り替わるスイッチ」と「状態が戻るスイッチ」に大きくわけられます。
- 状態が切り替わるスイッチ
- トグルスイッチ
- スライドスイッチ
- DIPスイッチ
- ロータリースイッチ
- 状態が戻るスイッチ
- タクトスイッチ
- 押しボタンスイッチ
など
つまり、「状態が切り替わるスイッチ」は一度スイッチをONするとONの状態のまま、OFFにすればOFFの状態のままになります。「状態が戻るスイッチ」は、押している間だけONになり、押すのをやめてしまうとOFFになります。
当記事では、ブレッドボードにそのまま差し込めて使えるので、タクトスイッチを例にしてスイッチで使用するサンプルプログラムを解説していきます。
サンプルプログラム(サンプルスケッチ)
サンプルプログラム(サンプルスケッチ)で、ブレッドボードを使います。ブレッドボードの詳しい使い方は、以下の記事をご覧ください。
スイッチの入力状態を読み取り
- タクトスイッチ
- 抵抗1kΩ
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- PC(プログラム書き込み・シリアルモニタ表示)
void setup() {
pinMode(0, INPUT);//0番ピンを入力に設定
Serial.begin(9600);//シリアル通信を9600bpsで初期化
}
void loop() {
boolean input;
input = digitalRead(0);//0番ピン(スイッチ)の入力状態をinputに代入
Serial.println(input);//「input」を送信、改行
delay(1000);//1000msec待機(1秒待機)
}
1
1
1
0
0
0
1
1
1
1
サンプルプログラムでは、0番ピンに接続されたタクトスイッチの入力状態をシリアルモニタに表示します。
スイッチはプルアップされているので、スイッチがOFFの時は「1」、スイッチがONの時は「0」が表示されます。
スイッチの入力状態を読み取り(プルアップ入力)
- タクトスイッチ
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- PC(プログラム書き込み・シリアルモニタ表示)
void setup() {
pinMode(0, INPUT_PULLUP);//0番ピンをプルアップ入力に設定
Serial.begin(9600);//シリアル通信を9600bpsで初期化
}
void loop() {
boolean input;
input = digitalRead(0);//0番ピン(スイッチ)の入力状態をinputに代入
Serial.println(input);//「input」を送信、改行
delay(1000);//1000msec待機(1秒待機)
}
1
1
1
0
0
0
1
1
1
1
サンプルプログラムでは、0番ピンに接続されたタクトスイッチの入力状態をシリアルモニタに表示します。
デジタル入出力ピンの設定を「pinMode(0, INPUT_PULLUP)」とすることで、マイコン内部のプルアップ抵抗を使用することができるので、別途プルアップ抵抗を接続する必要がありません。
「スイッチの入力状態を読み取り」のサンプルプログラムと同様、スイッチはプルアップされているので、スイッチがOFFの時は「1」、スイッチがONの時は「0」が表示されます。
スイッチを入力してLED点灯
- タクトスイッチ
- 抵抗1kΩ
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- PC(プログラム書き込み・シリアルモニタ表示)
void setup() {
pinMode(0, INPUT);//0番ピンを入力に設定
pinMode(13, OUTPUT);//13番ピンを出力に設定
}
void loop() {
boolean input;
input = digitalRead(0);//0番ピン(スイッチ)の入力状態をinputに代入
if(input == 0) {//0番ピンのスイッチがONの場合、実行
digitalWrite(13, HIGH);//0番ピンの出力をHIGH(5V)に設定
}
else {//0番ピンのスイッチがOFFの場合、実行
digitalWrite(13, LOW);//13番ピンの出力をLOW(0V)に設定
}
delay(10);//10msec待機(0.01秒待機)、チャタリング対策
}
サンプルプログラムでは、0番ピンに接続されたタクトスイッチの入力状態からArduino Unoのボード上のLEDが点灯、消灯します。タクトスイッチを押すとLED点灯、離すとLED消灯になります。
スイッチを押した回数をカウント
- タクトスイッチ
- 抵抗1kΩ
- Arduino Uno
- USBケーブル
- ブレッドボード
- ジャンパ線
- PC(プログラム書き込み・シリアルモニタ表示)
int count = 0;
void setup() {
pinMode(0, INPUT);//0番ピンを入力に設定
Serial.begin(9600);//シリアル通信を9600bpsで初期化
}
void loop() {
if(digitalRead(0) == 0) {//0番ピンのスイッチがONの場合、実行
count = count + 1;//countに1を足す
Serial.print("回数:");//「回数:」を送信
Serial.println(count);//「count」を送信、改行
while(digitalRead(0) == 0) {//0番ピンのスイッチがONの場合、繰り返す
delay(10);//10msec待機(0.01秒待機)、チャタリング対策
}
}
}
回数:1
回数:2
回数:3
回数:4
回数:5
回数:6
回数:7
回数:8
回数:9
回数:10
サンプルプログラムは、タクトスイッチを押した回数をシリアルモニタに表示します。
なお、スイッチのチャタリング対策として、wileループの中に「 delay(10)」を加えています。チャタリングによってスイッチON時にON/OFFが繰り返されるので、時間を遅延させることでチャタリングを回避しています。
チャタリング対策のプログラムは他にも色々なやり方があり、チャタリング防止回路を追加することでもチャタリングを回避することがあります。詳しいチャタリング対策の方法については別の記事で詳しく解説する予定です。
おすすめのArduinoボードはどれ?
当記事『Arduino-スイッチの使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。
やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。
電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。
また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。
このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。