3色LEDをArduinoに接続します。 LEDストリップをArduinoに接続して制御します。 ブレッドボード上で回路を組み立てる

これらのデバイスの制御には RGB コントローラーが使用されます。 しかし、それとは別に、近年ではArduinoボードが使用されています。

Arduino - 動作原理

Arduinoボード

Arduino ボードは、プログラマブル マイクロコントローラーがインストールされたデバイスです。 さまざまなセンサー、コントロール、エンコーダーが接続されており、指定されたスケッチ (プログラム) に従って、ボードは SPI プロトコルを介してモーター、LED、その他のアクチュエーター (他の Arduino ボードを含む) を制御します。 このデバイスは、リモコン、Bluetooth モジュール、HC-06、Wi-Fi、ESP またはインターネット、ボタンを介して制御できます。 最も人気のあるボードには、Arduino Nano と Arduino Uno、そして ATmega 328 マイクロコントローラーをベースにしたデバイスである Arduino Pro Mini があります。


Arduino Pro Miniの外観
Arduino Unoの外観
Arduino microの外観

プログラミングは、通常のコンピューターにインストールされたオープンソースの Arduino 環境で実行されます。 プログラムはUSB経由でダウンロードされます。

Arduinoによる負荷制御の原理


Arduino制御

このボードには、オンとオフの 2 つの状態を持つデジタル出力と、周波数 500 Hz の PWM コントローラーによって制御されるアナログ出力の両方が多数あります。

ただし、出力は 5 V の電圧で 20 ~ 40 mA の電流向けに設計されています。これは、RGB インジケータ LED または 32x32 mm マトリックス LED モジュールに電力を供給するには十分です。 より強力な負荷の場合、これでは十分ではありません。

多くのプロジェクトでこの問題を解決するには、追加のデバイスを接続する必要があります。

  • リレー。 供給電圧が 5V の個々のリレーに加えて、さまざまな数の接点や内蔵スターターを備えたアセンブリ全体があります。
  • バイポーラトランジスタをベースにしたアンプ。 このようなデバイスの電力は制御電流によって制限されますが、複数の要素から回路を組み立てたり、トランジスタ アセンブリを使用したりすることができます。
  • 電界効果トランジスタまたは MOSFET トランジスタ。 数アンペアの電流と最大 40 ~ 50 V の電圧の負荷を制御できます。MOSFET を PWM および電気モーターまたはその他の誘導負荷に接続する場合、保護ダイオードが必要です。 LEDやLEDランプに接続する場合は必要ありません。
  • 拡張カード。

LEDストリップをArduinoに接続する


LEDストリップをArduinoに接続する

専門家の意見

アレクセイ・バルトシュ

電気機器や産業用電子機器の修理とメンテナンスの専門家。

専門家に質問する

Arduino Nano は電気モーター以上のものを制御できます。 LEDストリップにも使用されます。 ただし、ボードの出力電流と出力電圧は、LED を備えたストリップを直接接続するには十分ではないため、コントローラーと LED ストリップの間に追加のデバイスを取り付ける必要があります。

リレー経由


リレー経由での接続

リレーはデジタル出力を介してデバイスに接続されます。 その助けを借りて制御されるストリップには、オンとオフの 2 つの状態しかありません。 赤、青、緑のリボンを制御するには、3 つのリレーが必要です。 このようなデバイスが制御できる電流は、コイルの電力によって制限されます (低電力のコイルでは大きな接点を閉じることができません)。 より多くの電力を接続するには、リレー アセンブリが使用されます。

バイポーラトランジスタを使用する


トランジスタを使った接続

バイポーラトランジスタを使用して、出力電流と電圧を増幅できます。 負荷電流と電圧に基づいて選択されます。 制御電流は 20 mA を超えてはいけないため、1 ~ 10 kOhm の電流制限抵抗を介して供給されます。

トランジスタを使った方が良い ん、ぷ、ん共通のエミッタを使用します。 より高いゲインを得るには、いくつかの素子またはトランジスタアセンブリ(アンプマイクロ回路)を備えた回路が使用されます。

電界効果トランジスタを使用する

バイポーラトランジスタに加えて、電界効果トランジスタもストリップの制御に使用されます。 これらのデバイスの別名は、MOS または MOSFET トランジスタです。

このような素子は、バイポーラ素子とは異なり、電流ではなくゲートの電圧によって制御されます。 これにより、低いゲート電流で最大数十アンペアの大きな負荷電流を駆動することができます。

素子は電流制限抵抗を介して接続されています。 さらに、ノイズの影響を受けやすいため、コントローラの出力は 10 kΩ の抵抗を使用してグランドに接続する必要があります。

拡張カードの使用


拡張ボードを使用してArduinoを接続する

リレーやトランジスタのほか、既製のブロックや拡張ボードを使用します。

これには、Wi-Fi または Bluetooth、L298N モジュールなどのモーター制御ドライバー、またはイコライザーが考えられます。 これらは、さまざまな電力と電圧の負荷を制御するように設計されています。 このようなデバイスはシングルチャンネルであり、モノクロ ストリップのみを制御でき、マルチチャンネルでは RGB および RGBW デバイス、および WS 2812 LED を備えたストリップ向けに設計されています。

サンプルプログラム


ArduinoとLEDストリップ

Arduino ボードは、事前定義されたプログラムに従って LED 構造を制御できます。 これらのライブラリは、公式 Web サイトからダウンロードしたり、インターネットで見つけたり、自分で新しいスケッチ (コード) を書いたりすることができます。 このようなデバイスは自分の手で組み立てることができます。

このようなシステムを使用するためのいくつかのオプションを次に示します。

  • 照明制御。 光センサーを使用して、部屋の照明がすぐに点灯し、日が沈むにつれて明るさが徐々に増加します。 「スマート ホーム」システムへの統合や電話による接続により、Wi-Fi 経由で電源を入れることもできます。
  • 階段や長い廊下で電気を点ける。 各ステップのLED照明がとても綺麗です。 モーションセンサーがボードに接続されている場合、そのセンサーが作動すると、階段や廊下の照明が時間遅れで順次点灯し、この要素をオフにすると逆のプロセスが行われます。
  • カラーミュージック。 オーディオ信号をフィルターを通してアナログ入力に適用すると、出力は色と音楽のインスタレーションになります。
  • コンピューター改造。 適切なセンサーとプログラムの助けを借りて、LED の色は温度やプロセッサーまたは RAM の負荷に応じて変化します。 このデバイスは、dmx 512 プロトコルを使用して動作します。
  • エンコーダを使用してランニングライトの速度を制御します。 同様の設置が WS 2811、WS 2812、および WS 2812B マイクロ回路に組み込まれています。

ビデオによる説明

前回は、L298 ドライバーを介して LED ストリップを Arduino に接続する方法について説明しました。 カラー管理はランダム機能というプログラムで実行されました。 次に、DHT 11 温度および湿度センサーの読み取り値に基づいて LED ストリップの色を制御する方法を見つけます。

この例は、L298 ドライバーを介して LED ストリップを接続することに基づいています。 さらに、この例には、DHT 11 センサーの読み取り値を表示する LCD 1602 ディスプレイが追加されています。

プロジェクトには次の Arduino 要素が必要です。

  1. Arduino UNOボード。
  2. ディスプレイ LCD 1602 + I2C。
  3. 温湿度センサー DHT
  4. LEDストリップライト。
  5. ドライバーL298。
  6. 電源9-12V。
  7. Arduino およびディスプレイ用のハウジング (オプション)。

まずは回路図(図1)を見てみましょう。 ここでは、上記のすべての要素を接続する方法がわかります。 回路を組み立てて接続するのに複雑なことは何もありませんが、ほとんどの人が忘れているニュアンスが1つあるため、ArduinoでLEDストリップを操作するときに誤った結果が得られることについて言及する価値があります。

図 1. Arduino と DHT 11 センサーを備えた LED ストリップの接続の概略図

LED ストリップの誤動作 (ちらつき、色の不一致、不完全な発光など) を回避するには、回路全体の電源を共通にする必要があります。 Arduino コントローラーの GND (グランド) ピンと L298 ドライバー (LED ストリップ) を組み合わせます。 これを行う方法を図で確認できます。

湿度センサーの接続について少し説明します。 ストラップのない裸の DHT 11 を購入した場合、最初と 2 番目の接点、それぞれ 5V とデータの間に、公称値 5 ~ 10 kOhm の抵抗器をはんだ付けする必要があります。 温度と湿度の測定範囲は、DHT 11 センサー ハウジングの背面に記載されています (温度: 0 ~ 50 ℃)。 湿度: 0 ~ 80%。


図 2. DHT 11 湿度センサーの正しい接続

スキームに従ってプロジェクトのすべての要素を組み立てた後、すべてが必要な方法で機能するプログラム コードを記述する必要があります。 また、DHT 11 センサー (湿度) の読み取り値に応じて LED ストリップの色を変える必要があります。

DHT 11 センサーをプログラムするには、追加のライブラリが必要になります。

Arduino および RGB プログラム コード - ストリップ。 湿度によりテープの色が変化します。

#include #include //LCD 1602 ディスプレイを操作するためのライブラリ #include //湿度および温度センサーを操作するためのライブラリ DHT 11 int chk; //変数には、DHT11 センサーからのすべてのデータが int hum に保存されます。 //変数には、DHT11 センサーからの湿度測定値が保存されます。 dht11 DHT; //タイプ DHT のオブジェクト #define DHT11_PIN 4 //DHT11 センサーのデータ ピンは入力 4 に接続されています #define LED_R 9 //チャンネル R のピン #define LED_G 10 //チャンネル G のピン #define LED_B 11 //ピンチャンネル B の場合 / /変数は色の値を保存します //3 色すべてを混合すると、必要な色が取得されます int led_r=0, led_g=0, led_b=0; //アドレス 0x27 のディスプレイ オブジェクトを宣言 //I2C ボード経由でプロジェクト内でディスプレイを使用することを忘れないでください LiquidCrystal_I2C lcd(0x27,16,2); void setup() ( // ディスプレイを作成 lcd.init(); lcd.backlight(); // ピンを出力として宣言 pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); ) void loop () ( chk = DHT.read(DHT11_PIN);//DHT11 センサーからデータを読み取り //データをディスプレイに出力 lcd.print("Temp: "); lcd.print(DHT.temporal, 1); lcd.print( " C"); lcd.setCursor(0,1); lcd.print("ハム: "); lcd.print(DHT.humidity, 1); lcd.print(" %"); late( 1500); / /センサーが正しく動作するためには、ポーリングに遅延が必要です lcd.clear(); hum = DHT.humidity; //湿度を測定します //湿度が 19 ~ 30% の範囲で、場合は緑色を表示します((ハム >= 19) && (ハム<= 30)) { led_r = 1; led_g = 255; led_b = 1; } //в диапозоне от 31 до 40% влажности выдать красный цвет if ((hum >= 31) && (ハム音<= 40)) { led_r = 255; led_g = 1; led_b = 1; } //в диапозоне от 41 до 49% влажности выдать синий цвет if ((hum >= 41) && (ハム音<= 49)) { led_r = 1; led_g = 1; led_b = 255; } // подача сигналов цвета на выхода analogWrite(LED_R, led_r); analogWrite(LED_G, led_g); analogWrite(LED_B, led_b); }

タグ: タグ

前のレッスンですでに試しました。 次に、多色 LED を見てみましょう。これは、しばしば略語で呼ばれます。 RGB LED.

RGB は、Red - 赤、Green - 緑、Blue - 青を表す略語です。 つまり、このデバイス内には 3 つの個別の LED が配置されています。 タイプに応じて、RGB LED は共通のカソードまたは共通のアノードを持つ場合があります。

色の混合

RGB LED が従来の 3 つの LED よりも優れているのはなぜですか? すべては、互いに近くに配置されたさまざまな光源からの光を混合する私たちの視覚の能力にかかっています。 たとえば、青と赤の LED を並べて配置すると、数メートル離れたところでその輝きが融合し、目には 1 つの紫色の点が見えます。 また、緑も追加すると、ドットは白く見えます。 これはまさにコンピューターモニター、テレビ、屋外スクリーンの仕組みです。

TV マトリックスは、異なる色の個々のドットで構成されます。 虫眼鏡を持って、スイッチを入れたモニターを覗いてみると、これらの点を簡単に見ることができます。 しかし、屋外のスクリーンでは、ドットは肉眼で区別できるほど密に配置されていません。 しかし、数十メートル離れたところからはこれらの点は区別できません。

多色のドットが互いに近づくほど、目がこれらの色を混ぜるのに必要な距離が短くなることがわかりました。 したがって、結論は次のとおりです: 3 つの個別の LED とは異なり、RGB LED の色の混合は 30 ~ 70 cm の距離ですでに顕著です ちなみに、マット レンズを備えた RGB LED はさらに優れたパフォーマンスを発揮します。

アマチュアでもプロでも、多くのアプリケーションでは、異なる色合いの色を生成する必要がある場合があります。 このような場合に個別の単色 LED を使用することは、構造的にも経済的にも不当です。 したがって、RGB LED はそのような目的のために開発されました。



RGB LED (RED、GREEN、BLUE の頭字語) は、赤、緑、青の色を生成できる結晶の組み合わせです。 この組み合わせにより、これらの LED は 1,600 万階調の光を再現できます。 RGB LED は制御が簡単で、Arduino プロジェクトで問題なく使用できます。 この資料では、Arduino を使用して RGB LED を制御する例を示します。


上で述べたように、RGB LED は 3 つの異なる基本色の結晶の組み合わせであるため、回路では 3 つの LED として表されます。 このような LED は構造的に、1 つの共通端子と各色ごとに 3 つの端子を持っています。 以下は、RGB LED を Arduino に接続する方法の図です。 この回路には、16x2 の英数字 LCD ディスプレイ、ポテンショメータ、および RGB LED ラインと直列の抵抗器も含まれています。 これらの抵抗 (R1 = 100 オーム、R2 = 270 オーム、R3 = 330 オーム) は、LED が故障しないように電流を制限します。 抵抗値 10 KOhm の可変抵抗器 (ポテンショメータ) VR1 ~ VR3 は、RGB LED の強度を制御するために使用されます。つまり、赤、緑、青の強度を変更することで LED の色を設定するために使用できます。結晶。 ポテンショメータ VR1 はアナログ入力 A0 に、VR2 はアナログ入力 A1 に、VR3 はアナログ入力 A2 に接続されます。



この場合の LCD ディスプレイは、カラー値とカラーコードの 16 進値を表示するために使用されます。 カラーコード値は LCD の 1 行目に表示され (Rxxx Gxxx Bxxx、xxx は数値)、16 進コードは LCD の 2 行目に (HEXxxxxxx として) 表示されます。 100 オームの抵抗 R4 は LCD バックライトに印加される電流を制限するために使用され、10K オームの可変抵抗 VR4 は LCD のコントラストを調整するために使用されます。


以下は、Arduino ボードとそれに接続されたポテンショメータを使用して RGB LED の色の変化を制御できるようにするコード (スケッチ) です。


#含む // LCD ディスプレイ用ライブラリ LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // LCD ディスプレイを接続するための Arduino ライン int Radj; int ガジ; int Badj; int Rval=0; int Gval=0; int Bval=0; int R = 9; int G = 10; int B = 11; void setup() ( pinMode(R, OUTPUT); // 9 行目は出力 pinMode(G, OUTPUT); // 10 行目は出力 pinMode(B, OUTPUT); // 11 行目は出力出力へ lcd.begin (16,2); // 表示遅延を初期化します(1); lcd.setCursor(0,0); lcd.print("RGB COLOUR"); lcd.setCursor(4,1); lcd.print("GENERATOR" ); 遅延(2000); lcd.setCursor(0, 0); lcd.print(" R G B "); lcd.setCursor(3,1); lcd.print("HEX= ") ; ) void loop() ( Radj =analogRead(0); Gadj =analogRead(1); Badj =analogRead(2); Rval=Radj/4; // 範囲を (0-1023) から (0-255) に変換します) Gval=Gadj/4; // 範囲を (0-1023) から (0-255) に変換します Bval=Badj/4; // 範囲を (0-1023) から (0-255) に変換します lcd.setCursor (2,0); if (Rval<10) { lcd.setCursor(2,0); lcd.print("00"); lcd.print(Rval); } else if(Rval<100) { lcd.setCursor(2,0); lcd.print("0"); lcd.print(Rval); } else { lcd.setCursor(2,0); lcd.print(Rval); } lcd.setCursor(8,1); if (Rval<16) { lcd.print("0"); lcd.print(Rval, 16); } else { lcd.print(Rval, 16); } lcd.setCursor(7,0); if (Gval<10) { lcd.setCursor(7,0); lcd.print("00"); lcd.print(Gval); } else if(Gval<100) { lcd.setCursor(7,0); lcd.print("0"); lcd.print(Gval); } else { lcd.setCursor(7,0); lcd.print(Gval); } lcd.setCursor(10,1); if (Gval<16) { lcd.print("0"); lcd.print(Gval, 16); } else { lcd.print(Gval, 16); } lcd.setCursor(12,0); if (Bval<10) { lcd.setCursor(12,0); lcd.print("00"); lcd.print(Bval); } else if(Bval<100) { lcd.setCursor(12,0); lcd.print("0"); lcd.print(Bval); } else { lcd.setCursor(12,0); lcd.print(Bval); } lcd.setCursor(12,1); if (Bval<16) { lcd.print("0"); lcd.print(Bval, 16); } else { lcd.print(Bval, 16); } analogWrite(R, Rval); // ШИМ-выход для красного цвета analogWrite(G, Gval); // ШИМ-выход для зеленого цвета analogWrite(B, Bval); // ШИМ-выход для синего цвета }

パルス幅変調 (PWM) は楽しく、特にサーボの制御に使用すると楽しいですが、今日はそれを 3 色の LED に適用します。 これにより、色を制御し、ある程度の美しさを実現することができます。

PWM

PWM の定義は Wikipedia で巧妙に定式化されているので、そこからコピーします。 「PWM - 目的の信号 (マルチレベルまたは連続) を実際のバイナリ信号 (2 レベル -オンオフ )、一定期間にわたって平均して、それらの値は等しくなります。 <...> シュ IMは一定周波数かつ可変のパルス信号です。デューティサイクル 、つまり、パルス繰り返し周期とその持続時間の比です。 デューティサイクル(パルス幅)を設定することによりPWM出力の平均電圧を変更できます. "


では、これが何を意味するのか見てみましょう。 次のような通常の矩形信号があるとします。




周波数は固定されており、デューティ サイクルは 50% です。 これは、期間の半分は電圧が最大で、残りの半分はゼロであることを意味します。 この信号を期間にわたって積分すると、そのエネルギーが最大値の半分に等しいことがわかります。 これは、次の場合と同等になります。 いつも半分の電圧が印加されました。


最大電圧が 5 V の場合、PWM 出力で得られる電圧は、デューティ サイクルに 5 V を掛けたものと等しくなります (フォーマル ナチスが付着しないように 100% で割ったものとなります)。


Arduino では 0 ~ 255 の値を PWM 出力に書き込むことができます。これは、約 20 mV の分解能で電圧を取得できることを意味します。


3色LED

こちらが、四本足のハンサムな男性です。


最も長い脚は共通の陽極で、残りはすべて陰極で、それぞれが独自の色を担当します。(写真を見てください) 下の脚は赤、上から 2 番目の脚は緑、上の脚は青です。

長い脚に +5V を、その他すべてに 0V を印加すると、白い光が得られます (お願いです。自分の身を守ってください。制限抵抗を取り付けてください!)。 どのくらい白いかは、次のビデオで判断できます。


しかし、そこに白い色が入るのは面白くありません。 さまざまな色で輝かせる方法を見てみましょう。

ArduinoのPWM

Arduino の PWM 周波数は約 490 Hz です。 Arduino UNO ボードでは、PWM に使用できるピンは 3、5、6、9、10、11 です。ボード上にこれに関するヒントがあります - シルクスクリーンで PWM ピン番号の前にチルダまたはシャープがあります。 。

Arduino で PWM を制御することほど簡単なことはありません。 これを行うには、1 つの単一関数を使用します analogWrite(ピン, 値)、 どこ ピン- ピン番号、および 価値- 0 ~ 255 の値。この場合、何も書き込む必要はありません。 void setup()!

詳細については英語で読むことができます。

私たちはかなり働いています

LEDをさまざまな色で輝かせてみましょう。 1 つの色が消えていき、もう 1 つの色が燃え上がるようにしましょう。 いくつかの色を交互に使用すると、色が赤から緑、緑から青、青から赤へと円を描いて移動します。

簡単な図をまとめてみましょう。


そして、いくつかの簡単なコードを書いてみましょう。

//色に応じてピンに名前を付けます
int REDpin = 9;
int GREENピン = 10;
int ブルーピン = 11;

空所 設定 (){}

空所 ループ (){
for (int 値 = 0 ; 値<= 255; value +=1) {
//赤色の明るさが下がります
アナログ書き込み(REDピン、値);
//緑の明るさが増加します
アナログ書き込み(GREENピン、255値);
// 青はオフです
アナログ書き込み(BLUEピン、255);
//一時停止
遅延(30);
}

for (int 値 = 0 ; 値<= 255; value +=1) {
// 赤はオフです
アナログ書き込み(REDピン、255);
//緑の明るさが下がります
アナログ書き込み(GREENピン、値);
//青色の明るさが増加します
アナログ書き込み(BLUEピン、255値);
//一時停止
遅延(30);
}

for (int 値 = 0 ; 値<= 255; value +=1) {
//赤色の明るさが増加します
アナログ書き込み(REDピン、255値);
// 緑色はオフです
アナログ書き込み(GREENピン、255);
//青色の明るさが下がります
アナログ書き込み(BLUEピン, 値);
//一時停止
遅延(30);
}
}