ボタンを押している間Lチカ【マイコンLチカ道場 Arduino編 1-1】

スイッチオン時にLEDを点灯Arduino
スポンサーリンク

はじめに

このページは「マイコンLチカ道場 Arduino編」の「1-1:ボタンを押している間Lチカ」に対応するページです。スイッチによる外部入力を使用して動作させてみます。

スポンサーリンク

回路図とブレッドボード接続図

今回は1個の青色LEDと、1個のタクトスイッチを使用します。タクトスイッチはピン2に接続しました。また、抵抗10kΩを介して5Vに接続し「プルアップ」させています。

回路図
ブレッドボード接続イメージ

タクトスイッチの向きにご注意ください。90°間違えて接続すると常時ショートした状態になります。(勘で繋いだら間違えました。)

プログラムを書いてみる

早速プログラム(スケッチ)を書いてみました。Arduino IDEのスケッチ例「02.digital」⇒「button」を参考にしています。

const int LED1 = 12; //LEDを接続するピン
const int SW1 = 2;   //スイッチを接続するピン
int a = 0;           //スイッチの状態保存用の変数

void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(SW1, INPUT);  //SW1を入力に設定
}

void loop() {
  a = digitalRead(SW1); //SW1の状態を読み込み、aに代入
  if (a == LOW){        //aがLOWであれば、下記を実行
    digitalWrite(LED1, HIGH); //LEDを点灯
  } else {              //aがLOWでなければ、下記を実行
    digitalWrite(LED1, LOW); //LEDを消灯
  }
}

上記のプログラムで、スイッチを押した時にLチカさせることができました。

簡単な動作説明としては、変数「a」に現在のスイッチの状態を代入し、if文を使用して、aがLOWであれば、LEDを点灯、そうでなければ(HIGHであれば)LEDを消灯させています。
タクトスイッチを10kΩの抵抗でプルアップさせているため、スイッチを押していないときは2番ピンの入力電圧は5V(HIGH)に張り付きます。スイッチを押すとGNDにショートして0V(LOW)に張り付きます。このとき10kΩを介して5VとGNDが接続するため、5V/10kΩ=0.5mAの電流が抵抗に流れます。もったいないし危険なので、LEDの電流制限抵抗と間違えたり小さい抵抗値のものを使用しないようにしましょう。

スイッチオンでLEDが点灯
写真:スイッチオンでLEDが点灯しているところ

実際のスイッチ入力(ピン2)の電圧と、LEDの電圧をオシロスコープで見てみました。ボタンを押したとほぼ同時に、LEDが点灯していることがわかります。
チャタリングが盛大に発生しているかと思ったけど、特に発生していませんでした。

スイッチオン時の波形
スイッチオン時の波形

内蔵プルアップ抵抗を試す

Aruduinoでは、内蔵プルアップ機能があるようです。これを有効にすることで、先ほど付けていたプルアップ抵抗が無くせないか試してみました。
その前に、試しに上記のプログラムのままプルアップ抵抗を外してみましたが、スイッチを押していないのにLEDがうっすら常時点灯するようになりました。これは、入力がオープンになることで、0か1か非常に不安定な状態になっているためでしょう。危険なのですぐに止めました。

const int LED1 = 12;
const int SW1 = 2;
int a = 0;

void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(SW1, INPUT_PULLUP); //SW1を入力に設定、内蔵プルアップ有効
}

void loop() {
  a = digitalRead(SW1); //SW1の状態を読み込み、aに代入
  if (a == LOW){ 
    digitalWrite(LED1, HIGH);
  } else {
    digitalWrite(LED1, LOW);    
  }
}

上記のスケッチのように「INPUT」⇒「INPUT_PULLUP」に変更することで、簡単に内蔵プルアップが有効になるようです。試してみたら、本当に外付けプルアップ抵抗を外した状態で同じ動作ができました。部品や回路を省略できそうで便利ですね。
ちなみに、「INPUT_PULLDOWN」もあるかと思ったらそれは出来ないようです。

まとめ

スイッチ入力を使用して、ボタンを押している間Lチカさせることができました。また、if文を使ったプログラムの動作と、内蔵プルアップ機能を確認することができました。引き続きもっと難しいLチカに挑戦していきましょう。

このページの実験は下記の製品で試すことが出来ます。
Arduino Uno Rev3 アルドゥイーノ ウノ ATmega328P【正規代理店品】プログラミング ロボット 電子工作 アルデュイーノ 正規品 アルディーノ 電子パーツ 電子工作キット
Arduinoオフィシャルストア
初めての方は正規品か、互換品でもUSB-シリアル変換にAtmega16U2が使われているものがオススメです。安価な互換品はCH340G等が使われており、トラぶると面倒かもしれません。
ノーブランド品 ブレッドボード(EIC104J) 【0165-41-4-1040】
マルツオンライン
私はおそらく同じメーカーのEIC-106Jという3列のやつを秋月で購入して使っています。大きいは正義!
Arduino電子工作
スポンサーリンク
このページをシェアする
のぶをフォローする
スポンサーリンク
スポンサーリンク
のぶらぼ
タイトルとURLをコピーしました