秋月電子さんで、フルカラーのLEDモジュールを購入しました。表面実装用のLEDチップのDIP化キットになります。
データシートは下のリンクになります。
ピン配は下のとおり。
全部で6端子でています。①~③はGNDで、コモンではなく別々に出てます。
データシート
青色と緑色は順電圧が約3V, 赤色が1.8Vです。電流は30mAが定格。
LEDの抵抗値の計算
点灯テストに使うマイコンはArduinoにします。電流は光ればいいので、10mA程度を目標にします。
青と緑 抵抗値 R = (電源5V – 順電圧 3.0V ) / (0.01 A ) = 200 ohm
赤 抵抗値 R = (電源5V – 順電圧 1.8V ) / (0.01 A ) = 175 ohm
面倒なので、抵抗は200ohmで共通にすると、赤色LEDには16mAぐらい流れるはずです。
回路
Arduinoのデジタル出力にこんな感じでつないでみます。明るさ調整をするためPWM出力がつかえるデジタル出力#3,#5,#6ピンをそれぞれ赤、青、緑のLEDのアノード側に接続します。
実際のLEDモジュールは下のような感じで、取りつけました。特に意味はないですが、オン・ザ・レゴ。ユニバーサル基板をレゴのサイズに合わせてカットして、その上にモジュールをハンダしています。
PWMで3色をランダムに光らす
サンプルコードは下のとおりです。
int ledPinRed = 6; // LED REDはピン6に接続
int ledPinBlue = 5; // LED BLUEはピン5に接続
int ledPinGreen = 3; // LEDはピン3に接続
int R = 0; // DUTYを指定、0-255の数値
int B = 0;
int G = 0;
int t_inter=100;
void setup() {
Serial.begin(9600); // 9600bpsでシリアルポートを開く
randomSeed(analogRead(0)); // 未接続ピンのノイズを利用
}
void loop() {
R=random(255);
B=random(255);
G=random(255);
t_inter=random(200,2000);
analogWrite(ledPinRed, R);
analogWrite(ledPinBlue, B);
analogWrite(ledPinGreen, G);
Serial.print(String(R)+",");
Serial.print(String(G)+",");
Serial.println(String(B));
delay(t_inter);
PWM出力
ledPinRedにPWM出力するピン番号を指定して、Rは0-255の整数値をいれます。0がDuty0%で、255がDuty100%になります。
analogWrite(ledPinRed, R);
乱数の生成
random(255)で0-255の整数をランダムに返します。random(100,255)だと100-255の範囲の整数を返します。
R=random(255);
ただ、この関数で生成される乱数列は同じなので、リセットしても全く同じパターンしか出力されません。乱数列の初期値を変えるために下の関数を実行します。
randomSeed(analogRead(0))
analogread(0)で0番ピンのアナログ信号を取得する関数ですが、何もつながっていないので、ノイズ信号を拾います。これを利用して、乱数列の参照するポイントをリセット毎に変化するようにしてます。
LEGOハウスを灯しました。
フルカラーLED🙌