Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Ik heb al een tijdje een 12v RGB-ledstrip rond mijn tv-meubel en deze wordt aangestuurd door een saaie led-driver waarmee ik een van de 16 voorgeprogrammeerde kleuren kan kiezen!
Ik luister veel naar muziek die me gemotiveerd houdt, maar de verlichting geeft gewoon niet de juiste sfeer. Om dat te verhelpen, besloot ik het audiosignaal dat via AUX (3,5 mm-aansluiting) aan mijn luidspreker werd gegeven, te verwerken en de RGB-strip dienovereenkomstig te bedienen.
De LED's reageren op de muziek op basis van de grootte van de bas (laag), hoge tonen (midden) en hoge frequenties.
Het frequentiebereik – Kleur is als volgt:
Laag – Rood
Midden – Groen
Hoog – Blauw
Dit project omvat veel doe-het-zelf-dingen omdat het hele circuit helemaal opnieuw is opgebouwd. Dit zou vrij eenvoudig moeten zijn als je het op een breadboard instelt, maar een hele uitdaging om het op een PCB te solderen.
Benodigdheden
(x1) RGB LED-strip
(x1) Arduino Uno/Nano (Mega wordt aanbevolen)
(x1) TL072 of TL082 (TL081/TL071 zijn ook prima)
(x3) TIP120 NPN-transistor (TIP121, TIP122 of N-Channel MOSFET's zoals IRF540, IRF 530 zijn ook prima)
(x1) 10kOhm potentiometer lineair
(x3) 100kOhm 1/4watt weerstanden
(x1) 10uF elektrolytische condensator
(x1) 47nF keramische condensator
(x2) 3,5 mm audio-aansluiting – Vrouwelijk
(x2) 9V batterij
(x2) 9V batterij snap connector
Stap 1: Inzicht in de soorten RGB LED-strips
Er zijn twee basissoorten LED-strips, de "analoge" soort en de "digitale" soort.
Analoge-type (afb. 1) strips hebben alle LED's parallel aangesloten en werken dus als één enorme driekleurige LED; je kunt de hele strip in elke gewenste kleur instellen, maar je hebt geen controle over de kleuren van de individuele LED's. Ze zijn heel gemakkelijk te gebruiken en redelijk goedkoop.
De strips van het Digital-type (fig 2) werken op een andere manier. Ze hebben een chip voor elke LED, om de strip te gebruiken moet je digitaal gecodeerde gegevens naar de chips sturen. Dit betekent echter dat u elke LED afzonderlijk kunt aansturen! Door de extra complexiteit van de chip zijn ze duurder.
Als u het moeilijk vindt om de verschillen tussen de analoge en digitale strips fysiek te identificeren,
- Het analoge type gebruikt 4 pinnen, 1 gemeenschappelijk positief en 3 negatieven, d.w.z. één voor elke RGB-kleur.
- Digitaal-type gebruik 3 pinnen, positief, data en aarde.
Ik zal de analoge strips gebruiken, omdat:
- Er zijn zeer weinig tot geen Instructables die leren hoe je een op muziek reagerende analoge strip kunt maken. De meeste van hen richten zich op het digitale type en het is gemakkelijker om ze op muziek te laten reageren.
- Ik had wat analoge strips liggen.
Stap 2: Het audiosignaal versterken
Het audiosignaal dat via de audio-aansluiting wordt verzonden, is:
een analoog signaal dat oscilleert binnen +200mV en -200mV. Nu is dit een probleem, we willen het audiosignaal meten met een van de analoge ingangen van Arduino, omdat de analoge ingangen van de Arduino alleen spanningen tussen 0 en 5V kunnen meten. Als we probeerden de negatieve spanningen in het audiosignaal te meten, zou de Arduino alleen 0V lezen en zouden we uiteindelijk de onderkant van het signaal afknippen.
Om dit op te lossen moeten we de audiosignalen versterken en compenseren zodat ze binnen een bereik van 0-5V vallen. Idealiter zou het signaal een amplitude van 2,5 V moeten hebben die rond de 2,5 V oscilleert, zodat de minimale spanning 0 V is en de maximale spanning 5 V.
versterking
De versterker is de eerste stap in het circuit, deze verhoogt de amplitude van het signaal van ongeveer + of - 200mV naar + of - 2.5V (idealiter). De andere functie van de versterker is om de audiobron (het ding dat in de eerste plaats het audiosignaal genereert) te beschermen tegen de rest van het circuit. Het uitgaande versterkte signaal zal al zijn stroom van de versterker halen, dus elke belasting die er later in het circuit op wordt gezet, wordt niet "gevoeld" door de audiobron (de telefoon/iPod/laptop in mijn geval). Doe dit door een van de op-amps in het TL072 of TL082(fig 2) pakket in een niet-inverterende versterkerconfiguratie in te stellen.
De datasheet van de TL072 of TL082 zegt dat hij gevoed moet worden met +15 en -15V, maar aangezien het signaal nooit boven + of - 2.5V zal worden versterkt, is het prima om de op-amp met iets lager te laten werken. Ik gebruikte twee negen volt batterijen die in serie zijn geschakeld om een + of - 9V voeding te creëren.
Sluit uw +V (pin 8) en -V (pin 4) aan op de op-amp. Sluit het signaal van de mono-aansluiting aan op de niet-inverterende ingang (pin 3) en verbind de aardpen van de aansluiting met de 0V-referentie op uw spanningsvoorziening (voor mij was dit de kruising tussen de twee 9V-batterijen in serie). Sluit een weerstand van 100 kOhm aan tussen de uitgang (pin 1) en de inverterende ingang (pin 2) van de op-amp. In dit circuit heb ik een 10kOhm-potentiometer gebruikt die is aangesloten als een variabele weerstand om de versterking (de hoeveelheid die de versterker versterkt) van mijn niet-inverterende versterker aan te passen. Sluit deze 10K lineaire taper pot aan tussen de inverterende ingang en de 0V-referentie.
DC-offset
Het DC-offsetcircuit heeft twee hoofdcomponenten: een spanningsdeler en een condensator. De spanningsdeler is gemaakt van twee 100k-weerstanden die in serie zijn geschakeld van de Arduino's 5V-voeding naar aarde. Omdat de weerstanden dezelfde weerstand hebben, is de spanning op de kruising ertussen gelijk aan 2,5V. Deze 2.5V junction is via een 10uF condensator verbonden met de uitgang van de versterker. Naarmate de spanning aan de versterkerzijde van de condensator stijgt en daalt, zorgt dit ervoor dat de lading zich tijdelijk ophoopt en afstoot van de kant van de condensator die is bevestigd aan de 2,5V-junctie. Dit zorgt ervoor dat de spanning op de 2,5V-junctie op en neer oscilleert, gecentreerd rond 2,5V.
Zoals in het schema wordt getoond, sluit u de negatieve kabel van een 10uF-condensator aan op de uitgang van de versterker. Sluit de andere kant van de dop aan op de kruising tussen twee 100k-weerstanden die in serie zijn geschakeld tussen 5V en aarde. Voeg ook een condensator van 47 nF toe van 2,5 V naar aarde.
Stap 3: Ontbinden van het signaal in een som van stationaire sinusoïden - Theorie
Het audiosignaal dat via een 3,5 mm-aansluiting wordt verzonden, bevindt zich in de
bereik van 20 Hz tot 20 kHz. Het wordt gesampled op 44,1 kHz en elk monster is gecodeerd op 16 bits.
Om de elementaire basisfrequenties waaruit het audiosignaal bestaat te deconstrueren, passen we Fourier-transformatie toe op het signaal, dat het signaal ontleedt in een som van stationaire sinusoïden. Met andere woorden, Fourier-analyse converteert een signaal van zijn oorspronkelijke domein (vaak tijd of ruimte) naar een representatie in het frequentiedomein en vice versa. Maar het rechtstreeks uit de definitie berekenen is vaak te traag om praktisch te zijn.
Cijfers laten zien hoe het signaal eruitziet in tijd- en frequentiedomein.
Dit is waar het Fast Fourier Transform (FFT) -algoritme behoorlijk handig is!
Per definitie, Een FFT berekent dergelijke transformaties snel door de DFT-matrix te ontbinden in een product van schaarse (meestal nul) factoren. Als resultaat slaagt het erin om de complexiteit van het berekenen van de DFT van O(N2), die ontstaat als men eenvoudig de definitie van DFT toepast, te verminderen op O(N log N), waarbij N de gegevensgrootte is. Het snelheidsverschil kan enorm zijn, vooral voor lange datasets waar N in de duizenden of miljoenen kan zijn. In aanwezigheid van afrondingsfouten zijn veel FFT-algoritmen veel nauwkeuriger dan het direct of indirect evalueren van de DFT-definitie.
In eenvoudige bewoordingen betekent dit gewoon dat het FFT-algoritme een snellere manier is om de Fourier-transformatie van elk signaal te berekenen. Dit wordt over het algemeen gebruikt op apparaten met een lage rekenkracht.