つれづれなる備忘録

日々の発見をあるがままに綴る

TinkercadによるArduinoシミュレーション19 ~ NeoPixelの駆動

1. Neopixelとは

NeopixelとはAdafruit社(米国)が販売しているArduinoなどで発光を制御できるLEDアレイ電飾のシリーズ商品である。日本ではArduinoも購入できるスイッチサイエンスなどから販売されている。 下のようなLEDがリング状に配列されているものやテープ状ものなどがある

www.switch-science.com

www.switch-science.com

どのように光るかは例えば下の動画が参考になる。 www.youtube.com

2. Neopixel配線とスケッチ

 TinkercadコンポーネントすべてからNeopixel Ring 24を選択する。PWRと電源(5Vに設定)およびGNDを接続する。入力端子は470Ωの抵抗を介してArduinoの6ピンと接続する。(下図参照) シミュレーション上ではArduinoの5V端子とPWRを接続しても成立するが、消費電流が大きい(LED24個)ため電源と接続している。

Neopixelとの接続
Neopixelとの接続

リング状のLEDを赤で順次点灯、消灯、緑で順次点灯、消灯、青で順次点灯、消灯を繰り返す動作をさせる。スケッチは以下のようになる。(フルカラーLED(NeoPixel)を使ってみる | KatsEyeを参照)

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define NUMPIXELS 24
 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
 
int delayval = 100;
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(500);
  
  for(int i=0;i<NUMPIXELS;i++){
      pixels.setPixelColor(i, pixels.Color(0,0,0));
      pixels.show();
      delay(3);
  }
  delay(delayval);
  lp_cnt++;
}

Neopixelを制御するライブラリを#include <Adafruit_NeoPixel.h>としてロードする。Arduinoの出力ピンを#define PIN 6、NeopixelのLED数を#define NUMPIXELS 24とする。 オブジェクトpixelsをAdafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);として宣言する。 NEO_GRBやNEO_KHZ800はNeopixelのタイプを表していてほとんどの製品がこれに属する。より詳細は Arduino Library Use | Adafruit NeoPixel Überguide | Adafruit Learning Systemを参照。 発光させるLEDの色はuint32_t tmp_color= pixels.Color(0, 0, 0);とする。pixels.Color()はRGB値を0~255で指定する。setup関数内ではpixels.begin();としてloop関数内で例えば赤で点灯させる場合はtmp_color=pixels.Color(50,0,0);として色を指定し、pixels.setPixelColor(i, tmp_color );でi番目(実際にはfor文でループさせる)のLEDを指定した色であるtmp_colorで発光する設定を行いpixels.show();でLEDを発光させる。 LEDを順に発行させたあとはfor文内にpixels.setPixelColor(i, pixels.Color(0,0,0));pixels.show();とすることでLEDを消灯させる。

4. まとめ

 今回はNeopixelの駆動方法を紹介した。今回はリング状でシミュレーションを行ったが、直線ストリップ状のNeopixelでもLED数の設定を変えるだけで動作する。