Dieses Mal schlage ich vor, ein wenig zu zaubern (warum nicht?) Und einen magischen Kristall für unsere täglichen Bedürfnisse zu erschaffen. Wir werden es für den beabsichtigten Zweck verwenden - für die Wahrsagerei verschiedener nicht offensichtlicher Entitäten und Ereignisse. Und wir brauchen nur zwei Zutaten, um dieses Artefakt herzustellen - Arduino Mega Server und den drahtlosen LED-Strip- Controller nooLite SD111-180 .Der Kristall wird nicht dekorativ sein (um ein leichtgläubiges Publikum zu täuschen), sondern der funktionalste mit vielen magischen Eigenschaften.Also, fangen wir an ...Schule der Magie
Wie Sie selbst verstehen, können Sie nicht einfach ein Wunder vollbringen und vollbringen. Sie müssen zuerst die Schule der Magie durchlaufen und die Grundlagen dieser schwierigen Kunst lernen. Und hier verweise ich Sie auf eine Reihe von Artikeln ( eins , zwei , drei ) über die Integration von nooLite-Geräten in Hausautomationssysteme und empfehle Ihnen, sich mit diesen vertraut zu machen, bevor Sie weiterlesen. In diesen Artikeln werden alle Grundlagen und technischen Details zur Funktionsweise des Arduino Mega Servers mit nooLite-Funkgeräten detailliert beschrieben. Daher werde ich die gesamte Erzählung fortsetzen, vorausgesetzt, Sie haben die vorherigen Artikel bereits gelesen.Modul
Wir werden alle Experimente mit dem drahtlosen Controller nooLite SD111-180 durchführen, mit dem Sie LED-Streifen "drahtlos" ohne Kabel steuern können. Wie immer bei nooLite sind zwei Drähte zur Stromversorgung für LED-Streifen und vier zum Band selbst am einfachsten: Plus- und drei Kanäle R, G, B.
Software-Teil
In früheren Artikeln wurde über den im Arduino Mega Server-System integrierten nooLite-Steuerungskern gesprochen. Dort wurde auch erwähnt, dass der Kernfunktionssatz zur Steuerung von nooLite-Geräten im Kernel implementiert war und allen angeboten wurde, die dem Kernel analog weitere notwendige Funktionen hinzufügen wollten. Jetzt werden wir diese Aufgabe vereinfachen und Funktionen zur drahtlosen Steuerung von LED-Streifen zum Kernel hinzufügen.Zunächst fügen wir die Hauptfunktion hinzu, die Steuerbefehle für das nooLite MT1132- Modul generiert .void nooSendCommandLed(byte channel, byte command, byte r, byte g, byte b, byte format) {
byte buf[12];
ledLastState[0] = r;
ledLastState[1] = g;
ledLastState[2] = b;
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = r;
buf[7] = g;
buf[8] = b;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
Dies ist die Schwester der Funktion nooSendCommand, die wir im ersten Artikel behandelt haben. Es ist nur geringfügig an die spezifischen Anforderungen der Steuerung von LED-Streifen angepasst. Installation von 6, 7, 8 Bytes des Steuerbefehls hinzugefügt, die Helligkeit auf den drei Kanälen R, G, B enthalten. Außerdem wird ein Array hinzugefügtbyte ledLastState[] = {127, 127, 127};
enthält den zuletzt eingestellten Farbwert des LED-Streifens. Dies ist erforderlich, damit Sie das Licht ein- und ausschalten können, während Sie den eingestellten Farbwert beibehalten. Wenn dies nicht erfolgt, wird die Farbe nach dem Aus- und Einschalten auf Weiß zurückgesetzt, was nicht sehr praktisch ist.Wählen Sie für die Arbeit mit LED-Streifen den dritten Kanalbyte const NOO_CHANNEL_3 = 2;
Sie können einen der 32 Kanäle auswählen, mit denen das nooLite MT1132-Modul arbeitet.Jetzt haben wir die Grundfunktion, die den Betrieb des LED-Streifen-Controllers nooLite SD111-180 und dementsprechend den LED-Streifen selbst steuert. Und jetzt können wir mit dem Schreiben von Wrapper-Funktionen beginnen, die es uns erleichtern, Code zu schreiben, um die Farbe des Glühens des Bandes zu steuern.Basisverpackungvoid nooLed (byte ch, byte r, byte g, byte b) {
nooSendCommandLed(ch, 6, r, g, b, 3);
}
Geben Sie einfach den Kanal und die Farben des Lichts an. Zu unserer Verfügung 16 Millionen Farben. Als nächstes schreiben wir Wrapper-Funktionen für die Grundfarben (Sie können solche Funktionen für Ihre Lieblingsfarben hinzufügen).void nooRed (byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, 0, 3);}
void nooGreen (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, 0, 3);}
void nooBlue (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, 0, v, 3);}
void nooYellow (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, 0, 3);}
void nooMagenta(byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, v, 3);}
void nooCyan (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, v, 3);}
Geben Sie einfach den Kanal und die Intensität des Glühens im Bereich von 0 bis 255 an. Und einige weitere "konzeptionelle" Funktionen. Weiß, Schwarz und Grau Intensität.void nooBlack (byte ch) {nooSendCommandLed(ch, 6, 0, 0, 0, 3);}
void nooWhite (byte ch) {nooSendCommandLed(ch, 6, 255, 255, 255, 3);}
void nooGray (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, v, 3);}
Und die letzte Funktion, die wir dem nooLite-Kern im Arduino Mega Server-System hinzufügen, ist die Funktion zum Wiederherstellen der letzten Farbe des Glühens des Bandes (die nooLite-Module selbst erinnern sich nicht an diesen Wert). Diese Funktion wird zum Einschalten des Bandes verwendet (nach dem Ausschalten wird die Farbe auf Weiß zurückgesetzt).void nooSetLedLastState(byte ch) {
nooSendCommandLed(ch, 6, ledLastState[0], ledLastState[1], ledLastState[2], 3);
}
Hier ist der vollständige Code für den neuen nooLite-Verwaltungskernel.Vollständiger Kernel-Code
#ifdef NOO_FEATURE
byte const PIN_TX = 18;
byte const PIN_RX = 19;
byte const NOO_CHANNEL_1 = 0;
byte const NOO_CHANNEL_2 = 1;
byte const NOO_CHANNEL_3 = 2;
byte const NOO_CHANNEL_4 = 3;
byte const NOO_CHANNEL_5 = 4;
void nooInit() {
Serial1.begin(9600);
modulNoo = MODUL_ENABLE;
started("nooLite");
}
void nooWork() {
}
void nooSendCommand(byte channel, byte command, byte data, byte format) {
byte buf[12];
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = data;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
byte ledLastState[] = {127, 127, 127};
void nooSendCommandLed(byte channel, byte command, byte r, byte g, byte b, byte format) {
byte buf[12];
ledLastState[0] = r;
ledLastState[1] = g;
ledLastState[2] = b;
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = r;
buf[7] = g;
buf[8] = b;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
void nooBind (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind (byte ch) {nooSendCommand(ch, 9, 0, 0);}
void nooOn (byte ch) {nooSendCommand(ch, 2, 0, 0);}
void nooOff (byte ch) {nooSendCommand(ch, 0, 0, 0);}
void nooTrigger(byte ch) {nooSendCommand(ch, 4, 0, 0);}
void nooCancel (byte ch) {nooSendCommand(ch, 10, 0, 0);}
void nooUp (byte ch) {nooSendCommand(ch, 3, 0, 0);}
void nooDown (byte ch) {nooSendCommand(ch, 1, 0, 0);}
void nooRevers (byte ch) {nooSendCommand(ch, 5, 0, 0);}
void nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}
void nooLed (byte ch, byte r, byte g, byte b) {nooSendCommandLed(ch, 6, r, g, b, 3);}
void nooBlack (byte ch) {nooSendCommandLed(ch, 6, 0, 0, 0, 3);}
void nooWhite (byte ch) {nooSendCommandLed(ch, 6, 255, 255, 255, 3);}
void nooGray (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, v, 3);}
void nooRed (byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, 0, 3);}
void nooGreen (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, 0, 3);}
void nooBlue (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, 0, v, 3);}
void nooYellow (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, 0, 3);}
void nooMagenta(byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, v, 3);}
void nooCyan (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, v, 3);}
void nooSetLedLastState(byte ch) {nooSendCommandLed(ch, 6, ledLastState[0], ledLastState[1], ledLastState[2], 3);}
#endif
Das ist alles, mit der Beschreibung der Kernel-Add-Ons beenden wir und gehen zur AMS LED-Streifen-Farbmanagement-Oberfläche.LED-Streifenverwaltungsschnittstelle
In früheren Artikeln werden Sie sich an die nooLite-Instrumentensteuerungsschnittstelle des Arduino Mega Server-Systems erinnern. Wir werden nicht besonders anspruchsvoll sein und nur einen weiteren Abschnitt zu den vorhandenen drei hinzufügen (zwei Abschnitte zur Steuerung der Geräte und ein Abschnitt zum „Binden“ / „Lösen“ der Module).
Screenshots anderer Abschnitte mit detaillierten Erläuterungen finden Sie in früheren Artikeln zur Integration von AMS in das nooLite-System. Der neue Abschnitt ermöglicht das Ein- und Ausschalten des LED-Streifens und die Auswahl der Leuchtfarbe aus mehreren vordefinierten Optionen.Dies ist nur ein Beispiel für die Integration, und Sie können anhand dieses Beispiels jede andere Schnittstelle erstellen. Sie können Farben auswählen, Farben reibungslos ändern oder Szenarien zum Ein- und Ausschalten sowie zum Ändern der Farbe der Hintergrundbeleuchtung usw. usw. bereitstellen.Wohnküche
Die Steuerschnittstelle ist nur ein Teil der Funktionen, die der Arduino Mega Server mit dem integrierten Steuerungskern des nooLite-Instruments bietet. Und das ist sozusagen der oberflächliche Teil des Eisbergs. Und der Unterwasserteil ist die Fähigkeit, Wrapper-Funktionen im Code des Systems selbst zu verwenden. Sie können ganz einfach, buchstäblich in einer Codezeile, das Leuchten des Bandes steuern und damit interne Systemparameter (Temperatur, Sicherheitsfunktionen, Einschalten von Geräten usw.) und externe Parameter anzeigen, die über das Netzwerk in Form von Befehlen von anderen Geräten des Smart Home eingehen .Und hier gehen wir zu den interessantesten.Magischer Kristall
Lassen Sie uns nun über den „magischen Kristall“ selbst sprechen. Worüber sprichst du? Stellen Sie sich jede künstliche Umgebung einer Person vor - das Innere einer Wohnung oder eines Büros, eine Halle für Veranstaltungen, die städtische Umgebung unserer Städte (Haltestellen, Masten, Bordsteine usw.) usw. Die Idee ist also Auf dem gegenwärtigen Stand der technologischen Entwicklung kann jedes Thema zu einem „Indikator“ für Ereignisse und Parameter gemacht werden. Sie können noch weiter gehen und jedes Thema interaktiv oder „lebendig“ gestalten. Sie können auch jedes Thema mit einer unverwechselbaren Stimme usw. ausstatten (hi, Alice!). Dies ist jedoch ein Thema für einen anderen Artikel. Wir werden ein anderes Mal darüber sprechen.
Nehmen Sie zum Beispiel Ihr Zimmer. Im Regal, neben dem Fernseher oder mitten im „kreativen Durcheinander“ auf dem Tisch befindet sich möglicherweise ein kleines Objekt, z. B. ein „magischer Ball“, der je nach Parametern oder Ereignissen seine Farbe, seinen Farbton oder seine Helligkeit ändert. Es stört niemanden und zieht keine Aufmerksamkeit auf sich, es macht keine Geräusche, aber Sie müssen nur einen kurzen Blick darauf werfen und es wird Ihnen klar, wie hoch die Außentemperatur ist, ob Sie eine E-Mail per E-Mail erhalten haben, wie viel Bier noch im Kühlschrank ist, ist es Zeit, den Fisch zu füttern oder nehmen Sie von Ihrem Arzt verschriebene Sklerosepillen.
Besonders wichtige Ereignisse „magischer Kristall“ können durch Blinken oder sogar Ton angezeigt werden. Und Sie stellen alle Parameter dieses Systems selbst ein, abhängig von Ihren Bedürfnissen und Ihrer Vorstellungskraft: der Farbe und Intensität des Glühens, den Ereignissen und Parametern, auf die der „magische Kristall“ reagiert usw. Es kann mehrere solcher „Kristalle“ geben, und sie können es sein jede Art, nicht unbedingt in Form eines Balls.Lassen Sie uns nun von kleinen und „unauffälligen“ Dingen zu mittleren Formen übergehen. Dies können Boden- oder Deckenbeleuchtung, leuchtende Wände (Wandteile) oder Nischen usw. sein. Innenelemente. Beispielsweise kann eine Hintergrundbeleuchtung als Farbuhr dienen, wenn sie nachts das Licht je nach Zeit ändert, und am Morgen wird sie allmählich heller und dient als „natürlicher“ Wecker.
Und schließlich ist dies ein unerschöpflicher Vorrat an Ideen für verschiedene Aufführungen und die Gestaltung von Massenveranstaltungen wie Partys, Firmenveranstaltungen usw., bei denen sich ein kleiner magischer Kristall in 2-Meter-Würfel und Kugeln verwandelt, deren Farbe sich je nach Farbe ändert Zum Beispiel die Ergebnisse der Abstimmung für oder gegen etwas.
Fazit
Und alles, was Sie brauchen, um all diese Ideen zu verwirklichen, ist der Arduino Mega Server , der drahtlose LED-Strip- Controller nooLite SD111-180 und ein wenig Fantasie. Alle in diesem Artikel beschriebenen Innovationen werden in der nächsten Version 0.15 des AMS-Systems erscheinen. Der ungeduldigste von Ihnen kann den Code des nooLite-Kernelmoduls aus diesem Artikel übernehmen und sofort Wunder wirken.Frühere Artikel:nooLite Wireless Equipment und Smart Home (Teil 1). ArduinonooLite Wireless-Geräte und Smart Home (Teil 2).NooLite Wireless-Geräte und Smart Home von Arduino Mega Server (Teil 3).Promo der Lötstation Arduino Mega Server auf Youtube, die die Arbeit mit einem echten Promo-System Arduino Mega Server demonstriert