アドレス可能なLEDストリップWS2812BをArduinoに接続する方法
LEDをベースにした照明技術の開発は急速に進んでいます。ちょうど昨日、リモコンで明るさと色を調整できるコントローラー制御のRGBリボンは奇跡のようでした。今日、さらに多くの機能を備えたランプが市場に登場しています。
WS2812Bに基づくLEDストリップ
アドレス指定可能なLEDストリップと標準のLEDストリップの違い RGB 事は 各要素の明るさと色の比率は別々に調整されます。これにより、他のタイプの照明デバイスでは基本的にアクセスできない照明効果を得ることができます。アドレス指定可能なLEDストリップのグローは、パルス幅変調を使用して既知の方法で制御されます。このシステムの特徴は、各LEDに独自のPWMコントローラーを装備することです。 WS2812Bチップは、3色の発光ダイオードと制御回路を1つのパッケージにまとめたものです。

これらの要素は並列に電源テープに結合され、シリアルバスを介して制御されます。最初の要素の出力は2番目の要素の制御入力に接続されます。ほとんどの場合、シリアルバスは2つのラインで構築され、1つはストロボ(クロックパルス)を送信し、もう1つはデータを送信します。

WS2812Bチップの制御バスは1本のラインで構成されており、データはそれを介して送信されます。データは一定周波数のパルスとしてエンコードされますが、デューティサイクルは異なります。 1パルス-1ビット。各ビットの持続時間は1.25µsで、ゼロビットは持続時間が0.4 µsの高レベルと0.85 µsの低レベルで構成されます。ユニットは、0.8 µsの場合は高レベル、0.45 µsの場合は低レベルのように見えます。 24ビット(3バイト)のバーストが各LEDに送信され、その後50 µsの低レベルの一時停止が続きます。これは、データが次のLEDに送信され、チェーンのすべての要素に送信されることを意味します。データ転送は100µsの休止で終了します。これは、テーププログラミングサイクルが完了し、次のデータパケットのセットを送信できることを示しています。

このようなプロトコルは、データ伝送のために1つの回線で処理することを可能にしますが、時間間隔を維持するための精度が必要です。不一致は150nsを超えて許可されません。さらに、そのようなバスの耐ノイズ性は非常に低いです。十分な振幅の干渉は、コントローラーによってデータとして認識されます。これにより、制御回路からの導体の長さに制限が課せられます。一方、これはそれを可能にします リボンヘルスチェック 追加のデバイスなし。ランプに電力を供給し、コントロールバスのコンタクトパッドに指で触れると、一部のLEDがランダムに点灯して消灯する場合があります。
WS2812Bエレメントの仕様
アドレステープに基づいて照明システムを作成するには、発光素子の重要なパラメータを知る必要があります。
| LEDの寸法 | 5x5mm |
| PWM変調周波数 | 400 Hz |
| 最大輝度での消費電流 | セルあたり60mA |
| 供給電圧 | 5ボルト |
ArduinoとWS2812B
世界で人気のあるArduinoプラットフォームでは、アドレステープを管理するためのスケッチ(プログラム)を作成できます。システムの機能は十分に広いですが、あるレベルで十分ではなくなった場合、習得したスキルは、C++またはアセンブラーに簡単に切り替えるのに十分です。最初の知識はArduinoを習得するのが簡単ですが。
WS2812BリボンをArduinoUno(Nano)に接続する
最初の段階では、単純なArduinoUnoまたはArduinoNanoボードで十分です。将来的には、より複雑なボードを使用して、より複雑なシステムを構築できるようになります。アドレス指定可能なLEDストリップをArduinoボードに物理的に接続するときは、いくつかの条件を守る必要があります。
- ノイズ耐性が低いため、データラインの接続導体はできるだけ短くする必要があります(10cm以内に接続するようにしてください)。
- データコンダクタをArduinoボードの無料のデジタル出力に接続する必要があります-その後、プログラムで指定されます。
- 消費電力が大きいため、ボードからテープに電力を供給する必要はありません。この目的のために、個別の電源装置が用意されています。
ランプとArduinoの共通電源線を接続する必要があります。

WS2812Bプログラム制御の基本
WS2812Bマイクロ回路を制御するためには、高精度を維持しながら一定の長さのパルスを発生させる必要があることはすでに述べました。短いパルスを形成するためのArduino言語のコマンドがあります delayMicroseconds と マイクロ。問題は、これらのコマンドの解像度が4マイクロ秒であることです。つまり、特定の精度で時間遅延を形成することはできません。 C++またはアセンブラツールに切り替える必要があります。また、このために特別に作成されたライブラリを使用して、Arduinoを介してアドレス指定可能なLEDストリップの制御を整理できます。あなたは、発光要素を点滅させるまばたきプログラムであなたの知人を始めることができます。
高速LED
このライブラリはユニバーサルです。アドレステープに加えて、SPIインターフェースによって制御されるテープを含むさまざまなデバイスをサポートします。幅広い可能性があります。
まず、ライブラリを含める必要があります。これはセットアップブロックの前に行われ、行は次のようになります。
#include <FastLED.h>
次のステップは、各発光ダイオードの色を格納するための配列を作成することです。名前のストリップと次元は15になります-要素の数によって(このパラメーターに定数を割り当てることをお勧めします)。
CRGBストリップ[15]
セットアップブロックで、スケッチが機能するテープを指定する必要があります。
void setup(){
FastLED.addLeds <WS2812B、7、RGB>(ストリップ、15);
intg;
}
RGBパラメーターはカラーシーケンスの順序を設定します。15はLEDの数を意味し、7は制御に割り当てられた出力の数です(最後のパラメーターに定数を割り当てることもお勧めします)。
ループブロックは、配列の各セクションに順番に書き込むループで始まります。赤(赤く光る):
for(g = 0; g <15; g ++)
{strip [g] = CRGB :: Red;}
次に、形成されたアレイがランプに送られます。
FastLED.show();
1000ミリ秒(秒)の遅延:
delay(1000);
次に、それらに黒を書き込むことにより、同じ方法ですべての要素をオフにすることができます。
for(int g = 0; g <15; g ++)
{strip [g] = CRGB :: Black;}
FastLED.show();
delay(1000);

スケッチをコンパイルしてアップロードした後、テープは2秒間点滅します。各カラーコンポーネントを個別に管理する必要がある場合は、ラインの代わりに {strip [g] = CRGB :: Red;} いくつかの行が使用されます:
{
strip [g] .r = 100; // 赤い要素のグローレベルを設定します
strip [g] .g = 11; // 緑も同じ
strip [g] .b = 250; // 青も同じ
}
NeoPixel
このライブラリはNeoPixelRingLEDリングでのみ機能しますが、リソースをあまり消費せず、必要なものだけが含まれています。 Arduino言語では、プログラムは次のようになります。
#include <Adafruit_NeoPixel.h>
前の場合と同様に、ライブラリが接続され、lentaオブジェクトが宣言されます。
Adafruit_NeoPixel lenta = Adafruit_NeoPixel(15、6); // ここで、15は要素の数、6は割り当てられた出力です。
セットアップブロックで、テープが初期化されます。
void setup(){
lenta.begin()
}
ループブロックでは、すべての要素が赤で強調表示され、変数がフィードに渡され、1秒の遅延が作成されます。
for(int y = 0; y <15; y ++)// 15-ランプ内の要素の数
{lenta.setPixelColor(y、lenta.Color(255,0,0))};
Tape.show();
delay(1000);
輝きは黒い記録で止まります:
for(int y = 0; y <15; y ++)
{lenta.setPixelColor(y、lenta.Color(0,0,0))};
Tape.show();
delay(1000);

ビデオチュートリアル:アドレステープを使用した視覚効果のサンプル。
LEDを点滅させる方法を学んだら、スムーズなトランジションを備えた人気のレインボーやオーロラなど、カラーエフェクトを作成する方法を学び続けることができます。アドレス指定可能なLEDWS2812BとArduinoは、これに対してほぼ無限の可能性を提供します。
