Handgjorda Arduino-powered RGB Moodlamp (5 / 7 steg)

Steg 5: Kod:



På bilderna du ser min process med Arduino. För det första försökte jag runt med min selfmade ProtoShield, ett batteri och vissa typer av lysdioder.
Jag började med "Spooky projekt" 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 vissa tillägg.
Tre analog-i och.
en digital-i som mode-omkopplaren (tack vare Ju. för avbrott-rutin :).
Lysdioderna är anslutna till D9, D10 och D11 som stöder PulseWithModulation.

Om du vill, jag kan publicera skissen, men det är en riktigt kalt kombination av dessa två stora koder.

Här är min ursprungliga koden av lampan.
Det ser lite rörigt, eftersom det var min mycket tidigt stadium i programmering...
Men om du kopierar det, bör det fungera bra.

Det finns fina peaces, som "PotColorMixer", "RGBfadingFunction" och avbryta-rutin för mode-reglaget.

/ * nejo June2008

  • Koden för min "Moodlamp", baserad på "dimmingLEDs" av Clay Shirky < clay.shirky

* nejo Sep2008

  • Slutliga kod för moodlamp med avbrott-läge-switch, analog kortnummer för RGB-fading och RGB-färg ändras.
  • Mörkläggning-funktionen fungerar bara för den vita färgen

* nejo October2008

  • Ljud-förlängning för moodlamp:
  • En Kondensor mikrofon med en liten LM368 Amp, en recifier och ett RC-low-pass-filter
  • med en annan analogInput använder jag RGBPotMixer-funktionen för att ändra färg genom att få mic-signalen.

*
*
-Koden för toning 3 lysdioder, röd, grön och blå eller en tri-color LED, med PWM

  • Programmet cross-fades långsamt från rött till grönt, grönt till blått och blått till rött
  • Felsökning koden förutsätter Arduino 0004, eftersom den använder den nya Serial.begin ()-stil funktioner
  • Ursprungligen "dimmingLEDs" av Clay Shirky < clay.shirky

*

  • AnalogRead är aktiverad på Pin A0 att variera RGB blekning hastigheten
  • AnalogRead är aktiverad på Pin A2 att variera hueRGB färg

*
*
*/

#include < avr/interrupt.h >
Utgång
int ledPin = 13. controlPin för felsökning
int redPin = 9; Röd lysdiod, ansluten till digital pin 9
int greenPin = 10; Grön LED, ansluten till digital stift 10
int bluePin = 11; Blå LED, ansluten till digital stift 11

int dimredPin = 3; Stift för analog ljusreglering värde, ansluten till transistorn föraren
int dimgreenPin = 5;
int dimbluePin = 6;

Ingång
int switchPin = 2; Switch är ansluten till stift D2
int val = 0; variabel för att läsa pin status
int buttonState; variabel att hålla knappen staten
int buttonPresses = 0; 3 pressar att gå!
int potPin0 = 0; Potten för att justera fördröjningen mellan blekning i Moodlamp;
int potPin2 = 2; Potentiometer utgång ändra hueRGB färg
int potVal = 0; Variabel att lagra input från potentiometern
int maxVal = 0; värdet att spara ljusreglering faktor standard är 255, om ingen potten är ansluten
int dimPin = 4; Potten ansluten till A4 till dim ljusstyrkan

Programmet variabler
int redVal = 255; Variabler för att lagra värden att skicka till stiften
int greenVal = 1; Startvärdena är röda full, gröna och blå av
int blueVal = 1;

int jag = 0; Loop counter
int vänta; / / = 15. 50 ms (.05 sekund) försening. förkorta för snabbare bleknar
int k = 0; värde för den kontrollerade i blink-funktionen
int DEBUG = 0; FELSÖKA counter; om satt till 1, kommer skriva värden tillbaka via seriell
int LCD = 0; LCD counter; om satt till 1, kommer skriva värden tillbaka via seriell

void setup()
{
pinMode (ledPin, produktionen);
pinMode (redPin, produktionen); ställer in stiften som utgång
pinMode (greenPin, produktionen);
pinMode (bluePin, produktionen);
pinMode(dimredPin,OUTPUT);
pinMode(dimgreenPin,OUTPUT); ställer in stiften som utgång
pinMode(dimbluePin,OUTPUT);
pinMode (potPin2, ingång); //
pinMode (potPin0, ingång); //
pinMode (dimPin, ingång); //
pinMode (switchPin, ingång); Ställ switch stiftet som indata
attachInterrupt(0,isr0,RISING);

om (DEBUG) {/ / om vi vill se pin värden för felsökning...
Serial.BEGIN(9600); .. .set upp den seriella ouput på 0004 stil
}
}

Huvudprogrammet
void loop()
{

om (buttonPresses == 0) {
Moodlamp(); anropar funktionen Moodlight
}
om (buttonPresses == 1) {
RGBPotMixer(); anropar funktionen manuel mix
}
om (buttonPresses == 2) {

White(); Det är helt vitt här
}
om (buttonPresses == 3) {

}

Moodlamp();
RGBPotMixer();
White();

Monitor();
Dim();
}
void Monitor() {/ / skicka staten till bildskärmen

om (DEBUG) {/ / om vi vill läsa utdata
DEBUG + = 1; Ökar värdet för räknaren DEBUG
om (FELSÖKA > 10) {/ / Skriv ut varje 10 varv
FELSÖKA = 1; Nollställa räknaren
Serial.Print(i); Seriella kommandon i 0004 stil
Serial.Print("\t"); Skriva ut en flik
Serial.Print("R:"); Ange att utdata är röd värde
Serial.Print(redVal); Skriva ut röd värde
Serial.Print("\t"); Skriva 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, att avslutas med en radmatning
Serial.Print("\t");
Serial.Print("dimValue:");
Serial.Print(maxVal); println, att avslutas med en radmatning
Serial.Print("\t");
Serial.Print("Wait:");
Serial.Print(Wait); skriver värdet av potPin0 till bildskärmen
Serial.Print("\t");
Serial.Print("hueRGBvalue");
Serial.Print(potVal); skriver värdet av potPin0 till bildskärmen
Serial.Print("\t");
Serial.Print("buttonState:");
Serial.Print(buttonState); skriver värdet av potPin0 till bildskärmen
Serial.Print("\t");
Serial.Print("buttonPresses:");
Serial.println(buttonPresses); skriver värdet av buttonPresses till bildskärmen

}
}
}

void dim() / / funktion för ljusreglering vit / / kanske senare för alla lägen
{
maxVal = analogRead(dimPin);
maxVal = 4. Analoga utbud från 0..1024--> för mycket för ljusreglering 0..255 värdet
analogWrite(dimredPin,maxVal);
analogWrite(dimgreenPin,maxVal);
analogWrite(dimbluePin,maxVal);

}

void Moodlamp()
{
vänta = analogRead(potPin0); Leta efter värdet från potPin0;
om ingen potten är ansluten: vänta 255

Jag + = 1; Increment counter
jag = i - maxVal;
om (jag < 255) / / första fasen av bleknar
{
redVal-= 1; Red ner
greenVal + = 1; Grön upp
blueVal = 1; Blå låg
}
annars om (jag < 509) / / andra fasen av bleknar
{
redVal = 1; Röd låg
greenVal-= 1; Grön ner
blueVal + = 1; Blå upp
}
annars om (jag < 763) / / tredje fasen av bleknar
{
redVal + = 1; Red upp
greenVal = 1; Gröna lo2
blueVal-= 1; Blå ner
}
annat / / åter-ställa räknaren, och starta bleknar igen
{
Jag = 1;
}

Vi gör "255-redVal" i stället för bara "redVal" eftersom den
Lysdioder är hooked upp till + 5V istället för Gnd

analogWrite (redPin, 255 - redVal); Skriv aktuella värden till LED stift
analogWrite (greenPin, 255 - greenVal);
analogWrite (bluePin, 255 - blueVal);

/ * dimredVal = min (redVal - maxVal, 255); ljusreglering
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 aktuella värden till LED stift
analogWrite (greenPin, 255 - dimgreenVal);
analogWrite (bluePin, 255 - dimblueVal);
*/

vänta / = 4.
Delay(Wait); Paus för "vänta" millisekunder innan återuppta slingan

}

void RGBPotMixer()
{
potVal = analogRead(potPin2); Läs potentiometer vä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-" är att vi har gemensamma-anod lysdioder, inte common-katod
analogWrite (redPin, 255-redVal); Skriva värden till LED stift
analogWrite (greenPin, 255-greenVal);
analogWrite (bluePin, 255-blueVal);

}

void White() {
analogWrite (redPin, maxVal); Skriva värden till LED stift
analogWrite (greenPin, maxVal);
analogWrite (bluePin, maxVal);
}

/*

  • Med tanke på en variabel nyans "h", som sträcker sig från 0-252,
  • rätt inställda RGB-färgvärde.
  • Utgår från maxValimum mättnad & högsta värde (ljusstyrka)
  • Utför rent heltal matte, ingen flyttal.

*/
void hue_to_rgb(byte hue)
{
om (nyans > 252) nyans = 252; stetback till 252! nejo
byte hd = hue / 42; 36 == 252/7, 252 == H_MAX
byte Hej = hd % 6. ger 0-5
byte f = hue % 42.
byte fs = f * 6.
Växla (Hej) {
fall 0:
redVal = 252; greenVal = fs; blueVal = 0;
bryta;
fall 1:
redVal = 252-fs; greenVal = 252; blueVal = 0;
bryta;
fall 2:
redVal = 0; greenVal = 252; blueVal = fs;
bryta;
fall 3:
redVal = 0; greenVal = 252-fs; blueVal = 252;
bryta;
fall 4:
redVal = fs; greenVal = 0; blueVal = 252;
bryta;
fall 5:
redVal = 252; greenVal = 0; blueVal = 252-fs;
bryta;
}
}
void isr0() {
Serial.println ("\n \n inerrupt \n");

buttonState = digitalRead(switchPin); Läs det ursprungliga tillståndet
delayMicroseconds(100000);
om (val! = buttonState) {/ / knappen staten har förändrats!

om (buttonState == hög) {/ / kolla om knappen trycks nu
buttonPresses ++;

// }
Val = buttonState; spara den nya staten i våra variabel
om (buttonPresses == 3) {/ / zur cksetzen
buttonPresses = 0;
}
}

// }

Nästa steg var transistor-drivrutinerna. Jag använde 3 PNP transistorer med en maximal ström på 3 Ampere. Efter framåt-ström och spänning reglerades, fungerade LEDemitter bra med full intensitet.

Se Steg
Relaterade Ämnen

Arduino Powered RGB humör lampa plus Simon

detta är grunden en arduino powered RGB humör lampa plus simon says spel, två i ett.Hur man använder: Enheten börjar med RGB humör lampa standardprogram, när du trycker på någon av de fyra knapparna längst ner, säger Simon spelet startar. När du tryc...

Arduino Powered RGB LED Vodka hylla

detta instructable kommer du igång att göra ditt eget arduino powered röd grön och blå LED-projekt. Det behöver inte ens vara en hylla! Vodka flaskor råkar bara lysa upp fint så det är vad jag valde att göra.I detta projekt använder vi varje stift på...

Arduino Powered infraröd sak

Hej, detta är min första instructible. Jag kommer att visa dig hur man gör en arduino powered analog sensor läsare (jag kommer att använda en infraröd fotodiod).Steg 1: delar Du behöver flera saker att göra detta:1. någon form av fallet eller låda2....

Arduino Powered Gainclone (förstärkare)

för er som inte vet (och jag inte förrän nyligen), en Gainclone är en förstärkare som är en klon av den ursprungliga utformningen av en förstärkare av 47 Labs kallas en Gaincard och är baserade på enkel flisa förstärkare av National Semiconductor - n...

Ett trådlöst kontrollerade, Arduino-Powered anslagstavla

bygga själv en trådlöst styrd, Arduino-powered anslagstavla!Här är ett enkelt projekt som skapar en trådlöst programmerbart anslagstavla. XBee moduler använder för att ge en trådlös seriell länk mellan datorn och enheten. Du interagerar med den via e...

Arduino-Powered binära termometer

jag nyligen förvärvat en Arduino Uno och letade efter en cool "komma igång" projekt. Jag beslöt att göra en termometer, som satsen har jag haft alla nödvändiga delar (termistor, sladdar, motstånd, lysdioder). Genom ett par iterationer, jag äntli...

Arduino Powered uppvärmd handske Liners

Arduino Powered uppvärmda handskarDetta projekt är om hur att göra världens smartaste uppvärmd handske liners för extremt kalla förhållanden som de i Minnesota eller människor som har Raynauds syndrome(like me). Dessa handskar kommer förses du med ti...

Arduino-powered LED klocka

En rolig, enkel LED-klocka, som ger dig tiden till den närmaste halvtimmen med hjälp av enfärgade lysdioder. Delar som behövs är följande:Arduino Nano400 tie-punkt skärbrädaBandkabelDS1307 RTC IC32.768 kHz Crystal(12) 10mm lysdioder(12) 180 Ohm motst...

Arduino Powered Homecoming mamma

Bor i Texas, kan inte du fly galenskap runt Homecoming mamma traditionen. Den traditionen startade på 1960-talet med pojkar att ge deras hemkomst datum krysantemum lätt dekorerad med band. Emellertid, som med alla saker i Texas, ju större desto bättr...

Arduino powered Halloween pumpa med rörelsedetektor

Hejdetta Instructable visar dig hur man gör några Halloween dekorationer inklusive arduino powered Halloween pumpa med rörelsedetektor.Steg 1: Göra Halloween pumpa Material:Rund ballongGamla tidningarSmidig mjölVattenTemperaModellering leraSuperlimVe...

Acrylic fisk Tank med Arduino-Powered mataren

Har du någonsin velat ett mer händer på känsla när får en fisk? Eller ville ha något annat än de genomsnittliga akvarier finns i butiker? Denna fisk tank är helt anpassad och kan ändras för att passa din storlek behov och har en Arduino powered feede...

Att göra en Arduino Powered gardin Automation

I den här videon börja jag arbeta på visar dig hur man gör en Arduino Powered enhet som kommer att öppna och stänga gardiner!Med hjälp av några rep och en kontinuerlig rotation servo jag kan skapa en trissa system som fungerar som stamnät till rörels...

3 kanal arduino Powered Christmas Light Controller!

För julen i år, jag ville göra ett riktigt häftigt projekt men inte riktigt vet vad man ska göra. Som jag fick julen ljus ut att dekorera, var det en gammal trasig Christmas light timer. Jag tog isär och tittade på lågspänning kretsen. Innan detta ha...

Solar-orienterade, Arduino-Powered klockan

detta är en klocka för att hålla exakt tid (oberoende av atom eller GPS), Visa lokala soluppgång, solnedgång och solar, och även justera sig för sommartid.Jag ville ha klockan för att vara lätt att använda och vara flexibel. Funktionerna som inställn...

Arduino Powered raket styrsystemet

detta är min första Instructable så bär med mig.Detta är en Arduino Powered raket vägledning System. Jag skickade in detta för Google Global Science Fair. Min science projekt är på https://sites.google.com/site/arduinorocket/ . Det tog mig tre månade...

Arduino powered RC tank

detta är min första instructable så snälla ha tålamod med mig. Mitt namn är Stanley Deakins och jag har spelat med elektronik ganska länge, men det var år sedan. På grund av min senaste anställning har jag återuppväcka denna passion. Jag har fått min...

Arduino Remote RGB ledde av Visual Basic

KravEn Arduino (jag använder Arduino Uno)Visual Basic Express 2010 du kan hämta VB från härRGB LedSteg 1: Skapa programI detta instructable, vi kommer att göra ett program för att kontrollera RGB ledde.Följ följande steg:Klicka på nytt projektVälj ny...

Nattliga utsläpp: Min Arduino Powered Internet aktiverat dröm Generator

måste vi alla drömmer mer så jag har skapat denna Arduino Powered "dream generator" för att plantera frön för några stora tänkande galenskap. När du närmar dig generatorn en Maxbotix ultrasonic sensor utlöser ljus och musik som drar du i så du k...

Hur man bygger en Arduino Powered Chess spela Robot

att döma av det stora antalet schack relaterade Instructables, jag tycker det är säkert att säga gemenskapen åtnjuter spelet. Det kan dock vara svårt, att hitta någon som spelar på samma nivå som du gör. Att lösa detta dilemma, och att öka min spela...