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

Arduinoを使用してWS2812Bの個別にアドレス指定可能なLEDを制御する方法

このチュートリアルでは、Arduinoを使用して個別にアドレス指定可能なRGBLEDまたはWS2812BLEDストリップを制御する方法を学習します。詳細については、次のビデオを見るか、以下のチュートリアルを読むことができます。

概要

最初にいくつかの基本的な例を通して動作原理を説明し、次にこれらのLED、DIYインタラクティブLEDコーヒーテーブルを使用した本当にクールなArduinoプロジェクトを見ていきます。コーヒーテーブルには、WS2812B LED、物体を検出するための赤外線近接センサー、カスタムビルドのAndroidアプリを介して色を制御するためのHC-05Bluetoothモジュールが搭載されています。このプロジェクトは、実際には私とCreativityHeroYouTubeチャンネルのMarijaのコラボレーションです。

WS2812BLEDのしくみ

まず、LEDストリップを詳しく見てみましょう。非常にコンパクトなWS2812BLEDドライバーICが統合されたタイプ5050RGBLEDで構成されています。

3つの個別の赤、緑、青のLEDの強度に応じて、必要な色をシミュレートできます。

これらのLEDの優れている点は、Arduinoボードの1本のピンでLEDストリップ全体を制御できることです。各LEDには、両端に3つのコネクタがあり、2つは電源用、1つはデータ用です。矢印はデータフローの方向を示しています。前のLEDのデータ出力パッドは次のLEDのデータ入力パッドに接続されています。ストリップを任意のサイズにカットしたり、いくつかのワイヤーを使用してLEDの距離を調整したりできます。

電力供給に関しては、5Vで動作し、赤、緑、青の各LEDは約20mAを消費します。つまり、最大輝度での各LEDの合計は60mAです。 ArduinoがUSB経由で電力を供給されている場合、5Vピンは約400 mAしか処理できず、バレル電源コネクタを使用して電力が供給されている場合、5Vピンは約900mAを処理できることに注意してください。

より多くのLEDを使用していて、それらが引き込む電流の量が上記の制限を超える場合は、別の5V電源を使用する必要があります。このような場合、2本のアース線を2本接続する必要もあります。さらに、ArduinoとLEDストリップデータピンの間に約330オームの抵抗を使用してそのラインのノイズを低減し、5Vとグラウンドの両端に約100uFのコンデンサを使用して電源をスムーズにすることをお勧めします。 。

ArduinoおよびWS2812BLEDの例

例1

ここで例として、上記で説明したように、330オームの抵抗を介してArduinoに接続され、別の5V電源で電力が供給される20個のLEDの長いストリップを使用します。 Arduinoのプログラミングには、FastLEDライブラリを使用します。これは、WS2812B LEDの簡単な制御を可能にする、優れた、十分に文書化されたライブラリです。

この例に必要なコンポーネントは、以下のリンクから入手できます。

  • WS2812BLEDストリップ…………………..
  • Arduinoボード……………………………
  • 5V6ADC電源………………

最初の例のArduinoソースコードは次のとおりです。

#include <FastLED.h>

#define LED_PIN     7
#define NUM_LEDS    20

CRGB leds[NUM_LEDS];

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  
}

void loop() {
  
  leds[0] = CRGB(255, 0, 0);
  FastLED.show();
  delay(500);  
  leds[1] = CRGB(0, 255, 0);
  FastLED.show();
  delay(500);
  leds[2] = CRGB(0, 0, 255);
  FastLED.show();
  delay(500);
  leds[5] = CRGB(150, 0, 255);
  FastLED.show();
  delay(500);
  leds[9] = CRGB(255, 200, 20);
  FastLED.show();
  delay(500);
  leds[14] = CRGB(85, 60, 180);
  FastLED.show();
  delay(500);
  leds[19] = CRGB(50, 255, 20);
  FastLED.show();
  delay(500);
}Code language: Arduino (arduino)

説明: したがって、最初にFastLEDライブラリを含め、LEDストリップデータが接続されるピンを定義し、LEDの数を定義し、CRGBタイプの配列を定義する必要があります。このタイプにはLEDが含まれ、3つの赤、緑、青のカラーチャネルのそれぞれに3つの1バイトのデータメンバーがあります。

セットアップセクションでは、上記で定義したパラメータを使用してFastLEDを初期化する必要があります。これでメインループになり、LEDを好きなように制御できます。 CRGB機能を使用すると、赤、緑、青の3つのパラメーターを使用して、任意のLEDを任意の色に設定できます。 LEDで変更を行うには、関数FastLED.show()を呼び出す必要があります。

例2

いくつかの「for」ループを使用して、いくつかのアニメーションを簡単に作成できます。

2番目の例のArduinoソースコードは次のとおりです。

#include <FastLED.h>

#define LED_PIN     7
#define NUM_LEDS    20

CRGB leds[NUM_LEDS];

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

void loop() {

  for (int i = 0; i <= 19; i++) {
    leds[i] = CRGB ( 0, 0, 255);
    FastLED.show();
    delay(40);
  }
  for (int i = 19; i >= 0; i--) {
    leds[i] = CRGB ( 255, 0, 0);
    FastLED.show();
    delay(40);
  }
}Code language: Arduino (arduino)

ここで、最初の「for」ループは、最初から最後のLEDまで40ミリ秒の遅延で20個のLEDすべてを青色で点灯します。次の「for」ループは20個のLEDすべてを再び点灯しますが、今回は赤色で、最後から最初のLEDまで逆の順序で点灯します。

FastLEDライブラリには、非常に興味深いアニメーションやライトショーを作成するために使用できる他の多くの機能が備わっているため、次のLEDプロジェクトを輝かせるのはあなたの想像力次第です。

WS2812BLEDを使用したインタラクティブLEDコーヒーテーブル

それでは、冒頭で述べたDIYインタラクティブLEDコーヒーテーブルプロジェクトを見てみましょう。つまり、これは私とCreativityHeroのMarijaとのコラボレーションプロジェクトでした。

彼女がテーブルを作るプロセス全体を説明している彼女のウェブサイトの記事をチェックすることができます。木造構造の切断と組み立てから、すべての電子部品のはんだ付けと接続までです。ここでは、電子機器の仕組み、カスタムAndroidアプリケーションの構築方法、およびArduinoボードのプログラミング方法について説明します。

これがこのプロジェクトの完全な回路図です。

したがって、テーブルは45個のアドレス指定可能なLED、45個の赤外線近接センサーおよびHC-05 Bluetoothモジュールで構成され、それらはすべてArduinoMegaボードに接続されています。回路は5V6A電源で給電されます。

この例に必要なコンポーネントは、以下のリンクから入手できます。

  • WS2812BLEDストリップ…………………..
  • IR近接センサー……………………
  • HC-05Bluetoothモジュール……。……
  • Arduinoボード……………………………
  • 5V6ADC電源………………

関連:ArduinoでRGBLEDを使用する方法|チュートリアル

ソースコード

これがこのプロジェクトのArduinoコードです。Bluetoothカラーコントロール機能を除外すると、コードが実際には非常に単純であることがわかります。

#include "FastLED.h"

#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  // Set the 45 proximity sensors pins as inputs, from digital pin 3 to pin 48
  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB( 0, 255, 0);    // Set all 45 LEDs to green color 
    // If an object is detected on top of the particular sensor, turn on the particular led
    if ( digitalRead(pinNo + 3) == LOW ) {
      leds[pinNo] = CRGB( 0, 0, 255); // Set the reactive LED to bluee
    }
  }
  FastLED.show(); // Update the LEDs
  delay(20);
}Code language: Arduino (arduino)

説明: まず、前に説明したように基本的なパラメータを定義し、45個の近接センサーピンを入力として設定する必要があります。

単一の「for」ループを使用するメインループでは、すべてのLEDを特定の色に設定し、近接センサーがオブジェクトを検出したかどうかも確認します。それが当てはまる場合、またはこの場合はLOWロジック状態の場合、特定のリアクティブカラーが特定のLEDに設定されます。最後に、FastLED.show()関数を使用して、LEDの色を更新します。

Bluetoothカラーコントロール機能を含めるには、Androidアプリを作成するだけでなく、コードをさらに数行追加する必要があります。 ArduinoでHC-05Bluetoothモジュールを使用する方法と、MIT App Inventorオンラインアプリケーションを使用して独自のAndroidアプリケーションを作成する方法については、すでに個別のチュートリアルがあります。詳細については、いつでも確認できます。

Androidアプリの仕組みは次のとおりです。これは、色を選択できるカラーパレット画像、選択した色をリアクティブLEDと背景LEDのどちらに適用するかを選択できる2つのチェックボタン、および明るさを調整するためのスライダーで構成されています。

アプリのブロックを見ると、カラーパレット画像が配置されているキャンバスに触れるとどうなるかがわかります。 .GetPixelColorブロックを使用して、取得した色の赤、緑、青の値を取得し、Bluetooth SendTextブロックを使用して、この情報をテキスト形式でArduinoに送信します。

選択したチェックボックスに応じて、Arduinoでテキストを受信するときに役立つ別の最初の文字またはマーカーを送信します。スライダーの位置を変更した場合も同じことが起こります。10から100までの値が、マーカー「3」が前に付いたテキスト形式でArduinoに送信されます。

以下のAndroidアプリと、MITAppInventorプロジェクトファイルをダウンロードできます。

DIY_Reactive_LED_Table_Control

1ファイル 0.00KBダウンロード

DIY_Reactive_LED_Table_Control MITAppInventorプロジェクトファイル

1ファイル 208.06KBダウンロード

Arduinoコードは次のとおりです:

#include <SoftwareSerial.h>

#include "FastLED.h"

#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

SoftwareSerial Bluetooth(53, 52); // Arduino(RX, TX) - Bluetooth (TX, RX)

// Initial background color 
int backR = 100;
int backG = 50;
int backB = 10;

// Initial reactive color 
int reactiveR = 10;
int reactiveG = 50;
int reactiveB = 100;

int brightness = 50; // Initial brightness

String dataIn = "";

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  Serial.begin(38400);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module

  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();
    delay(20);
    if (dataIn.startsWith("1")) {
      delay(10);
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      reactiveR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      reactiveG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      reactiveB = stringB.toInt();
    }
    else if (dataIn.startsWith("2")) {
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      backR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      backG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      backB = stringB.toInt();
    }
    else if (dataIn.startsWith("3")) {
      String stringBrightness = dataIn.substring(dataIn.indexOf("3") + 1, dataIn.length());
      brightness = stringBrightness.toInt();
      FastLED.setBrightness(brightness);
    }
  }

  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB( backR, backG, backB);
    if ( digitalRead(pinNo + 3) == LOW ) {
      leds[pinNo] = CRGB( reactiveR, reactiveG, reactiveB);
    }
  }
  FastLED.show();
  delay(20);
}Code language: Arduino (arduino)

説明: まず、ArduinoとHC-05 Bluetoothモジュール、またはモジュールが接続されているピン間のシリアル通信を定義する必要があります。セットアップセクションでは、このモジュールが動作するボーレートを設定する必要があります。次に、Bluetooth.available()関数を使用したメインループで、スマートフォンからの着信データがあるかどうかを確認します。それが本当なら、Bluetooth.readString()関数を使用して、データを文字列として受け取ります。次に、.startsWith()関数を使用して、最初の文字またはマーカーをチェックし、その方法で、リアクティブカラー、背景、または明るさを変更するかどうかを判断します。

.substring()関数を使用して、受信したテキストから赤、緑、青の値を抽出し、それらを整数に変換します。これらの値は、前に説明したように、色を設定してLEDを点灯させる以下の「for」ループで使用されます。同様に、LEDの明るさを調整します。

このチュートリアルは以上です。以下のコメントセクションでお気軽に質問してください。


製造プロセス

  1. IRリモコンをハックする方法
  2. Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
  3. Arduinoコントロールセンター
  4. IoTを使用してロボットアームをリモート制御する
  5. LEDを制御するBluetoothを搭載したArduino!
  6. FirmataとXboxOneControllerを使用してArduinoRoverを制御する
  7. Arduinoを使用して地球の質量を測定する方法
  8. Arduino Quadruped
  9. BoltとArduinoを使用したLEDの明るさの制御
  10. AlexaとArduinoIoTCloudを使用したテレビのフルコントロール
  11. ArduinoとProcessingIDEを使用してコンパスを作成する方法