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で使い分けています。
サンプルプログラム
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);
}
}