Slim algoritme gevraagd.

Projecten die niet passen in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Slim algoritme gevraagd.

Berichtdoor pjh » 13 Aug 2013, 23:59

Voor een praalwagen ben ik een NEMO-vis van een paar meter RGB LED-strip aan het voorzien.
De strips stuur ik over de hele lengte aan. Dat is makkelijk dan individuele pixels.
Ik wil wel de zijvinnen samen en de strip op de rugvin apart aansturen.
Dit levert me 2 x RGB = 6 kanalen op om aan te sturen.
Verder komt er een relais die de ogen schakelt en een motor die de ogen laat bewegen.

Leuk, allemaal voor de kinderen. (En mijn soldeerbout natuurlijk.)
Het leek me leuk om de LED-strip op omgevingsgeluid te laten reageren.
Die ene drumband zal bij deze niet al te grote optocht niet ver weg staan.

Wat heb ik tot nu toe:
- electret microfoon uit oude telefoon gehaald.
- Signaal electret met LM358 versterkt. Hierbij vooral naar dit plaatje gekeken:
Afbeelding
http://breadboardtronics.wordpress.com/2012/08/28/lm358-microhone-preamp-tutorial/
- signaal van LM358 naar de bekende 7 kanaals equalizer IC (MSGEQ7) gestuurd. Startpunt hierin was deze link:
http://nuewire.com/info-archive/msgeq7-by-j-skoba/

Na alles aan elkaar geknoopt te hebben kreeg ik een mooie stroom getallen binnen.
De 'luidheid' in de 7 frequentie-bereiken zijn 7 waarden van 0 tot 1023

Ik laat één van de 7 kanalen schieten, zodat ik er 6 voor 2 x RGB overhoud.
Een arduino heeft 6 x PWM. Dus dat komt mooi uit.
Deze ga ik later via MOSFETs op de (ultra goedkope) LED strips zetten.

Nu ben ik met de software bezig.
Via een map() zette ik aanvankelijk de 10-bits waarden van de equalizer IC om naar 8 bits. Maar wanneer ik deze op de 'PWM' zet, krijg je meer trillend licht zonder goed te onderscheiden kleuren.
Bagger dus.

Mijn beste poging tot nu toe gaat helemaal voorbij de PWM. Zie ook video hieronder.
Op mijn protoboardje heb ik 7 LEDjes gezet, die afhankelijk van wat er in één van de 7 kanalen gebeurd, aan of uit gaat.

Dit is mijn ´algoritme`:
- bepaal per kanaal een minimum en een maximum over 10 metingen (arbitrair gekozen)
- indien maximum en minimum meer dan 50 verschillen: doe LED aan, anders uit.

Op het videootje hieronder rammel ik eerst met sleutels (rechter lampjes gaan aan) en daarna klop ik op de tafel (lage tonen, linker LEDjes).
Op zich lijkt me dit best een aardig signaal om naar de LED strip te sturen. Krijg je 7 kleuren plus alles uit.
Niks fancies.

Niks fancies.
Hmmm.

Al dat gedoe met die LEDjes en Arduino's op de PRAAL wagen IS juist om fancie te zijn.
Daarom vroeg ik me af of anderen al eens eerder met dit bijltje gehakt hebben.

Kort en goed: hoe krijg je 7 x 10-bits equalizer-info over sterk wisselend omgevingsgeluid goed in mooie FANCIE kleurtjes?

Hier video:

http://youtu.be/kKCtz1AbCY4

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Slim algoritme gevraagd.

Berichtdoor shooter » 17 Okt 2013, 11:28

van 10 bits naar 8 bits gaan is simpel door twee bits te schuiven, echter jouw map is een prima oplossing.
kijk eens naar een equalizer, die werken allemaal met een soort staafje die slechts langzaam uitgaat.
de bas bijvoorbeeld duurt maar erg kort, dus je pakt de waarde uit jouw map voor de lage tonen en daar trek je elke keer 10% vanaf, dus gewoon uitkanaal1= 0.9 * uitkanaal1
de map zou je inderdaad aan kunnen passen aan het nivo, maar dan verlies je de volumes van de verschillende signalen (dit wordt gedaan in die goedkope 3 kanaalsorgeltjes om elke lamp een beetje aan te hebben.
in jouw algoritme blijft de lamp hooguit 10 metingen aan en dat geeft alleen maar een flits.
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 13 gasten