Escribir algoritmos es probablemente la parte más interesante para mí en la automatización del hogar. Pero incluso toda la masa de sensores y scripts no puede hacer frente a la exuberante fantasía de la vida y hay que agregar una forma de control directo. Como controles manuales, puedes poner un timbre ordinario, pero ¿qué pasa si quieres más? Nos encontramos con el héroe de este artículo: un sensor de gestos basado en SI1143 de Silicon Labs.
SI1143 en sí mismo:

Realmente se ve futurista.
Y cuantas ventajas:
- fotodiodo altamente sensible, bajo ruido ADC
- Controladores LED con corrientes de 6 a 360 miliamperios
- alimentado desde 1.71 a 3.6 voltios
- e I2C inteligente: hasta 3,4 megabits por segundo
Eso es solo el tamaño bombeado solo 5 por 3 milímetros. Esta no es la primera vez que lo ves. Bueno, aquí necesitas un poco más de flejes.

¿Se puede eliminar esto? Mi sentimiento de belleza preguntó. Luego trataré de satisfacer la solicitud de este raro huésped en nuestra área y esconder el tablero en el edificio, pero mientras tanto puedes aplicar energía y ver qué sucedió.
Comentario para el atento. Realmente hay algunos detalles más de lo esperado. El nodo del proyecto Enviriot se tomó como base. Además del microcontrolador STM32F051, la placa también tiene un transceptor CC1101 de 868 megahercios de Texas Instruments y después de completar el firmware, es suficiente para suministrar energía y el dispositivo se conectará al servidor MQTT-SN.
El principio de funcionamiento se basa en medir el nivel de la señal reflejada de cada uno de los 3 LED. Intentaré encenderlo y mirar la respuesta.

Debido a la disposición asimétrica de los LED, la señal del LED 1 es notablemente mayor y los resultados de la medición deberán normalizarse primero.

Y así, la dependencia ya es bastante comprensible. Intentaré codificar el siguiente algoritmo:
Donde L1 + - la señal del LED 1 aumenta, L1> L3 - la señal del LED 1 es mayor que la señal del LED 3.
Fue sencillo en el papel, pero en la dinámica comenzaron los problemas. Para una hoja de papel blanco fijada a la misma altura, los resultados esperados se obtuvieron en dos casos de tres. Cuando trato de mover las manos, la señal comienza a saltar y mi maravilloso algoritmo comenzó a confundirse en las lecturas. Miró su mano, pero hay muchas diferencias con respecto a una hoja plana de papel blanco. Pero de alguna manera debería funcionar. Esta bien Persuadido! Intentaré leer la documentación.
Para los afectados, Silicon Labs ha lanzado AppNote AN580 - "SENSACIÓN DE GESTOS INFRARROJOS". Se describen dos métodos básicos para determinar los gestos y sus posibles combinaciones. El primer método es la determinación de la posición en cada momento y la determinación de gestos basados en las coordenadas. El segundo método determina el cambio de fase entre las señales. Una de las variantes del primer método ya ha sido probada y no fue impresionante. Intentaré implementar el segundo.
Vamos Es necesario implementar hasta dos puntos. Determine el momento de entrada y transfiera estos datos a la máquina de estados. El umbral de entrada se determinó experimentalmente a 1/8 de la señal total. Para proteger contra el ruido, agregaré el disparador de Schmidt, activando en un 15% y desactivando en un 10%.
Bueno, la máquina de estado en sí. Estados 1 a 3 - movimiento hacia arriba, estados -1 a -3 - movimiento hacia abajo y estado 4 por el improbable caso de que ambos LED funcionen simultáneamente.

Ahora intentemos despegar con todo esto.
var LSt = new Int8Array([-3, -3, -3, 1, 1, 3, 3, 4, -3, -3, -1, -1, 3, 3, 3, 4, -2, -2, -2, 4, 2, 2, 2, 4]); this.r1 = false; this.r3 = false; this.button = new Int8(0); if(n1 > 15) { this.r1 = true; } else if(n1 < 10) { this.r1 = false; } if(n3 > 15) { this.r3 = true; } else if(n3 < 10) { this.r3 = false; } let st = (this.r1?1:0) | (this.r3?2:0); if(st == 0){
Las variables n1 y n3 contienen valores normalizados para los LED correspondientes. El resultado está en el campo del botón.
Para un uso posterior, los estados 2 - arriba y -2 - abajo son útiles.
El programa se escribe en un subconjunto de JavaScript, luego se compila en bytecode y se carga en el dispositivo. JavaScript se analiza y la biblioteca NiL.JS genera el AST del camarada
IaIojek , por lo que muchas
gracias a él.

Si el estado 2 dura menos de 0.3 segundos, los bloques A14 y A15 son responsables de esto, el brillo se establece al máximo. Los bloques A01 y A13 establecen el brillo en 0 para un breve movimiento descendente.
Al subir y sostener, los bloques A10, A09 y A04 proporcionan un aumento suave del brillo. Al moverse hacia abajo y sostener, los bloques A12, A11 y A08 funcionan y le permiten reducir el nivel.
Demostración de trabajo. 20 megabytes de GIF. Bueno, tal vez eso es todo. El cliente está contento y estoy empezando a pensar en la próxima versión. De los cambios necesarios: coloque los LED a la misma distancia del receptor, muestre la indicación de funcionamiento y realice un sondeo en un controlador separado, lo que reducirá el intervalo de sondeo.