Hoe een Cloud Lamp te bouwen met Sound Reactive Lightning
Een paar maanden geleden ging een donder- en bliksemverlichtingslamp van $ 3000 viraal in de makersgemeenschap. Het was een verbluffend mooi licht, maar het prijskaartje liet het buiten het bereik van iedereen met hun gezond verstand intact. Wat we vandaag gaan maken, is niet precies hetzelfde - we maken iets praktischer, in plaats van een kunstwerk, maar het wordt een stuk cooler en beter aanpasbaar.
Ik heb ervoor gekozen om luidsprekers weg te laten in de veronderstelling dat je waarschijnlijk al een goed paar luidsprekers in je kamer hebt die je liever gebruikt, en eerlijk gezegd is het een beetje vreemd om een luidspreker in een lamp te plaatsen. In plaats daarvan voeg ik een microfoon toe waarmee de bliksem automatisch kan reageren op harde geluiden - hetzij van een werkelijke onweersbui, of van een soundtrack die wordt afgespeeld vanaf je pc of stereo.
We gaan ook een reeks volledige RGB Neopixel LED's gebruiken (WS2812B), zodat we kleuren anders dan wit kunnen reproduceren en controle hebben over elke pixel.
Waarschuwing: de stroomvoorziening die ik in dit project heb gebruikt, heeft schroefklemmen die op een actieve AC-draad worden aangesloten. Als u niet zeker bent van een stekker, zorg er dan voor dat u een volledig gesloten voeding aanschaft. Op zijn minst moet u de PSU insluiten in een beveiligd projectvak.
Stap 0: Introductie
Hier is een demovideo van het voltooide project. Ik heb tot nu toe een paar verschillende modi geïmplementeerd, van de standaardbliksem tot een trippy acid cloud en een kleurvervagende sfeerlamp, die je kunt kiezen met de afstandsbediening.
De volledige code en benodigde bibliotheken zijn beschikbaar om te downloaden van deze Github-repository.
Stap 1: U zult nodig hebben
- WS2812B streng, meestal geprijsd op ongeveer $ 50 voor 5 meter. Maak je geen zorgen als je een ander type Neopixel-streng hebt, het wordt bijna zeker ondersteund door de FastLED-interface, maar je bedrading kan verschillen (je hebt mogelijk een sync-lijn nodig naast het signaal).
- 5V, 10A + voeding - ik kocht ongeveer 15A-eenheden voor elk $ 11. Ze hebben een ingang van 120-240V AC en produceren een flinke 5V-uitgang die meer volstaat om al onze pixels op volle sterkte van stroom te voorzien, en de Arduino.
- Elektrische bekabeling, stekker en inline-schakelaar
- Project behuizing
- Twee Arduinos. $ 10 Funduino klonen zijn prima. De tweede is nodig voor afstandsbediening, terwijl de eerste de hoofdlogica en LED's bestuurt.
- Twee 2.2k (of daaromheen) Ohms-weerstanden - de exacte waarde doet er niet zoveel toe, ongeveer 1.5k tot 47k zou moeten werken.
- broodplank
- TSOP4838 IR-ontvanger
- IR-afstandsbediening - ik kocht in bulk voor ongeveer $ 2 per stuk, maar elke afstandsbediening zou moeten werken met codemodificaties.
- Grote microfoonmodule
- Schroot MDF-hout om je basis uit te snijden en een puzzel.
- Polystyreen verpakkingsmateriaal / doosinzetstukken.
- Polypropyleen katoenen kussenvulling. Ik heb meer dan genoeg getrokken uit een paar vreselijke oude kussens. Als dat geen optie is, zou u nieuw voor ongeveer $ 10 moeten kunnen kopen, of zelfs goedkoper watten gebruiken. Ik probeerde het met beide: de watten hadden meer werk nodig om het uit te plassen en het was niet zo pluizig, maar in een mum van tijd werkt het.
- Ketting en haken om de wolk op te hangen - zou meer dan 5kg moeten bevatten.
- Lijmpistool met lage temperatuurinstelling
- Spuitlijm - gemakkelijker om de vulling op uw wolk te plakken, maar een lijmpistool zou ook kunnen werken.
De totale kosten zijn rond de $ 100, exclusief gereedschap, maar het grootste deel hiervan scharrelde ik door het hele huis. Alle elektronische componenten zijn algemeen verkrijgbaar; de microfoon bevindt zich in een sensorset of kan afzonderlijk worden gekocht.
Stap 2: Snijd de basis
Knip een ruwe basis uit een stuk MDF met een puzzel - de exacte vorm is duidelijk aan jou, maar om de een of andere reden is er een wolk in mijn geest gevormd. We zullen hier wat haakjes aan vastmaken om op te hangen, maar verder biedt het gewoon een solide basis om op te bouwen. Het centrale gedeelte wordt gereserveerd voor de elektronica, PSU en om de ketting uit te leveren, dus zorg ervoor dat u voldoende ruimte hebt om uw projectbehuizing te plaatsen met enkele haken eromheen.
Stap 3: laag op polystyreen
Dit is de moeilijkste en meest creatieve stap, maar we creëren echt iets solide en soort van wolkvormig om de ledstrip aan te lijmen. Lijm grote stukjes polystyreen pakking op de basis (en eronder), met behulp van een laag vuur op je lijmpistool. Als u geen lage instelling hebt, schakelt u het warmtepistool uit en laat u het een beetje afkoelen voordat u probeert te lijmen. Als de temperatuur te hoog is, smelt u eenvoudig door het verpakkingsmateriaal.
Zorg ervoor dat elk stuk solide is voordat je het volgende vastplakt, en het is het beste om meer te plakken dan niet genoeg.
Nogmaals, vergeet niet om een voldoende grote holte in de wolk achter te laten om in de elektronica, ketting en haken te passen.
Stap 4: snij een 3D-wolkvorm
Gebruik een vleesmes om je wolk te verslaan door de hoeken af te ronden en onnodig materiaal weg te snijden, totdat je een ruwe 3D-wolkvorm hebt bereikt. Het maakt niet echt uit hoe moeilijk dit is, omdat we later alles zullen bedekken met stuffen - je kunt fouten gemakkelijk verbergen.
Stap 5: Bevestig haken, opruimen
Bevestig tot slot drie of vier haken aan de MDF-basis, vanuit elke hoek van de holte van de wolk. U moet een klein geleidingsgat boren omdat MDF moeilijk recht in te schroeven is.
Ik heb ook alles een eenvoudige laag witte spuitverf gegeven om een uniforme kleurbasis te garanderen, maar ik weet niet zeker of dit echt nodig was.
Stap 6: Lijm LED-strips
Voordat u begint met het aanbrengen van lijm op de LED's, kunt u beginnen met een nieuwe strip of tellen hoeveel LED's u in totaal hebt. U moet uitrekenen hoeveel u later in de programmeerstap hebt gebruikt. Snij een gaatje in de zijkant van je wolk en prik door de draden die het begin van je ledstrip vormen in de wolkenholte. Wees zeer voorzichtig dat u aan het correcte einde begint - de LED-strips zijn richtingsgevoelig, zorg er dus voor dat de signaalpijlen weg wijzen van de holte.
Werk langzaam en plak de LED-pixels in een cirkelvormig patroon op de polystyreenbasis voordat u de strip naar beneden trekt om de onderkant te bedekken. Nogmaals - je hoeft hier niet perfect te zijn, want zodra we alles hebben verspreid en het hebben verstikt met vulling, ziet het er toch allemaal nogal verbluffend uit.
Ik gebruikte in totaal 85 LED's, of iets meer dan 2,5 m, heb de hoofdbehuizing twee keer omcirkeld en gebruikte een enkele reeks LED's aan de onderkant.
Stap 7: Bedradingsschema
De bedrading is complex, maar kan gemakkelijk worden opgesplitst in secties.
Zorg er eerst voor dat de voeding is aangesloten en vastgezet, bij voorkeur in een afzonderlijke projectbehuizing. Ik ga je geen les geven over de veiligheid van AC-draden onder spanning, dus ik ga ervan uit dat je dit gedeelte aankan, en je hebt er een 5V- en een GND-regel van.
BELANGRIJK: bij het programmeren en testen van de Arduino, moet de 5V van je voeding geïsoleerd blijven van de Arduino's (de GND's zijn allemaal verbonden, hoewel) - het zou alleen de LED-strip moeten voeden, terwijl de Arduino de 5V gebruikt die wordt geleverd via USB. Wanneer je klaar bent met programmeren, moet de USB worden losgekoppeld en niet langer 5V leveren aan de Arduino - op dit punt moet je de 5V van je voeding verbinden met de 5V-rail aan de linkerkant van het breadboard.
Begin met het verbinden van de grond en 5V-pennen van elke Arduino met de linkerzijrails van het breadboard. Ze zullen dezelfde voedingsbron delen, of dat nu de externe PSU is die we hebben of USB op een van deze aangesloten is.
Voltooi vervolgens de I2C-bedradingssectie - dit is wat onze twee Arduino's in staat stelt om te communiceren. Neem de A4-pinnen van beide Arduino's op een enkele rij op het breadboard en sluit vervolgens een 2,2k-weerstand van die rij aan op een 5V-rail. Herhaal dit voor A5 en verbind ze op een aparte rij, met nog een andere 2,2k-weerstand tot 5V.
Sluit de IR-ontvanger vervolgens aan - controleer de pinconfiguratie als u een ander model hebt, maar in principe moet de signaalpen naar D11 gaan op een Arduino. Upload de thundercloud_ir_receiver.ino schets naar deze Arduino (alle code hier) en koppel vervolgens de USB los, omdat we deze niet langer nodig hebben.
Aan de andere Arduino, sluit de Gegevens in signaalpen vanaf het begin van uw ledstrip tot D6. De GND van je LED's moet hetzelfde zijn voor alle Arduinos, maar op dit punt komt de 5V rechtstreeks van de PSU.
Sluit ook de microfoonmodule op deze Arduino aan op A0. Upload de andere thundercloud.ino schets, en houd de USB aangesloten voor nu terwijl u debugt. Begin met het veranderen van de NUM_LEDS variabele geschikt.
Stap 8: Lijmen op de vulling
Als laatste stap lijm je je vulling vast. Er is geen specifieke techniek hier: spuit de wolk gewoon in met een laag lijm en pak een handvol vol vulling. Het is makkelijker om met vulling te werken als je het al hebt gepest om het oppervlak te vergroten.
Als je dezelfde afstandsbediening hebt gebruikt als ik, zet de STROBE-knop het in de reactieve cloud-modus; FLASH is de trippy-kleurmodus en FADE is de langzaam oplopende stemmingslamp in kleur.
Stap 9: Code Toelichting
Waarom twee Arduinos? Zowel de programmering van de infraroodontvanger als de WS2818B-pixeldriverbibliotheek zijn erg gevoelig voor timing - als de timing wordt vertraagd, is het IR-signaal beschadigd. Door elk circuit zijn eigen microcontroller te geven en hen over het I2C-protocol te laten praten, kunnen we ervoor zorgen dat de timing perfect is voor elk circuit. Je kunt ook afzonderlijke IR-modules vinden met hun eigen micro-controller ingebouwd, maar mijn onderzoek wees uit dat die eigenlijk meer kosten dan een simpele Arduino-kloon en IR-LED. De thundercloud_ir_receiever zou geen uitleg behoeven, hoewel je misschien eerst de I2C-beginselen wilt lezen.
Op de hoofdwolk van de onweerswolk definiëren we verschillende bedieningsmodi, zoals AAN (de bliksemeffecten worden niet geactiveerd), CLOUD (de bliksem is alleen geluid geactiveerd), ACID (de wolk vertoont trippy-kleuren) of eenvoudige enkele kleurmodi. Om een nieuwe modus te definiëren, voegt u toe aan enum open eerst de console en zoek een knop voor afstandsbediening om hem in kaart te brengen - elke externe pers moet een foutopsporingslijn afdrukken. In de receiveEvent () methode, brengen we die toetsaanslagen in een modus in kaart, dus voeg daar een extra schakelinstructie toe. Eindelijk, in hoofdzaak lus() methode leiden we die modusselecties naar verschillende weergavefuncties.
De microfoonafvlakkingscode komt oorspronkelijk van Adafruit - ik vereenvoudigde het voor onze behoeften en voegde een trigger toe wanneer een luider dan gemiddeld geluid hoorbaar was.
Stap 10: Bliksemmodi
De bliksemafbeeldingen combineren drie verschillende “types” van bliksem om iets te bereiken dat voldoende realistisch is, of op zijn minst een lust voor het oog. Het eerste type is barst(), waar elke LED kort wordt ingeschakeld voor tussen de 10-100ms. Het tweede type is walsen () - waarbij elke LED een kans van 10% heeft om te activeren, en de hele lus wordt 2-10 keer herhaald, met een vertraging van 5-100 ms tussen elke cyclus. Het derde type is thunderburst (), waarbij twee verschillende secties van de strip, elk tussen 10-20 LED's, worden geselecteerd, knipperen deze secties kort van 3-6 keer. Bestudeer deze methoden in detail om te zien hoe afzonderlijke LED's worden geactiveerd - het HSV-kleurenwiel wordt overal gebruikt (dus wit is H = 0, S = 0, V = 255). Ik zou je willen aanmoedigen om nieuwe bliksemafbeeldingen te tweaken of te schrijven en deze dan in de comments te delen als je er een maakt die je leuk vindt.
Telkens wanneer de bliksem wordt geactiveerd of de lus wordt uitgevoerd, kiest de cloud willekeurig tussen de drie soorten bliksem. Eindelijk, a reset () methode schakelt alle lichten uit, anders zullen ze “onthouden” hun vorige staat.
Vragen of problemen - neem contact op met de opmerkingen en ik zal mijn best doen om te helpen. Als je een Github-account hebt, kun je in plaats daarvan bugs of problemen plaatsen bij de issue-tracker. Als je wijzigingen hebt aangebracht of een aantal nieuwe verlichtingsfuncties hebt geschreven, deel dan een link naar je code op Gist of Pastebin.
Ontdek meer over: Arduino, Smart Lighting.