Innholdsfortegnelse:

Håndlaget Arduino-drevet RGB humørlampe: 7 trinn
Håndlaget Arduino-drevet RGB humørlampe: 7 trinn

Video: Håndlaget Arduino-drevet RGB humørlampe: 7 trinn

Video: Håndlaget Arduino-drevet RGB humørlampe: 7 trinn
Video: Håndlaget norsk sjokolade 2024, Juli
Anonim
Håndlaget Arduino-drevet RGB humørlampe
Håndlaget Arduino-drevet RGB humørlampe
Håndlaget Arduino-drevet RGB humørlampe
Håndlaget Arduino-drevet RGB humørlampe

Denne instruksjonsdelen er delt inn i 5 deler:- Planlegging av konstruksjonen (trinn 1)- Den håndlagde skyggen (trinn 2+3)- Den elektroniske kretsen for å drive 3W lysdioder med ATmega8-kontrolleren (trinn 4)- koden (trinn 5)- hvordan du får det frittstående (blink Arduino-opplastingsprogrammet med PonyProg og brenn skissen) (trinn 6) kommer snart Vid: Some Impressions

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: En mektig 3W LED

Trinn 1: Planlegging av konstruksjonen:

Planlegger konstruksjonen
Planlegger konstruksjonen
Planlegger konstruksjonen
Planlegger konstruksjonen

Jeg elsker å lage et konsept på bare ett ark. På det første arket ser du noen tidlige ideer. Jeg valgte designet nederst til høyre. Den andre siden viser noen detaljer for konstruksjonen. Målingene er eksperimentelle som hver gang, men ok for meg;-) Mine maskinvaretanker var:- Kan jeg håndtere materialene?- Vil lyset skinne gjennom skyggen? - Hvilken andel skal den ha? - Hvor mange knapper og potter trenger jeg for et enkelt grensesnitt? Mine tanker om programvaren var: Hvor mange forskjellige funksjoner skulle lampen ha? - Automatisk RGB -fading med endringshastighet - Manuell fargejustering - Hvit med justerbar lysstyrke

Trinn 2: Den håndlagde skyggen

Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen

Samle materialene: Skyggen: Jeg fant et 3 fot x 3 fot ark av 30 mill plast i butikken (Pic1-3). Bruk en skarp kniv for å kutte den. Jeg frostet plasten med sandpapir (Pic4-6). Til få en glatt sylinder Jeg skrudde alt sammen etter å ha boret de riktige hullene (Pic7-8). Monter plastskjermene på gjengede messingstøtter. Det ser pent ut og er ganske enkelt å få tak i. Jeg boret og banket på hullene for å passe til den 1/8 gjengede stangen (Pic9-10). I mellomtiden laget jeg en kjøleribbe for å kjøle ned 3W-lysdiodene og ha en solid base. For å få for mange nyanser fra akselen, bygger jeg et lite bur fra sveisestang med en M8 -mutter på toppen (Pic12). Som finish monterte jeg alt sammen. De små skruene og mutrene var litt vanskelige, men 30 minutter senere fikk jeg det gjort.

Trinn 3: Den håndlagde skyggen

Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen
Den håndlagde skyggen

Basen: Skivene ble hakket i dreiebenken for å få den glatt og rund. Etterpå beiset jeg den med en beis av mahognitre for å få furu til å se bra ut. Hva neste?!? Jeg bestemte meg for å lage en base med den samme frostet plast som skygge, og bakgrunnsbelys den med en RGB microLED (Pic5). Knottene: Jeg laget knappen av et stykke mahogni og knappene fra et avslag av nøttetre.

Trinn 4: Den elektriske kretsen:

Den elektriske kretsen
Den elektriske kretsen
Den elektriske kretsen
Den elektriske kretsen
Den elektriske kretsen
Den elektriske kretsen

På det første bildet ser du skjematikken min. Og her er en annen video: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Trinn 5: Koden:

Koden
Koden
Koden
Koden
Koden
Koden

På bildene ser du prosessen min med Arduino. For det første prøvde jeg rundt med mitt selvlagde ProtoShield, en batteripakke og noen slags lysdioder. Jeg begynte med "Spooky Projects" og "BionicArduino" av TodEKurt for noen måneder siden. Http://todbot.com/blog/spookyarduino/Min kode er bare en vanskelig kombinasjon av prosjektkoden hans. "RGBMoodlight", "RGBPotMixer" og noen utvidelser. Tre analog-inn og. én digital-in som modusbryter (Takk til Ju. for interrupt-rutinen:). Lysdiodene er tilkoblet til D9, D10 og D11 som støtter PulseWithModulation. Hvis du vil, kan jeg publisere skissen, men det er en virkelig kombinasjon av disse to flotte kodene. Her er den originale koden til lampen. Det ser litt rotete ut, fordi det var min veldig tidlig i programmeringen … Men hvis du kopierer det, burde det fungere bra. Det er fine peaces, som "PotColorMixer", "RGBfadingFunction" og Interrupt-Routine for mode- switch./* nejo June2008

Kode for min "Moodlamp", basert på "dimmingLEDs" av Clay Shirky

*nejo september 2008

  • Endelig kode for stemningslampen med avbryter-modus-bryter, analogt hurtigvalg for RGB-fading og RGB-fargeendring.
  • Dimmefunksjonen fungerer bare for den hvite fargen

*nejo oktober 2008

  • Lydforlengelse for stemningslampen:
  • En kondensatormikrofon med en liten LM368 Amp, en mottaker og et RC-lavpassfilter
  • med en annen analogInput bruker jeg RGBPotMixer-funksjonen til å endre fargen ved å hente mikrofonsignalet.

* * * Kode for kryssfading 3 lysdioder, rød, grønn og blå, eller en trefarget LED, ved bruk av PWM

  • Programmet krysser langsomt fra rødt til grønt, grønt til blått og blått til rødt
  • Debugging-koden forutsetter Arduino 0004, ettersom den bruker de nye funksjonene i serien Serial.begin ()
  • opprinnelig "dimmingLEDs" av Clay Shirky

*

  • AnalogRead er aktivert på Pin A0 for å variere RGB -fadinghastigheten
  • AnalogRead er aktivert på Pin A2 for å variere hueRGB -fargen

* * */#inkluderer // Outputint ledPin = 13; // controlPin for debuggingint redPin = 9; // Rød LED, koblet til digital pin 9int greenPin = 10; // Grønn LED, koblet til digital pin 10int bluePin = 11; // Blå LED, koblet til digital pin 11int dimredPin = 3; // Pinner for den analoge dimmeverdien, koblet til transistor driverint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // bryteren er koblet til pin D2int val = 0; // variabel for å lese pin statusint buttonState; // variabel for å holde knappen stateint buttonPresses = 0; // 3 trykk for å gå! Int potPin0 = 0; // Pot for justering av forsinkelsen mellom fading i Moodlamp; int potPin2 = 2; // Potensiometerutgang for endring av hueRGB colorint potVal = 0; // Variabel for å lagre inngangen fra potensiometerint maxVal = 0; // verdi for å lagre dimmefaktorens standard er 255, hvis ingen pott er tilkobletint dimPin = 4; // Gryte koblet til A4 for å dempe lysstyrken // Programvariabler i redVal = 255; // Variabler for å lagre verdiene som skal sendes til pinsint greenVal = 1; // Innledende verdier er Rød full, Grønn og Blå offint blueVal = 1; int i = 0; // Sløyfeteller int vente; // = 15; // 50 ms (.05 sekund) forsinkelse; forkort for raskere fadesint k = 0; // verdi for kontrollLEDEN i blink-funksjonen DEBUG = 0; // DEBUG teller; hvis den er satt til 1, vil verdien skrive tilbake via serialint LCD = 0; // LCD -teller; hvis den er satt til 1, vil verdien skrive tilbake via serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // angir pinnene som output pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // angir pinnene som output pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Sett bryterpinnen som input attachInterrupt (0, isr0, RISING); if (DEBUG) {// Hvis vi vil se pin -verdiene for feilsøking … Serial.begin (9600); // … sett opp den serielle utgangen på 0004 stil}} // Hovedprogramlomme () {if (buttonPresses == 0) {Moodlamp (); // kaller Moodlight -funksjonen} if (buttonPresses == 1) {RGBPotMixer (); // kaller manuel mix -funksjonen} if (buttonPresses == 2) {White (); // Det er helt hvitt her inne} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Hvit(); Observere(); dim ();} void Monitor () {// Send tilstand til monitoren hvis (DEBUG) {// Hvis vi vil lese utdata DEBUG += 1; // Øk DEBUG -telleren hvis (DEBUG> 10) {// Skriv ut hver 10. sløyfe DEBUG = 1; // Tilbakestill telleren Serial.print (i); // Serielle kommandoer i 0004 stil Serial.print ("\ t"); // Skriv ut en fane Serial.print ("R:"); // Angi at utdata er rød verdi Serial.print (redVal); // Skriv ut rød verdi Serial.print ("\ t"); // Skriv ut en fane Serial.print ("G:"); // Gjenta for grønt og blått … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, for å avslutte med en vognretur Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, for å avslutte med en vognretur Serial.print ("\ t"); Serial.print ("vent:"); Serial.print (vent); // skriver verdien av potPin0 til skjermen Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // skriver verdien av potPin0 til skjermen Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // skriver verdien av potPin0 til skjermen Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (knappetrykk); // skriver verdien av knappen Trykk på skjermen}}} void dim () // Funksjon for dimming av hvit // kanskje senere for alle moduser {maxVal = analogRead (dimPin); maxVal /= 4; // Analogt område fra 0..1024 for mye for å dimme 0..255 -verdien analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // se etter verdien fra potPin0; // hvis ingen pott er tilkoblet: vent 255 i += 1; // Inkrementteller // i = i - maxVal; hvis (i <255) // Første fase av fades {redVal -= 1; // Red down greenVal += 1; // Grønn opp blåVal = 1; // Blå lav} ellers hvis (i <509) // Andre fase av fades {redVal = 1; // Rød lav greenVal -= 1; // Grønn ned blueVal += 1; // Blå opp} ellers hvis (i <763) // Tredje fase av fades {redVal += 1; // Rød opp greenVal = 1; // Grønn lo2 blueVal -= 1; // Blå ned} ellers // Sett telleren på nytt, og start fadesen igjen {i = 1; } // vi gjør "255 -redVal" i stedet for bare "redVal" fordi // LEDene er koblet til +5V i stedet for Gnd analogWrite (redPin, 255 - redVal); // Skriv nåværende verdier til LED -pins analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // dimming 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 nåværende verdier til LED -pins analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / vent / = 4; forsinkelse (vent); // Pause for "vent" millisekunder før du fortsetter sløyfen} void RGBPotMixer () {potVal = analogRead (potPin2); // les potensiometerverdien ved inngangspinnen potVal = potVal / 4; // konvertere fra 0-1023 til 0-255 hue_to_rgb (potVal); // behandle potVal som nyanse og konverter til rgb-vals // "255-" er fordi vi har felles-anode-LED-er, ikke common-cathode analogWrite (redPin, 255-redVal); // Skriv verdier til LED-pins analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Skriv verdier til LED -pins analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Gitt en variabel fargetone 'h', som varierer fra 0-252,
  • angi RGB -fargeverdi på riktig måte.
  • Antar maxValimum Saturation & maksimal verdi (lysstyrke)
  • Utfører rent heltallsmatematikk, ingen flytende punkt.

*/void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // stetback til 252 !! nejo byte hd = hue / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd % 6; // gir 0-5 byte f = fargetone % 42; byte fs = f * 6; switch (hi) {case 0: redVal = 252; greenVal = fs; blueVal = 0; gå i stykker; tilfelle 1: redVal = 252-fs; greenVal = 252; blueVal = 0; gå i stykker; tilfelle 2: redVal = 0; greenVal = 252; blueVal = fs; gå i stykker; tilfelle 3: redVal = 0; greenVal = 252-fs; blueVal = 252; gå i stykker; tilfelle 4: redVal = fs; greenVal = 0; blueVal = 252; gå i stykker; sak 5: redVal = 252; greenVal = 0; blueVal = 252-fs; gå i stykker; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // les initial state delayMicroseconds (100000); // hvis (val! = buttonState) {// knappen for knappen har endret seg! // if (buttonState == HIGH) {// sjekk om knappen nå er trykket på knappen Trykk på ++; //} // val = buttonState; // lagre den nye tilstanden i variabelen vår hvis (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Neste trinn var transistor-driverne. Jeg brukte 3 PNP -transistorer med maksimal strøm på 3Ampere. Etter at fremoverstrøm og spenning ble regulert, fungerte LED-senderen bra med full intensitet.

Trinn 6: Få det frittstående med PonyProg-brent oppstartslaster

Få det frittstående med PonyProg-brent oppstartslaster
Få det frittstående med PonyProg-brent oppstartslaster

Slik bruker du parallellporten til å brenne arduino bootloader på en ATmega168 eller ATmega8 for å bruke en billig blank chip med arduino miljøet. Snart ….. kanskje på en separat instruks Her er også en god instruks å bruke frittstående chip: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Trinn 7: Så det er min Arduino humørlampe

Så det er min Arduino humørlampe
Så det er min Arduino humørlampe

Vurder meg hvis du likte det.

Anbefalt: