RGB-LED

RGB-LEDとは…

クムクムの胸の部分についている白い球はRGB-LEDといい、この球ひとつでR(赤)・G(緑)・B(青)色のLED3個分の役目をします。それぞれの色のON/OFFはプログラムによって独立してコントロールすることができる上、それぞれの明るさもコントロールできるため、様々な色を発色させることができます。クムクムが用意している標準のスクラッチのブロックやPythonのAPIでは明るさのコントロールまではできませんが、各色のON/OFFを組み合わせて7色のコントロールが可能です。Arduinoを利用したC言語でのプログラムではPWM機能を使い明るさのコントロールをすることができます。

RGBLEDには4本の足があり、一番長い足が共通に使うアノードまたはカソードで、そのほかはRGBそれぞれの足です。
共通のアノードの場合には電気のプラスに、カソードの場合はGND側に接続しておき、RGBの足にHIGHまたはLOWの信号を出力することで発色をコントロールします。

LEDの仕組み

Panaspnic様が作成されたLEDについての動画のリンクです。

QumcumPROでのCPUとの接続

QumcumPROのメインボードにおいては、ESP32のIO27,32,33にそれぞれLEDのBRGの足が1KΩの抵抗を通して接続されています。
通常、ここに使用する抵抗は、LEDに流れる電流を制限するために各色の推奨する電流とCPUに合わせた抵抗値をつけるのですが、クムクムでは、各色の明るさを厳密に追及する必要がないため、すべて1KΩの抵抗を使っています。
抵抗値を大きくすると、流れる電流が少なくなるため暗くなります。反対に小さな抵抗を取り付けると明るくなりますが、多くの電流を使うため電流値がCPUの許容を超えたりしてCPUを壊す原因となったりします。
クムクムで使用しているLEDはOSTA5131A-R相当のものを使用しており、カソードコモンとなっていますので、LEDを点灯させたい場合はCPUからHIGHを出力し、消したいときはLOWを出力します。

スクラッチ・PythonではHIGHやLOWを、光らせる/消す、ON/OFFで使い分けています。

サンプルプログラム

スクラッチサンプル

スクラッチのステージ上の[RED][GREEN][BLUE]の各円をクリックするたびに、画面上の動きに合わせてクムクムのLEDが連動して動きます。[RESET]ボタンをクリックするとすべてクリアされクムクムのLEDもすべて消えます。

①SAMPLEを自分のPCにダウンロードします。
②CLUD APPでスクラッチを起動しダウンロードしたサンプルを読み込みます。
③クムクムとパソコンをBluetooth接続しクラッチで動作確認します。

Pythonサンプル

点滅のサンプルプログラムです。


import qumcum
import time
for i in range(3):
    qumcum.led_on(1)
    time.sleep(0.5)
    qumcum.led_off(1)
    time.sleep(0,5)
for i in range(3):
    qumcum.led_on(2)
    time.sleep(1)
    qumcum.led_off(2)
    time.sleep(1)
    qumcum.led_on(3)
    time.sleep(2)
    qumcum.led_off(3)
    time.sleep(2)

Arduino Cサンプル

輝度を変化させるサンプルプログラムです。


// Defines for Pin Assign
#define LED_R_PIN     (32)  // Pin assign for RGB-LED(Red)
#define LED_G_PIN     (27)  // Pin assign for RGB-LED(Green)
#define LED_B_PIN     (33)  // Pin assign for RGB-LED(Blue)
// Defines for PWM Channel
#define LED_R_CH      (0)  // PWM Channel for RGB-LED(Red)
#define LED_G_CH      (1)  // PWM Channel for RGB-LED(Green)
#define LED_B_CH      (2)  // PWM Channel for RGB-LED(Blue)

void setup() {
  // Setup for PWM
  ledcSetup(LED_R_CH,12000,8);  // RGB-LED(Red)
  ledcSetup(LED_G_CH,12000,8);  // RGB-LED(Green)
  ledcSetup(LED_B_CH,12000,8);  // RGB-LED(Blue)

  // Attach Pin for PWM
  ledcAttachPin(LED_R_PIN, LED_R_CH);  // RGB-LED(Red)
  ledcAttachPin(LED_G_PIN, LED_G_CH);  // RGB-LED(Green)
  ledcAttachPin(LED_B_PIN, LED_B_CH);  // RGB-LED(Blue)
}

void loop() {
  int i = 0;
  // RGB-LED(Red) Brighter little by little
  for(i = 0; i < 255; i++) { 
    ledcWrite(LED_R_CH, i);
    delay(10);
  }
  // RGB-LED(Red) Dark little by little
  for(i = 255; i > 0; i--) {
    ledcWrite(LED_R_CH, i);
    delay(10);
  }
  // RGB-LED(Green) Brighter little by little
  for(i = 0; i < 255; i++) {     
    ledcWrite(LED_G_CH, i);
    delay(10);
  }
  // RGB-LED(Green) Dark little by little
  for(i = 255; i > 0; i--) {
    ledcWrite(LED_G_CH, i);
    delay(10);
  }
  // RGB-LED(Blue) Brighter little by little
  for(i = 0; i < 255; i++) {     
    ledcWrite(LED_B_CH, i);
    delay(10);
  }
  // RGB-LED(Blue) Dark little by little
  for(i = 255; i > 0; i--) {
    ledcWrite(LED_B_CH, i);
    delay(10);
  }
}