ゲオやダイソーで売っているLEDテープを自由に光らせる

Light cheap strip LEDs with Arduino
ゲオやダイソーで売っているリモコン付きカラーLEDテープ。いずれの商品も、このようなパッケージの見た目と反して、個々の色を変えて虹色に光らせることはできません。

虹色に光るタイプのLEDテープは信号線があり、LEDに組み込まれているマイコンがこのデータを読み取って発光しています。一方でこの安価なLEDテープを簡単な図にするとこんな感じで、各LEDはRGB別に受け取った電力で発光しているに過ぎません。
逆に言えば、RGB別に流れる電流を操作することで任意の色を出すことができるので、マイコンで制御してやれば、少なくとも16色よりも多い色で光らせ、かつ任意の間隔で明滅させることができます。

LEDの明るさを調節するにはanalogWrite()を使うのが一般的です。電子工作の入門書ではフルカラーLEDに直接電流を流す例がありますが、LEDテープとなると消費電力が大きいため、独立した電源を扱う必要があります。同様に理由により、電流を制御するためのスイッチングにはトランジスタではなく大きな電流に耐えられるMOSFETを使います。
これは回路図の一例です。抵抗は1kΩ。MOSFETにはNチャネルのIRFZ44Nを用いていますが、秋月電子で売っている5V2A以上に対応する安価なNchパワーMOSFETでもよいでしょう。電圧の均衡を保つため、GNDは互いに繋げています。MOSFETの1番左のピン(ゲート)に電圧がかかると、2番目のピン(ドレイン)から3番目のピン(ソース)へと電気が流れるようになっています。
こちらは余談ですが、LEDテープのピンやソケットは、ブレッドボード用にも使われる2.54mmピンヘッダよりも細いラウンドタイプなので、DIP ICソケットを切り取ったものに通常のピンヘッダを半田付けした自作のアダプターを作りました。
sample.c
#define LED_PIN_RED   2
#define LED_PIN_GREEN 3
#define LED_PIN_BLUE  4

uint8_t c_red =  0;
uint8_t c_green = 0;
uint8_t c_blue = 0;

void setup()
{
    pinMode(LED_PIN_RED, OUTPUT);
    pinMode(LED_PIN_GREEN, OUTPUT);
    pinMode(LED_PIN_BLUE, OUTPUT);
}

void loop() 
{
	analogWrite(LED_PIN_RED, c_red++);
	analogWrite(LED_PIN_GREEN, c_green++);
	analogWrite(LED_PIN_BLUE, c_blue++);
	delay(100);
}
Arduinoコードの一例です。RGBそれぞれに256段階の電圧(PWM信号)を設定することで、任意の色や明るさを調整できます。こちらで紹介しているUSBライティングプログラムと連携させれば、Windows 11からの制御も可能です。

2024/12/18