【Raspberry Pi Pico入門 – 8】RGB LEDを制御

2023年9月29日Raspberry Pi Pico入門,基本編

概要

今回はRGB LEDの制御をやってみます。RGB LEDとは、赤・緑・青のLEDが一つの素子の中に入っており、それぞれの明るさを調整することで様々な色に光らせることが出来るLEDです。

実行環境

IDE:Arduino IDE 2.1.1
MCU:Raspberry Pi Pico

RGB LED:不明
スターターキットに付属のものを使って試しています。おそらく下記リンク先のものと同等のものと思われます。

今回のテーマ

  • 複数のアナログ出力を制御してみる

回路

以下のように配線します。一番長いピンが3.3Vにつながる向きで配線してください。
また、これまでの回路と違い1kΩを使っているので注意してください。

コーディング

新しくスケッチを作成し、以下の内容をコピペしてください。

int ledPins[] = {13, 12, 11};

void setup() {
  for (int i = 0; i < 3; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  setColor(255, 0, 0);
  delay(500);

  setColor(0, 255, 0);
  delay(500);

  setColor(0, 0, 255);
  delay(500);

  setColor(255, 255, 0);
  delay(500);

  setColor(0, 255, 255);
  delay(500);

  setColor(255, 0, 255);
  delay(500);
}

void setColor(byte r, byte g, byte b) {
  analogWrite(ledPins[0], 255-r);
  analogWrite(ledPins[1], 255-g);
  analogWrite(ledPins[2], 255-b);
}

動作確認

RGB LEDが「赤 → 緑 → 青 → イエロー → シアン → マゼンタ」の順に光れば成功です。

解説

アノードコモン、カソードコモン

RGB LEDにはアノード側が一つにまとまっているアノードコモン、カソード側が一つにまとまっているカソードコモンの2種類があります。(今回使ったのはアノードコモンです)
性能では大きな違いは特になく、どのような回路で動かすかで選ぶことが多いです。

  • アノードコモン
    カソード側をON/OFFすることで制御するので、NPNトランジスタやNch-MOSFET等をGNDの間に入れて使うことが多いです。
    トランジスタで制御するので大電流を流したいときに便利です。
  • カソードコモン
    アノード側をON/OFFして制御するので、マイコンに直接つないで制御することが多いです。マイコンが直接駆動するので電流値に注意してください。

回路

回路図は以下のようになっています。

今回の回路はこれまでのGPIOの使い方とは違い、電流がマイコンに流れ込むような回路になっています。
GPIOをHIGHに設定すると電圧が3.3Vとなり、LEDのアノード側との電位差が0Vとなるため電流が流れなくなります。GPIOをLOWにすると電圧が0Vとなり、LEDのアノード側との電位差が3.3Vになるので3.3V端子からLEDと抵抗を通ってGPIOに電流が流れ込みます。
マイコンは出ていく電流だけでなく、入ってくる電流の大きさにも制限があるので流しすぎには注意が必要です。(Raspberry Pi Picoのデータシートには入力電流の記載はありませんが、近い値である可能性がたかいので出力電流の定格である4mAを超えないようにするのが良さそうです)

光の三原色

RGB LEDが様々な色で光ることが出来るのは「光の三原色」で説明することが出来ます。人間の目が捉えられる色は基本的に赤・緑・青の三種類であり、認識できる色は全て3色の組み合わせとなっています。つまりこの三色の明るさを調整することで人間が認識できる色のほとんどを再現することが出来ます。
ちなみに「24bitカラー」というのは、それぞれの色を8bit(256段階)で表すため、8bit x 3色 = 24bitと表現しています。これをパターン数で表すと、256 x 256 x 256 = 16777216色となります。

光の三原色のイメージ