Stap 8: Codering, beweging en interactiviteit
Ik ging heen en weer over hoe het stuk zou activeren. Ik kon heb alles op een automatische patroon, herhalende of evolueren, maar ik ik wilde niet de servo's voortdurend actief zijn; Als er niets anders zou het lawaai versnelling vervelend. Dus heb ik besloten om de servo beweging interactief te maken, maar de lasers op te houden tijdens het stuk niet actief was.
De inactieve patroon voor de lasers is sinusoidally fleuren en dim elk symmetrische paar van lasers samen; elk van de vier paren heeft een iets andere periode (vervagen tarief) zodat ze gaan langzaam in en uit fase voor een veranderende patroon. (Uiteindelijk wordt herhaald, maar ik garandeer dat u zal ongeduldig wachten!)
Als u wilt activeren de servo-beweging, ik beschouwd als verschillende typen van de sensor (infrarood, ultrasone) maar eindelijk ging met een knop die de gebruiker kan duwen. Dit is zowel meer consensus--het stuk zal geen interactie met u, zonder uitdrukkelijke toestemming--duidelijk (en eenvoudig te implementeren). Zodat de beweging moet de gebruiker druk op en houd de knop ingedrukt; de motie duurt zolang als de knop ingedrukt wordt gehouden. Telkens wanneer de knop wordt ingedrukt, wordt een nieuw patroon wordt gegenereerd. Er zijn vier laser patronen en drie beweging patronen: elke druk op de knop selecteert het volgende patroon in de cyclus, dus er 12 combinaties mogelijk zijn dat alle krijgen uitgeoefend. Ik beoordelen dat dit is meer patronen dan de gemiddelde kijker zal zorg om te verkennen.
Elk patroon voor zowel laser helderheid en hoek is gebaseerd op sinusvormige variatie; het veranderen van de relatieve fase en frequenties geeft interessante beweging en symmetrieën naar de stuk. Voor de motie, die ik nodig had om een statusmachine dien de servo's zachtjes terug naar een home positie tussen patronen (wanneer de knop niet ingedrukt is), zodat ze soepel kunnen vooruitgang tussen patronen zonder een afleidende kramp.
Alle deze code is geschreven in de Arduino omgeving met behulp van cos8()
uit de bibliotheek van de FastLED voor de sinusvormige berekeningen. Dit heeft onder andere een invoerbereik 256-eenheid zodat ik integer wiskunde dat alleen verhoogd gebruiken kon zonder te rollen op de 2π merk.
De Arduino code en schema kunnen worden gevonden op Github at https://github.com/headrotor/laser_fan