きゃぴ (*≧∇≦)/
お使いの端末は正常です。個人的には覚悟するんよの「よっ↑」ってところが好き
前回、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すべてが光らなくなってしまうのが欠点です;;
適当に3つのPL9823-F5をチカチカっとさせるプログラムを載せておきます
適当にチカチカっとさせるプログラム
以下のサイトを参考にプログラムを書いてみました
- ArduinoによるRGB-LEDの制御 | プログラミングテクニック集キヤミー
- フルカラーLEDテープを使ったちょっとお洒落な電子工作 〜Arduinoでパーツやセンサーを使ってみよう | Device Plus – デバプラ
#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