arduino

Arduinoで組み込みソフトを体験しよう 〜スイッチ2~

前回はスイッチを利用して電気の流れについて確認しました。

今回はスイッチからの入力をArduinoを通じて判定します。テキストArduinoをはじめようはP036を参照してください。

スイッチでLEDを制御

今回の回路図はこのようになります。
スイッチ02
スイッチは5V電源を介してArduino11ピンに接続しています。スイッチを押す(ON)と11ピンに5Vが供給されます。一方LEDは5V電源から抵抗を介し10ピンに接続されています。10ピンがHIGH(5V)の時は電位差が0になるので電流が流れずに消灯します。10ピンがLOW(0V)の時は電位差が5Vとなり、電流が流れて点灯します。

実際の接続はこのようにしました。
wpid-dsc_0264.jpg

スイッチOFFではLEDが点灯し、
wpid-dsc_0265.jpg

スイッチONではLEDが消灯します。
wpid-dsc_0266.jpg

動画でも確認しましょう。

スイッチでLEDを制御するスケッチ

本件のスケッチはArduinoのスケッチの例(02.Digital−Button)を元にしました。

/*
  Button
 
 Turns on and off a light emitting diode(LED) connected to digital  
 pin 13, when pressing a pushbutton attached to pin 2. 

 The circuit:
 * LED attached from pin 13 to ground 
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground 
 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13. 
 
 created 2005 by DojoDave 
 modified 30 Aug 2011 by Tom Igoe
 
 This example code is in the public domain.
 
 http://www.arduino.cc/en/Tutorial/Button
 */
const int buttonPin = 11;     // スイッチ入力ピン
const int ledPin =  10;      // LED出力ピン

// variables will change:
int buttonState = 0;         // スイッチの初期状態

void setup() {
  // LEDピンを出力に初期化
  pinMode(ledPin, OUTPUT);      
  // スイッチピンを入力に初期化
  pinMode(buttonPin, INPUT);     
}

void loop(){
  // スイッチの状態を取り込みます
  buttonState = digitalRead(buttonPin);

  // スイッチの状態を確認します
  // スイッチの状態がHIGHなら
  if (buttonState == HIGH) {     
    // LEDを消灯させます:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // LED点灯させます
    digitalWrite(ledPin, LOW); 
  }
}

アレ?と思われた方がいらっしゃるかもしれません。オリジナル(スケッチの例)では

// turn LED on:    
    digitalWrite(ledPin, HIGH); 
// turn LED off:    
    digitalWrite(ledPin, LOW); 

となっており、HIGHを出力したときにLED点灯、LOWを出力したときにLEDが消灯しています。私のスケッチとは逆ですよね。
これはLEDの接続が異なるからです。

スイッチ03

上図の左側:アノード(A)を制御すると電源遮断(0V:LOW)でLEDが消灯し、電源供給(5V:HIGH)でLEDが点灯します。反対に図の右側:カソード(K)を制御すると電源遮断(0V:LOW)でLEDが点灯し、電源供給(5V:HIGH)でLEDが消灯します。

制御に向くのはどちらか?

どちらの制御がいいか?の回答の前にテキストP033をご参照ください。ポンプの絵があると思います。
アノード(A)側を制御するということは水の「供給量」を制御するということになります。水を流す時はポンプを一生懸命漕ぎ、水を止めるときはポンプを止めます。
カソード(K)側を制御するということは水の「排出量」を制御するということになります。水を流すときは水路(ホース口など)を開き、水を止めるときは水路を閉じます。
どちらが楽でしょうか?より楽な方がいいのは人だって機械だって電気だって一緒です。以上の理由で私は後者(出口制御)を推奨します。

ちょっとひとこと
マイコンのピン、電源、なんでもそうですが供給できる量は決まっています。マイコンのピンが出力できる電流は仕様書に必ず記載されています。電源は○○A(アンペア)もしくは△△W(ワット)と記載がありますよね。大量の電流を消費する素子がつながった場合、マイコンのピンでは供給量を満たせないケースがありので注意が必要です。
また、供給すると言うことは仕事をすることに他ならないので、マイコンのピンから電流を供給した場合、マイコン側にも熱が発生します。
楽をするということは、必要最低限の仕事量で求められる結果を出す(今回はLEDの点灯/消灯)ということなので、決して悪いことではありません。

ABOUT ME
Nozomu.Kon
トータルソフトウェアコーディネーターがあなたのお困りを即時に解決!