Hola queridos lectores de Geektimes! Esta vez quiero llamar su atención sobre una serie de artículos sobre la integración del equipo inalámbrico nooLite en los sistemas de automatización del hogar. Este ciclo será similar a la serie de artículos ya publicados ( uno , dos , tres ) sobre la integración de los módulos Laurent en los sistemas Smart Home, solo hablará sobre el sistema nooLite y después de leer este ciclo no tendrá preguntas sobre la administración de dispositivos nooLite desde su Smart en casaSobre la serie de artículos
El ciclo se divide en tres partes. En la primera parte, aprenderá sobre los principios de funcionamiento del equipo inalámbrico nooLite y cómo administrarlo desde sus proyectos Arduino. La segunda parte describirá en detalle sobre la integración del módulo de control MT1132 en el Mega Servidor Arduino y sobre las posibilidades para administrar un Smart Home que se están abriendo en esta conexión. Y el tercer artículo de la serie estará dedicado a un tema muy interesante: el concepto de crear dispositivos "100 en 1" basados en el Mega Servidor Arduino. Se examinará en detalle un ejemplo de la creación de una estación de soldadura inalámbrica en AMS, literalmente de la nada, basado en un solo dímero inalámbrico nooLite. También habrá una cuarta parte a partir de la cual aprenderás a crear un cristal mágico.Por cierto, la estación de soldadura, que se discutirá en el tercer artículo, ya está presente en el último ensamblaje de Arduino Mega Server con el número 0.14. Y los lectores más curiosos no pueden esperar al tercer artículo, sino que descargan inmediatamente el kit de distribución y descubren cómo funciona todo por su cuenta.
Y lo mejor es que puede haber cientos de dispositivos de este tipo en AMS, y al mismo tiempo. Por ejemplo, una estación de soldadura, una estación meteorológica, una unidad de seguridad, un controlador de invernadero, etc. Y todo esto puede funcionar simultáneamente o "arrancar" cargando una página web o incluso un sitio completo dedicado a un dispositivo específico.Pero no nos adelantemos, dejemos lo más interesante al final, pero por ahora haremos la preparación teórica necesaria. Prometo que todo se expresará de la manera más simple e inteligible. Entonces comencemos.Equipo NooLite
El equipo NooLite ya es un sistema conocido y popular y hay mucha información al respecto en Internet. Trataré de resumir los puntos principales aquí.El concepto es muy simple: hay unidades de potencia para controlar la luz y varias cargas, y paneles de control que envían comandos a estas unidades de potencia. Y todo esto funciona, naturalmente, sin la participación de conexiones por cable. En realidad todo. La belleza del sistema es que todos los componentes están pensados, bien hechos y hacen exactamente lo que dice: controlan de manera confiable el equipo conectado.También hay sensores inalámbricos, control de dispositivos desde un teléfono inteligente y mucho más, pero es imposible cubrir todo en un artículo, aquí nos centraremos solo en la integración de nooLite con la popular plataforma de bricolaje: Arduino.De todo el amplio espectro de equipos nooLite, estaremos interesados en el módulo de control MT1132 porque está diseñado para conectarse a computadoras Arduino y de placa única como Raspberry Pi. Y funciona en una interfaz serial simple. Mirando hacia el futuro un poco, diré que me gustó el módulo debido a su simplicidad, previsibilidad y operación confiable. Y pude apreciar estas cualidades después de un mes de lucha infructuosa con el módulo de red en el chip W5500, que no quería funcionar normalmente.
Y me gustó especialmente el hecho de que (aparte de la fuente de alimentación) el módulo está conectado al Arduino con solo un (!) Cable (RX). El segundo (TX) se puede omitir por completo. El módulo es "unidireccional", es decir, está diseñado solo para enviar señales de control. Los planes de la compañía Nootehnika incluyen el desarrollo y lanzamiento de una versión "bidireccional" del módulo.
El segundo elemento que necesitamos del equipo nooLite es una unidad de control de potencia, por ejemplo, SU111-300. La conexión de la unidad es elemental y se puede ver en la ilustración. Dos cables están conectados a una red de 220 voltios, y los otros dos a la carga. Lo único a lo que me gustaría prestar atención es que los módulos se suministran con un puente que bloquea el modo de atenuación y, si desea ajustar la potencia, debe cortar este puente (y recuerde aislar los cables pelados resultantes).
No me detendré en los controles remotos porque este es un control "manual", y nosotros, en relación con la automatización, estamos más interesados en la automática. Solo puedo decir que los experimentos se llevaron a cabo con el control remoto PU311-2, hecho en forma de un interruptor de pared y se mostró de la mejor manera, es decir, encendió y apagó la luz claramente y sin fallas. Lo que, de hecho, es un buen equipo y diferente del malo, simplemente no se nota bien.Concepto de trabajo. Enlace y desvinculación
Antes de poder encender y apagar los aparatos eléctricos con el sistema nooLite, debe "vincular" los módulos de control a las unidades de potencia correspondientes. Esto se hace utilizando el llamado procedimiento. "Enlaces" y "desvinculación", descritos en detalle en la documentación de nooLite. En resumen, todo se reduce a presionar un par de botones en los bloques vinculados y no presenta ninguna dificultad.En el caso de que se use el módulo de control MT1132 en lugar del control remoto, el procedimiento ocurre de una manera ligeramente diferente. A saber: dado que el módulo no tiene botones, debe generar y enviar mediante programación un comando de control en el canal deseado, y luego presionar el botón en la unidad de alimentación, confirmando el "enlace" o "desvinculación".Los canales son "líneas de control" y hay 32 de ellos en el módulo MT1132, como lo demuestran los dos últimos dígitos del nombre. Esto significa que con este módulo puede administrar 32 grupos separados de equipos, lo que es más que suficiente para un apartamento o una casa pequeña. Si tiene una casa grande, entonces los módulos pueden trabajar en conjunto y escalar a cualquier número de canales.Descripción del protocolo
Hay un documento maravilloso en el sitio web de la compañía Nootehnika que describe de manera exhaustiva y detallada la conexión del módulo y su protocolo de control. No saturaré el artículo con detalles técnicos innecesarios, cualquiera puede leer este documento, solo describiré los puntos principales.Para controlar el módulo, necesitamos formar un comando de control que consta de 12 bytes. Los principios para la formación de este equipo se describen en el documento anterior. Y como verá a continuación, todas estas reglas ya están programadas en las funciones de control y solo necesitamos usarlas para emitir comandos al módulo.Equipos de prueba
nooLite tiene un sistema de comando bastante desarrollado, desde el cual seleccionaremos los más simples y más comunes e ilustraremos el sistema usando su ejemplo.- Snap
- Desatar
- Inclusión
- Apagado
- Ajuste de potencia (atenuación)
Al comprender cómo funcionan los equipos básicos, puede usar fácilmente cualquier otro.Conexión del módulo MT1132
Como ya dije, el módulo MT1132 está conectado literalmente con un cable (a excepción de la alimentación). El módulo puede ser alimentado por un voltaje de 5 voltios y un voltaje de 3,3 voltios. Por lo tanto, no hubo problemas para conectarse al Arduino Mega de 5 voltios o al Arduino Due de 3,3 voltios. El único punto es que con una potencia reducida, el rango de operación confiable del sistema disminuye. Y esto debe tenerse en cuenta si desea alimentar el módulo desde un voltaje de 3,3 voltios.
El módulo tiene pines RX y TX para recibir y enviar señales a través de la interfaz en serie. Para la operación del módulo, es fundamental la conexión de RX, para recibir comandos de control del controlador. En consecuencia, el pin RX en el lado del módulo está conectado al pin TX (18) en el lado Arduino. Este pinout es válido tanto para Arduino Mega como para Arduino Due.Parte de software
Ahora veamos cómo gestionar toda esta economía a partir de bocetos en Arduino. Primero, inicialice Serial1, al que conectamos el módulo MT1132 (esto se hace a la frecuencia estándar 9600):Serial1.begin(9600);
Ahora el código de la función de control principal: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]);
}
}
En principio, ni siquiera necesitamos saber cómo funciona, podemos usarlo en el modo de "recuadro negro" o en una especie de API, con cierta interfaz sobresaliendo. Solo necesitamos saber cómo usar esta interfaz.Como puede ver, solo hay cuatro parámetros: canal, comando, datos y formato. Puede leer por qué principio las solicitudes a esta API se pueden leer en el documento mencionado anteriormente, pero simplificaremos aún más nuestra tarea y envolveremos esta interfaz en comandos simples de control de dispositivos nooLite.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 nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}
El equipo relativamente complejo es solo el último, allí, además del canal, también se establece el nivel de potencia. También hay equipos en el bosquejo en los que no nos detendremos ahora, pero se forman con la misma facilidad.En realidad ... eso es todo! En ninguna parte es más fácil. En el código, los comandos de control se ven así:nooBind(ch);
nooUnbind(ch);
nooOn(ch);
nooOff(ch);
nooValue(ch, v);
Ahora practiquemos la práctica de la gestión del módulo de potencia nooLite. Entonces, vinculamos el bloque de alimentación en el canal cero:nooBind(0);
El LED de la unidad de alimentación comienza a parpadear. Presione el botón en el bloque; el LED deja de parpadear; el bloque de alimentación está conectado. En lugar del canal cero, puede usar cualquier otro. Y puede generar fácilmente el número de canal en el código de croquis según sus necesidades.Encienda la lámpara (si atamos la lámpara en el canal cero, entonces los comandos para ello deben enviarse en este canal):nooOn(0);
Configure la potencia (brillo de la lámpara):nooValue(0, 100);
Aquí debes decir un poco sobre las reglas para formar un equipo que establezca el nivel de poder. El valor de potencia no cambia de 0 a 255, como podría pensarse, sino de 35 a 155. Si el valor es superior a 155, entonces la potencia será máxima, si es 0, esto será equivalente a un comando de apagado.Aquí (por si acaso) una fórmula que traduce valores "estándar" de 0 a 100 en un formato comprendido por el módulo nooLite:v = x * 1.2 + 34;
Con esta fórmula, puede establecer el brillo de la lámpara en el porcentaje de potencia habitual. Y, por supuesto, si necesita ajustar la potencia de forma no lineal, puede crear una variable v de acuerdo con cualquier ley o incluso simplemente elegir valores fijos. Esto se discutirá en la tercera parte del ciclo, cuando ajustaremos la temperatura de calentamiento de la estación de soldadura.Apaga el dispositivo:nooOff(0);
Desatar:nooUnbind(0);
El LED de la unidad de alimentación comienza a parpadear. Confirmamos el desacoplamiento presionando el botón de la unidad de potencia. Eso es todo, ahora la unidad de alimentación ha dejado de responder a nuestros comandos y podemos "ajustarla" nuevamente en cualquiera de los 32 canales del módulo nooLite MT1132.Aquí está el boceto completo.Código de boceto completobyte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)
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]);
}
}
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 setup() {
Serial1.begin(9600);
/*
loop(), */
//nooBind(0);
//nooOn(0);
//nooOff(0);
//nooValue(0, 100);
//nooUnbind(0);
}
void loop(){
}
Subtotal
Como puede ver, no hay nada complicado en el control de los módulos de potencia nooLite utilizando Arduino, por el contrario, el control es fenomenalmente simple: el módulo está conectado con un cable y los comandos son casi un lenguaje humano natural: "encienda el canal 0", "apague el canal 1", "Establecer la potencia del 50% en el canal 3" en realidad no es nada más simple.Bono para aquellos que han leído hasta el final
Justo el otro día, se lanzó una nueva versión de Arduino Mega Server en el número 0.14, en la que se superaron todas las enfermedades infantiles de la tecnología y que funciona de manera rápida y estable. Y la misma versión contiene el núcleo de control integrado del instrumento nooLite y cómo funciona todo, aprenderá del siguiente artículo de la serie “Equipo inalámbrico nooLite y Smart Home (Parte 2). Arduino Mega Server ".La segunda , tercera y cuarta partes del ciclo.