Göra lampor reagera på ljud (3 / 5 steg)

Steg 3: programvara



Du hittar programvaran som Atmel Studio projekt på github

Det finns 2 projekt i denna git. Grundläggande projektet omfattar alla grundläggande funktioner för att mäta och beräkna data. Den innehåller också en klass för WS2812 LED. Matrixproject innehåller alla data för mitt projekt baserade en en 7 x 6 LED-matris med WS2812 LED. Eftersom detta är mycket specifika, är denna kod mer av en inspiration och exempel för vad du kan göra.

Denna del är den mest komplexa av detta projekt som programmet behöver för att göra en massa saker.

Provtagning Data

Först måste du hämta data till kontrollern. Detta görs genom provtagning ljudsignalen med en ADC. Provtagningsfrekvensen beror på frekvensen spänner du vill arbeta med. Om du prova signalen med en skattesats på 32kHz kan du återskapa signalerar upp till 16kHz med Fourier omvandling (FT). Detta är frekvensen spänner vi vill arbeta med.

För att göra detta arbete timern en att utlösa med en frekvens av 32kHz och läsa ett värde från ADC varje gång detta händer. Eftersom atxmega handkontrollen har en DMA-styrenheten, används för att automatisera processen. DMA (Direct Memory Access) kan du flytta data från en punkt i minnet till en annan helt i hårdvara. DMA är inställd på ett sätt, att den rör sig resultatet från ADC till en specifik plats i RAM-minnet när den utlöses av timern. Vi prova 128 värden per kanal.

Fast Fourier omvandling (FFT)

Vi använder elmchan FFT biblioteket för detta projekt.

Vanligtvis en FT använder en massa tid för beräkning, men gör att du kan återskapa varje frekvens inom given signal spektrumet. FFTEN förenklar den här processen och snabbar det upp. Nackdelen är, att det inte ger dig särskilda frekvenser men frekvensband. För detta projekt är informationen tillräckligt bra.

Eftersom vi prova 128 värden, ger FFTEN oss 64 resultat. På grund av samplingsfrekvens (32 kHz) kan vi återskapa frekvenser upp till 16 kHz, som är indelade i 64 band av FFTEN. 16000 / 64 = 250. Detta innebär att varje FFT band beskriver nivån av 250 Hz. FFT band 1 ger ett värde för 1Hz till 250Hz, band 2 för 251Hz till 500Hz, band 3 för 501Hz till 750Hz och så vidare. Genom att öka antalet ingående prover kan du öka denna resolution, men också öka behövs beräkning tiden.

De 64 band konsolideras i 7 band, som används för matrisen, som har en bredd på 7 LED. Vissa effekter är fortfarande baserade på de ursprungliga 64 band.

Algoritm för att beräkna FFT är kodad på ett sätt, att det inte gör alla beräkningssteg på en gång, men delar upp dem i mindre bitar. Detta görs för att ge controller tid att beräkna annan sak mellan dessa steg. Om du inte gör detta, animationer kommer ibland stammar, som inte ser bra ut.

Det mänskliga örat reagerar olika på vissa frekvenser. Det är mycket förnuftigt att frekvenser runt 4kHz och inte förnuftigt att mycket låga och höga frekvenser. I en audio signal de låga frekvenserna kommer att ha en hög amplitud, som leder till höga FFT resultat, och låga amplituder i mitten frekvenserna, vilket leder till låga FFT resultat. Detta gör det svårt att göra beräkningar med. För att motverka detta en mycket enkel omvänd a-viktningssystemet används. Koefficienterna som pre beräknas för varje band och multiplicerade med var och en av de 64 FFT band.

Fick upptäcka

Den grundläggande tanken bakom detta är enkel: den genomsnittliga ljudnivån makt. Om den nuvarande makten är långt högre än genomsnittet har du ett beat. Du skulle behöva prova ljudsignalen kontinuerligt, vilket vi inte gör det gör ordentligt. Men vi fortfarande använder denna idé.

FFT resultaten delas upp i 3 band: låg, medium och hög. Dessa värden är medelvärde över tiden som ett glidande medelvärde. Om den nuvarande nivån är högre än 50% till 100% (beroende på bandet) av detta genomsnitt bedöms det som beat. Detta fungerar mycket bra med en metronom som producerar en enkel ljud, men fungerar också bra med komplexa signaler som låtar. Slå upptäckt i det lägre bandet fungerar bäst och mitten bandet värst när det finns sång i låten.

Vad göra med dessa data?
Jag ska förklara hur mono spektrum displayen fungerar som ett exempel. Du kan hitta koden i den kompletta projektet i animations.cpp i funktionen void anim_monospektrum_step(). Denna animation används i introvideon.

Värdena på de 7 konsoliderade band ställs som målvärden för höjden av kolumnerna. Det skalas på ett sätt, att detta värde varierar mellan 0 och 9000. Målet färg offset anges av amplituden. De faktiska värden som används för att beräkna produktionen, ändra sakta deras värde för att matcha målvärdet. Detta gör att animeringen ser mycket vätska och hindrar plötsliga hopp.

Matrisen har en höjd av 6 LED. Detta innebär att varje LED täcker 9000 / 6 = 1500 räknas av det faktiska värdet. Om det faktiska värdet av ett band är 1500, skulle endast LED i botten tändas. Om värdet var 3000 de två mest botten LED skulle lysa upp. Så länge det faktiska värdet är större än 1500 vi lyser upp en mer ledde och subtrahera 1500 från värdet. Om det efter denna process, värdet inte är 0, lysdioden ovanför den senaste full-lit LED belyst också, men ljusstyrkan skalas med värdet. Ju lägre den återstående värde, desto lägre ljusstyrka.

Som en extra detalj blinkar band när ett beat inom detta band har upptäckts.

Se Steg
Relaterade Ämnen

Arduino/behandling: Rörlig grafik och lampor reagera på ljud

tog en stund för att fånga vad jag ville, men det var det värt....

Enkla FC-04 ljud Sensor Demo

FC-04 ljud Sensormodul, enligt min mening, är en mycket känslig ljud upptäckt modul för priset. Även om denna sensor inte ger någon möjlighet att identifiera specifika ljud eller frekvensen av ett ljud den gör vad den ska - upptäcker den ljud.Nyckeln...

Tutu med inbyggda lysdioder

Jag behövde Visa mina elever ett enkelt sätt att bädda in lysdioder på en bit tyg, så jag gjorde en tutu som lyser upp. Framtida versioner kommer att reagera på ljud, ljus eller acceleration. Men för just nu, det slå bara på eller stänga av beroende...

Ruby Red LED Plushie Mod

Aww, du får mig att rodna. Skulle inte det vara häftigt att animera dina Adafruit krets lekplats elektronisk komponent plushie? Jag har Ruby Red LED plushie. Jag ville att det skulle lysa upp och har det reagera på ljud. Här är en lätt mod att få det...

Necomimi Arduino katt öron

de är så dang cute. Om du någonsin har sett cool promo för Necomimi Neurowear wearable uppsättning katt öron som svarar på hjärnvågor, vill du vill ha en alltför. Men det verkar de kanske vaporware eftersom den inte har inte förverkligades på marknad...

Croccolino!!! Smart sällskapsdjur mataren (förbättrat)

Lagt till kod förbättringar och kontroller. Nu kan mataren reagera med ljud när pet är i närheten.Maaaaaaaaaaaaaaaaaoooooooowwwwwwww!Har du någonsin varit utanför ditt hem för ett par dagar? Har du någon som kan mata din sällskapsdjur under din frånv...

Mini trä Arcade Machine skåp

Min son har arbetat på spel ett tag nu och vi ville ha ett sätt att visa dem på en hacka natten.Jag hade köpt en massa 10 tums VGA pekskärm nyss för vissa bil projekt var jag arbetar på.Jag hade 4 monitorerna kvar så jag gjorde 4 skåp.Jag gick till g...

DIY Intelligent Autonomus Robot (elektroniska Pet) /w Arduino

Jag älskar alla slags robotar speciellt autonomus eller intelligenta robotar, som har lite mer intelligens än att undvika ett hinder. Så jag bestämde mig att jag ska bygga min egen billig intelligent robot som har en bygga i kameran, avstånd sensorer...

Beating Heart

Publicerad den 3-Jan-2016denna instruktion skulle visa hur du kan göra din egen musik light box att reagera med ljud.Krets drift.1-vi har makt leverans avsnitt, som tar kraften från en USB-port och lagra den i batteriet.2-vi har växeln som antingen t...

LED puls Sensor (PPG) för Arduino

Inom detta Instructable kommer jag visa dig, hur man genomför en enkel PPG (photoplethysmogram) sensor för arduino. Denna enhet använder infrarött ljus för att mäta du puls. Du kanske känner denna teknik från fingertoppen puls sensorer i sjukhus.Denn...

SBOT återvunnet roboten

SBOT är en multifunktionell robot av återvunnet material. Han rör sig på kommando. Han visar dessutom tiden i en bifogad ledde matrisen väckarklocka. Han kan laddas med hjälp av solpaneler, vindkraftverk och andra källor av ren energi. SBOT kommer at...

Spionera anordning för Light Switch

vi ska göra en anordning som kan stänga av lampor helt utan ljud, perfekt för en spion eller en hemlig agent. Detta verktyg är mycket lätt att göra och är mycket användbar.Steg 1: Skaffa material Din endast kommer att behöva lite skum, ca 1 tum tjock...

Bugg-fånga spindeln i nätet, del 2

detta projekt är ett samarbete mellan idesigner4 och bhasudha(me), elever i höst2012 naturligtvis saker att tänka (CSCI 7000) vid University of Colorado - Boulder.Historien om vår bugg-fånga spider automat går så här: en jätte onda spindel bosatti en...

Suave-ser hjärnan maskin

Mitch Altmans hjärnan maskin är en gammal favorit maker. Jag kom över det tillbaka i Makezine volym 10 och trodde inte att mycket av det, men när jag läste frågan förra månaden det slog mig som en intressant enhet och ett roligt experiment. Det enda...

Komma igång med PICAXE

Hej. Idag kommer du att lära hur man använder PICAXE. Hurra!Så vad är PICAXE? PICAXE är i huvudsak en liten bit av metall och plast kan du göra saker. Enkelt nog? Du berätta för styrelsen att skicka och ta emot olika elektriska pulser, som i sin tur...

MJRoBot jag - enkla steg för att bygga en autonom robot.

För några månader sedan avslutade jag min första online elektronisk kurs. Det var en ny upplevelse men det väckte i mig en gammal passion mycket sömnig, elektronik!Kursen var: EE40LX: elektroniska gränssnitt, genom EDX plattform och administreras av...

Lilla Altoid Tin Robot med personlighet

jag älskar robotar. Normalt de som jag bygger är ganska stora och inte skulle passa i fickan, men för en omväxling jag beslutat jag skulle prova något litet och roligt! Denna robot är just detta, och i själva verket passar inuti en altoids tin. Det ä...

LED Spacehelmet

Jag är på inget sätt en ingenjör eller crafty, jag är en geolog med en fascination i rymden. Jag gjorde detta utrymme-hjälm och en kopia för min man som en EDC kostym.Material som behövs:14 i. Klar akryl Globe - med 5,25 in. Halsband öppningNASA Seal...

Lösenord beskyddat dörrlås med arduino

Projektet består av Arduino mega, en motor, en knappsats, en Summer, lcd, potentiella mätaren, röda led och gröna ledde. Efter uppladdning den hex filen, lcd startar.Steg 1: Välkomsthälsning uppmanas du att ange lösenordetI välkomstfönstret uppmanar...