Paso 8: Codificación, movimiento e interactividad
Fui hacia adelante y hacia atrás cómo se activaría la pieza. Pude haber poner todo en un patrón automático, repetición o evolución, pero no quería que los servos constantemente activa; Si nada resultaría molesto el ruido de engranajes. Así que decidí hacer interactivo el movimiento del servo, pero mantener el láser cuando la pieza estaba inactiva.
El patrón de inactividad para los láseres es sinusoidal a aclarar y a atenuar cada par simétrico de láseres cada uno de los cuatro pares tiene un período ligeramente diferente (tipo de fade) para que vayan poco a poco en y fuera de fase para un patrón siempre cambiante. (Eventualmente repita pero te garantizo que te hará perder la paciencia esperando!)
Para activar el movimiento del servo, que considera varios tipos de sensores (infrarrojo, ultrasonido) pero finalmente fue con un botón que el usuario puede empujar. Esto es tanto más consensual, la pieza no se interactuar con usted sin consentimiento explícito - y obvio (así como fácil de implementar). Para permitir el movimiento, el usuario necesita Pulse y mantenga pulsado el botón de abajo; el movimiento dura mientras se mantiene pulsado el botón. Cada vez que se presiona el botón, se genera un nuevo patrón. Hay cuatro láser patrones y tres patrones de movimiento: cada pulsación de botón selecciona el patrón siguiente en el ciclo, por lo que hay 12 posibles combinaciones que todo haz ejercitado. Juzgo que se trata de modelos más que el espectador promedio cuidará a explorar.
Cada patrón de brillo del laser y el ángulo se basa en la variación sinusoidal; cambio de la relativa fase y frecuencias da interesantes movimientos y simetrías al pedazo. Para el movimiento, que necesitaba para implementar una máquina de estado que los servos suavemente hacia una posición entre los patrones (cuando no se pulsa el botón) por lo que podría progresar suavemente entre patrones sin una contracción que distraigan.
Este código fue escrito en el entorno de Arduino usando cos8()
de la biblioteca de FastLED para los cálculos sinusoidales. Entre otras cosas, esto tiene un rango de entrada de 256 unidades así que pude usar matemáticas de entero que sólo incrementan sin necesidad de rodar en la marca de 2π.
El código de Arduino y el esquema se pueden encontrar en Github en https://github.com/headrotor/laser_fan