Innehållsförteckning:

Handgjord Arduino-driven RGB Moodlamp: 7 steg
Handgjord Arduino-driven RGB Moodlamp: 7 steg

Video: Handgjord Arduino-driven RGB Moodlamp: 7 steg

Video: Handgjord Arduino-driven RGB Moodlamp: 7 steg
Video: #7 Ардуино: RGB светодиод! 2024, Juli
Anonim
Handgjord Arduino-driven RGB Moodlamp
Handgjord Arduino-driven RGB Moodlamp
Handgjord Arduino-driven RGB Moodlamp
Handgjord Arduino-driven RGB Moodlamp

Denna instruerbara är uppdelad i 5 delar:- Planering av konstruktionen (Steg1)- Den handgjorda nyansen (Steg2+3)- Den elektroniska kretsen för att driva 3W-lysdioder med ATmega8-styrenheten (Steg4)- Koden (Steg5)- Hur man får det fristående (blinka Arduino-startladdaren med PonyProg och bränn skissen) (Steg 6) kommer snart Vid: Some Impressions

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: En mäktig 3W LED

Steg 1: Planera konstruktionen:

Planera bygget
Planera bygget
Planera bygget
Planera bygget

Jag älskar att göra ett koncept på bara ett pappersark. På det första arket ser du några tidiga idéer. Jag valde den nedre högra designen. Den andra sidan visar några detaljer för konstruktionen. Mätningar är experimentella som varje gång, men ok för mig;-) Mina hårdvarutankar var:- Kan jag hantera materialen?- Kommer ljuset att lysa genom skuggan? - Hur stor andel ska den ha? - Hur många knoppar och krukor behöver jag för ett enkelt gränssnitt? Mina programvarutankar var: Hur många olika funktioner ska lampan ha? - Automatisk RGB -blekning med utbytbar hastighet - Manuell färgjustering - Vit med justerbar ljusstyrka

Steg 2: Den handgjorda skuggan

Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan

Samla ihop materialen: Skuggan: Jag hittade ett ark på 30 fot x 3 fot av 30 kvarn plast i butiken (Pic1-3). Använd en skarp kniv för att skära den. Jag frostade plasten med sandpapper (Pic4-6). Till få en slät cylinder Jag skruvade ihop allt efter att ha borrat de rätta hålen (Pic7-8). Montera plastskärmarna på de gängade mässingsstöden. Det ser snyggt ut och är ganska lätt att få och hantera. Jag borrade och knackade på hålen för att matcha den 1/8 gängade stången (Pic9-10). Samtidigt gjorde jag en kylfläns för att kyla ner 3W lysdioderna och för att ha en solid bas. För att få för många nyanser från axeln bygger jag en liten bur från svetsstång med en M8 -mutter på toppen (Pic12). De små skruvarna och muttrarna var lite knepiga, men 30 minuter senare fick jag det gjort.

Steg 3: Den handgjorda skuggan

Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan
Den handgjorda skuggan

Basen: Skivorna chuckades i svarven för att få den slät och rund. Efteråt färgade jag den med en mahogny träfläck så att tallarna skulle se bra ut. Vad nästa?!? Jag bestämde mig för att göra en bas med samma frostad plast som skugga, och bakgrundsbelysning med en RGB microLED (Pic5). Knapparna: Jag gjorde knappen av en bit mahogny och knopparna från ett snitt av nötved.

Steg 4: Den elektriska kretsen:

Den elektriska kretsen
Den elektriska kretsen
Den elektriska kretsen
Den elektriska kretsen
Den elektriska kretsen
Den elektriska kretsen

På den första bilden ser du min schemat. Och här är en annan video: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Steg 5: Koden:

Koden
Koden
Koden
Koden
Koden
Koden

På bilderna ser du min process med Arduino. Först försökte jag runt med mitt självgjorda ProtoShield, ett batteri och några slags lysdioder. Jag började med "Spooky Projects" och "BionicArduino" av TodEKurt för några månader sedan. Http://todbot.com/blog/spookyarduino/Min kod är bara en knepig kombination av hans projektkod. "RGBMoodlight", "RGBPotMixer" och några tillägg. Tre analog-in och. en digital-in som lägesomkopplare (Tack till Ju. för avbrottsrutinen:). Lysdioderna är anslutna till D9, D10 och D11 som stöder PulseWithModulation. Om du vill kan jag publicera skissen, men det är en riktigt kombination av dessa två fantastiska koder. Här är min ursprungliga kod för lampan. Det ser lite rörigt ut, för det var min mycket tidigt i programmeringen … Men om du kopierar det, borde det fungera bra. Det finns fina peaces, som "PotColorMixer", "RGBfadingFunction" och Interrupt-Routine för mode- switch./* nejo juni2008

Kod för min "Moodlamp", baserad på "dimmingLEDs" av Clay Shirky

*nejo september 2008

  • Slutkod för stämningslampan med avbrottslägesomkopplare, analog snabbvalsnummer för RGB-blekning och RGB-färgändring.
  • Dämpningsfunktionen fungerar bara för den vita färgen

*nejo oktober 2008

  • Ljudförlängning för humörlampan:
  • En kondensormikrofon med en liten LM368 Amp, en mottagare och ett RC-lågpassfilter
  • med en annan analog ingång använder jag RGBPotMixer-funktionen för att ändra färg genom att få mikrofonen.

* * * Kod för kryssfading 3 lysdioder, röda, gröna och blåa eller en trefärgade lysdioder med PWM

  • Programmet korsar långsamt från rött till grönt, grönt till blått och blått till rött
  • Debugging-koden förutsätter Arduino 0004, eftersom den använder de nya funktionerna i Serial.begin ()-stil
  • ursprungligen "dimmingLEDs" av Clay Shirky

*

  • AnalogRead är aktiverat på Pin A0 för att variera RGB -blekningshastigheten
  • AnalogRead är aktiverat på Pin A2 för att variera färgtonen

* * */#inkluderar // Outputint ledPin = 13; // controlPin för debuggingint redPin = 9; // Röd LED, ansluten till digital pin 9int greenPin = 10; // Grön LED, ansluten till digital pin 10int bluePin = 11; // Blå LED, ansluten till digital stift 11int dimredPin = 3; // Stift för det analoga dimningsvärdet, anslutet till transistordrivrutinen dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // switch är ansluten till pin D2int val = 0; // variabel för att läsa pin -statusint buttonState; // variabel för att hålla knappen stateint buttonPresses = 0; // 3 tryck för att gå! Int potPin0 = 0; // Gryta för att justera fördröjningen mellan blekning i Moodlamp; int potPin2 = 2; // Potentiometerutgång för ändring av hueRGB colorint potVal = 0; // Variabel för att lagra ingången från potentiometerint maxVal = 0; // värde för att spara dimningsfaktorn standard är 255, om ingen Pot är anslutenint dimPin = 4; // Gryta ansluten till A4 för att dämpa ljusstyrkan // Programvariabler i redVal = 255; // Variabler för att lagra de värden som ska skickas till pinsint greenVal = 1; // Initiala värden är röd full, grön och blå offint blueVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50ms (.05 sekund) fördröjning; förkorta för snabbare fadesint k = 0; // värde för controlLED i blink-funktionen DEBUG = 0; // DEBUG -räknare; om den är inställd på 1, kommer värdena att skrivas tillbaka via serialint LCD = 0; // LCD -räknare; om den är inställd på 1, kommer värdena att skrivas tillbaka via serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // ställer in stiften som output pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // anger stiften som output pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Ställ in omkopplingsstiftet som input attachInterrupt (0, isr0, RISING); if (DEBUG) {// Om vi vill se pin -värdena för felsökning … Serial.begin (9600); // … konfigurera den seriella utgången på 0004 -stil}} // Huvudprogramrörslinga () {if (buttonPresses == 0) {Moodlamp (); // kallar Moodlight -funktionen} if (buttonPresses == 1) {RGBPotMixer (); // kallar funktionen manuell mix} om (knapptryckningar == 2) {Vit (); // Det är helt vitt här} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Vit(); Övervaka(); dim ();} void Monitor () {// Send State to the monitor if (DEBUG) {// If we want to read the output DEBUG += 1; // Öka DEBUG -räknaren om (DEBUG> 10) {// Skriv ut var tionde loop DEBUG = 1; // Återställ räknaren Serial.print (i); // Seriekommandon i 0004 -stil Serial.print ("\ t"); // Skriv ut en flik Serial.print ("R:"); // Ange att utdata är rött värde Serial.print (redVal); // Skriv ut rött värde Serial.print ("\ t"); // Skriv ut en flik Serial.print ("G:"); // Upprepa för grönt och blått … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, för att avsluta med en vagnretur Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, för att avsluta med en vagnretur Serial.print ("\ t"); Serial.print ("vänta:"); Serial.print (vänta); // skriver värdet på potPin0 till bildskärmen Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // skriver värdet på potPin0 till bildskärmen Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // skriver värdet på potPin0 till bildskärmen Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (knapptryckning); // skriver knappens värdeTrycker till monitorn}}} void dim () // Funktion för dimning Vit // kanske senare för alla lägen {maxVal = analogRead (dimPin); maxVal /= 4; // Analogt område från 0..1024 för mycket för att dimma värdet 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // leta efter värdet från potPin0; // om ingen pott är ansluten: vänta 255 i += 1; // Inkrementräknare // i = i - maxVal; om (i <255) // Första fasen av blekning {redVal -= 1; // Red down greenVal += 1; // Grön upp blueVal = 1; // Blå låg} annars om (i <509) // Andra fasen av blekning {redVal = 1; // Röd låg greenVal -= 1; // Grön ner blueVal += 1; // Blå upp} annars om (i <763) // Tredje fasen av blekning {redVal += 1; // Red up greenVal = 1; // Grön lo2 blueVal -= 1; // Blå ner} annars // Ställ in räknaren igen och börja blekningen igen {i = 1; } // vi gör "255 -redVal" istället för bara "redVal" eftersom // LED: erna är anslutna till +5V istället för Gnd analogWrite (redPin, 255 - redVal); // Skriv nuvarande värden till LED -stift analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // dimning dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = min (blueVal - maxVal, 255); dimblueVal = max (blueVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // Skriv nuvarande värden till LED -stift analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / vänta / = 4; fördröjning (vänta); // Pausa "vänta" millisekunder innan loop återupptas} void RGBPotMixer () {potVal = analogRead (potPin2); // läs potentiometervärdet vid ingångsstiftet potVal = potVal / 4; // konvertera från 0-1023 till 0-255 hue_to_rgb (potVal); // behandla potVal som nyans och konvertera till rgb-vals // "255-" beror på att vi har gemensamma-anod-lysdioder, inte common-cathode analogWrite (redPin, 255-redVal); // Skriv värden till LED-stift analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Skriv värden till LED -stift analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Med en variabel nyans 'h', som sträcker sig från 0-252,
  • ställ in RGB -färgvärde på lämpligt sätt.
  • Antar maxValimum Saturation & maximum Value (ljusstyrka)
  • Utför rent heltal, ingen flytpunkt.

*/void hue_to_rgb (byte nyans) {if (nyans> 252) nyans = 252; // stetback till 252 !! nejo byte hd = nyans / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd % 6; // ger 0-5 byte f = nyans % 42; byte fs = f * 6; switch (hi) {case 0: redVal = 252; greenVal = fs; blueVal = 0; ha sönder; fall 1: redVal = 252-fs; greenVal = 252; blueVal = 0; ha sönder; fall 2: redVal = 0; greenVal = 252; blueVal = fs; ha sönder; fall 3: redVal = 0; greenVal = 252-fs; blueVal = 252; ha sönder; fall 4: redVal = fs; greenVal = 0; blueVal = 252; ha sönder; fall 5: redVal = 252; greenVal = 0; blueVal = 252-fs; ha sönder; }} void isr0 () {Serial.println ("\ n / n oavbruten / n"); buttonState = digitalRead (switchPin); // läs initial state delayMicroseconds (100000); // if (val! = buttonState) {// knappen har ändrats! // if (buttonState == HIGH) {// kontrollera om knappen nu trycks in knappen trycker på ++; //} // val = buttonState; // spara det nya tillståndet i vår variabel om (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Nästa steg var transistordrivrutinerna. Jag använde 3 PNP -transistorer med maximal ström på 3Ampere. Efter att framström och spänning reglerats fungerade LED-sändaren utmärkt med full intensitet.

Steg 6: Få det fristående med PonyProg-bränd bootloader

Få det fristående med PonyProg-bränd bootloader
Få det fristående med PonyProg-bränd bootloader

Hur du använder din parallellport för att bränna arduino bootloader på en ATmega168 eller ATmega8 för att använda ett billigt tomt chip med arduino -miljön. Snart ….. kanske på en separat instruerbar Här är också en bra instruerbar att använda chipet fristående: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Steg 7: Så det är min Arduino humörlampa

Så det är min Arduino humörlampa
Så det är min Arduino humörlampa

Om du gillade det, snälla betygsätt mig.

Rekommenderad: