ELEGOO (Arduino)で始めるマイコン入門 5:3色LED

今回は、ブレッドボードにLEDや抵抗を設置し、3色LEDを光らせます。LEDを光らせるために、LEDの簡単な構成と光らせる手段である、PWM (Pulse Width Modulation) について説明をします。

LEDとは:アノードとカソード

LEDは、+極、-極の代わりに、アノードとカソードという言葉を使います。これは電子の動きを表す言葉ですが、電子工作やマイコンでは、アノードを+極(正極)、カソードをー極(負極)と捉えて問題ありません。LEDは豆電球とは異なり、+とーをきちんと揃えないと光りません。豆電球は電池の正負を入れ替えても光りましたが、同じことをLEDでやると、光らなくなるので注意が必要です。
 では、LEDのアノードとカソードはどうやって見分けるのでしょうか。一般的なLEDは、足の長いほうがアノード、短いほうがカソードです。ですが、今回使用する3色LEDはアノードが3本、カソードが1本あるため、下の画像のように、一番長い脚がカソードになっています。このように、LEDの種類によってアノードとカソードが変わるため、毎回確認するようにしましょう。こちらのサイト(http://www.my-craft.jp/html/aboutled/led_kyokusei.html)がLEDのアノードとカソードの見分け方を詳しく紹介しているので、参考にしてもよいでしょう。


IMG_20201128_155759 - コピー

PWM (Pulse Width Module) :パルス幅変調

マイコンが出力できる電圧は、0Vか5Vのどちらかです。では、中間の3Vが欲しい場合はどうすればいいのでしょうか。これを解決するのが、PWM(パルス幅変調)です。これは、HIGHになっている時間の比率で、全体の電圧を変えるという方法です。下の画像を見てください。

画像2

上から順に、5V (HIGH)になっている時間が、100%、50%、30%となっています。この値のことをduty比と呼び、この時間間隔は非常に短く、電圧を受ける側には、それぞれ5V、5V×50%=2.5V、5V×30%=1.5Vが入力されているように見えます。このように電圧を上げている時間を調整して、任意の電圧を出力するのが、PWMです。(実際には、電力換算で何割、となります)これをLEDに対して入力すると、とても短い時間間隔で、点滅を繰り返しますが、私たちの目には明るさが暗くなったように感じられます。

ブレッドボードでのLED点灯回路作成

LEDを光らせるために電源をつなげるのですが、そのままつなげると、非常に大きな電流、電圧がかかり、LEDが破壊されます。これを防ぐため、抵抗を繋げて電圧を調整します。そして、カソードにはー極であるGND(Ground つまり0V点です)、3つあるアノードにはマイコンボードの出力端子につなげます。これが下の画像です。

IMG_20201128_155853 - コピー

つなげる箇所は下の画像のようです。3,5,6につなげているのは、PWMの出力が可能な端子だからです。(~印が付いている個所はPWMで出力電圧の調整ができ、それ以外はDIGITALとあるように、LOWかHIGHの2種類しか出力しません。)

IMG_20201128_155905 - コピー

3色LED点灯プログラム

では、理論を把握し、回路を構築したところで、プログラムを書いていきます。

 #define  BLUE 3 #define  GREEN 5 #define  RED 6

void setup()
{
 pinMode(RED, OUTPUT);
 pinMode(GREEN, OUTPUT);
 pinMode(BLUE, OUTPUT);
 digitalWrite(RED, HIGH);
 digitalWrite(GREEN, LOW);
 digitalWrite(BLUE, LOW);
}


void loop() {
 int i, red, green, blue,delay_time;
 red = 255;
 green = 0;
 blue = 0;
 delay_time = 10;

 for (i = 0; i < 255; i++){
   analogWrite (RED, 0);
   analogWrite (GREEN, green);
   green++;
   delay(delay_time);
 }
 for (i = 0; i < 255; i++){
   analogWrite (GREEN, green);
   analogWrite (BLUE, blue);
   blue++;
   green--;
   delay(delay_time);
 }
 red = 0;
 for (i = 0; i < 255; i++){
   analogWrite (RED, red);
   analogWrite (BLUE, blue);
   blue--;
   red++;
   delay(delay_time);
 }  
}

analogWrite(ピン番号, value) は、valueを0から255までの整数で指定します。0の時、duty比は0、つまり0Vが出力され、255の時はduty比が1、つまり最大電圧が出力されます。
これでLEDを色とりどりに変化させることができました。

この記事が気に入ったらサポートをしてみませんか?