WS2812B アドレス指定可能な LED ストリップを Arduino に接続する方法
LED ベースの照明技術の開発は急速に進んでいます。昨日、リモコンで明るさと色を調整できるコントローラーで制御されたRGBリボンが奇跡のように思えました。今日、市場にはさらに多くの可能性があります。
WS2812B ベースの 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 の一時停止で終了します。これは、リボン プログラミング サイクルが完了し、次のデータ パケットのセットを送信できることを意味します。
このプロトコルでは、データ送信に単一の回線が使用できますが、正確なタイミングが必要です。不一致は 150 ns 以下です。さらに、このバスのノイズ耐性は非常に低いです。十分な振幅の干渉は、コントローラーによってデータとして認識されます。これにより、制御回路からのワイヤの長さに制限が課せられます。一方、それは能力を提供します リボンが 追加のデバイスなし。照明器具に電力を供給し、制御バスの接触パッドに指で触れると、一部の LED が無秩序にオン/オフする場合があります。
WS2812B 要素の技術的特性
アドレス可能なリボンに基づいて照明システムを作成するには、発光素子の重要なパラメータを知る必要があります。
LED寸法 | 5x5mm |
PWM変調周波数 | 400Hz |
最大輝度時の消費電流 | エレメントあたり60mA |
供給電圧 | 5ボルト |
Arduino と WS2812B
世界で人気の Arduino プラットフォームでは、スケッチ (プログラム) を作成してアドレス指定可能なリボンを制御できます。システムの機能は十分に広いですが、あるレベルで十分ではなくなった場合、習得したスキルは C++ またはアセンブラーにシームレスに切り替えるのに十分です。ただし、Arduino の基本的な知識を得る方が簡単です。
WS2812B ベースのリボンを Arduino Uno (Nano) に接続する
最初の段階では、単純な Arduino Uno または Arduino Nano ボードで十分です。後で、より複雑なボードを使用して、より複雑なシステムを構築できます。アドレス指定可能な LED ストリップを Arduino ボードに物理的に接続するときは、いくつかの条件が満たされていることを確認する必要があります。
- ノイズ耐性が低いため、データライン接続導体はできるだけ短くする必要があります (10 cm 以内にする必要があります)。
- データ ワイヤを Arduino ボードの空いているデジタル出力に接続します。これは後でソフトウェアによって示されます。
- 消費電力が大きいため、ボードからストリップに電力を供給する必要はありません。この目的のために別の電源が提供されています。
照明器具とArduinoの共通電源線を接続する必要があります。
WS2812B ソフトウェア制御の基礎
WS2812B チップを制御するには、高精度に耐える一定の長さのパルスを形成する必要があることは既に述べました。 Arduino言語には、短いパルスを形成するコマンドがあります 遅延マイクロ秒 と マイクロ.問題は、これらのコマンドの分解能が 4 マイクロ秒であることです。すなわち、所与の精度で時間遅延を形成することは不可能である。 C++ またはアセンブラー ツールに移動する必要があります。この目的のために特別に作成されたライブラリの助けを借りて、Arduino を介してアドレス指定可能な LED ストリップを制御することが可能です。発光要素を点滅させるプログラムBlinkから始めることができます。
ファーストリード
このライブラリはユニバーサルです。アドレス可能なリボンに加えて、SPI 制御のリボンを含む多くのデバイスをサポートします。幅広い機能を備えています。
まず、ライブラリを接続する必要があります。これはセットアップ ブロックの前に行われ、文字列は次のようになります。
#含む
次のステップは、各発光ダイオードの色を格納するための配列を作成することです。名前ストリップと 15 要素の次元を持ちます。
CRGB ストリップ[15]
セットアップ ブロックでは、スクリプトが動作するリボンを指定する必要があります。
ボイドセットアップ() {
FastLED.addLeds< WS2812B、7、RGB>(ストリップ、15);
int g;
}
RGB パラメータは色のシーケンスを設定します。15 は LED の数を意味し、7 は制御に割り当てられた出力の数です (最後のパラメータにも定数を割り当てることをお勧めします)。
ループ ブロックは、赤 (赤く光る) 配列の各セクションに順次書き込むループから始まります。
(g=0; g< 15; g++) の場合
{strip[g]=CRGB::赤;}
次に、生成された配列がイルミネーターに送信されます。
FastLED.show();
遅延 1000 ミリ秒 (秒):
遅延 (1000);
次に、同じ方法ですべての要素をオフにして、それらに黒を書きます。
for (int g=0; g< 15; g++)
{strip[g]=CRGB::黒;}
FastLED.show();
遅延 (1000);
スケッチをコンパイルしてロードすると、リボンが 2 秒間点滅します。各色成分を個別に制御したい場合は、文字列の代わりに {strip[g]=CRGB::赤;} いくつかの文字列が使用されます:
{
ストリップ[g].r=100;// 赤要素の発光レベルを設定する
strip[g].g=11;// 緑も同じ
ストリップ[g].b=250;// 青も同じ
}
ネオピクセル
このライブラリは NeoPixel リング LED でのみ機能しますが、リソースの消費が少なく、必要なものだけが含まれています。 Arduino では、プログラムは次のようになります。
#含む
前のケースと同様に、ライブラリがプラグインされ、lenta オブジェクトが宣言されます。
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// 15 は要素数、6 は割り当てられた出力です。
lenta はセットアップ ブロックで初期化されます。
ボイドセットアップ() {
lenta.begin ()
}
ループ ブロックでは、すべての要素が赤く点灯し、変数がテープに渡され、1 秒の遅延が作成されます。
for (int y=0; y<15;y++)// 15 - 照明器具の要素数
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
レンタ.ショー();
遅延 (1000);
lenta は、黒を書くことで光りを止めます:
for (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
レンタ.ショー();
遅延 (1000);
ビデオ レッスン: アドレス可能なリボンを使用した視覚効果のサンプル。
LEDの点滅方法を学んだ後は、レッスンを続けて、人気の「レインボー」や「ノーザン ライツ」など、スムーズなトランジションで色の効果を作成する方法を学習できます。 WS2812B と Arduino のアドレス指定可能な LED は、これにほぼ無限の可能性をもたらします。