工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

必要な部品と材料

部品数量備考
Arduino Nano R31
Arduino UNO1代替として使用可能
WS2812B LEDストリップ(60ピクセル/m)15m巻き(全300ピクセル)推奨
抵抗 470Ω1データライン用
5V 40A 電源1ピクセル数に応じて容量選定
ブレッドボード1
デュポンワイヤ(ジャンパーワイヤ)1式

必要な工具

使用するソフトウェア・サービス

プロジェクト概要

Vixen Lightsとは?

Vixen Lightsは、DIY照明オートメーションディスプレイ用のソフトウェアです。バージョン3.xでは、アドレッサブル「ピクセル」ライトへの対応のために完全に再設計されました。

ピクセル(アドレッサブルLED)とは?

ピクセルは、赤・緑・青の3原色LEDを内蔵し、各色の強度を変えることで全色を表現できるデバイスです。本記事で使用するWS2812Bは、ICチップを内蔵し、データ入力を受け取って自身の色を表示し、残りのデータを次のピクセルへ渡します。一般的にアドレッサブルRGBストリップは3線(電源、GND、データ)で、いわゆる「ダム」なRGBストリップは4線(電源+R/G/B各制御)です。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

電源設計の重要ポイント

RGBピクセルは大電流を消費します。Arduinoの内蔵レギュレータでは数個程度しか点灯できません。必ず外部電源を用意してください。

Arduinoコントローラの役割と限界

メインストリームのArduinoボードなら、Vixenとピクセルストリップの中継として使えます。最大の制約はシリアルポート速度(多くは115,200bps上限)です。300ピクセル(900チャネル)を115,200bpsで送ると約45msかかり、リフレッシュレートは約20Hz(50ms周期)が限界です。より多くのピクセルを制御する場合は、Vixen側の更新間隔を100ms以上に設定してください。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

※本チュートリアルのコードはDavid Hunt氏(blog.huntgang.com)のものをベースにしています。

Vixen Lights 3.xでのシリアルコントローラ設定手順

ステップ1:Generic Serial Controllerの追加

右上メニューから「Generic Serial Controller」を追加します。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ2:出力数の設定

コントローラの出力数を「ピクセル数 × 3」に設定します。例:30ピクセルなら90出力。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ3:COMポートとボーレート設定

右下の歯車アイコンからCOMポートを選択(Arduinoが割り当てられているポート)、ボーレートを115200に設定。他はデフォルトのままでOK。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ4:ヘッダーにピクセル数を指定

「Header Text」にピクセル数を3桁で入力(例:30ピクセルなら「030」)。この時点でArduinoのRX LEDが点滅し、データ受信を開始します。

ピクセル用エレメントの設定

ステップ5:Single Itemで「Pixel Strip」を作成

左上のドロップダウンから「Single Item」を選び、緑の「+」ボタンで追加、名前を「Pixel Strip」とします。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ6:Numbered Itemsで全ピクセルを生成

作成した「Pixel Strip」を右クリック → 「Add Multiple」 → 「Numbered Items」を選択、名前とピクセル数(例:30)を指定してOK。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ7:Color HandlingをフルRGBに設定

「Pixel Strip」をハイライトし、左下の「Configure:」から「Color Handling」を選択、「They can be any color: they are full RGB and mix to make any color.」を選択。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ8:エレメントをコントローラにパッチ

左側の「Pixel Strip」と右側の「Generic Serial Controller」をハイライトし、「Patch Elements to Controllers」をクリック。未接続パッチポイント数が一致していれば完了です。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ9:グラフィカルビューで確認

正しく設定できていれば、以下のようなビューになります。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

最初のシーケンスを作成する

ステップ10:新規シーケンス作成

Vixenを起動し、「New Sequence...」をクリック。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ11:オーディオファイルをインポート

「Tools」メニューから「Audio」→「Import Audio」でMP3等を読み込み。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ12:タイムラインのズーム調整

波形が表示されたら、ツールバーの虫眼鏡アイコンでタイムラインを拡大・縮小して作業しやすくします。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ13:ビート/バー検出でエフェクト合わせ

「Tools」→「Audio」→「Beat/Bar Detector」を実行。白い線がビート位置に表示され、エフェクト配置のガイドになります。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ14:エフェクトの配置

左メニュー「Effects」から「Basic Lighting」や「Pixel Lighting」のエフェクト(例:Chase)をドラッグ&ドロップで「Pixel Strip」ラインに配置、マウスで長さ調整。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ15:エフェクトパラメータの調整

配置したエフェクトを選択し、右メニューで方向・色・パルス・深度等を調整。「Effect Preview」でリアルタイム確認可能。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

ステップ16:再生して確認

左上の再生ボタンでプレビュー。YouTubeに多数のサンプル動画がありますので参考にしてください。

注意: ArduinoをPCに接続しVixenを起動すると、ArduinoのRX LEDが点滅します。これはシリアルデータ待ち受け状態を示しています。

Arduinoスケッチ(FastLEDライブラリ使用)

FastLEDライブラリ(https://fastled.io/)をArduino IDEのライブラリマネージャからインストールしてください。

/* Vixen Lights 3.x - Arduino Generic Serial for Addressable Pixels
 * Created November 8th, 2014 By Richard Sloan - www.themindfactory.com
 * And David Hunt - blog.huntgang.com
 * Version 1.4
 */
#include <FastLED.h>

#define NUM_LEDS 300  // 最大対応ピクセル数(メモリ節約のため)
#define DATA_PIN 6    // データ線接続ピン

CRGB leds[NUM_LEDS];

void setup() {
  Serial.begin(115200);
}

void loop() {
  int cnt = 0;
  unsigned int num_leds, d1, d2, d3;

  for(;;) {
    cnt = 0;
    // ヘッダー「>>」待ち
    while(!Serial.available()); if(Serial.read() != '>') continue;
    while(!Serial.available()); if(Serial.read() != '>') continue;
    // 3桁のピクセル数取得
    while(!Serial.available()); d1 = Serial.read();
    while(!Serial.available()); d2 = Serial.read();
    while(!Serial.available()); d3 = Serial.read();
    // ヘッダー終端「<<」確認
    while(!Serial.available()); if(Serial.read() != '<') continue;
    while(!Serial.available()); if(Serial.read() != '<') continue;

    num_leds = (d1-'0')*100 + (d2-'0')*10 + (d3-'0');
    if(num_leds > NUM_LEDS) continue;

    FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, num_leds);

    // 各ピクセルのR,G,Bを順次読み取り
    do {
      while(!Serial.available()); leds[cnt].r = Serial.read();
      while(!Serial.available()); leds[cnt].g = Serial.read();
      while(!Serial.available()); leds[cnt++].b = Serial.read();
    } while(--num_leds);

    FastLED.show();  // ストリップへ出力
  }
}

回路図

データ線には470Ωの抵抗を直列に挿入してください。電源は外部5V電源からピクセルストリップへ直接供給し、Arduinoと電源のGNDを共通にします。

Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド
Vixen LightsとArduinoでNeoPixelを制御する:ステップバイステップガイド

以上で、Vixen LightsとArduinoによるNeoPixel制御の基本セットアップは完了です。より大規模なディスプレイを作る場合は、電源注入ポイントの追加や、Teensy等の高速シリアル対応ボードの検討をお勧めします。

製造プロセス

  1. Arduino MegaでPWM制御:プッシュボタン付きLEDフェード制御チュートリアル
  2. Arduinoで超音波レベーション(浮遊)装置を自作:ステップバイステップガイド
  3. Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
  4. Arduinoとスマホで作るスマート電圧計 – 簡単DIYプロジェクト
  5. Arduinoで温湿度ロガーを作る – DHT11とEthernetシールドでSDカード記録
  6. ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
  7. Arduino UNOで周波数とデューティサイクルを高精度測定
  8. Arduinoで地球の質量を測定:ステップバイステップDIYガイド
  9. Arduino超音波センサーとProcessingで作るリアルタイム距離測定ソナー
  10. スマート駐車場カウンター:Arduino、Processing、PHPでリアルタイム車両管理
  11. ArduinoとProcessingで作るリアルタイムデジタルコンパス