読者です 読者をやめる 読者になる 読者になる

Duinofun NeoPixel shieldをArduinoで使ってLED派手にキラキラ

f:id:emcpp:20160908173051j:plain
Arduino UNOの上に差し込むだけ、5×8のフルカラーLEDマトリクスシールドのDuinofun NeoPixel shieldを使ってLEDをキラキラさせてみたいと思います。








f:id:emcpp:20160908173520j:plain
Arduino UNOに差し込んだ状態。ぴったりきているのですが、
f:id:emcpp:20160908173603j:plain
電解コンデンサのパッケージにピンが接触するようです。一応問題はなさそうですが。。。まあいいか。

f:id:emcpp:20161029214306j:plain
最近のボードだとコンデンサが内側に引っ込んだから大丈夫みたいだけど。。。。


また、全LEDをフルパワーで光らせると500mA以上の電流を消費するので、USB電源だけでは足りなくなるようです。ArduinoのDCプラグやシールドの電源INから電源を供給しましょう。

Githubにライブラリがありますので、「Clone or download」から「Download ZIP」を選択し、ZIPファイルをダウンロードしておきます。

Arduino IDEの1.6.11を使用しています。
f:id:emcpp:20160908180858p:plain
「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール...」を選択し、先ほどダウンロードしたAdafruit_NeoPixel-master.zipをインポートします。


f:id:emcpp:20160909000926p:plain
ボードは「Arduino/Genuino Uno」を選択。


f:id:emcpp:20160909001130p:plain
COMポートをちゃんと選択します。


とりあえず、細かい事はさておき光らせたい方は、以下のこのサンプルプログラムをコピペしてArduinoに書き込みをしてみてください。
f:id:emcpp:20160908224208g:plain
なかなか綺麗ですね。このプログラムは、いくつかのパターンで光るようです。



さて、プログラムの説明をしていきます。シンプルで動くプログラムを作ってみました。

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

#define PIN            6	//NeoPixelの設定ピン

#define NUMPIXELS      40	//LEDの個数

//ライブラリの定義
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // ディレイ(ミリ秒)

void setup() {
	pixels.begin(); //ライブラリの初期設定
}

void loop() {

  for(int i=0;i<NUMPIXELS;i++){
    pixels.setPixelColor(i, pixels.Color(0,0,150)); // カラーをセット(R,G,B)
    pixels.show(); // セットされたカラーを表示
    delay(delayval); // ディレイ
  }

  for(int i=0;i<NUMPIXELS;i++){
    pixels.setPixelColor(i, pixels.Color(0,0,0)); // カラーをセット(R,G,B)
    pixels.show(); // セットされたカラーを表示
    delay(delayval); // ディレイ
  }

}


キモはこのあたりです。

pixels.setPixelColor(i, pixels.Color(0,0,150));

i はLEDの位置です。
f:id:emcpp:20160909015850p:plain
iの値は、この写真の番号になります。

pixels.Color(0,0,150)は、LEDの色を指定します。R,G,Bの順番になっており、0~255までの値を指定します。255が一番明るい値です。



次の

pixels.show();

ですが、セットしたLEDの位置とカラーを表示します。show()する前に、setPixelColorを複数指定することも可能です。


それを踏まえて適当なサンプルはこちら

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

#define PIN            6	//NeoPixelの設定ピン

#define NUMPIXELS      40	//LEDの個数

//ライブラリの定義
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 50; // ディレイ(ミリ秒)

byte R_Pixel[5][84] =	{
            {255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,236,225,202,191,167,154,128,114, 92, 66, 44,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36, 57, 91,105,119,145,158,182,194,215,227,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255},
            {255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,236,225,202,191,167,154,128,114, 92, 66, 44,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36, 57, 91,105,119,145,158,182,194,215,227,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255},
            {206,206,206,206,206,206,205,205,205,205,205,204,204,204,200,187,177,159,150,130,120, 99, 88, 70, 49, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 25, 43, 70, 81, 91,113,123,142,152,170,179,195,205,204,204,205,206,205,206,206,206,205,206,206,206,206,206},
            {149,149,149,149,150,149,149,149,149,149,148,148,148,148,145,134,128,115,107, 94, 86, 70, 62, 48, 33, 22,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 29, 47, 57, 65, 81, 88,102,109,122,129,142,149,149,149,149,149,149,149,149,149,150,150,150,149,150,149},
            { 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 85, 84, 83, 77, 73, 65, 60, 52, 47, 38, 33, 24, 16,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6, 11, 24, 29, 35, 44, 48, 57, 61, 69, 73, 81, 85, 85, 85, 85, 85, 85, 85, 86, 86, 85, 85, 85, 86, 85, 86}
};

byte G_Pixel[5][84] =	{
            { 31, 48, 59, 86, 99,110,135,147,169,180,200,211,232,241,251,251,251,251,251,251,251,250,250,250,250,250,250,250,251,251,250,251,251,251,251,252,252,252,253,252,253,253,244,234,214,203,183,172,150,139,115,105, 92, 69, 60, 47, 48, 48, 48, 49, 50, 50, 51, 52, 53, 54, 55, 56, 58, 59, 56, 53, 51, 47, 46, 42, 41, 37, 37, 34, 33, 32, 32, 31},
            { 31, 48, 59, 86, 99,110,135,147,169,180,200,211,232,241,251,251,251,251,251,251,251,250,250,250,250,250,250,250,251,251,250,251,251,251,251,252,252,252,253,252,253,253,244,234,214,203,183,172,150,139,115,105, 92, 69, 60, 47, 48, 48, 48, 49, 50, 50, 51, 52, 53, 54, 55, 56, 58, 59, 56, 53, 51, 47, 46, 42, 41, 37, 37, 34, 33, 32, 32, 31},
            { 22, 35, 45, 66, 77, 86,104,114,131,141,158,167,184,191,199,199,199,198,198,198,198,198,198,198,198,198,198,198,198,197,198,198,199,198,198,199,199,200,200,199,200,200,192,184,168,160,143,134,117,108, 90, 81, 71, 53, 45, 35, 36, 36, 36, 37, 37, 37, 39, 39, 39, 40, 41, 42, 43, 44, 42, 39, 38, 36, 34, 32, 30, 28, 26, 25, 24, 23, 22, 22},
            { 13, 23, 29, 45, 53, 61, 74, 82, 95,101,114,120,133,138,144,144,144,144,143,144,144,143,144,143,143,144,143,143,144,143,144,144,144,144,144,145,144,144,145,145,145,145,139,133,122,115,103, 97, 84, 77, 63, 56, 50, 35, 30, 22, 23, 23, 23, 23, 24, 24, 25, 25, 26, 26, 27, 28, 29, 29, 28, 26, 24, 22, 21, 20, 19, 17, 16, 15, 14, 13, 13, 12},
            {  4,  9, 13, 23, 27, 31, 40, 44, 53, 56, 65, 68, 76, 79, 82, 82, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 82, 82, 82, 83, 80, 76, 69, 65, 57, 54, 45, 42, 33, 29, 26, 17, 13,  8,  8,  9,  8,  9,  9,  9, 10,  9, 10, 11, 11, 11, 12, 12, 12, 10, 10,  8,  8,  7,  7,  6,  5,  5,  4,  4,  4,  4}
};

byte B_Pixel[5][84] =	{
            {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 21, 61, 78, 99,120,133,157,169,193,203,225,235,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243,225,214,192,180,157,146,119,106, 85, 62, 43,  0,  0},
            {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 21, 61, 78, 99,120,133,157,169,193,203,225,235,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243,225,214,192,180,157,146,119,106, 85, 62, 43,  0,  0},
            {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 13, 46, 58, 76, 92,103,123,132,151,160,176,186,200,203,202,203,203,203,203,203,203,203,204,203,203,204,203,204,203,203,203,203,203,203,203,202,202,203,203,202,203,191,177,169,152,141,123,113, 92, 82, 65, 46, 32,  0,  0},
            {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7, 32, 41, 53, 66, 72, 88, 95,108,116,127,134,145,147,147,147,147,147,147,148,148,147,148,148,147,147,147,147,147,148,147,147,148,147,147,147,147,147,148,147,147,139,128,121,108,101, 88, 81, 65, 58, 45, 32, 20,  0,  0},
            {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3, 13, 20, 27, 35, 39, 47, 53, 61, 65, 72, 77, 82, 84, 84, 84, 84, 84, 84, 84, 84, 85, 84, 84, 85, 84, 84, 84, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 80, 72, 69, 60, 56, 48, 44, 36, 29, 22, 13,  7,  0,  0}
};

void setup() {
	pixels.begin(); //ライブラリの初期設定
	pixels.show();	// 表示をクリア
}

void loop() {
	int Num = sizeof R_Pixel[0] /sizeof R_Pixel[0][0];
	for(int i=0;i<Num;i++){
		for(int y=0;y<5;y++){
			for(int x=0;x<8;x++){
				int xy = x + (y * 8);
				int x_s = x + i;

				if(x_s > Num - 1){
					x_s = x_s - Num;
				}

				int R = R_Pixel[y][x_s];
				int G = G_Pixel[y][x_s];
				int B = B_Pixel[y][x_s];
				pixels.setPixelColor(xy, pixels.Color(R,G,B));
			}
		}
		pixels.show(); // セットされたカラーを表示
		delay(delayval); // ディレイ
	}
}