Inhoudsopgave:

Retro LED Strip Audio Visualizer - Ajarnpa
Retro LED Strip Audio Visualizer - Ajarnpa

Video: Retro LED Strip Audio Visualizer - Ajarnpa

Video: Retro LED Strip Audio Visualizer - Ajarnpa
Video: Retro LED Strip Audio Visualizer 2024, November
Anonim
Image
Image
Onderdelen lijst
Onderdelen lijst

Als muzikant en student elektrotechniek hou ik van elk project dat deze twee velden kruist. Ik heb een aantal doe-het-zelf-audiovisualizers gezien (hier, hier, hier en hier), maar elk had ten minste een van de twee doelen die ik voor mezelf had vastgesteld, gemist: een professionele bouwkwaliteit en een relatief groot scherm (een slappe 8*8 LED-matrix zou hier niet volstaan!). Met wat vintage flair, en zittend op 40 "x 20", bereikt deze audiovisualizer beide doelen.

Bij voorbaat excuses voor verticale foto's. Veel van hen werden genomen voor sociale media.

Stap 1: Onderdelenlijst

Ik had al een aantal van deze onderdelen liggen. De links zijn puur ter referentie. Koop geen onnodig dure componenten.

Elektronica

  1. WS2811 60LEDS/m @ 5m, IP30 (niet waterdicht), adresseerbaar - Deze waren destijds goedkoper dan WS2812. Je hebt hier wat speelruimte, maar zorg ervoor dat de afmetingen kloppen en dat je echt met de LED's kunt praten. Merk ook op dat WS2811's 12V zijn, terwijl WS2812's 5V zijn.
  2. 9 x 3-pins JST-connectoren + contactdozen
  3. DC 12V 20A (240W) voeding - Ik was in eerste instantie van plan om 2 LED-strips te maken en wilde een luidsprekerset die je huis opblaast. Elke lichtstrip is 90W in het ergste geval (ik heb niet gemeten om te bevestigen), waardoor ik ~60W overhield voor luidsprekers + versterker. De 15A-optie was sowieso maar $ 4 minder.
  4. Netsnoer (3 pinnen)
  5. Arduino Uno - Ik had een R3 liggen, dus die heb ik gebruikt. Mogelijk vindt u een goedkopere optie bij een van de namaakproducten of een andere leverancier.
  6. TRRS Breakout - Voor aux-ingang
  7. L7805 5V-regelaar - Elke 5V-regelaar die een 12V-ingang accepteert, zal werken.
  8. 330 nF, 100 nF condensatoren - per L7805 datasheet
  9. 2 x 10kR, 2 x 1kR, 2 x 100 nF condensatoren - voor audio input biasing
  10. Stereo-ontvanger - elke vintage stereo-ontvanger werkt zolang deze een aux-ingang heeft (3,5 mm of RCA). Ik pakte een Panasonic RA6600 van craigslist voor $ 15. Ik raad aan om Goodwill, craigslist en andere tweedehandswinkels te controleren op soortgelijke.*
  11. Luidsprekers - Geen BT-luidsprekers. Gewoon een speakerset. Let op welke impedantie compatibel is met uw ontvanger. Ik vond een set van 3 20W (= luide) luidsprekers bij Goodwill voor $ 6, en die kwam met een "midden" en twee "voor" luidsprekers.
  12. Logitech BT Audio Adapter - dit apparaat kan audio streamen naar de stereoluidsprekers en naar uw circuit
  13. RCA mannelijke naar RCA mannelijke kabel
  14. Aux-snoer

Hardware

  1. 2x6 (8ft) - Niet onder druk behandeld. Moet ~ $ 6 of minder zijn bij HD of Lowe's
  2. 40% lichttransmissie acryl - Ik bestelde 18 "x 24" x 1/8 ", en het was technisch 17,75 "x 23,5". Bewaar het in de verpakking als je gaat lasersnijden.
  3. Wood Stain - Je hebt maar een klein blikje nodig. Ik gebruikte Minwax rood mahonie en het kwam erg mooi uit. Ik raad zeker een donkere toon aan. Ik heb oorspronkelijk provinciaal geprobeerd en het zag er niet zo mooi uit.
  4. Lak - Bekijk eerst deze video van Steve Ramsey en beslis zelf wat het beste werkt. Ik kreeg een spuitbus met halfglans (er was geen glans beschikbaar) en eerlijk gezegd deed het niet zoveel. Maar ik heb ook maar één laag gedaan vanwege tijdgebrek.
  5. 40 x 1/2 "houtschroeven - Ik had een ronde kop tot mijn beschikking, maar ik raad aan om een platte bovenkant te gebruiken als je kunt. Ik denk niet dat dat de bouwkwaliteit zou verstoren, maar vraag het eerst aan iemand die meer bekend is met houtbewerking.
  6. Schroothout, gorillalijm, hete lijm, soldeer, draad en commandostrips (klittenband, 20 medium of 10 large)

* Ik ben van plan een soundbar te bouwen om dit project helemaal "from scratch" te maken, dat 9-13 hierboven zal vervangen. Ik hoop dit instructable daarmee te updaten tegen het einde van de zomer.

Stap 2: Prototyping

Prototyping
Prototyping

Dit gedeelte hoeft u niet in te vullen, maar ik wil wel laten zien hoe het project eruitzag terwijl het vorderde.

Hier heb ik LED's in het slangenpatroon geplakt en experimenteerde ik met lichtverspreiding via een vuilniszak die over zichzelf was gelaagd (ik raad dat ten zeerste aan als alternatief voor het acryl als je kosten probeert te besparen). bevestig het op een andere manier).

Een 10x10-opstelling werkte voor mij, maar misschien geeft u de voorkeur aan 8x12 of 7x14. Experimenteer gerust. Voordat ik mijn stereo had, vond ik een versterker en sloot die aan op mijn breadboard, en daarvoor speelde ik audio van mijn laptop naar het circuit voor audio-analyse en drukte ik tegelijkertijd op "play" op mijn telefoon om het te horen.

Ik ben een groot voorstander van twee keer meten, één keer knippen. Dus wat je ook doet, volg die gids en je bent klaar.

Stap 3: Circuit + code

Circuit + code
Circuit + code
Circuit + code
Circuit + code
Circuit + code
Circuit + code

Code is beschikbaar op GitHub.

Breadboard, soldeer op een perfboard of ontwerp je eigen PCB. Wat hier voor jou het beste werkt, doe het. Mijn demo hier draait op een breadboard, maar als ik de soundbar ga bouwen, zet ik alles op een PCB. Om stroom van de adapter te krijgen, snijdt u het vrouwelijke uiteinde af en verwijdert u de zwarte isolatie. Strip voldoende van de eigenlijke kabels om deze op de adapteraansluitingen te schroeven. Wees altijd voorzichtig bij het werken met AC! Anders dan dat, slechts een paar dingen om hier op te merken.

  1. Grondpaden Een ander ding is om ervoor te zorgen dat je grondpaden goed zijn. Je hebt aarde nodig van de adapter naar Arduino naar de aux-ingang, die ook wordt aangesloten op de aarde op de Logitech BT-ontvanger en van daaruit op de aarde op de stereo. Als een van deze een kapotte of slechte verbinding is, krijgt u een zeer luidruchtige audio-invoer en dus een zeer luidruchtige weergave.
  2. Audio Input BiasingAudio afgespeeld via een aux-kabel, vanaf je telefoon of laptop of waar dan ook, zal spelen op -2.2 tot +2.2V. Arduino kan alleen 0 tot +5V lezen, dus je moet de audio-invoer vertekenen. Dit kan efficiënt worden bereikt met opamps, maar als stroomverbruik geen probleem is (misschien heb je een 240W-voeding gekocht?), kan het ook worden bereikt met weerstanden en condensatoren. De waarden die ik koos waren anders omdat ik geen 10uF-condensatoren bij de hand had. Je kunt met de simulator spelen om te zien of wat je kiest werkt.
  3. Fourier-transformaties Elk project dat Fourier-transformaties gebruikt, zal een achtergrondsectie hebben waarin ze worden besproken. Als je al ervaring hebt, prima! Als dat niet het geval is, hoeft u alleen maar te begrijpen dat ze een momentopname van een signaal maken en informatie retourneren over welke frequenties op dat moment in dat signaal aanwezig zijn. Dus als je de Fourier-transformatie van sin(440(2*pi*t)) zou nemen, zou het je vertellen dat er een 440Hz-frequentie in je signaal aanwezig is. Als je de Fourier-transformatie van 7*sin(440(2*pi*t)) + 5*sin(2000(2*pi*t)) zou nemen, zou het je vertellen dat er zowel een 440Hz- als een 2000Hz-signaal aanwezig is, en de relatieve mate waarin ze aanwezig zijn. Het kan dit doen voor elk signaal met een willekeurig aantal componentfuncties. Omdat alle audio ooit slechts een som van sinusoïden is, kunnen we de Fourier-transformatie van een aantal snapshots nemen en zien wat er werkelijk aan de hand is. Je zult in de code zien dat we ook een venster op ons signaal toepassen voordat we de Fourier nemen transformeren. Meer hierover is hier te vinden, maar een korte uitleg is dat het signaal dat we uiteindelijk de transformatie geven nogal zuigt, en Windows lost dat voor ons op. Je code zal niet breken als je ze niet gebruikt, maar het scherm ziet er niet zo schoon uit. Er zijn misschien betere algoritmen beschikbaar (bijvoorbeeld YAAPT), maar volgens de principes van KISS heb ik ervoor gekozen om te gebruiken wat was al beschikbaar, wat verschillende goed geschreven Arduino-bibliotheken zijn voor de Fast Fourier Transform of FFT.
  4. Kan de Arduino echt alles in realtime verwerken? Om alles in realtime te laten verschijnen, moet de Arduino 128 monsters nemen, die FFT verwerken, de waarden voor het display manipuleren en het display heel snel bijwerken. Als je een precisie van 1/16e noot bij 150 bpm wilt (dicht bij het hogere eindtempo van de meeste popsongs), zou je alles in 100 msec moeten verwerken. Bovendien kan het menselijk oog zien met 30 FPS, wat overeenkomt met framelengtes van 30 msec. Deze blogpost gaf me niet het meeste vertrouwen, maar ik besloot zelf te kijken of Arduino het zou houden. Na mijn eigen benchmarking was ik erg trots op mijn R3. De berekeningsfase was verreweg de beperkende factor, maar ik kon een 128-lengte FFT van UINT16's in slechts 70 msec verwerken. Dit was binnen de audiotoleranties, maar meer dan het dubbele van de visuele beperking. Bij verder onderzoek vond ik Arduino FHT, die profiteert van FFT-symmetrie en alleen de echte waarden berekent. Met andere woorden, het is ongeveer 2x zo snel. En ja hoor, het bracht de hele lussnelheid op ~30msec. Nog een opmerking hier over de schermresolutie. Een lengte N FFT bemonsterd bij Fs Hz retourneert N bins, waarbij de kde bin overeenkomt met k * Fs/N Hz. De Arduino ADC, die de audio-invoer leest en samples neemt, draait normaal gesproken op ~9,6kHz. De FFT kan echter alleen informatie retourneren over frequenties tot 1/2 * Fs. Mensen kunnen tot 20 kHz horen, dus idealiter zouden we willen samplen op >40 kHz. De ADC kan worden gehackt om iets sneller te werken, maar daar komt het niet in de buurt. Het beste resultaat dat ik zag zonder stabiliteit te verliezen was bij een 14kHz ADC. Bovendien was de grootste FFT die ik kon verwerken om toch een realtime effect te krijgen N=128. Dit betekent dat elke bin ~109 Hz vertegenwoordigt, wat prima is bij hogere frequenties, maar slecht aan de lage kant. Een goede visualizer probeert voor elke maat een octaaf te reserveren, wat overeenkomt met scheidingen op [16.35, 32.70, 65.41, 130.81, 261.63, 523.25, 1046.50, 2093,00, 4186.01] Hz. 109Hz betekent dat de eerste 2,5 octaven allemaal in één bak zitten. Ik kon nog steeds een goed visueel effect krijgen, onder meer door het gemiddelde van elke emmer te nemen, waarbij een emmer een groep bakken is tussen twee van deze grenzen. Ik hoop dat dit niet verwarrend is, en de code zelf zou moeten verduidelijken wat er echt aan de hand is, maar voel je vrij om het hieronder te vragen als het niet logisch is.

Stap 4: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

Zoals ik al eerder zei, wilde ik iets met professionele bouwkwaliteit. Oorspronkelijk begon ik met het aan elkaar lijmen van latten, maar een vriend (en ervaren werktuigbouwkundig ingenieur) stelde een andere aanpak voor. Merk op dat een 2x6 echt 1,5 "x 5" is. En wees voorzichtig bij het werken met een van de onderstaande machines.

  1. Neem je 2x6x8 en zand indien nodig. Snijd het in secties van 2 "x 6" x 22". Dit geeft je twee latten om te "verbranden" als je het verknoeit.
  2. Neem elke sectie van 22 inch en leid deze in de lengte door een tafelzaag om lamellen van 1,5 inch x ~ 1,6 inch x 22 inch te maken. Het laatste derde deel is misschien moeilijk te zagen op een tafelzaag, dus u kunt overschakelen naar een lintzaag. Zorg ervoor dat alles zo recht mogelijk is. Bovendien is 1,6" een richtlijn en kan deze oplopen tot 1,75". Dat waren mijn stukken, maar zolang ze allemaal gelijk aan elkaar zijn maakt het niet zoveel uit. De beperkende factor is het acryl op 18".
  3. Markeer aan het einde van de stukken een U-vorm die aan weerszijden 1/8 "in is en iets meer dan 3/4" diep. OPMERKING: Als u een ander acrylaat gebruikt, verandert de diepte. Bij < 3/4" verspreidt mijn acryl helemaal geen licht. Bij iets meer verspreidt het volledig. Je wilt elke "kraaligheid" vermijden. Ik vond deze Hackaday-post een goede referentie, maar het verkrijgen van de perfecte diffusie is erg moeilijk!
  4. Knip met een tafelfrees die middelste U helemaal langs de lat uit. De 22" is langer dan je nodig hebt, dus maak je geen zorgen over het afbreken van de uiteinden als je dat doet. Routers kunnen lastig zijn, maar neem een bit dat iets breder is dan de helft van de breedte van de U en wees voorzichtig met het snijden van meer dan 1/ 8 "materiaal tegelijk. Herhaal: Probeer niet alles in 2 passen te doen. Je zult het hout beschadigen en jezelf waarschijnlijk bezeren. Werk met de rotatie van de router op sneden 1-4 en werk ertegen op 5-8. Dit zorgt ervoor dat u de beste controle heeft over het koppel van de bovenfrees.
  5. Snijd de LED-strip in 30-LED-secties (alleen elke set van 3 LED's is adresseerbaar). U zult waarschijnlijk een paar verbindingen moeten desolderen. Leg die stroken langs de sporen. De ene kant moet vlak zitten en de andere kant moet een beetje ruimte hebben voor de JST-ontvanger, die vlak zit. Ik heb hier helaas geen foto van gekregen, maar zie het bijgevoegde schema. Markeer hier de lengte, maar knip nog niets af.
  6. Meet de breedte van elke lamel. Hiermee en de lengte uit stap 7, lasergesneden het acryl in de 10 benodigde rechthoeken. Het is beter iets lang te zijn dan iets kort. Als het verbrandt, veeg het dan af met isopropyl.
  7. Bevestig dat elke acryllat op dezelfde lengte zit die u in stap 5 hebt gemarkeerd en knip de lamel vervolgens af tot deze lengte.
  8. Je hebt nu twee brugstukken nodig om het plexiglas te bevestigen. Dit zorgt voor eenvoudig onderhoud van lichtstrips mocht er iets gebeuren. Deze stukken moeten ongeveer [uw breedte] - 2 * 1/8 "lang zijn met 1/2" vierkante vlakken, maar ze moeten een beetje strak zitten. Met deze stukken stevig op hun plaats en gelijk met de voorkant van de lamellen, boort u gaten door het midden van elke brug vanaf de buitenkant van de lamellen. Doe je best om elke oefening gelijk te maken. Houd de bruggen niet vastgeschroefd, maar zorg ervoor dat ze dat kunnen. Pas op dat u de schroef niet te ver naar beneden draait en het hout splijt.
  9. Beits nu de lamellen en breng een eventuele afwerking aan.
  10. Schroef nu de bruggen vast. Zorg ervoor dat ze gelijk zitten! Zo niet, dan moet je een soort shim toevoegen. Breng gorillalijm (bij voorkeur) of hete lijm (die kan dienen als shim) op de bruggen aan en bevestig het acryl. Breng geen lijm aan langs de lamel zelf.
  11. Soldeer JST-aansluitingen aan één kant van alles behalve één LED-strip. Zet ze allemaal op hetzelfde uiteinde als aangegeven door de gemarkeerde pijlen. Soldeer de draden van de JST-stekkers op de andere uiteinden. Mogelijk moet u meer draad op elke connector strippen. Zorg ervoor dat de aansluitingen correct zijn wanneer ze zijn aangesloten! De lijm op de achterkant van de LED's is verschrikkelijk, dus vertrouw het niet. Leg de LED's op de middelste baan en lijm ze vast met gorillalijm, let op de aangegeven richting op de strips. Onthoud dat je het hele ding kronkelt.
  12. Soldeer op de eerste lat lang genoeg draden om stroom + aarde van de adapter en het signaal van de Arduino te krijgen.
  13. Schroef de lamellen en bruggen weer vast. Bevestig commandostrips aan de achterkant (klittenband, 2 medium aan de boven- en onderkant of 1 grote in het midden). Maak alle benodigde verbindingen en hang op ongeveer 3 inch aan de muur. Geniet van de vruchten van je werk.

Aanbevolen: