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つのケースを構成します。
初期化プロセスは次のとおりです。
- INITIALISEブロードキャストコマンド(0b1010010100000000)は、100ms以下の間隔でコントローラーから2回送信され、すべてのライトが初期化モードになります。
- RANDOMISEブロードキャストコマンド(0b1010011100000000)は、100ms以下の間隔でコントローラーから2回送信されます。その後、すべてのフィクスチャが新しいランダムアドレスを割り当てます。
- ランダムアドレス値(24ビット)は、それぞれ8ビットの3つのメッセージ(0b10110001HHHHHHHH、0b10110011MMMMMMMMM、0b10110101LLLLLLLL)でコントローラーから送信されます。
- ブロードキャストコマンドCOMPARE(0b101010010000000000)がコントローラーから送信されます。
- コントローラーが応答メッセージをキャプチャする場合、より低いアドレスのランプがあります。 したがって、ランプが応答しなくなるまで、要求されたアドレスは減らされます。
- 照明器具からの応答が受信されなかった場合、アドレスは1単位増加し、最小のランダムアドレスを持つ照明器具が決定されます。
- 照明器具のアドレスを決定した後、コントローラーは照明器具を短いアドレス(0b10110111AAAAAAAAA)に設定し、WITHRAWコマンド(0b1010101100100000000)を送信します。これは、照明プロセスを検索プロセスから除外します。
- 次に、コントローラは、大きなランダムアドレスを持つ次の照明器具の検索に進みます。
- 初期化プロセスが完了すると、コントローラーはTERMINATEコマンド(0b1010000100000000)を送信し、ランプは初期化モードを終了します。
ダリとアルドゥイノ
ランプを制御するために、私はARDUINO NANO、12V電源、抵抗、LED、トランジスタ、およびERCO Grasshopperランプを使用しました。 スキームは非常に単純です。
ERCO Grasshopperは、建物の正面と建築記念碑を照らすように設計されています。 DALIドライバーTRIDONICを備えたRGBランプであることがわかりました。 このランプには3つのアドレス(赤、緑、青)があります。
カスタマイズ
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() { };