Arduinoを使用した照明器具のDALI制御

DALIプロトコルについて



DALI(Digital Addressable Lighting Interface)は、照明器具を制御するためのプロトコルです。 このプロトコルは、オーストリアの企業Tridonicによって開発され、マンチェスターコーディングに基づいています。データの各ビットは、低信号から高信号、またはその逆の差によってエンコードされます。









DALIネットワークは、コントローラーとそれに接続された照明器具で構成されています。 データ伝送は1200ビット/秒の速度です。 論理ユニットの電圧は16±6.5V、論理ゼロの電圧は0±4.5Vです。 DALIバスは常に16Vの電圧下にあります。そうしないと、バスに接続されているすべての照明器具が緊急モードになり、オンになります。 バスの電力はコントローラーによって提供されます。 1つのバスに最大64個の器具が接続されます。 デバイスを16のグループにまとめて、最大16の照明シーンを設定できます。 各照明器具の明るさは、0から254まで調整可能です。







コントローラーから照明デバイスへのメッセージは、16ビットと1つの開始ビットで構成されます。 メッセージは、単一のランプ、ランプのグループ、またはブロードキャストに宛てて送信できます。 一部のコマンドは、100ミリ秒以下の間隔で2回送信する必要があります。 特定のコマンド、たとえば現在の明るさの要求またはデバイスタイプの要求に対して、照明デバイスは応答メッセージを送信します。













照明デバイスからコントローラーへのメッセージは、8ビットと1つの開始ビットで構成されます。













コマンドのリストはここにあります







新しい器具の初期化



作業を開始する前に、各照明器具に1〜63のアドレス(短いアドレス)を割り当てる必要があります。 通常、新しい照明器具には短い住所がないため、特定のランプを制御することはできません。 このような照明器具は、ブロードキャストコマンドにのみ応答します。







ランプに短いアドレスを割り当てるには、ランプを初期化する必要があります。 各照明器具には、24ビット(3回、8ビット)で構成されるランダムアドレスがあります。 24ビットアドレスは、1〜16777216の値を取ることができます。同じアドレスでフィクスチャを接続する可能性は最小限で、266144の1つから1つのケースを構成します。







初期化プロセスは次のとおりです。













ダリとアルドゥイノ



ランプを制御するために、私はARDUINO NANO、12V電源、抵抗、LED、トランジスタ、およびERCO Grasshopperランプを使用しました。 スキームは非常に単純です。









ERCO Grasshopperは、建物の正面と建築記念碑を照らすように設計されています。 DALIドライバーTRIDONICを備えたRGBランプであることがわかりました。 このランプには3つのアドレス(赤、緑、青)があります。









DALIライブラリはこちらからダウンロードできます







カスタマイズ



void setup() { Serial.begin(74880); /*   . */ dali.setupTransmit(3); /*   .      (12 2,1)        0.        4,5,      3,8. */ dali.setupAnalogReceive(0); /*  : -     ; -        . */ dali.busTest(); /*  ,  -COM  false -     ; true -     . */ dali.msgMode = true; }
      
      





メインチーム



 /*    DALI , : cmd1 -  ; cmd2 -  . */ dali.transmit(cmd1, cmd2) /*     */ uint8_t response = dali.receive() /*    */ bool response = dali.getResponse() /*   . */ dali.scanShortAdd() /*  . */ dali.initialisation();
      
      





使用例



以下は、ライブラリの使用例です。 ランプのさまざまなチャンネルの明るさを組み合わせると、さまざまな色が得られます。







 #include <Dali.h> const int DALI_TX = 3; const int DALI_RX_A = 0; #define BROADCAST_C 0b11111111 #define ON_C 0b00000101 void setup() { Serial.begin(74880); //      dali.setupTransmit(DALI_TX); //      dali.setupAnalogReceive(DALI_RX_A); //  dali.busTest(); //  dali.msgMode = true; sinus(); } void sinus () { //    uint8_t lf_1_add = 0; uint8_t lf_2_add = 1; uint8_t lf_3_add = 2; //       uint8_t lf_1; uint8_t lf_2; uint8_t lf_3; //  uint8_t i; while (Serial.available() == 0) { for (i = 0; i < 360; i ++) { //   if (Serial.available() != 0) { dali.transmit(BROADCAST_C, ON_C); break; } //   lf_1 = (int) abs(254 * sin(i * 3.14 / 180)); lf_2 = (int) abs(254 * sin(i * 3.14 / 180 + 2 * 3.14 / 3)); lf_3 = (int) abs(254 * sin(i * 3.14 / 180 + 1 * 3.14 / 3)); //  dali.transmit(lf_1_add << 1, lf_1); delay(5); dali.transmit(lf_2_add << 1, lf_2); delay(5); dali.transmit(lf_3_add << 1, lf_3); delay(5); delay(20); } } } void loop() { };
      
      







文学



  1. DALIコマンド
  2. DALIアドレス設定の説明
  3. USB-LPC2141アプリケーションノートを使用したDALIマスター
  4. LPC1112アプリケーションノートを使用したDALIスレーブ
  5. Arduinoのマンチェスター図書館
  6. Digital Addressable Lighting Interface(DALI)アプリケーションノート
  7. DALIゲートウェイ



All Articles