Arduinoを使ってLEDテープを光らせるにあたって、まず回路を組みました。

まずはテストなので、電源の入り切りで回路の入り切りをするだけの回路です。

 

「VCC DC5V」は今回搭載する制御系統、LEDテープの電源です。

バイクのバッテリから取るか、スマホの充電用バッテリから取るか悩み中です。

 

「Arduino電源」はArduinoに電源を供給するためのUSBメス端子です。

 

中央のでっかい四角がArduino本体です。電源はUSBケーブルで「Arduino電源」に挿します。

右にあるのがLEDテープの「WS2812」です。図には2個しか描いていませんが、実際には144個連なっています。Arduinoと接続するのは左端の1個のみです。

 

LEDが焼損しないようにするため、1000μFのコンデンサーをLED電源に並列配線し、300~500Ωの抵抗器を1番目のLED素子のDIN端子とArduinoの間に直列配線するらしいです。理屈はよく分かりません。

 

 

 

そして、実際に配線した写真がこれです。

 

コンデンサと抵抗が1個ずつの、超が付くほどシンプルな回路です。

今はテストなので、バッテリはスマホ用のやつです。

この時、注意してください。

GNDは共通ですが、「5V」の電源までArduinoから取っちゃうと、電流が流れすぎてICがぶっ壊れます。

LEDテープの電源は、必ず別電源としましょう。

 

GNDは共通にしないと、1個目のLEDがちらつきます。

 

 

 

そして、こいつに入っているスケッチ(プログラム)がこちらです。

// 【重要】NeoPixelが焼損しないようにするため、1000μFのコンデンサーをLED電源に並列配線し、
// 300~500Ωの抵抗器を1番目のLED素子のDIN端子とArduinoの間に直列配線します。
// Arduino と1番目のLED素子は出来るだけ近接させます。
// 配線作業は、電源投入済みの回路では行なわないでください。
// もし、どうしてもそれが必要な場合、GNDから先に配線してください。

//1A以上の電流をかけようとしている場合(LED 1素子あたり20~50mA)は、テープLEDに5V電源を直接接続します。
//テープLEDのGNDは、Arduino のGNDと共有する必要があります。



//ライブラリの読み込み
#include <Adafruit_NeoPixel.h>  //Adafruit_NeoPixelライブラリ



//変数定義
#define LEDPIN 6        //Adafruit_NeoPixelで使用する入出力ピン
#define Pixels 144       //LEDテープのLED素子の数



//NeoPixelオブジェクトを宣言します。この名前を後で参照しピクセルのストリップを制御します
//Adafruit_NeoPixel( Parameter 1 , Parameter 2 , Parameter 3 )
//Parameter 1 = テープ上のLED素子数
//Parameter 2 = Arduino ピン番号 (おおかた利用可)
//Parameter 3 = LED素子タイプフラグ(必要に応じて追加)
//  NEO_KHZ800  800 KHz ビット信号 (LED「WS2812」を使用したほとんどの NeoPixel 品)
//  NEO_KHZ400  400 KHz ビット信号 (旧い v1 (v2でない) FLORA, LEDドライバー「WS2811」)
//  NEO_GRB     LED素子はGRBビット信号で接続 (ほとんどの NeoPixel 品)
//  NEO_RGB     LED素子はRGBビット信号で接続 (v1 FLORA,v2 ではありません)
Adafruit_NeoPixel strip = Adafruit_NeoPixel( Pixels , LEDPIN, NEO_GRB + NEO_KHZ800);



void setup() {
 
  strip.begin();
    //初期化を行う処理です。ここで指定の出力ピンにpinMode(pin, OUTPUT);を行ってます。
 
  strip.setBrightness(15);
    //LEDの明るさを指定します。0-255の範囲です。
 
  strip.show();
    //strip.show()は絶対に必要なわけではありません。
    //この関数で実際に接続している全てのLEDに出力します。
    //この関数は、まだ色が設定されていないので、ピクセルにデータをプッシュアウトします。
    //この場合、以前のプログラムによって一部が点灯された場合、すべてのNeoPixelsを初期の「オフ」状態に初期化します。

}

void loop() {
 
  colorWipe(strip.Color(255, 0, 0), 10); // Red
  colorWipe(strip.Color(0, 255, 0), 10); // Green
  colorWipe(strip.Color(0, 0, 255), 10); // Blue
 
    // strip.Color()関数では、赤、緑、青の輝度レベルで表現されるピクセルカラー(0-255)値を構造体に格納し、色をセットできます
    // 一括して色を変更したい場合はfor文でLEDの数分だけ
    // setPixelColorを呼びます
    // strip.setPixelColor(n, red, green, blue);
    
    //colorWipe()関数を呼び出し、
    //strip.Color()で指定した次の3つの引数、赤、緑、青の輝度レベルで表現されるピクセルカラー(0は最も暗く、255は最大輝度)と、
    //待ち時間(ms)を全てのNeoPixelsへ反映します。


 
  }


void colorWipe(uint32_t c, uint8_t wait) {
  //この関数を1度処理すると、
  //uint32_t c で指定した1つの色が、
  //uint8_t wait の間隔を開けて
  //Arduino側から端まで流れる。
 
  //for(uint16_t i=strip.numPixels(); i>-1; i--) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    //strip.numPixels()関数は、Adafruit_NeoPixelで宣言したストリップのピクセル数を照会することができます。
    
      strip.setPixelColor(i, c);
        //strip.setPixelColor(i, red, green, blue)関数の最初の引数(この例ではi)は、ストリップに沿ったピクセル番号で、Arduinoに最も近い0から始まります。
        //30ピクセルのストリップがある場合、0〜29の番号が付けられます。
        //forループを使用してコード内のさまざまな場所を表示し、ループカウンタ変数をこの関数のピクセル番号として渡して、複数のピクセルの値を設定します。
        //setPixelColor()はLEDに直接影響を与えません。次の行のstrip.show()を使用する事で初めてカラーデータをストリップに送信します。
      
      strip.show();
      
      delay(wait);
        //colorWipe(c,wait)で指定した時間待て(ms)
  }
 
}



//補足①:strip.getPixelColor()
//strip.getPixelColor()関数は、以前に設定した指定ピクセルのカラー値(32bit)を返します。

 

 

前回載せたサイトのどっかかしらから引用しています。

 

 

 

で、実際光らせたのがこちらです。

赤→緑→青の順にスライドしています。

これで光ることは確認出来ました。

 

 

 

さて、ここまで来たら次はバイクに搭載することを考えます。

今の状態では、バイクのキーをオンにしている間ずっと光ります。もちろん走行中にこんなにピカピカ光るのは違法ですから、その問題を解決しなくてはいけません。

 

そして、この赤緑青のイルミネーション、ださいです。自分でかっちょいいイルミネーションを考えないといけません。

 

テストは終わったので、一旦こいつらはバラバラにして、次回からバイクに搭載することを考えて新たに構築し直します。