チカッとルンピカ♪


きゃぴ (*≧∇≦)/

お使いの端末は正常です。
個人的には覚悟するんよの「よっ↑」ってところが好き



前回、8×8マトリクスLEDを試したのですが
 今回は ”フルカラーLED” を制御していきたいと思います!
ちなみに、マトリクスLEDの記事は
   Arduinoで8×8マトリクスLEDを試す




 今回も、扱いやすさを重視?してArduino UNO R3を使って制御します。


まずは単純にフルカラーLEDを扱う



秋月電子さんで購入したカソードコモンのフルカラーLED( OSTA5131A )を試します。

RGBフルカラーLED 5mm OSTA5131A カソードコモン (10個入): LED(発光ダイオード) 秋月電子通商



カソードコモンなので、RGBに対してカソード(陰極)は共通なので、
RGBに係る電流を調節してあげれば調色することができそうです^^
(商品ページとデータシートで微妙に電圧降下が違うのですが、ここはデータシートを信用します;;)



LEDが故障しないよう適当な抵抗をつけて(たまたまあった330Ωをつけました)
analogWrite(pinNo, 0~255);
とスケッチすれば、任意の色を発光することができます。

マイコンを使わず半固定抵抗を使うものアリです。


しかし、RGBそれぞれ、元の明るさが異なるなどの関係で、
テレビやパソコンなどのRGBにはほど遠いですね
電圧降下もそれぞれ異なるし、個体差あるし…


そして、もう一つ課題が、
複数個別々に光らせたい時、普通に繋ごうとすればマイコンのピンが足りなくなってしまう…



後者の方の問題は解決することができます!
フルカラーLEDにはマイコン内蔵のものがあり、
任意のLED それぞれに色を指定して光らせることができます


マイコン内蔵LEDを試す



こちらも秋月電子さんで購入した( PL9823-F5 )を試します。

マイコン内蔵RGB 5mmLED PL9823-F5: LED(発光ダイオード) 秋月電子通商


ライブラリは「Adafruit_NeoPixel」を使用します。
(Arduino IDE のライブラリマネージャーで検索しても出てきます)
 GitHub – adafruit/Adafruit_NeoPixel: Neo Pixels!



一本の信号線で複数のLEDの光り方を操作することができるので、使いやすいと思います。

途中のLEDが故障してしまうとそれ以降のLEDすべてが光らなくなってしまうのが欠点です;;

PL9823-F5


適当に3つのPL9823-F5をチカチカっとさせるプログラムを載せておきます

適当にチカチカっとさせるプログラム



以下のサイトを参考にプログラムを書いてみました

#include "Adafruit_NeoPixel.h"
 
#define PIN 6 //信号ピン
#define Num_LEDs 3 //LEDの数
Adafruit_NeoPixel led = Adafruit_NeoPixel(Num_LEDs, PIN, NEO_RGB + NEO_KHZ800);
//                                            |    |     |         |
//                                            |       |     |         +--clock
//                                            |       |     +---LEDの並び方
//                                            |       +--接続ポート     
//                                            +--LEDの数
//3つめのパラメータは使うLEDテープの制御ICがWS2812ならNEO_KHZ800 / WS2811ならNEO_KHZ400

/*
 * ATtiny85では"NEO_KHZ400"は動作せず。
 * WS2811でも"NEO_KHZ800"で動作する。(PL9823-F5にて動作)
 */

 
void setup() {
  led.begin();
  led.show(); // Initialize all pixels to 'off'
}
 
void loop() {
  /* ライブラリ関数の簡単な使い方
  led.setPixelColor(0,led.Color(0,255,0));
                 // |       | 
                 // |       +---R, G, B
                 // +--LED番号(0番からスタート。Arduinoに一番近いLEDが0番)
  led.show();
  */

  blink();
} 


// 3つのLEDを適当に点滅させる関数
void blink(){
    led.setPixelColor(0,led.Color(247,15,31));
    led.setPixelColor(1,led.Color(0,0,0));
    led.setPixelColor(2,led.Color(0,0,0));
    led.show();
    delay(600);
    
    led.setPixelColor(0,led.Color(0,0,0));
    led.setPixelColor(1,led.Color(255,224,18));
    led.setPixelColor(2,led.Color(0,0,0));
    led.show();
    delay(600);

    led.setPixelColor(0,led.Color(0,0,0));
    led.setPixelColor(1,led.Color(0,0,0));
    led.setPixelColor(2,led.Color(20,67,132));
    led.show();
    delay(600);
}

※WS2811チップを利用している「PL9823-F5」では3つ目のパラメータは “NEO_KHZ400” となっていますが、データシートを見ると ‘ Send data at speeds of up to 400 Kbps and 800 Kbps two patterns.
つまり、800kbpsでも使えるという事から “NEO_KHZ800” でも動作します。

特に、ATtiny85で “NEO_KHZ400” は対応していない為 “NEO_KHZ800” にすることで解決します。



ライブラリのありがたさよ…
でわ、bye^^ @hasshie53