Kinetic lätt arbete med servo kontrollerad laser moduler (8 / 8 steg)
Steg 8: Kodning, motion och interaktivitet
Jag gick fram och tillbaka över hur pjäsen skulle aktivera. Jag kunde har lagt allt på en automatisk mönster, antingen upprepande eller utvecklas, men jag jag ville inte servon ständigt aktiv; om inget annat redskap buller skulle visa sig vara irriterande. Så jag beslöt att göra servo rörelse interaktiv, men hålla lasrar på när pjäsen var inaktiv.
Tomgång mönstret för lasrar är att sinusformigt lysa och dim varje symmetriska par av lasrar tillsammans; alla fyra paren har en något annorlunda period (fade rate) så de går långsamt i och ur fas för en ständigt föränderliga mönster. (Det så småningom upprepa men jag garanterar att du kommer att förlora tålamod väntar på det!)
För att utlösa servo rörelse, jag ansåg flera sensor typer (infrared, ultraljud) men gick slutligen med en knapp som användaren kan driva. Detta är både mer samstämmig--lappa interagerar inte med dig utan uttryckligt medgivande-- och uppenbara (samt enkel att genomföra). Om du vill aktivera rörelse måste användaren håller du knappen ned; förslaget varar så länge knappen hålls nedtryckt. Varje gång knappen trycks, genereras ett nytt mönster. Det finns fyra laser mönster och tre rörelse mönster: varje knapptryckning väljer nästa mönstret i cykeln, så det finns 12 möjliga kombinationer att alla får utövas. Jag bedömer att detta är fler mönster än den genomsnittliga tittaren kommer noga att utforska.
Varje mönster för både laser ljusstyrka och vinkel är baserad på sinusformad variation; ändra den relativa fas och frekvenser ger intressanta förslag och symmetrier till pjäsen. För, jag behövs för att genomföra en tillståndsdator som skulle föra servon försiktigt tillbaka till en hem position mellan mönster (när knappen inte är intryckt) så att de kunde utvecklas smidigt mellan mönster utan en störande rycka.
All denna kod var skriven i Arduino miljön med cos8()
från FastLED bibliotek för sinusformad beräkningarna. Bland annat har detta en 256-enhet indataområdet så jag kunde använda heltal matematik som bara ökas utan att behöva rulla över på varumärket 2π.
Arduino koden och schematiska finns på Github på https://github.com/headrotor/laser_fan