フルカラーLED(NeoPixel)の使い方を学びます。
パーツの組立
フルカラーLEDのGND端子に黒線を、VDD端子に赤線を、DI端子に白線をハンダ付けします。裏面にあらかじめハンダをのせておくとやりやすい。端子の反対側にピンヘッダーをハンダ付けして完成。収縮チューブで補強しておくと折れにくい。
マイコン内蔵RGBLEDモジュール
フルカラーLEDの接続
下記のようにLEDを接続します。
フルカラーLED R→Arduino 3.3V
フルカラーLED B→Arduino GND
フルカラーLED W→Arduino 13
プログラム:ColorLED
カラーLEDの制御には、Adafruit_NeoPixelライブラリを用います(ライブラリのインストール方法は動画をご覧ください)。プログラム冒頭で、デジタルポートの13番を制御用に使うこと、LEDの数が1個であることを定義しています。プログラムは、setup関数で初期化を行い、loop関数でLEDの点灯を処理しています。色のセットは、pixels.clear→pixels.setPixelColor→pixels.showの順で行います。pixels.Color(R, G, B)の形式で、色の強さは0~255で指定します。
//カラーLEDを用い、赤・緑・青色を点灯
#include <Adafruit_NeoPixel.h>
#define PIN 13 //制御用ピン
#define NUMPIXELS 1 //LEDの数
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin(); //LEDを初期化
}
void loop() {
pixels.clear();
pixels.setPixelColor(0, pixels.Color(20, 0, 0)); //赤
pixels.show();
delay(1000); //1000ms停止
pixels.clear();
pixels.setPixelColor(0, pixels.Color(0, 20, 0)); //緑
pixels.show();
delay(1000); //1000ms停止
pixels.clear();
pixels.setPixelColor(0, pixels.Color(0, 0, 20)); //青
pixels.show();
delay(1000); //1000ms停止
}
プログラム:SmoothR
プログラムを使い、赤色のみをスムースに点滅させます。
//カラーLEDを用い赤色をスムースに点滅
#include <Adafruit_NeoPixel.h>
#define PIN 13 //制御用ピン
#define NUMPIXELS 1 //LEDの数
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin(); //LEDを初期化
}
void loop() {
int t=5;
for(int i=0;i<256;i++){
pixels.setPixelColor(0, pixels.Color(i,0,0)); //Red
pixels.show();
delay(t);
}
for(int i=0;i<256;i++){
pixels.setPixelColor(0, pixels.Color(255-i,0,0)); //Red
pixels.show();
delay(t);
}
}
プログラム:VRLED
可変抵抗を使ってLEDの色を変えます。その際、接続は下記の通り。
可変抵抗R→Arduino 5V 可変抵抗B→Arduino GND 可変抵抗W→Arduino A0 |
フルカラーLED R→Arduino 3.3V フルカラーLED B→Arduino GND フルカラーLED W→Arduino 13 |
//可変抵抗でカラーLEDの色を変える
#include <Adafruit_NeoPixel.h>
#define PIN 13 //制御用ピン
#define NUMPIXELS 1 //LEDの数
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int vr1;
void setup() {
pixels.begin(); //LEDを初期化
}
void loop() {
vr1= analogRead(0);
pixels.setPixelColor(0, pixels.Color(vr1/4,0,255-vr1/4));
pixels.show();
delay(10);
}