Esta vez, propongo hacer un poco de magia (¿por qué no?) Y crear un cristal mágico para nuestras necesidades diarias. Lo usaremos para su propósito previsto: para la adivinación de varias entidades y eventos no obvios. Y solo necesitamos dos ingredientes para hacer este artefacto: Arduino Mega Server y el controlador inalámbrico nooLite SD111-180 LED strip .El cristal no será decorativo (para engañar a un público crédulo), sino el más funcional, con muchas propiedades mágicas.Entonces, comencemos ...Escuela de magia
Como tú mismo entiendes, no puedes simplemente tomar y realizar algún milagro, primero debes pasar por la escuela de magia y aprender los conceptos básicos de este difícil arte. Y aquí lo remito a una serie de artículos ( uno , dos , tres ) sobre la integración del equipo nooLite en los sistemas de automatización del hogar y le recomiendo que se familiarice con ellos antes de seguir leyendo. En estos artículos, se detallan todos los detalles básicos y técnicos de cómo funciona el Arduino Mega Server con el equipo inalámbrico nooLite. Por lo tanto, continuaré toda la narración suponiendo que ya haya leído los artículos anteriores.Modulo
Realizaremos todos los experimentos con el controlador inalámbrico nooLite SD111-180, que le permite controlar las tiras de LED "por aire", sin ningún cable. Conexión, como siempre con nooLite, lo más simple es dos cables a la fuente de alimentación para tiras de LED y cuatro a la cinta en sí: más y tres canales R, G, B.
Parte de software
Artículos anteriores hablaron sobre el núcleo de control nooLite integrado en el sistema Arduino Mega Server. Y también se mencionó allí que el conjunto central de funciones para controlar los dispositivos nooLite se implementó en el núcleo y se ofreció a todos los que quisieran, por analogía, agregar otras funciones necesarias al núcleo. Ahora facilitaremos esta tarea y agregaremos funciones para el control inalámbrico de las tiras de LED al núcleo.En primer lugar, agregamos la función "principal", que genera comandos de control para el módulo nooLite MT1132 .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]);
}
}
Esta es la hermana de la función nooSendCommand, que cubrimos en el primer artículo. Solo se modifica ligeramente para las necesidades específicas de controlar las tiras de LED. Instalación adicional de 6, 7, 8 bytes del comando de control, que contiene brillo en los tres canales R, G, B. Y se agrega una matrizbyte ledLastState[] = {127, 127, 127};
que contiene el último valor de color establecido de la tira de LED. Esto es necesario para poder encender y apagar la luz, manteniendo el valor de color establecido. Si esto no se hace, luego de apagarlo y luego encenderlo, el color se restablecerá a blanco, lo cual no es muy conveniente.Y para trabajar con tira de LED, seleccione el tercer canalbyte const NOO_CHANNEL_3 = 2;
Puede elegir cualquiera de los 32 canales con los que funciona el módulo nooLite MT1132.Ahora tenemos la función básica que controla el funcionamiento del controlador de tira de LED nooLite SD111-180 y, en consecuencia, la tira de LED en sí. Y ahora podemos comenzar a escribir funciones de envoltura que nos faciliten escribir código para controlar el color del brillo de la cinta.Envoltura basevoid nooLed (byte ch, byte r, byte g, byte b) {
nooSendCommandLed(ch, 6, r, g, b, 3);
}
Simplemente indique el canal y los colores del brillo. A nuestra disposición 16 millones de sombras. A continuación, escribimos funciones de envoltura para los colores base (puede agregar tales funciones para sus colores favoritos).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);}
Simplemente indique el canal y la intensidad del brillo en el rango de 0 a 255. Y algunas funciones "conceptuales" más. Intensidad blanca, negra y gris.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);}
Y la última función, que agregaremos al núcleo nooLite en el sistema Arduino Mega Server, es la función para restaurar el último color del brillo de la cinta (los módulos nooLite en sí mismos no recuerdan este valor). Esta función se utiliza para encender la cinta (después de apagarla, lo que restablece el color a blanco).void nooSetLedLastState(byte ch) {
nooSendCommandLed(ch, 6, ledLastState[0], ledLastState[1], ledLastState[2], 3);
}
Aquí está el código completo para el nuevo núcleo de gestión nooLite.Código de núcleo completo
#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
Eso es todo, con esto, con la descripción de los complementos del kernel, terminamos y vamos a la interfaz de administración de color de la tira de LED de AMS.Interfaz de gestión de tira de LED
En artículos anteriores, recordará la interfaz de control de instrumentos nooLite del sistema Arduino Mega Server. No seremos particularmente sofisticados y solo agregaremos otra sección a las tres existentes (dos secciones para controlar los dispositivos y una sección para “vincular” / “desvincular” los módulos).
Se pueden ver capturas de pantalla de otras secciones con explicaciones detalladas en artículos anteriores sobre la integración de AMS con el sistema nooLite. La nueva sección permite encender y apagar la tira de LED y elegir el color brillante de varias opciones predefinidas.Este es solo un ejemplo de integración y puede hacer cualquier otra interfaz basada en este ejemplo. Puede hacer elecciones de color, cambiar suavemente los colores o proporcionar escenarios para encender, apagar y cambiar el color de la luz de fondo, etc., etc.Cocina domestica
La interfaz de control es solo una parte de las características que proporciona el Arduino Mega Server con el núcleo de control integrado del instrumento nooLite. Y esto, por así decirlo, es la parte superficial del iceberg. Y la parte submarina es la capacidad de usar funciones de envoltura en el código del sistema mismo. Puede, literalmente, en una sola línea de código, controlar el brillo de la cinta y usarla para indicar los parámetros internos del sistema (temperatura, funciones de seguridad, encender los dispositivos, etc.) y los externos que vienen a través de la red en forma de comandos de otros dispositivos de Smart Home .Y aquí vamos a lo más interesante.Cristal mágico
Ahora hablemos sobre el "cristal mágico" en sí. De que estas hablando Imagine cualquier entorno artificial de una persona: el interior de un apartamento u oficina, un salón para la celebración de cualquier evento, el entorno urbano de nuestras ciudades (paradas, postes, bordillos, etc.), etc. Entonces, la idea es que En el nivel actual de desarrollo tecnológico, cualquier tema puede convertirse en un "indicador" de cualquier evento y parámetro. Puede ir aún más lejos y hacer que cualquier tema sea interactivo o “animado”, también puede equipar cualquier tema con una voz distintiva, etc. (¡Hola, Alice!), Pero este es un tema para otro artículo, hablaremos de eso en otro momento.
Tome, por ejemplo, su habitación. En el estante, al lado del televisor, o simplemente en medio de un "desastre creativo" en la mesa, puede haber un objeto pequeño, por ejemplo, una "bola mágica" que, dependiendo de cualquier parámetro o evento, cambia su color, tono o brillo del brillo. No molesta a nadie y no llama la atención, no hace ningún ruido, pero solo tiene que echarle un vistazo rápido y le queda claro qué temperatura hay en la calle, si recibió un correo electrónico por correo electrónico, cuánta cerveza queda en el refrigerador, es hora de alimentar al pescado o tome pastillas para la esclerosis recetadas por su médico.
Los eventos particularmente importantes del "cristal mágico" pueden indicarse mediante el parpadeo o incluso el sonido. Y usted mismo establece todos los parámetros de este sistema, dependiendo de sus necesidades y su imaginación: el color y la intensidad del brillo, los eventos y parámetros a los que reacciona el "cristal mágico", etc. Puede haber varios "cristales" de este tipo y pueden ser cualquier tipo, no necesariamente en forma de pelota.Ahora, desde cosas pequeñas y "discretas", pasemos a formas medianas. Puede ser iluminación de piso o techo, paredes luminosas (partes de paredes) o nichos, etc. elementos interiores. Por ejemplo, una luz de fondo puede servir como un reloj de color, cuando en la noche cambia de luz dependiendo del tiempo, y en la mañana gradualmente se vuelve más brillante y sirve como un reloj de alarma "natural".
Y, por último, este es un depósito inagotable de ideas para diversas actuaciones y diseño de eventos masivos, como fiestas, eventos corporativos, etc., reuniones de personas, donde un pequeño cristal mágico se convierte en cubos de 2 metros y bolas que cambian de color dependiendo de , por ejemplo, los resultados de votar a favor o en contra de algo.
Conclusión
Y todo lo que necesita para darse cuenta de todas estas ideas es el Arduino Mega Server , el controlador de tira de LED inalámbrico nooLite SD111-180 y un poco de imaginación. Todas las innovaciones descritas en este artículo aparecerán en la próxima versión 0.15 del sistema AMS, y el más impaciente puede tomar el código del módulo del núcleo nooLite de este artículo y comenzar a hacer maravillas ahora mismo.Artículos anteriores:Equipo inalámbrico nooLite y Smart Home (Parte 1).Equipo inalámbrico Arduino nooLite y Smart Home (Parte 2).Equipo inalámbrico Arduino Mega Server nooLite y Smart Home (Parte 3).Promo de la estación de soldadura Arduino Mega Server en Youtube, demostrando el trabajo con un verdaderosistema de promoción Arduino Mega Server