Arduinoで実験 (初めてのLチカ)

2013/03/27

昔から電気について興味があったが、周りに専門的な知識を持った人もおらず、疑問を持っても回答を得られなかった。 トランジスタ技術などの雑誌を買ってきて読んでみても、難解な単語ばかりで読み進めるのもままならない。 ましてや実験したくてもパーツ屋等気のきいた店も無いような田舎に住む人間には別世界のお話だった。

それから数十年たって、レベルに応じた情報がインターネットで手に入り、実験用の部品も通販で(必要なら海外からも)手に入るようになった。 なんて良い時代になったのだろう。

先が見えてきた人生だが、幼いころのワクワクが蘇ってきた。

なお、実験に使用する Arduino の詳細、開発環境、スケッチの転送等の説明は他サイトにお任せする。


◆ LEDを点けるのだ

ソフトウェアを学ぶ際に、手始めに 「Hello World」 は太古の昔からある合言葉みたいなものだが、ハードウェアので世界では LED を点灯させる 「Lチカ」 なるものが 「Hello World」 みたいなものらしい。
ということで、LED の学習から。

LED とは発光ダイオードと呼ばれる、電圧をかけた際に発行する半導体である。

LEDにはプラスとマイナスの足があり、足の長いほうがプラスでアノードと呼ばれ、足の短い方がマイナスでカソードと呼ばれる。 足の長さで判別できないような場合は、LED内部の電極が大きい方がカソードである。
ただし、稀に逆に見えるLEDもあり確認作業を行っておく必要がある。

早速LEDの点灯実験を初めて見る。以下は実験で使用するパーツ

種別 定格・品番 個数 備考
マイコン Arduino UNO 1  
LED 赤色 1  

配線 本来は電流制限抵抗などを用いて正しい回路を組むべきであるが、「まぁ、そこは、ほれ、ん?ん?」てな調子で実験を行います。 そのため変な煙が出てきても知識を得るための尊い犠牲という事で気にせず行いたいと思います。

ただし、電源のショートのよる出火や電池の誤った使用での爆発。はんだゴテでのヤケド。火事。等には十分すぎる位の注意を払ってください。

初めにLEDの配線を行わず Arduino UNO 本体に付いている LED を点滅させてみます。

//
// 01-01 LED点灯実験スケッチ
//

// 変数t1とt2を整数型で定義する。
// 1000ms = 1秒
int t1 = 500; // LEDの点灯時間(ms)
int t2 = 250; // LEDの消灯時間(ms)

void setup() {  // 電源投入後setupの括弧内の処理が一度だけ行われる。
    pinMode(13, OUTPUT); // LEDの接続ポートを初期化する
}

void loop() {  // 電源が落ちるまでloopの括弧内の処理が繰り返される。
    digitalWrite(13, HIGH); // 13番の出力
    delay(t1); // 点灯時間のウエイト

    digitalWrite(13, LOW); // 13番の出力停止
    delay(t2); // 次の点灯までの待機時間
}

LED の点滅が確認できたら下図のように13番ピンにアノード、GNDにカソードという風に LED を繋げてみます。

Arduino本体と配線したLEDが同じタイミングで点滅したはずです。 スケッチ先頭で定義している t1, t2 の値を変えれば点滅の間隔が調整できます。


◆ LEDを点滅させよう

先ほど13番ピンに配線したLEDの足を7番ピンに指し直し、スケッチを以下の様に修正してみます。

//
// 01-02 LED交互に点滅実験スケッチ
//

int t1 = 500;

void setup() {
    pinMode( 7, OUTPUT); // LEDの接続ポートを変える。
    pinMode(13, OUTPUT);
}

void loop() {
    digitalWrite(13, HIGH); // 本体LEDの点灯
    digitalWrite( 7, LOW);  // 接続LEDの消灯
    delay(t1);

    digitalWrite(13, LOW ); // 本体LEDの消灯
    digitalWrite( 7, HITH); // 接続LEDの点灯
    delay(t1);
}

今度は本体のLEDと接続したLEDが交互に点灯しました。 さらにLEDを増やしたり色の違うLEDを組み合わせてみたり、フルカラーLEDを点けてみたりすれば面白いかもしれません。


◆ アナログ出力でLEDを点滅させよう

Arduino の PWMと印字された3,5,6,9,10,11番ピンはアナログ出力ができる。 正確にはPWMによる擬似アナログ出力なのだがちっちゃい事は気にするな「それっ」 ゲフッゲフッ 

//
// 01-03 アナログ出力でLEDの点灯実験スケッチ
//

void setup() {
  // analogWrite, analogRead で使用するピンは pinMode での設定は不要
}

void loop() {
    analogWrite(11, 1);
}

 

LED がわずかに点灯してると思います。 豆電球の明暗は電圧の大小で行いますが、LEDの明るさは点滅速度で調整します。
人間の目では判断できない速度で点滅しているので、明るさが変わって見えます。

では上記のスケッチを修正してみます。

//
// 01-04 アナログ出力でLEDをふわふわさせる実験スケッチ
//

void setup() {
}

void loop() {
    for (int i = 0; i < 64; i++) {
        analogWrite(11, i);
        delay(10);
    }

    for (int i = 63; i != 0; i--) {
        analogWrite(11, i);
        delay(10);
    }
}