WS2812 RGB LEDストリップ

概要

このレッスンでは、NeoPixel LEDとその制御方法について学びます。制御にはArduino Uno R4上でFastLEDライブラリを使用します。NeoPixel LEDは、家庭の装飾、ウェアラブル、イベント照明など様々なアプリケーションで広く使用されています。FastLEDライブラリはこれらのLEDのプログラミングを簡素化します。ここでは、8個のNeoPixel LEDをArduinoに接続し、各LEDが青色で一時的に点灯し、次のLEDに移る前に消灯します。この基本的な例は、より複雑な光パターンやインタラクティブな照明プロジェクトの基礎として役立ちます。

必要なコンポーネント

このプロジェクトには以下のコンポーネントが必要です。

全セットを購入するのが便利です。こちらがリンクです:

名称

このキットのアイテム数

リンク

Elite Explorer Kit

300+

Elite Explorer Kit

以下のリンクから個別に購入することもできます。

コンポーネント紹介

購入リンク

Arduino Uno R4 WiFi

-

ジャンパーワイヤー

BUY

WS2812 RGB 8 LEDストリップ

BUY

配線図

../_images/12-ws2812_bb.png

回路図

../_images/12_ws2812_schematic.png

コード

注釈

  • ファイル 12-ws2812.inoelite-explorer-kit-main\basic_project\12-ws2812 のパスで直接開くことができます。

  • または、このコードをArduino IDEにコピーしてください。

注釈

ライブラリをインストールするには、Arduinoライブラリマネージャーを使用し、 「FastLED」 を検索してインストールしてください。

コードが正常にアップロードされると、8個のNeoPixel LEDのチェーンの各LEDが青色で一つずつ点灯する様子が見られます。プログラムはこのシーケンスを繰り返し、次のLEDに移る前に各LEDを消灯します。各LED間に短い遅延を設けることで、チェーンに沿って移動する青い点の照明効果が現れます。

コード解析

  1. ライブラリのインポートと定数の設定

    • FastLED ライブラリをインポートして、その機能を使用します。

    • LEDの数と接続されているデータピンを定義します。

    #include <FastLED.h>  // Include FastLED library
    #define NUM_LEDS 8    // Number of LEDs in the chain
    #define DATA_PIN 6    // Data pin for LED control
    
  2. LED配列の初期化

    各LEDの色情報を格納するための CRGB 型の配列を作成します。

    CRGB leds[NUM_LEDS];  // Array to hold LED color data
    
  3. セットアップ内でのLEDの初期化

    FastLED.addLeds を使用してLEDを初期化します。

    void setup() {
      FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);  // Initialize LEDs
    }
    
  4. ループ内でのLEDの制御

    各LEDを青色に設定し、表示し、クリアし、遅延させるループ。

    • leds 配列はLEDストリップのカラーバッファとして機能します。この配列の各要素は物理的なストリップ上の個々のLEDに対応し、その色の値がLEDが表示する色を決定します。配列内の要素の順序はストリップ上のLEDの順序に一致し、最初のLED( leds[0] に対応)から最後のLEDまでです。ストリップ上の特定のLEDの色を変更するには、 leds 配列内の対応する要素を変更します。 predefined colors を使用するか、RGBで色を設定できます(例として緑色を使用する場合、 leds[dot] = CRGB::Green または leds[dot] = CRGB(0, 255, 0); を使用します)。

    • FastLED.show(); 関数は新しい色データでLEDストリップを更新し、変更を可視化します。これは、コードで編集や調整を行った後、LEDストリップの「公開」ボタンを押すようなものです。


    void loop() {
      for (int dot = 0; dot < NUM_LEDS; dot++) {
        leds[dot] = CRGB::Blue;   // Set the current LED to blue
        FastLED.show();           // Update LEDs
        leds[dot] = CRGB::Black;  // Clear the current LED
        delay(30);                // Wait for a short period before moving to the next LED
      }
    }