Étape 8: Codage, motion et interactivité
Je suis allé en arrière Comment activerait la pièce. J’aurais pu tout mettre sur un modèle automatique, soit recommencer, soit en évolution, mais je je ne voulais pas les servos constamment actif ; Si rien d’autre le bruit des engins s’avérerait ennuyeux. J’ai donc décidé de faire les mouvements du servo interactive, mais garder les lasers sur lorsque la pièce a été ralentie.
Le modèle inactif pour les lasers est faire sinusoïdalement égayer la luminosité de chaque paire symétrique des lasers ensemble ; chacune des quatre paires dispose d’un délai légèrement différent (vitesse de transition) donc ils vont lentement en et hors de phase d’un modèle en constante évolution. (Il s’étende éventuellement mais je vous assure que vous allez perdre patience, il attend!)
Pour déclencher les mouvements du servo, j’ai examiné plusieurs types de capteurs (infrarouge, ultrasons) mais finalement allé avec un bouton qui peut pousser l’utilisateur. C’est à la fois plus consensuelle--la pièce n’interagira pas avec vous sans consentement explicite--et évidente (ainsi que simple à implémenter). Pour activer le mouvement l’utilisateur doit Appuyez sur et maintenez le bouton enfoncé ; le mouvement dure aussi longtemps que le bouton est enfoncé. Chaque fois que vous appuyez sur le bouton, un nouveau modèle est généré. Il y a quatre laser patrons et trois types de mouvement : chaque pression sur le bouton sélectionne le modèle suivant dans le cycle, donc il y a 12 combinaisons possibles que tous s’exerce. Je juge que c’est plus de modèles que le téléspectateur moyen prendra soin d’explorer.
Chaque modèle pour laser luminosité et l’angle est basée sur une variation sinusoïdale ; changer la donne phase et fréquence relative intéressant mouvement et les symétries de la pièce. Pour le mouvement, j’ai dû implémenter un ordinateur d’État qui apporterait les servos doucement en arrière dans une position d’origine entre les patrons (lorsque le bouton n’est pas pressé) afin qu’ils pourraient progresser en douceur entre les patrons sans une secousse distrayante.
Tout ce code a été écrit dans l’environnement Arduino à l’aide cos8()
de la bibliothèque de FastLED pour les calculs sinusoïdales. Entre autres choses, cela a une gamme d’entrée 256 je pourrais utiliser math entier qui incrémente simplement sans avoir besoin de rouler à la marque de 2π.
Le code de l’Arduino et le schéma trouvera sur Github à https://github.com/headrotor/laser_fan