Innehållsförteckning:
- Steg 1: Planera konstruktionen:
- Steg 2: Den handgjorda skuggan
- Steg 3: Den handgjorda skuggan
- Steg 4: Den elektriska kretsen:
- Steg 5: Koden:
- Steg 6: Få det fristående med PonyProg-bränd bootloader
- Steg 7: Så det är min Arduino humörlampa
Video: Handgjord Arduino-driven RGB Moodlamp: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:47
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:
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
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
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:
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:
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
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
Om du gillade det, snälla betygsätt mig.
Rekommenderad:
Handgjord legering av låg smältpunkt: 5 steg
Handgjord låglegeringslegering: Gör den låga smältpunktslegeringen för enkel avlödning. Besök min blogg.MaterialsBismuth Metal 2.5g63/37 Rosin Core Solder 2.5g
Circuit Playground Express (CPE) Handgjord tyg: 5 steg
Circuit Playground Express (CPE) Handgjord tyg: I denna Instuctable får du stegen för att koda din Circuit Playground Express (CPE) mikrokontroller med MakeCode och göra en tote av en flanellskjorta och annat tyg. Det finns gott om utrymme för tolkning och innovation! Vad kommer du att utveckla
Handgjord billaddare: 7 steg
Hand Made Car Charger Socket: Under vår senaste semester i Norge hyrde vi en skåpbil som skulle användas som husbil; i denna grova bostad saknas en " lyx " var frånvaron av en USB-laddningspunkt på baksidan av skåpbilen, dvs i sovdelen, drivs även i nyckelknapp
Handgjord IR -fjärrkontroll: 5 steg (med bilder)
Handgjord IR -fjärrkontroll: I mitt tidigare projekt använde jag den här enheten som en IR -sändare och lovade att ladda upp denna projektbeskrivning i nästa instruktioner.Så här presenterar jag dig IR -sändare med 555 timer. flera
Moire LASER -effekt med en handgjord laser: 4 steg
Moire LASER -effekt med en handgjord laser: Här nedan är en fotografering av denna effekt, ibland tappar effekten på väggen 90 grader från skärmen. Det är mycket imponerande !. Det har inte och kan inte komma tillbaka till mig från medan du tittar, det är säkert att göra detta även om jag skulle rekommendera att