Project 5.1 乱数/Random Color Light

ESP32-S3を使用した、大人のプログラミング教室シリーズです。

前回は複数のLEDの明るさを制御して、おしゃれにフォンフォンさせました。

あわせて読みたい
Project 4.2 PWM応用編/Meteor Flowing Light 前回はLEDのPWMの考え方を学び、明るさ制御について実装しました。 https://kaneshige.org/?p=234 PWMについて学んだ後は、それを利用してバーLEDアレイを制御し、流れ...

今回はRGBフルカラーLEDを使って、ランダムに発光させてみましょう。

目次

RGB LEDとは?

RGB LEDには、それぞれ赤(Red)、緑(Green)、青(Blue)の光を発することができる3つのLEDが内蔵されています。そして4つのピンがあります。長いピン(1)は共通端子(Common Port)、つまり3つのLEDのプラスまたはマイナスの端子になります。共通プラス端子を持つRGB LEDとそのシンボルを以下に示します。 3つのLEDそれぞれが異なる明るさで光るように制御することで、RGB LEDからさまざまな色の光を発光させることができます。

赤、緑、そして青は光の三原色として知られています。これらの三原色を異なる明るさで組み合わせることで、ほぼ全ての種類の可視光を生成することができます。パソコンの画面、携帯電話のスクリーンの画素、ネオンサインなどは、この原理で動作しています。

理論上、3つの8ビットPWMを使用してRGB LEDを制御すれば、異なる組み合わせによって28×28×28=16,777,216(1600万色)の色を生成することができます。

回路図

接続図

RGB LEDの右から番目が共通プラス端子で、一番長い端子です。向きを間違わないように気をつけましょう。

コード

/**********************************************************************
  Filename    : ColorfulLight
  Description : Use RGBLED to show random color.
  Auther      : www.freenove.com
  Modification: 2022/10/20
**********************************************************************/
const byte ledPins[] = {38, 39, 40};    //define red, green, blue led pins
const byte chns[] = {0, 1, 2};          //define the pwm channels
int red, green, blue;
void setup() {
  for (int i = 0; i < 3; i++) {   //setup the pwm channels,1KHz,8bit
    ledcSetup(chns[i], 1000, 8);
    ledcAttachPin(ledPins[i], chns[i]);
  }
}

void loop() {
  red = random(0, 256);
  green = random(0, 256);
  blue = random(0, 256);
  setColor(red, green, blue);
  delay(200);
}

void setColor(byte r, byte g, byte b) {
  ledcWrite(chns[0], 255 - r); //Common anode LED, low level to turn on the led.
  ledcWrite(chns[1], 255 - g);
  ledcWrite(chns[2], 255 - b);
}

コード解説

今回のポイントは18~21行目ですね。

void loop() {
  red = random(0, 256);
  green = random(0, 256);
  blue = random(0, 256);
  setColor(red, green, blue);
  delay(200);
}

random()関数で乱数を生成しています。28は256ですが、0から数えると0~255の範囲です。ですので0~255の範囲のランダムな数を生成しています。このようにプログラミング言語には関数という便利な命令が色々と用意されています。全てを覚える必要はないですし、自分で関数を作ることもできます。よく使うものは自然と覚えてしまいますが、少し時間があいてしまえば忘れたりもします。どんなプログラマーでも全ての関数を覚えているような人はいませんし、他人の作った関数を使うことも多々あるわけなので、必要なときに検索して探すものと思っておくのが良いです。

今回はちょっと簡単でしたね。次回は徐々に色が変わるように制御してみましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次