Skrevet av Vegard G. Jervell, dedikert til Kjellerstyret i Høiskolens Chemikerforening. Hvis du leser dette vil jeg også rette en takk til Ole Tobias Lode fra Elektra for vanvittig hjelp med å lodde led-striper til klokka 0100 på natta og til kjellern-sjaepH Andrea Tonheim (HC) for at hun også sto på til klokka 0100 for at dette kunne komme opp og funke, uten dem hadde dette aldri vært mulig! Kos dere med awsm leds! ###################################################### Hardware, filnavn og bibliotek ###################################################### Det er mappene kjellern_..._xxxxxx som har blitt kjørt og fungert på kjellern (xxxxxx er datoen de ble kjørt første gang, ... er det som skiller dem fra de andre kodene). De andre mappene er ymse forsøk på å lære seg arduino, leds, c++ og feilsøking. Koden bruker FastLED biblioteket, det er noen eksempler på det i libraries/FastLED/examples LED-stripsene drives av P9813 - LED-strip drivers. Det er driver nummer [0 - NUM_LEDS_MUSIKK), altså til, og ikke med, NUM_LEDS_MUSIKK, som styrer "musikk-leds". Disse endrer både farge og lysstyrke. Driver nummer [NUM_LEDS_MUSIKK - NUM_LEDS_TOTAL) styrer "rolig-leds", som kun endrer farge. Se koblingskartet for oversikt over hvilken driver som har hvilket nummer. Det er planlagt å lage en ZyyrepHaest-knapp, men den har ikke blitt lagd enda. For å aktivere Zyyre-modus må man åpne kodefilen, sette variabelen "ZyyrepHaest" til "true" (liten "t") og laste opp koden. For å laste opp et program til arduinoen (eller endre noe i et program) gjør du følgende: 1) Last ned programmet "Arduino" (google) 2) Last ned .zip filen som heter "arduino" fra drive 3) Nå har det blitt opprettet en mappe på pc'en din som heter "Arduino" (sannsynligvis i Dokumenter). Legg innholdet i .zip-filen (alle mappene) inn i mappen som heter "Arduino". 4) Koble USB'en til arduinoen i pc'en (hvis du bare har USB-C suger det å være deg) 5) Åpne den filen du vil kjøre og trykk "Upload" (høyrepil oppe i venstre hjørne) 5) Hvis du får en feilmelding trykk på Tools => Port og se om det er en port hvor det står "Arduino/Genuino" eller noe sånt, velg den og prøv på nytt. 6) Hvis alt går bra men lysene oppfører seg rart kan det hende det er noe gæærnt med mikrokontrollerene, da kan jeg ikke gjøre så mye mer for deg fra der jeg er nå. Lykke til! ###################################################### Dokumentasjon av koden ###################################################### Her følger en forklaring av hvordan koden funker og hva de forskjellige variablene gjør (se flytskjema for grafisk fremstilling): Volum leses inn fra minijacken som en analogt input, det gir en verdi mellom 0 og 1024. Det viser seg at de høyeste lesningene man får typisk ligger rundt 90. Det lages en liste (volume_reads) av de siste xx målingene, basert på denne lista blir volum filtrert på litt forskjellige måter (enten "gliding window" eller med lineærregresjon) dette er for at ikke lyset skal bli syykt glitchete pga. støy. Filtrering (avg_countsize og linreg_countsize): Gliding window funker ved at du har en liste med de siste "AVG_COUNTSIZE" målingene og tar snittet av denne for å få noe i nærheten av den nyeste målingen. Det funker helt brukbart. Lineærregresjon funker ved at du gjør en lineærregresjon av de siste "linreg_countsize" målingene og evaluerer regresjonen i det siste punktet. Dette er en del hakk bedre. Max_vol, max_vol_counter og max_vol_decay_factor: For at lysstyrken ikke skal bli lav hvis noen har hatt høy lyd og skrur ned lyden kommer verdien til "max_vol" til å synke dersom den ikke har blitt overskrevet på en stund. Altså: hvis det går "max_vol_decay" målinger uten at max_vol har økt, kjøres "max_vol = max_vol_decay_factor * max_vol", hvor max_vol_decay_factor er et tall som er mellom 0 og 1 (typisk rundt 0.9). Se figuren "volum_decay.png" for eksempel på hvordan det funker. Skalering (max_vol, min_lysstyrke og volumskalering): Led-lysene har en lysstyrke mellom 0 og 255, for at lyset skal bli bra hele tiden skaleres volumavlesningen fra et tall mellom 0 og max_vol til et tall mellom min_lysstyrke og 255. Denne skaleringen kan være lineær, kvadratisk eller hva du vil (styres med parameteren "volumskalering"). Høyere tall gir kraftigere utslag ved store hopp i volum, og svakere utslag ved små hopp i volum. Eksempel er vist i "volum_decay.png". For å se dette, lag funksjonen y = ((255 - b)/ m^p) * x^p + b i geogebra og varier m, p og b med sliders. Her er y = lysstyrke, x = volum, m = høyeste avleste volum, b = minste lysstyrke og p = volumskalering. Fargeendring (rolig_fargeendringstempo og musikk_fargeendringstempo) Fargen på lysene justeres gradvis. Jo høyere disse tallene er, jo saktere endres fargen. Hvis ZyyrepHaest = true, kommer fargene til å endres fortere når volumet er høyere. ###################################################### Om oppkoblingen ###################################################### Det er to strømforsyninger som leverer 12V DC. Den ene leverer strøm til led-strips som alltid er på, og til led-strips som styres med knappene på utsiden av boksen. Alle led-strips er koblet inn i "sukkerbiter" på toppen av boksen, det er for at det er koblingen til sukkerbiten som ryker hvis noen napper i en ledning, siden de er mye lettere å fikse enn koblingene inne i boksen. Hver stripe har en "+", "R", "G" og "B" pol. Kort fortalt setter du "+" på "+" også styrer du fargen ved å flytte "-" polen mellom de tre fargene. LEDs som styres av arduinoen er styrt av en "driver" den tar inn et signal fra arduinoen som sier hvilken farge, lysstyrke og metning du vil ha, og bestemmer ut fra det hvilken spenning som skal stå på de forskjellige polene. Driverne kan kobles i serie, og styres individuelt (selv om de er koblet i serie). Det er fire ledninger som går inn til driverne: Clock in (CIN), Data in (DIN), Jord (GND) og styrestrøm (VCC). Det er ikke så viktig akkurat hva disse gjør, men det er viktig at Data in og Clock in er koblet til portene på arduinoen som er satt til "Clock pin" og "Data pin" i koden. Styrestrømmen tar 5V fra arduinoen og GND kobles til GND på arduinoen. NB: Du kan IKKE bruke porter på arduinoen merket med "PWD" eller et "~"(tilde)-symbol, det er en slags "semi-analog" port, og hvis du bruker dem kommer ingenting til å funke. Arduinoen har også noen analoge input-porter, nummerert som A1, A2, ... , det er her du kobler opp mini-jacken. Den ene ledningen fra mini-jacken går til A1, den andre går til GND. Hver driver trenger også strømforsyning, GND kobles til "-" på strømforsyningen, +12V kobles til "+" på strømforsyningen. Det er lagt opp plass til en ekstra driver, men vi gikk tom for drivere da vi kobla det opp, det burde være veldig fort gjort å koble opp en ekstra driver hvis man vil det, man må bare huske å gå inn i arduino-koden og endre enten "NUM_LEDS_MUSIKK" eller "NUM_LEDS_ROLIG" for å si til koden at den skal styre en led-strip mer.