9.Arduinoで光らせるRGB(フルカラー)LEDのプログラミングと回路

RGB-LEDの場所とハードウエアー接続

RGB-LEDは、クムクムの透明ボディーの中央部上、丁度スピーカーの上にあります。

ロボットなどマイコンを使った機器には、出力(人に知らせる)ものと、入力(情報を得る)というものがあり、Arduinoにも当然入出力を持っています。

このロボットで使うRGB-LEDは、人に知らせる役目として使いますのでArduinoの出力ポートに接続し、プログラムからコントロールを行います。

このLEDは、一つの玉の中にR(赤)G(緑)B(青)のLED素子をもち、それぞれの色の端子とGNDの端子をCPUに接続します。
CPUに接続する際は、必ずCPUとの間に抵抗を加え電流制限を行っています。

RGB-LEDには、カソードコモン(GNDが共通)アノードコモン(VCCが共通)の2種類があり、クムクムの場合はカソードコモンを使用しています。

電気的な豆知識

ArduinoのCPUの足には、電流はわずか40mA程度しか流すことができません。

40mAというのは非常に小さな電流で、この小さなLEDをそのまま取り付けてしまっても壊れるほどです。

特にロボットなどは、大きなモーターを制御したりする場合もありますから、CPUと入出力の部品(ペリフェラルと呼びます)との間には、いろいろな部品を挟んで調整をします。

ここでは、CPUの足とLEDの足の間に流がたくさん流れないように抵抗を挟む必要があります。

抵抗には向きがありませんので、上下左右どのようにでも接続することができますが、接続する素子に電気仕様によって40mAまでしか流れないようにする抵抗値を計算によって求めて使う必要があります。
そして、この流す電流値によってLEDの光る明るさが決定します。
できるだけ明るく光らせたい場合は、CPUが許すギリギリの電流値が流れる抵抗値を計算し、暗くしたい場合はもっと低い電流値が流れる抵抗値を求めます。

例えば、秋月電子で販売している5mm型のRGB-LEDのページを見ると下記のように書かれています。

LEDとプログラミングイメージについての詳細は後述します。

求めたい電流値=(電源電圧-VF)÷流したい電流値A で求めます。

例えば、赤LEDに5mAを流したい場合は (電池電圧(5V)-VF(2.0))÷0.005(A)=600 となり、600Ωの抵抗をつければよいことになります。

プログラムから点灯・消灯をしてみる

それでは、いよいよプログラムによって、Arduinoを利用したこのロボットのLEDをコントロールしてみましょう。(俗にいうLチカです)

1.PCとクムクムを接続しIDEを起動します

 

 

2.LEDプログラミング(Lチカ)

このプログラムは、R、G,Bの順に1秒ごとの点滅をずっと繰り返します。


#define LED_R A0   // A0をLED_Rに
#define LED_B A1   // A1をLED_Bに
#define LED_G A2   // A2をLED_Gに

/*-----------------------------------------------

各ピンを出力モードに設定する
----------------------------------------------------------------------*/
void setup() {
  pinMode(LED_R,OUTPUT) ;
  pinMode(LED_G,OUTPUT) ;
  pinMode(LED_B,OUTPUT) ;

}
/*-----------------------------------------------

点滅プログラム
----------------------------------------------------------------------*/

void loop() {
  digitalWrite(LED_R,HIGH) ; //赤点灯
  delay(1000);//1秒まつ
  digitalWrite(LED_R,LOW) ;//赤消灯
  delay(1000);//1秒まつ
  digitalWrite(LED_G,HIGH) ;//緑点灯
  delay(1000); //1秒まつ
  digitalWrite(LED_G,LOW) ; //緑消灯
  delay(1000); //1秒まつ
  digitalWrite(LED_B,HIGH) ; //青点灯
  delay(1000); //1秒まつ
  digitalWrite(LED_B,LOW) ;//青消灯
  delay(1000);//1秒まつ
}

コンパイル・書き込み

プログラム入力が終わりましたら早速クムクムに書き込んでみましょう。

IDEのコンパイル・書き込みアイコンをクリックします。
少し経つと、クムクムのおなかのオレンジLEDが点滅しプログラムが書き込まれて自動で動きます。

この状態で目的通りの動きが確認出来たら、次はクムクムの背中に電池を入れ、USBケーブルを抜き、クムクムの電源SWを入れます。
ケーブルなどをつながなくても、また、パソコンの電源などを切っても、クムクムは単体でLチカをくり返すはずです。

使用したArduino関数

pinMode(pin番号,モード)

Arduinoの接続ポート(pin番号)をどのモードで使用するかを決める関数です。
プログラム内ではどこでも使用できますが、製品では入出力を切り替えて使用するパーツはなく固定であるため setup 関数で1回だけコールしています。

pin番号 Arduinoのピン番号を指定します
モード 出力モードで使用する場合は OUTPUT
入力モードで使用する場合は INPUT
※LEDは出力機器なのでこのプログラムではOUTPUを指定しています
戻り値 なし

digitalWrite(port番号,出力値)

Arduinoの接続ポート(pin番号)に5V(または3.3V)か0Vを出力します。
HIGHかLOWで指定し、HIGHの場合は5Vか3.3Vが出力されます。5Vか3.3Vかは、そのボードでそのCPUがどちらの電圧で動作しているかによります。
クムクムやArduinoLeonardoは5Vで動作しているため5Vが出力されます。
電池と同じで、電圧は5Vまたは3.3V 電流は40mA程度の小さな電力が出力される+側に接続されるのか、それとも-側に接続されるのか?という同じ動きをします。

pin番号 Arduinoのピン番号を指定します
出力値 HIGH / LOW
戻り値 なし

LEDの仕組み

LEDの極性

LEDには電池と同じようにプラスマイナスの極性を持っていて、プラス「アノード」、マイナス「カソード」と呼びます。
このアノード側はp型という半導体、カソード側はn型という2つの半導体でできています。
アノードに電源のプラス、カソードに電源のマイナスを正しく接続し電圧・電流をかけると、p型半導体の内部では「正孔」と呼ばれる正の電荷をn型半導体との結合部分に運びます。
逆にn型半導体内部では「電子」と呼ばれる負の電荷をp型半導体との結合部分に運びます。
そしてこの「正孔」と「電子」が合わさり「再結合」することで、そこで生じたエネルギー光となります
プラスとマイナスの共生を正しく接続しない場合、各電荷は両端に集まることで「再結合」が起こらずエネルギーが発生しないために光らないという現象となります。

電気にはご存じのように電圧・電流の二つがあり、豆電球などはこの2つの組み合わせで明るさを決定できます。
なので、電池で光る豆電球のライトなどは、電池の残量が少なくなるとだんだん暗くなっていきます。

LEDの場合は、豆電球のように電圧・電流に残量によって明るさが変わるわけではありません。
決められた既定の電圧がかからないと光ることができません。
正しい電圧がかかって光る前提のもと、抵抗の量で流す電流を変化することで明るさが変わってきます。

LEDをよく見ると下記のように2つの離れた金属板でできています。
この広い方がカソード(n型半導体)狭い方がアノード(p型半導体)で間に空いている隙間部分で再結合が起き光に変わります。

※足は基板に取り付けるサイズによって切って今うので、実際に基板についている状態ではわかりませんが、購入したばかりの時は、カソード側がアノード側がく作られています。

回路図での書き方

LEDは正式には Light Emitting Diode (ライト・エミッティング・ダイオード=光・発する・ダイオード)で日本語では発光ダイオードと呼びます。

そのため、電子回路ではダイオードのシンボルが光っている状態で書き、ほとんどの回路に電流を制御する抵抗がつけられています。

接続方法プログラム

ArduinoのプログラムによってLEDを光らせる場合、2つの接続方法があります。

アクティブLOW

左の図はLEDのアノードを+5Vに接続し、カソード側をArduinoの7番ピンに接続しました。
つまり常にLEDのアノードには5Vの電圧がかかっています。
プログラムで光らせようとした場合、7番ピンをマイナス(GND)にします。
つまりプログラムでは、digitalWriteLOWを出力すれば、LEDが光ることになります。
LOWで動作する接続ですからこれをアクティブLOWと呼びます。

void setup(){
    pinMode(7,OUTPUT) ;
}
void loop(){
    digitalWrite(7,LOW) ;
}

アクティブHIGH

右の図はLEDのアノードを7番ピンに接続し、カソード側をGNDに接続しました。
つまり常にLEDのには何も電圧がかかっていません。
プログラムで光らせようとした場合、7番ピンをプラス(+5V)にします。
つまりプログラムでは、digitalWriteHIGHを出力すれば、LEDが光ることになります。
HIGHで動作する接続ですからこれをアクティブHIGHと呼びます。

void setup(){
    pinMode(7,OUTPUT) ;
}
void loop(){
    digitalWrite(7,HIGH) ;
}

RGB-LED(フルカラーLED)の仕組み

通常LEDは1つの玉で2本の足で1色の発光ですが、クムクムのLEDのように1つの玉に4本の足で3色(RGB)の制御ができるものがあります。
このLEDをRGB-LEDまたはフルカラーLEDと呼びます。
フルカラーと言うのは、小学校の理科で習う「光の三原色」に基づき、R(赤)G(緑)B(青)の3つの光で人間の目に見えるすべての色を再現できるからです。
この技術を使い、現在はTVやパソコンのディスプレイなどでLEDを使用したものが多く製造されています。

このRGB-LED(フルカラーLED)には、アノードコモン・カソードコモンという2種類あります。
つまり、RGBの各色の足は1本ずつで合計3本ですが、+側(アノード)を全部共通(コモン)の1本で使う(アノードコモン)か-側(カソード)を全部共通(コモン)の1本で使うかということです。

アノードコモン

#define LED_R 7
#define LED_R 6
#define LED_R 5

void setup(){
    pinMode(7,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(5,OUTPUT);
}
void loop()
{
    digitalWrite(7,LOW) ;
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
}

カソードコモン

#define LED_R  7
#define LED_R  6
#define LED_R  5

void setup(){
    pinMode(7,OUTPUT);
    pinMode(6,OUTPUT);
    pinMode(5,OUTPUT);
}
void loop()
{
    digitalWrite(7,HIGH) ;
    digitalWrite(6,HIGH);
    digitalWrite(5,HIGH);
}

コメント