めーぷるのおもちゃばこ

- アイドルになりたいエンジニア女子の制作日記 -

【Arduino】LEDシリアルテープを光らせる

ArduinoでLEDのテープを光らせてみました!!!

youtu.be



LEDのテープは以下の物を使用しています。ライブラリもArduino用のライブラリもここからゲットできます。
www.switch-science.com


配線

つなぎ方は以下のような感じです!
LEDにはArduinoからではなく、外部電源をつなぎました。
LEDテープに外部電源をつなぐ際には、必ず外部電源のGNDをAruduinoのGNDに繋げる必要があります。
そうしないと光り方がおかしくなります。

f:id:maplesyrup-cs6:20190131192949j:plain

LEDはデジタル2番ピンに繋げています。
また、スイッチを押したらブワーっと色が変わっていくようにしたかったので
スイッチを6番ピンに繋げました。


プログラムの例

光らせるコードは以下のような感じです。

#include <Adafruit_NeoPixel.h>
#include "Arduino.h"
#include "SoftwareSerial.h"

#define DELAY_TIME 200
#define DELAY_TIME2 10


Adafruit_NeoPixel strip = Adafruit_NeoPixel(120, 2, NEO_GRB + NEO_KHZ800);

 
void setup() {

  Serial.begin(9600);
  //delay(1);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

  pinMode(6,INPUT);
  pinMode(13, OUTPUT);

  
  colorWipe(strip.Color(100, 0, 250), DELAY_TIME2); // Purple

}

void loop() {
  // put your main code here, to run repeatedly:
if(digitalRead(6) == HIGH)
  {  
    colorWipe(strip.Color(100, 100, 0), DELAY_TIME2);  //YELLOW
    colorpettern1(strip.Color(0, 50, 0), DELAY_TIME2);  //GREEN
    colorpettern2(strip.Color(100, 20, 20), DELAY_TIME);  //Pink
    colorpettern3(strip.Color(100, 200, 50), DELAY_TIME); //エメラルド 
    colorpettern4(strip.Color(0, 0, 255), DELAY_TIME2);  //Blue
    colorpettern5(strip.Color(255, 255, 255), DELAY_TIME2); //White
    colorpettern8(strip.Color(0, 100, 150), DELAY_TIME2);  //SkyBlue
    colorpettern10(strip.Color(255, 0, 0), DELAY_TIME);  //Red
    colorWipe(strip.Color(0, 0, 0), DELAY_TIME2);  //Black
    
  }  
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}


void colorpettern1(uint32_t c, uint8_t wait){
      for(uint16_t i=0; i<strip.numPixels(); i++) {
        if(i%2 == 0){
          strip.setPixelColor(i, c);
          strip.show();
          delay(wait);
          strip.setPixelColor(i, 0);
          strip.show();
        }else{
          strip.setPixelColor(i, 0);
          strip.show();
          delay(wait);
          strip.setPixelColor(i, c);
          strip.show();
        }
  }
}

void colorpettern2(uint32_t c, uint8_t wait){
     for(int i = 0 ; i < strip.numPixels(); i++ )
     {
        strip.setPixelColor(i-1,strip.Color(0,0,0));
        strip.setPixelColor(i,c);
        strip.show();
        delay(30);
     }
}

void colorpettern3(uint32_t c, uint8_t wait){
     for(int i = 0 ; i < strip.numPixels(); i++ )
     {
      int r = random(0, strip.numPixels());
        strip.setPixelColor(r,c);
        strip.show();
        delay(20);
     }
}

void colorpettern4(uint32_t c, uint8_t wait){
     for(int i = 0 ; i < strip.numPixels(); i++ )
     {
      strip.setPixelColor(i,strip.Color(0,0,0));
      int r = random(0, strip.numPixels());
        strip.setPixelColor(r,c);
        strip.show();
        delay(20);
        strip.setPixelColor(r,c);
        strip.show();
     }
    
}

void colorpettern5(uint32_t c, uint8_t wait){
     for(int i = 0 ; i < 70; i++ )
     {
      strip.setPixelColor(i,strip.Color(0,0,0));
      int r = random(0, strip.numPixels());
        strip.setPixelColor(r,c);
        strip.show();
        delay(20);
        strip.setPixelColor(r,strip.Color(0,0,0));
        strip.show();
     }
    
}

void colorpettern6(uint32_t c, uint8_t wait){
      uint16_t i, j;
 
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      if(i%2 == 0){
        strip.setPixelColor(i, c);
      }else{
        strip.setPixelColor(i, strip.Color(0,0,0));
      }
    }
    strip.show();
    //delay(wait);
  }  
}

void colorpettern7(uint32_t c, uint8_t wait){
      uint16_t i, j;
 
  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      if(i%2 == 1){
      strip.setPixelColor(i, c);
      }else{
        strip.setPixelColor(i, strip.Color(0,0,0));
      }
    }
    strip.show();
    //delay(wait);
  }  
}

void colorpettern8(uint32_t c, uint8_t wait){
      colorpettern6(c, 0);
      //delay(20);
      colorpettern7(c, 0);
      //delay(20);
      colorpettern6(c, 0);
      //delay(20);
      colorpettern7(c, 0);
}

void colorpettern9(uint32_t c, uint8_t wait){
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);    
  }
  strip.show(); 
}


void colorpettern10(uint32_t c, uint8_t wait){
      colorpettern9(c, 0);
      delay(wait);
      colorpettern9(strip.Color(0, 0, 0), 0);
      delay(wait);
      colorpettern9(c, 0);
      delay(wait);
      colorpettern9(strip.Color(0, 0, 0), 0);
      delay(wait);
      colorpettern9(c, 0);
      delay(wait);
      colorpettern9(strip.Color(0, 0, 0), 0);
      delay(wait);
      colorpettern9(c, 0);
      delay(wait);
      colorpettern9(strip.Color(0, 0, 0), 0);
      delay(wait);
      colorpettern9(c, 0);
      delay(wait);
      colorpettern9(strip.Color(0, 0, 0), 0);
      delay(wait);
      colorpettern9(c, 0);
      delay(wait);
      colorpettern9(strip.Color(0, 0, 0), 0);
      delay(wait);
      colorpettern9(c, 0);
      delay(wait);
      int r = random(0, strip.numPixels());
      strip.setPixelColor(r,c);
      strip.show();
      
}     

コードの解説

コードの内容としては、

ライブラリの読み込み

#include <Adafruit_NeoPixel.h>


NeoPixelのインスタンス。第一引数がLEDの数です。ピッタリじゃなく多めに書いてあってもいけます。
第二引数は使用するデジタルピンの番号です。

Adafruit_NeoPixel strip = Adafruit_NeoPixel(120, 2, NEO_GRB + NEO_KHZ800);


ここで初期化しています。
strip.begin();でArduinoのすべてのLED用のメモリ?に0が書き込まれ、strip.show();でLEDに転送しているのですべてのLEDがOFFになります。

  strip.begin();
  strip.show(); // Initialize all pixels to 'off'


LEDの色は以下の関数でセットします。

strip.setPixelColor(使用するLEDの番号, R, G, B);


すべてのLEDの色を変えたいときはfor文を使います。色を決めてstrip.show();で反映しています。
こちらのコードだとLEDが一つずつ順番に光っていき、

  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, 255, 255, 255);
      strip.show();
  }


for文の外に strip.show();を書くと、すべてのLEDが同時に光ってくれます。

  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, 255, 255, 255);
  }
  strip.show();


これらを使って、光り方のパターンの関数を作って実行しています。
また、この中では使っていませんが、

uint32_t color = strip.getPixelColor(取得したいLEDの番号);

でLEDにセットされた色情報を取得でき、

strip.setBrightness(0から255の値);

で輝度を調整できるみたいです。