Arduino Unoを使ってLEDを光らせてみた。それだけではちょっと足りないのでボタンも付けた。

必要な部品:
Arduino Uno ×1
ブレッドボード ×1
ブレッドボード用の線材
LED ×4
抵抗 330Ω ×4 (330Ω〜1KΩくらいでOK)
抵抗 10KΩ ×4

 今はLEDも抵抗も袋入りで買えば問題ない。
LED1
 
押しボタンスイッチはこのような形。左下の小さいのはブレッドボードに直接挿せる。
LED2
 
LEDには極性がある。リード(足)の長い方が+。電解コンデンサなど極性のある部品も+側が長い。
LED3
 
ブレッドボードに配置してみる。こんな感じでどうか。
 LED4

Arduino、というよりArduinoの心臓部であるAVRマイコンの端子は役割が決まっている。
通常のデジタル入出力と、他の機能を兼用しているものがある。
LEDの点灯にはPWM(Pulse Width Modulation)機能のある端子を使う。これは出力オン/オフの比率を切り替えることにより人間の目には輝度の変化として感じる。PWM機能のあるピンはArduinoでは基板上に#3とか~3のようにシルク印刷で指示してある。
配線のメモ。Pin3,5,6,9を出力に、Pin2,4,7,8を入力にする。
出力にLEDは直結しない方がいい。Arduinoの本などにはそのような例があるが、LEDの定格を超えるので壊す可能性がある。
入力は10KΩの抵抗を通して端子を5V側に吊るしてある(プルアップ)。プルアップ抵抗を外して実験してみたが、これがないと入力が不安定になる。
LED7

実際の配線。割と電源の配線は忘れがちなのよね。
LED5

全体。
LED6
 ではスケッチ。Arduino IDEのExamplesにある"Fade"を元に書き換える。 4LEDの明るさ制御+スイッチによる消灯。  void setup()はawkでいうとBEGIN{}に相当する箇所で、一回だけ実行される。ハードウェアの初期化に使う。 ここではpinModeで端子の入出力を設定している。  digitalReadでスイッチの状態を読み取り、analogWriteで書き込む値を0にすることにより消灯している。analogWriteはPWM制御でLEDの明るさを制御できる。
これをArduino Unoに転送して確認する。ボタンを押した位置のLEDが消灯すればOK。このプログラムはLEDとスイッチの接続テストにもなるよ。
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by
int bright[4] = {0,0,0,0};
int i;

const int LED0 = 3;
const int LED1 = 5;
const int LED2 = 6;
const int LED3 = 9;
const int SW0 = 2;
const int SW1 = 4;
const int SW2 = 7;
const int SW3 = 8;

void setup()  { 
  pinMode(LED0, OUTPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(SW0, INPUT);
  pinMode(SW1, INPUT);
  pinMode(SW2, INPUT);
  pinMode(SW3, INPUT);
} 

void loop()  { 
  // set the brightness of pin 9:
  analogWrite(LED0, bright[0]);    
  analogWrite(LED1, bright[1]);    
  analogWrite(LED2, bright[2]);    
  analogWrite(LED3, bright[3]);    

  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;
  for(i=0;i<=3;i++){
    bright[i] += fadeAmount;
  }
  if (digitalRead(SW0)==LOW) bright[0]=0;
  if (digitalRead(SW1)==LOW) bright[1]=0;
  if (digitalRead(SW2)==LOW) bright[2]=0;
  if (digitalRead(SW3)==LOW) bright[3]=0;

  // reverse the direction of the fading at the ends of the fade: 
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     
  // wait for 30 milliseconds to see the dimming effect    
  delay(30);                            
}
 実は手抜きしてあるので、最初揃っていた明滅のタイミングがボタンを押すことによりずれて行ってしまうよ。

 動作中の動画はこちら。 
Arduino 4LED 4switch

 組立とプログラム(といってもサンプルを元に改造)は一時間もかからなかった。これはマイコン界の軽量言語ではないかい?手持ちのブレッドボードなどが増えればスクリプトの資産が増えるのと同様にいろんなことがさらに簡単にできそうだ。
Arduinoをはじめよう 第2版 (Make:PROJECTS)Arduinoをはじめよう 第2版 (Make:PROJECTS)
Massimo Banzi 船田 巧

オライリージャパン 2012-03-16
売り上げランキング : 2218

Amazonで詳しく見る
by G-Tools