#015【49歳から始めるArduino -黒帯を目指す】黄帯編4 PWMでLチカ4倍出し

 教科書のp68、LEDをさらに増やして見るをしてみたいと思います。所要時間は30分です。まずはp68の図の通りLED回線を組み立てみましょう。簡単にできると思います。そのあとはp70からの例通りスケッチを描いてみてください。何もなければ上手に行きます。私はつまづきましたが、それを見事に解決しました。自分でもなんですが、さすがと思いました。

 最初のつまづきはLEDが一つ点灯しませんでした。そこでLEDを疑い、他のLEDに差し替えましたが、ダメです。LEDは無実のようです。次にブレッドボードの接点不良を疑いました。がこれも無実のようです。通常はこれで解決するはずですが、上手くいきません。そこでテスターを使うことにしました。抵抗の両端に+と−を電流測定で測ってみます。LEDが点灯するところは数値が上下します(但しマイナスにはなりません)。点灯しないところは電気が流れていないようです。数値は0のままです。念のためLEDの抵抗値を測ろうと思いました。200mAにセットして+と-をLEDの規定通りに接触させるとほのかに点灯します。生きているのが確認できました。ここで疑問が生じました。LEDの生存を確かめる方法はこれでよかったのかです?あまり深く考えずに次はボード上での通電を調べます。電流計測にして200mAで測ると、点灯しないところには電気が通っていないようです。でArduinoとブレッドボードの配線を調べると、なんと点灯しないところの配線が、全然関係のないPINに刺さっていました。制御不能なのはあたりまです。ボードが飛ばなくてよかった。つなぎ直すとあっさり点灯しました。それも予想以外の光り方ですが、なんとなくあっているようのでなので、次のスケッチをスマートに(簡略化)して書くに取りかかりました。


 2つのこの課題では配列を利用してピン番号を簡単にスケッチすることにします。またintを使って変数iとjを順序に変身させ、明るさを制御します。利用するおまじないは以下の通りです。
  1. int led_pins[] = {ピン番号を順番に入れる};
  2. for(i=0;i>256;i++){繰り返し処理を入れる}  →ここではiの初期値を0、最大256そして一つづつ増やすを意味しています 
次のつまづきは、2つ目の応用課題をやって見ると、光り方が全くの予想通りで、最初の例と全く異なります。スケッチの記載ミスです。スケッチをよくみましたが、何が間違っているかわかりません。そこで、一番最初の場所だけのスケッチを作成し、LEDを一つだけ点灯させました。やっぱり光り方違っていましたが、どこが間違っているかわかりません。そこでバッサリ書き換えることにしました。すると上手く行きます。次に最初に書いた、だんだんと消えるところを追加すると、消え方もおかしいです。で書き直したら、あっさり動きました。結局原因は不明ですが、スケッチの記載間違いのようです。そしてこれはよくあります。

 最後に応用問題です。deleyの値を一発で変えることができるように#define を使ってみてください。これで色々と試すのが簡単で、楽しくなります。

 テスターはAmazonで買った記憶があります。確か15Euroだったかな。テスターの使い方はよくわかっていませんが、中学時代にこったラジコンでよく使って、直流電圧と直流電流の測り方については覚えていました。難しくないです。Arduino工作ではよく使うとMiguel先生が言っていましたので、機会を見つけて購入しておくと良いかと思います。

おまけ1:配列とシリアル出力の簡単な問いです。4つのLEDを順番に点灯させていくスケッチを書いてみてください。シリアルモニターを利用して、このような出力も同時にします。

回答1:こちらです。この次は文字を入力すると、点灯が止まるようにしたいですね。

#define FADE_TIME 500

int led_pins[] = {3,5,6,9};

void setup() {
  int i;
  for(i=0;i<4;i++){
    pinMode(led_pins[i],OUTPUT);
  }
  Serial.begin(9600);
}

void loop() {
  Serial.println("Loop starts");
  int i;
  for(i=0;i<4;i++){
    Serial.print("LED ");
    Serial.print(i+1);
    Serial.println(" ON");
    digitalWrite(led_pins[i],HIGH);
    delay(FADE_TIME);
    digitalWrite(led_pins[i],LOW);
    delay(FADE_TIME);
  }
}


#014 【49歳から始めるArduino -黒帯を目指す】黄帯編3 PWMについて学ぶ
#016 【49歳から始めるArduino -黒帯を目指す】黄帯編5 ついにカラーLEDでディスコだ

コメント