PR 記事には広告が含まれています
スポンサーリンク
Translate

AliExpressで購入した色付きスモークLEDをRaspberry Pi Picoで光らせてみました

スポンサーリンク

どうもkohaniiです。

数年前に購入した5mmの色付きスモークタイプのLEDが少なくなってきたので、
AliExpressで面白そうなLEDを購入してみました。

3mmのスモークLEDで6色×10個入りで440円(+送料58円)と安いので試しに買ってみました。
内容は赤色オレンジ色黄色緑色青色、白色です。
オレンジ色は少し珍しいんじゃないでしょうか。

次に角形で発光部がドーム状になっているLEDで、5色×6個入りで134円(+送料138円)で試しに買ってみました。
内容は赤色黄色緑色青色、白色です。
https://www.aliexpress.com/item/1005002084724414.html

スポンサーリンク

届いた

まず3mmのLEDです。
色ごとにわざわざ小袋に分けられています。
商品の写真よりスモークが強め(不透明)でした。

そして角形のLEDです。
こちらは全ての色がまとめてチャック袋に入っています。
なぜか赤色のLEDだけリード線が短いです。

並べて写真を撮ってみました。
角形LEDの青色は周りの樹脂が少し紫っぽいです。

3mmのLEDのリード線は2.54mmピッチになっているので普通のユニバーサル基板に刺さります。

スポンサーリンク

光らせてみる

ブレッドボードにRaspberry Pi PicoとLED、抵抗を配線しました。
抵抗は全て100Ωで、LEDをPicoのI/Oに接続しています。
ちなみにPicoのI/Oの電圧は3.3Vです。

試しに全てのLEDピンをハイにしてLEDを光らせてみました。
ほとんどのLEDはかなり眩しいですが、3mmの黄色と角形の黄色はそんなに眩しい感じはしないです。
中でも緑 青 白色はどちらのLEDもかなり眩しいです。

上から見たLEDです。
やはり上から見た方が明るいです。

途中で角形LEDの黄色を間違えて逆電圧をかけてしまい、正しい極性に直しましたがほとんど見えないほど暗く、壊れてしまったようです。
秋月電子で販売されている黄色LEDの耐逆電圧は5Vほどが多かったのですが、この黄色のLEDは3.3Vの逆電圧には耐えられなかったようです。

Raspberry Pi Picoとプログラム

Arduinoで開発したかったので、Raspberry Pi PicoをArduinoで使うためのボードをインストールしました。

arduino-pico
https://github.com/earlephilhower/arduino-pico

他にもMbed OSを利用したPico用のボードがあるのですが、Mbedベースで高度な事ができない(やりづらい)、digitalWriteの動作が遅いなどの問題があるため、
Raspberry Pi Pico SDKを使用しているこのボードを利用しています。
このボードは最近FreeRTOSがサポートされるなど高機能なのでおすすめです。

プログラム

LEDを光らせるためのプログラムです。
leds_pin配列に入っているピン番号にLEDが繋がっています。

const int leds_count = 11;
const int leds_pin[leds_count] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};

void setup() {
  analogWriteResolution(8);//bit
  analogWriteFreq(40000);
  for (int i = 0; i < leds_count; i++) {
    pinMode(leds_pin[i], OUTPUT);
  }
}

void loop() {
  /*
    //全て光らせる用
    for (int i = 0; i < leds_count; i++) {
      digitalWrite(leds_pin[i], HIGH);
    }
    return;
  */

  for (int l = 0; l < 8; l++) {
    for (int a = 0; a < leds_count; a++) {
      for (int i = 0; i < leds_count; i++) {
        analogWrite(leds_pin[i], i == a ? 255 : 0);
      }
      delay(60);
    }
    for (int a = leds_count - 2; a > 0; a--) {
      for (int i = 0; i < leds_count; i++) {
        analogWrite(leds_pin[i], i == a ? 255 : 0);
      }
      delay(60);
    }
  }

  for (int c = 0; c < 1000; c++) {
    float offset = sin((float)c / 1000 * 3.1415 * 2);
    offset *= offset;
    for (int i = 0; i < leds_count; i++) {
      float phase = 0;
      phase -= (float)i / leds_count;
      phase += (float)offset * 5;
      float n = 0.5 - (cos(phase * 3.1415 * 2) / 2);
      n *= n * (0.5 + n / 2);
      analogWrite(leds_pin[i], (int)(n * 255));
    }
    delay(10);
  }

  for (int l = 0; l < 8; l++) {
    uint8_t r[leds_count];
    for (int i = 0; i < leds_count; i++) {
      r[i] = random(100) < 50 ? 1 : 0;
    }
    for (int a = 128 - 1; a >= 0; a--) {
      for (int i = 0; i < leds_count; i++) {
        analogWrite(leds_pin[i], r[i] ? (a * a) / 64 : 0);
      }
      delay(5);
    }
  }
}

動画

プログラムを書き込んで動画を撮ってみました。音は出ません。
ナイトライダーからのPWMでのスクロール、ランダム点滅で光ります。

Raspberry Pi PicoではPWMが16チャンネル(8スライス×2)使える様なので、このような豪華な使い方ができます。

これでLED在庫の危機は無くなりました。
色も良いので他の実験にも使ってみようと思います。

おわり