1.NeoPixelライブラリインストール
adafruit社のNeoPixelというフルカラーLEDがあります。NeoPixelは非常に多くのフルカラーLEDをたった一つの出力信号で制御できるということです。adafruit社ホームページにArduino用ライブラリとサンプルプログラムの使用方法の解説があり、今回はこれらを確認していくことにします。
Arduino用ライブラリのインストールの仕方はadafruit社ホームページでは、Arduino IDE(1.6.2以上)のライブラリマネージャーを使う方法と手動による方法が書かれていますが、今回はライブラリマネージャーを使う方法を試します。
ネット接続している環境で、Arduino IDEを起動し、「スケッチ」-「ライブラリをインクルード」-「ライブラリを管理」の順に進みます。(下図)
ライブラリマネージャーが起動します。ライブラリマネージャーの検索フィルターに「Adafruit NeoPixel」と入力します。(ホームページには「Adafruit NeoPixel by Adafruit」と入力する様に書かれていますが、うまく呼び出せなかったので、「Adafruit NeoPixel」としています。)
少し経つといくつかのライブラリがリストアップされるので、「Adafruit NeoPixel by Adafruit」と書かれたブロックにカーソルを近づけると、バージョン選択部と「インストール」と書かれたボタンが現れるので、最新バージョンを選択後、「インストール」ボタンをクリックします。
インストールが完了すると「INSTALLED」と表示されますので、右下の「閉じる」ボタンを押して、ライブラリマネージャーを閉じます。
以上でNeoPixelライブラリのインストールは終了です。
ライブラリをインストールすることによって、サンプルプログラムも使用可能になります。
2.Arduino Uno ー NeoPixel配線
次にサンプルプログラムを動かすためにArduino UnoとNeoPixelを接続します。この接続方法はホームページ(基本接続)に書かれています。
adafruit社 ホームページ NeoPixel Basic Connectionsから引用
https://learn.adafruit.com/adafruit-neopixel-uberguide/basic-connections
下の写真が実際に配線したものです。メーカーホームページとは異なりますが、自己判断でArduino Unoから直接LEDに電源供給しています。また、信号線につなぐ抵抗も470Ωが手元になかったので、330Ωにしています。信号線はこのあと記載するプログラム内で6番PINを設定しているので特に変更していません。
以上でArduino UnoとNeoPixelの接続は終了です。参考までにホームページによるとNeoPixelの供給電圧は基本5Vの様ですが、3.7Vのリチウムポリマー電池等にも対応している様な記載もあります。3.7Vにすることで、信号が3.3Vのマイコン出力でも制御出来るようです。
3.サンプルプログラムの確認
サンプルプログラムを呼び出します。「ファイル」-「スケッチ例」ー「Adafruit NeoPixel」ー各プログラムの順に選択します。
上の図の通り、5つのプログラムを呼び出すことが出来ます。次の動画は「simple」をArduino Unoに書き込んで実行している状況です。サンプルプログラムそのままでは、点灯後、消灯されないので、実際には全点灯後に全消灯する部分等を追加しています。
次は「strandtest」の一部です。全体はもっと多くのパターンがあるのですが、時間が長いのでカットしています。「strandtest」と「buttoncycler」は基本的には点灯パターンは同じですが、「buttoncycler」はスィッチ入力によってパターンを変更していく様になっています。
「RGBWStrandTest」は、光の三要素RGB(赤・緑・青)の他にW(白)を加えた点灯パターンの様です。プログラムは動作しますが、W(白)の作用が理解できませんでした。
「StrandTestBLE」は、スマホ等から、bluetoothによって点灯パターンを変化させられる様です。難しそうなのでスキルを上げて改めて後日トライしてみたいと思います。
4.サンプルプログラムの考察
Arduino Unoに書き込んだ「simple」の修正プログラムです。
#include <Adafruit_NeoPixel.h> #include <avr/power.h> #define PIN 6 #define NUMPIXELS 8 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int delayval = 200; int lp_cnt=0; uint32_t tmp_color= pixels.Color(0, 0, 0); void setup() { pixels.begin(); } void loop() { if (lp_cnt % 3 == 0){ tmp_color = pixels.Color(50, 0, 0); } else if (lp_cnt % 3 == 1){ tmp_color = pixels.Color(0, 50, 0); } else if (lp_cnt % 3 == 2){ tmp_color = pixels.Color(0, 0, 50); } for(int i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, tmp_color ); pixels.show(); delay(delayval); // Delay for a period of time (in milliseconds). } delay(500); for(int i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(0,0,0)); pixels.show(); delay(3); } delay(delayval); lp_cnt++; }
最初の1回、下記①~⑤の初期処理を行った後は、⑥の点灯命令によって、点灯状態を変化させる様です。下記処理で各セルの点灯状態を指定していますが、下記の場合、“ i ” は6番PINを接続する最も近いNeoPixelのセル番号(一番手前=0)で対象セル、pixels.Color(0,0,0) によって、対象セルの色を指定します。色指定は、左からRGB(赤・緑・青)になっていて、それぞれ0~255の値を設定します。pixels.Color(255,0,0)とした場合は赤です。
pixels.setPixelColor( i , pixels.Color(0,0,0) );
//①ライブラリ呼び出し | |
1 | #include <Adafruit_NeoPixel.h> |
2 | #include <avr/power.h> |
4 | #define PIN 6 //②制御信号PIN設定 |
5 | #define NUMPIXELS 8 //③制御セル数を設定 |
//④初期設定 | |
7 | Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); |
14 | pixels.begin(); //⑤制御開始 |
//⑥点灯命令 |
|
34 | pixels.setPixelColor( i , pixels.Color(0,0,0) ); |
35 | pixels.show(); |
NeoPixelを制御する主要コマンド(サンプルプログラム抜粋)
初めてだとサンプルプログラムの量は少し多い様にも感じますが、必要部分だけ残すと、思っていたほど複雑ではありません。このシンプルなプログラムで更に多くのセルを制御できるとのことですので驚かされます。より多くのセルを接続する場合は外部電源を供給する必要があると思います。adafruit社ホームページや引用した接続図などを参考にしてみて下さい。
(公開日:18-10-11)