Projekt i Digitala System LED-styrning med musik LTH Ingenjörshögskolan vid Campus Helsingborg Handledare: Bertil Lindvall Utförd av: Marcus Sjökvist, Adam Wallander, Simon Widdenhielm, Lukas Sundberg, Jacob Wetterholt 1
Abstract The purpose of this project was to gain a technical understanding of different electronic circuits and how they can be programmed to achieve different applications. This was done by visualising a sound signal on a LED-strip. An analogue sound signal is in practice varying voltage over time. Using a microprocessor, data was gathered from a sound source and then applied to a LED-strip. This was achieved by amplifying the voltage then passing it through low- and high passage filters to gather two seperate data sets from the sound signal. From the collected data it was possible to program the microcontroller to turn the lights on and off and change colors. The programming was done in Atmel Studio using the C and Assembly languages. Future projects could look into acquiring more specific measurements from the sound source and realising more complex light patterns onto the LED strip. 2
Innehållsförteckning Abstract 2 Innehållsförteckning 3 1. Inledning 4 Materiel 4 2. Kravspecifikation 5 3. Syfte 5 4. Teori 6 4.1 Icke-inverterande förstärkare 6 4.2 Elektriska filter 7 4.4 Mikrokontroller 7 5. Metod 8 6. Resultat 9 7. Diskussion 10 8. Referenser 13 3
1. Inledning Målet med projektet var att få en uppsättning LED-lampor att reagera på musik. Genom att läsa av hur mycket höga respektive låga frekvenser som finns i musiken styrde vi färgen på lamporna och mönstret de blinkade i. För att lösa detta kopplade vi först en mp3-spelare till en OP-förstärkare via en AUX-kabel. Därefter delades signalen upp och skickades in i ett hög- och lågpassfilter för att sedan gå in i AD-omvandlaren hos mikroprocessorn vi använde. Från mikroprocessorns utgång kopplades sedan våra LED-lampor in. I mikroprocessorn kördes ett program som skrev till lamporna. I den här rapporten följer en mer detaljerad beskrivning av hur hela processen gick till. Vi har beskrivit den bakomliggande teorin samt hur kretsarna är konstruerade. Vi har även inkluderat koden, beskrivit de resultat vi uppnått och diskuterat de problem vi stötte på under arbetets gång. Materiel NeoPixel-ring Kondensatorer ATMega 1284 Mikroprocessor Resistorer MP3-spelare 2 st 9-voltsbatterier 4
2. Kravspecifikation 1. NeoPixeln reagerar på ljudsignalens frekvens genom att LED-lamporna blinkar snabbare. 2. NeoPixeln reagerar på ljudsignalens stryka genom att ändra färg som LED-lamporna blinkar i. a. LED-lamporna ska ha möjlighet att producera ett färgspektrum i regnbågens alla färger. Basfrekvenser representeras av blått ljus jämte diskanter, representerade av rött ljus. 3. NeoPixlarna ska individuellt kunna blinka och producera olika färger. 4. NeoPixlarna ska skicka fram tidigare signal till LED-lampor längre fram i LED-kedjan, resulterande i en successiv representation av musiken. 3. Syfte Stärka vår kompetens inom digital teknik och kunna applicera den praktiskt. Få en klarare bild på tillvägagångssättet hur ett projekt går igenom samtliga faser, från idé till att realiseras i en färdig produkt. Genom att arbeta i grupp stärker vi vår samarbetsförmåga och hur vi kan dra nytta av var och ens unika förmåga. 5
4. Teori 4.1 Icke-inverterande förstärkare En OP-förstärkare förstärker differensen mellan in- och utspänning inom en krets. När man gör beräkningar på detta använder man modellen ideal OP för att lättare kunna dra samband och göra förenklingar av dessa. En ideal OP utmärks av följande: F 0 = (Råförstärkning) R in = (Inspänning) R ut = 0 (Utspänning) Figur 1: icke-inverterande förstärkare. I en icke-inverterande förstärkarkoppling matas spänning direkt till OP-förstärkaren vilket ger en förstärkt spänning som inte blir inverterad på något sätt. [1]. I projektet användes OP-förstärkaren TL081CP från Texas Instruments och kretsen konstruerades för att producera en tiofaldig förstärkning. 6
4.2 Elektriska filter Passfilter är passiva filter som används för att dämpa vissa frekvenser och för att släppa igenom andra. Detta uppnås med hjälp av en resistor-kondensator-krets. Beroende på hur resistorn och kondensatorn kopplas relativt till insignal, bildas ett låg/högpass filter. [2] Ett lågpassfilter släpper endast igenom signaler bestående av låga frekvenser upp till ett visst värde beroende på dess brytpunkt. Signaler med högre värde än brytpunkten dämpas kraftigt. Formeln för hur man beroende på resistorns och kondensatorns värde räknar ut brytpunkten följer: 1 f c = 2πRC Högpassfiltret, till skillnad från lågpassfiltret, släpper endast igenom signaler med en frekvens ovanför dess brytpunkt, medan den dämpar signaler med en frekvens under brytpunkten. Formeln för hur man räknar ut brytpunkten är densamma som för lågpassfiltret. [1] Bandpassfilter är en typ av filter som endast släpper igenom signaler med en frekvens mellan ett visst spektrum. Samtliga signaler under och över detta spektrumet dämpas. Vårt projekt använder sig av ett högpassfilter med brytpunkt 4800Hz, samt ett lågpassfilter med brytpunkt 250Hz. 4.3 Analog signal En analog signal är en kontinuerligt skiftande signal, beroende på tid. Används för att tex avbilda ljud, där amplituden skiftar direkt proportionellt mot ljudsignalen. [4] 4.4 Mikrokontroller En mikrokontroller är en liten dator där alla dess komponenter har placerats på en och samma krets. Den är uppbyggd av en klocka, en CPU, arbetsminne och ett programminne. Olika in- och utgångar där man kan koppla I/O-enheter finns också. I vårt projekt användes mikrokontrollern ATmega1284. 7
5. Metod 5.1 Planering samt utformning av projekt I början av projektet var planen att vi skulle bygga en frekvens till spänning-krets som läser av musikens frekvens och skickar ut en motsvarande likspänning. Sedan var tanken att neopixlarna skulle styras av värdet på den spänningen. Vi hade dock problem med hur vi skulle genomföra den planen och kom på att den inte var så bra eftersom musik är uppbyggd av en massa olika frekvenser. Vi fick då ta hjälp av handledaren och ändrade planen till att vi istället skulle isolera olika frekvensområden med hjälp av filter och styra neopixlarna baserat på styrkan i dessa. Fas 2 Realisering av nödvändiga kretsar (Förstärkare, hög och lågpassfilter) När förstärkaren konstruerades testades den först på ett kopplingsdäck så att komponenter snabbt kunde bytas ut för att uppnå lämplig förstärkning. Det lades även till en kondensator för att se till att ljudkällan inte skadades. Efter flera test drogs slutsatsen att 10 gånger förstärkning var lämpligt för få ut tillräckligt med data till led-stripen. Hög- och lågpassfilter testades även först på ett kopplingsdäck för att sedan monteras fast på ett kopplingsbräde. Förstärkaren kopplades sedan till mikrokontrollern och väldigt simpel kod kördes för att kunna se om vi kunde använda mikroprocessorn inbyggda AD-omvandlare för att få fram ett värde på spänningen från en ljudkälla. Genom att använda samma ljudkälla som skulle användas till den färdiga produkten kunde vi snabbt se om det fungerade som planerat. 5.2 Programmering av ATMega och test med LED-stripen Nästa steg var att koppla in mikrokontrollern och skriva kod för att den skulle kunna styra LED-stripen. Här togs även flera beslut om hur slutprodukten skulle komma att bli. Det första problemet var att försöka få mikroprocessorn att kunna hitta alla 16 LED-lampor och få dessa att lysa, följt av att kunna skifta färg och styrka. När vi lyckats med att få lamporna att lysa och skifta färg började vi fundera på exakt hur de skulle programmeras. Vi bestämde inom vilka intervall vissa färger skulle användas. Lågpassfiltret- alltså de låga frekvenserna används för att bestämma 8
vilken färg lamporna skulle skifta färg. Bandpassfiltret bestämmer ljusstyrkan och högpassfiltret hur starkt de skulle lysa. 5.3 Koppling av kretsar Slutligen kopplades allt samman på två kretskort. På det ena kretskortet placerades signalförstärkaren samt passfiltrerna, och på den andra mikrokontrollern och NeoPixlarna. De löddes sedan fast, och i figur 1 finns en bild på det fullständiga kopplingsschemat. 5.4 Programmering av NeoPixeln Programmeringen av mikrokontrollern utfördes i C samt i Assembly. Styrning av LED-belysningen utfördes i C. Tre pinnar på ATmega1284 utnyttjades för avläsning av det analoga värdet från passfiltrerna, och dessa värden användes sedan i metoder som styrde färgerna på NeoPixlarna. 6. Resultat Projektet resulterade i ljusshow av LED-lampor som blinkar i takt med musiken, där färg och frekvens reflekterar ljudets styrka respektive takt. Slutprodukten skiljer sig från vår målbild, kravet på individuellt färgskiftande LED-lamporna samt roterande blinkning med de olika färgerna, har inte uppfyllts. 9
Figur 1: Kopplingsschema för kretsen 7. Diskussion Projektet visade sig vara mycket komplext gentemot det vi hade förväntat oss. Vid projektets inledning hade vi en förskönad bild av produkten och dess lösning, som realiserade längst med projektets gång. Inledningsvis gick våra tankar kring en frekvens till spänningsomvandlare samt en simplistisk lösning för NeoPixeln, där pixlarna individuellt kunde hanteras i en vektor. Detta var långt ifrån vår slutgiltiga lösning. Slutligen användes högpass/lågpassfilter samt en OP-förstärkare för att göra signalen lämplig inför koppling till AD-omvandlaren på mikroprocessorn. Följt av denna koppling hanteras signalen genom programmering av mikroprocessorn och NeoPixeln i C och Assembly. Mestadels av timmarna vi la ner på projektet kretsade kring NeoPixlarna. Då större del av tidigare skriven kod för liknande projekt på nätet (Github, Reddit, YouTube), skrevs för Arduino som byggts på C++ och har färdiga bibliotek för hantering av NeoPixeln. Då vi använde oss av ATMega1284 var vi bundna till C, vilket gjorde att deras lösning inte kunde influera vårt projekt. 10
Därav tvingades vi gå in på djupet av NeoPixlarna, för att först få en förståelse av hur dessa kunde manipuleras och producera den visualisering vår kravspecifikation stipulerat. Den programmering som krävdes för att uppnå vår målbild, blev därav ovanför vår kompetensnivå och ledde oss till sänka vår kravspecifiktion. Då hantering av individuella LED-lampor var där skon klämde, bestämde vi oss för att nöja oss med att samtliga LED-lampor ska kunna blinka gemensamt i takt till musik, samt kunna representera signalens styrka i olika färger. 7.1 Vad hade kunnat gå bättre Eftersom att vår förståelse för elektroteknik är relativt låg kan det har varit så att vi underskattade dom komplexa delarna med projektet. Såsom att uppnå en lämplig förstärkning samt hur värdena konkret skulle kunnas användas. Väldigt mycket tid lades på att få en förståelse för hur analogt ljud fungerar och hur det skulle kunnas användas. Vi var även långsamma med att ändra vår plan, vilket gjorde att tiden vi hade att bygga den nya kretsen var relativt begränsad. Projektet var genomförbart men krävde en förståelse för saker som vi inte direkt haft kurser i. Programmeringen av NeoPixeln visade sig även vara komplicerad. Då vår hantering av NeoPixeln var undermålig, resulterade det i flertal timmar av att läsa igenom och försöka förstå tidigare kod skriven för NeoPixeln. Detta gjorde att vi fick nöja oss med en mer simplistisk version av det vi hade planerat. Den första tanken var att vi skulle utnyttja NeoPixelns utforming för att producera en kontinuerlig rotation av LED-lampor, som blinkade i takt med frekvens av ljudsignalen. Istället blev vår slutprodukt att samtliga LED-lampor byter färg och ljusstyrka enligt ljudsignalens amplitud och frekvens. 7.2 Vad gjorde vi rätt kontra fel 11
Vår grundtanke för avläsning av ljudsignalen baserades först på en frekvens-till-spänningskrets, men då detta visade sig vara för komplicerat för vår kompetens, blev vår lösning att istället använda ett lågpassfilter för simulering av basen och ett högpassfilter för diskanten. Vår planering var även dåligt utformad, då större delar av projekttiden lades ner på hårdvaran istället för programmering av NeoPixeln. Då kretsen väl var konstruerad, fanns det ont om tid kvar för programmering av NeoPixeln och mikroprocessorn. När programmeringen väl var påbörjad insåg vi hur komplicerad NeoPixeln var och att vi skulle börjat med denna delen i ett tidigare skede i projektet. 7.3 Hur var vår målbild jämfört med hur den slutliga produkten blev Vår första målbild var en blinkandes NeoPixel med stor variation av olika färger, som skulle reflektera musiken som spelade på ett rytmiskt och psykedeliskt vis. Slutprodukten blev istället att samtliga LED-lampor lyser upp samtidigt i samma färg, i takt med musiken. 12
8. Referenser I detta avsnitt placerar du din referenslista där varje referens numreras. I rapporten refererar du till dessa källor där det behövs. Om du använder text i rapporten som inte är dina egna ord så måste den refereras till. Det samma gäller för figurer som du inte själv skapat. Läs mer om hur man skriver referenslista och använder den på http://www.lub.lu.se/skriva-referera/referera.html 8.1 Litterära källor [1] B. Karlström, Kretsanalys. Lund: Studentlitteratur AB, 2018. [2] https://www.ne.se/uppslagsverk/encyklopedi/l%c3%a5ng/filter [4] L. Hemert, Digitala kretsar. Lund: Studentlitteratur AB, 2015 13
8.2 Datablad [5] https://www.eit.lth.se/fileadmin/eit/courses/eita15/laborationer/datorteknik/lab2/atmega1284.pdf [6] http://www.ti.com/lit/ds/symlink/tl082.pdf [7] https://www.adafruit.com/product/1463 14