Hicimos un gabinete de control para la casa
aquí , desarrollamos un controlador
aquí .
La luz se puede encender / apagar desde el teléfono, las notificaciones sobre fugas de agua, la inclusión del riego llegan a los telegramas y Dios todavía sabe qué.
Pero todo este sistema está lejos de ser una casa inteligente, es solo una extensión de sus brazos y piernas, y la única ayuda es que no necesita levantarse de la cama para apagar las luces.
Este artículo trata sobre lo que puede acercar su hogar a lo inteligente, y lo ha adivinado correctamente: este es el desarrollo de sensores. Estos son ojos, oídos y un poco más para su hogar. Según la información de los sensores, ya es posible escribir guiones automáticos que revitalizarán la casa y lo ayudarán en silencio y harán que su vida sea más cómoda.
El mercado ahora tiene una amplia variedad de dispositivos de este tipo, tanto de fabricantes eminentes como de origen desconocido. Y si no te molestas mucho, puedes usarlos, pero hay uno pero, o incluso varios pero. Primero, la mayoría de ellos usan sus protocolos patentados y solo trabajan con sus concentradores. Y en cualquier momento, la API de estos centros puede cerrarse, y el control será posible solo a través de la aplicación del fabricante (recuerde la historia de google nest), por lo que toda su automatización se bloqueará en un punto.
En segundo lugar, todos los fabricantes, sin excepción, están tratando de obtener alguna ganancia de esto, y dado que este no es un fenómeno masivo, debe salir, por lo que cada sensor se fabrica en su propio estuche con su propia batería. Y ahora, cuentemos, tiene 5 habitaciones en cada una, me gustaría tener un sensor de temperatura, movimiento, luz y CO. No es un tapete complicado. Los cálculos conducen a 20 cajas en el techo. En primer lugar, no es hermoso, y en segundo lugar, en un año o dos será necesario cambiar las baterías de estos sensores en medio día con una escalera y un destornillador, lo más probable es que rompa un par de sujetadores y deje caer el destornillador un par de veces sobre el laminado. Sí, y en tercer lugar, cuando uno de los sensores se rompa en un par de años, entonces no podrá comprar lo mismo, y lo más probable es que los viejos centros no admitan los nuevos sensores (el beneficio es importante) y tendrá que cambiar todos los sensores y reintegrarlos en su El sistema. La salida es mirar algo desde el código abierto, o hacerlo usted mismo, al menos el código siempre estará con usted. Entonces, a la luz de lo descrito, el desarrollo de su caja con sensores no es una tarea tan exagerada.
Entonces, al desarrollar mi sensor, traté de evitar el 'pero' descrito anteriormente:
- Agregamos todos los sensores en una carcasa
- Hacemos energía por cable (construyendo desde cero)
- Hacemos interfaces de acuerdo con protocolos estándar
Ahora pasemos a cómo debería funcionar dicho dispositivo.
Hay dos opciones posibles y dependen de en qué entorno se use el dispositivo, en un sistema con control centralizado, en un sistema distribuido o, en general, como un dispositivo independiente.
La primera opción es más simple porque solo se requieren datos brutos de los sensores, y luego el controlador central, que interroga al dispositivo, decide qué hacer con ellos, un ejemplo de tal dispositivo es un sensor de humo de oficina. Por ejemplo, los datos del sensor superaron un cierto umbral, mientras que el controlador central sabe que el modo armado ahora está activado y, en consecuencia, es necesario activar una alarma.
La segunda opción supone que el dispositivo mismo debe saber en qué modo se encuentra ahora, ser capaz de convertir datos sin procesar de los sensores, tomar una decisión sobre informar al usuario. El desarrollo de dicho dispositivo, por supuesto, requiere más esfuerzo tanto en términos de redacción de un programa como en términos de resolución de usabilidad.
Originalmente planeé hacer el dispositivo de acuerdo con la segunda opción, y establecí dos canales de comunicación: mqtt y modbus. Mqtt a través de WIFI para jugar y modbus a través de RS-485 para conectarse al sistema de control del hogar.
Mqtt a través de WIFI no es difícil de hacer gracias a las bibliotecas lua ESP8266 y el algoritmo es bastante estándar:
- en el primer inicio o si no puede conectarse a WIFI, debe establecer un punto de acceso desde ESP8266
- implementar un pequeño servidor web en él con parámetros WIFI y parámetros del servidor mqtt (se puede hacer de forma gratuita en Amazon, por ejemplo)
- guardar todos los datos ingresados en la memoria ESP8266
- después de reiniciar, intente conectarse a mqtt a través de WIFI doméstico
Sin embargo, cuando surgió la cuestión de integrar el dispositivo en el sistema doméstico a través de Modbus, comencé a perder los datos en bruto de los sensores y, finalmente, puse todos los datos en bruto en la tabla de Modbus. Por ejemplo, parecería un evento innecesario de un sensor de movimiento, en el modo desarmado, incluso se puede utilizar para todo tipo de funciones domésticas inteligentes.
La tabla modbus es la siguiente:
Descripción del tipo N
0. -r - estado de sensortag (1 - modo inactivo / 2 - inactivo a protección / 3 - modo de protección)
1. -r - motivo de alarma del campo de bits (bit 1 - gas / 2 - temperatura / 3 - movimiento)
2. -r - detección de movimiento en estado inactivo y de protección (0/1 - sin movimiento / movimiento)
3. -r - concentración de gas (valor bruto de adc)
4. -r - temperatura en grados C
5. -r - valor de luz preprocesado (cuarto nocturno <17 / cuarto oscuro <50 / crepúsculo <150 soleado <250)
6. -r - valor de luz (valor bruto de adc)
7. -r - número de eventos de alarma en este ciclo de vida
8. -r - número de reinicios de sensortag
9. -r - no utilizado
10 -wr- activación de alarma (0 - cambiar a inactivo / 1 - cambiar a alarma)
11. -wr- sensibilidad al movimiento (0 - 100%, significa 0 - más sensible)
12. -wr- límite de concentración de gas
Además, como siempre, se reduce al desarrollo de la placa y el software. Y en este caso, el desarrollo del tablero fue más difícil para mí, porque Hay una parte analógica (potencia, unión de sensores de movimiento y CO) con la que no soy muy amigable, y no hay mucho que escribir sobre el software, porque todo es realmente simple allí. Es decir no solo sino ordinario, leí la lectura del ADC, los convertí, los procesé (usando el método de ventana deslizante en todos los canales) y los puse en una tabla. No sería malo hacer una compensación de temperatura de la señal del sensor PIR. En verano, cuando la temperatura ambiente es superior a +30 grados, el sensor tiene una respuesta mucho más débil. Entonces, en este artículo, me gustaría describir el desarrollo de la placa en sí y prestar un poco de atención a la usabilidad.
Comencemos con el tablero, esto es lo que debe hacer para hacer esto:
- elija un microcontrolador y sensores (sensor pir, luz, temperatura, CO)
- elija el controlador rs-485 para la comunicación modbus
- ESP8266 para comunicación mqtt (qué elegir)
- seleccione LED RGB para visualizar el estado del dispositivo
- desarrollar módulos de potencia
- desarrollar un diagrama de circuito, criar y hacer tablas
La elección de un microcontrolador no es difícil, solo necesita llegar a la caja con los paneles de control y obtener una placa, lo hará. Pero en serio, no puedo presumir del conocimiento de muchas familias de microcontroladores, así que estoy familiarizado con STM32, ATSAM y AVR. Elegí este último, y solo porque solo tenía un par de Arduino Leonardo tirados y echando de menos los viejos tiempos MK2. No mencionaré que AVR tira de sus pies a la frecuencia del cuarzo, y esto es útil para mí, y que tiene una amplia gama de periféricos y un ADC bastante rápido, es mucho más importante para mí que tenga un paquete TQFP y puedo soldarlo yo mismo, sin un microscopio y bailando con panderetas . Si la elección de un microcontrolador es una cuestión de diez minutos, entonces la elección de los sensores no es una cuestión trivial. Inicialmente debemos pensar en cómo conectarlos, cómo procesar sus señales y cómo se afectarán entre sí. Si se pueden tomar algunos sensores del conjunto Arduino y cuestan un centavo, entonces con otros, más raros, puede jugar más y gastar más. Además, la selección de sensores también estaba limitada por mis criterios adicionales:
- Los sensores se pueden conectar como desee, pero no a través de I2C. Así es como no funcionó para mí implementar I2C de manera confiable en microcontroladores, donde el soporte para este bus es la mitad del hardware y la mitad del software (como en AVR). Sucedió que funciona, funciona durante un mes, y luego interviene, y no ayudan las secuencias de recuperación, por lo que se decidió usar tantos sensores analógicos como sea posible conectados al ADC y usar SPI solo para la temperatura (por cierto, la amistad es fuerte y confiable).
- Eran lo suficientemente confiables y no cambiaron sus características durante la vida útil (lo definí como 10 años)
- Estaban disponibles en nuestro mercado, para no interferir con los pedidos de Mauser, etc.
Como resultado de toda la investigación, obtenemos este conjunto:
- Sensor PIR - D203S
- Sensor de luz - GL5516
- Sensor de temperatura - LM95071
- Sensor de CO - TGS5141
Y si con las primeras tres posiciones, creo que nadie tendrá preguntas, entonces por qué se necesita TGS5141 de inmediato no está claro. Probablemente diga: "por qué es tan costoso, porque hay sensores de CO centavo del conjunto arduino del tipo MQ-7". De hecho, experimenté con ellos, y como resultado los rechacé por varias razones. En primer lugar, es un sensor catalítico y se calienta, lo que afecta en gran medida la temperatura en el caso del dispositivo y no permite la compensación de temperatura para la señal del sensor PIR. En segundo lugar, la sensibilidad del MQ-7 deja mucho que desear, incluso en la especificación que dice 10 a 1000ppmm, pero en realidad todavía es más triste, además no hay estabilidad de sensor a sensor. En tercer lugar, la vida útil del sensor en sí no está clara, supongo que sus características cambiarán mucho con los años precisamente porque es catalítico. Y ahora sobre las ventajas del TGS5141 electroquímico: no se calienta, la sensibilidad es de 0 ~ 5000ppm (con una característica lineal), una vida útil garantizada de 10 años, tamaño pequeño y muchas más ventajas. Creo que la elección es obvia si realmente quieres hacer algo que valga la pena, y no un oficio frívolo.
Elegimos un microcontrolador, sensores, ahora es el momento de cuidar cómo decirle al usuario lo que pretendíamos. Como escribí anteriormente, tengo dos canales de comunicación para esto, rs-485 modbus y mqtt a través de WIFI. Lo que hace posible usar mi sensororteg como un dispositivo individual y, por lo tanto, importante es la indicación del estado, de alguna manera, en el dispositivo en sí, por ejemplo, LED.
Una vez decidido el concepto, puede prestar un poco de atención al resto de la base del elemento. Controlador 485go Uso ADM2587E, el chip incluye no solo el controlador en sí, sino también el aislamiento galvánico del transformador en RX, TX y DE, menos solo en el precio. Usaremos ESP-07 para la comunicación mqtt a través de WIFI, aquí, creo, no se necesitan comentarios, porque solo los perezosos no hicieron algo en el ESP8266. Tuve que jugar más con la pantalla visual, para esto decidí usar sk6812 RGBW LED. Como resultó con AVR, administrarlos no es muy simple, sus tiempos son bastante difíciles, por lo que tuve que agregar algunas partes del código del ensamblador, que no estaba planeado originalmente. Pero el resultado se justificó, resultó informativo y hermoso, especialmente si brillas con estos LED al final del anillo de plexiglás. Esta indicación me fue sugerida por un empleado que ya había comido un perro en esto (gracias a Sasha).

Después de experimentar un poco con el brillo, quedó claro que un nivel de brillo no es mi decisión: es difícil de ver durante el día y muy brillante por la noche. Por lo tanto, tuve que hacer un cambio en el brillo del brillo de estos LED dependiendo de la iluminación de la habitación. Bueno, eso es todo, descubriste la indicación, pensaste, pero no, lo más difícil para mí fue inventar patrones de brillo y tiempos para ellos.
Me detuve en esta opción:
- azul lento: inactivo, comunicación solo a través de wifi (falta Modbus)
- azul rápido: cambia de modo inactivo a alarma, comunicación solo a través de wifi (falta Modbus)
- verde lento - inactivo (comunicación modbus correcta)
- verde rápido: cambia del modo inactivo al modo de alarma (comunicación modbus correcta)
- rojo lento - modo de alarma
- rojo rápido - alarma de movimiento
- amarillo rápido - alarma de gas

Descubrimos la indicación, la siguiente sección es poder.
Como dije anteriormente, tengo una baja tensión de 24 V en mi casa, por lo que la potencia de los módulos será solo eso. Mirando hacia el futuro, diré que después de hacer la primera tabla tuve que rehacer mucha nutrición. Luego me convencí de que necesita leer cuidadosamente las especificaciones de los convertidores reductores, especialmente aquellos lugares donde se describen los matices del cableado. Según la investigación, me decidí por el convertidor reductor MCP16311 y resultó ser muy exigente, solo después de que hice exactamente lo que estaba escrito en la especificación: funcionó. Pero este no fue el mayor problema, ya que resultó que el cambio del brillo de los LED causó una pequeña reducción de energía, lo que sería suficiente para estropear la señal del sensor D203S, fue posible superar este problema con condensadores adicionales en el circuito operativo del sensor y en el circuito del convertidor reductor. Después de depurar todo usando mqtt (a través de ESP8266), conecté rs-485 y nuevamente me esperaba un fallo, a la salida del opamp en el canal del sensor D203S nuevamente vi basura, y esta basura claramente correspondía al intercambio en rs-485. En general, resultó superar esto con un convertidor LDO adicional para toda la parte analógica, y luego llegó la felicidad.
Y si combina todo junto, obtendrá la siguiente imagen:

Y si todo esto se toma y se suelda, entonces se ve así:

Soldaron el tablero, imprimieron el estuche, pusieron todo junto, lo colgaron en el techo, los datos ingresaron al sistema. Así que imaginemos cómo puede aplicar estos datos en un sistema doméstico inteligente, además de, por supuesto, que puede enviar alarmas a telegramas. Todavía no he hecho nada, excepto el primer punto, pero he lanzado los siguientes scripts:
- inclusión de luz en las escaleras, si esta luz no está encendida, si aparece movimiento en cualquier habitación, además ahora está oscuro, más la noche
- Apertura automática del cohete del primer piso si están cerrados, si ya es de mañana y se detecta movimiento en la sala de estar por primera vez en un día.
- abrir las aletas de ventilación si la concentración de CO excede cualquier nivel, y cerrarlas si el nivel de CO ha disminuido (en realidad en una habitación con chimenea)
- Abra las aletas de ventilación si la temperatura ha excedido un cierto límite y, en consecuencia, ciérrelas.
- apagado automático de la persiana del primer piso si las persianas están abiertas y si los sensores de movimiento han funcionado en la calle por la noche y la casa está en guardia nocturna.
Así que complementa, haremos la casa más inteligente ...