INHOUDSOPGAWE:

Handgemaakte Arduino-aangedrewe RGB Moodlamp: 7 stappe
Handgemaakte Arduino-aangedrewe RGB Moodlamp: 7 stappe

Video: Handgemaakte Arduino-aangedrewe RGB Moodlamp: 7 stappe

Video: Handgemaakte Arduino-aangedrewe RGB Moodlamp: 7 stappe
Video: Гирлянда на велосипед, светодиоды WS2812 и Ардуино 2024, November
Anonim
Handgemaakte Arduino-aangedrewe RGB Moodlamp
Handgemaakte Arduino-aangedrewe RGB Moodlamp
Handgemaakte Arduino-aangedrewe RGB Moodlamp
Handgemaakte Arduino-aangedrewe RGB Moodlamp

Hierdie instruksies word in 5 dele onderverdeel:- Beplanning van die konstruksie (Stap1)- Die handgemaakte skaduwee (Stap2+3)- Die elektroniese stroombaan vir die bestuur van 3W LED's met die ATmega8-beheerder (Stap4)- Die kode (Stap5)- Hoe om dit te kry alleen (flits die Arduino-laaiprogram met PonyProg en brand die skets) (Stap6) kom binnekort Vid: 'n paar indrukke

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: 'n kragtige 3W LED

Stap 1: Beplanning van die konstruksie:

Beplanning van die konstruksie
Beplanning van die konstruksie
Beplanning van die konstruksie
Beplanning van die konstruksie

Ek hou daarvan om 'n konsep op slegs een vel papier te doen. Op die eerste vel sien jy 'n paar vroeë idees. 'Ek het die ontwerp regs onder gekies. deur die skaduwee? - Watter verhouding moet dit hê? - Hoeveel knoppe en potte benodig ek vir 'n eenvoudige koppelvlak? My sagteware -gedagtes was: Hoeveel verskillende funksies moet die lamp hê? - Outomatiese RGB -vervaag met veranderlike snelheid - Handmatige kleuraanpassing - Wit met verstelbare helderheid

Stap 2: Die handgemaakte skaduwee

Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee

Materiale bymekaarmaak: Die skaduwee: ek het 'n vel van 30 m3 plastiek in die winkel gevind (Pic1-3). Gebruik 'n skerp mes om dit af te sny. kry 'n gladde silinder. Ek het alles vasgedraai nadat ek die regte gate geboor het (Pic7-8). Monteer die plastiekskerms op die skroefdraad van koper. Dit lyk mooi en is redelik maklik om te hanteer en te hanteer. Ek het die gate geboor en getik om by die 1/8 draaddraad te pas (Pic9-10). Intussen het ek 'n heatsink gemaak om die 3W LED's af te koel en 'n soliede basis te hê. As ek nie te veel skakerings van die as kry nie, bou ek 'n hok van 'n sweisstaaf met 'n M8 -moer bo -op (Pic12). Die klein skroewe en moere was 'n bietjie lastig, maar 30 minute later het ek dit reggekry.

Stap 3: Die handgemaakte skaduwee

Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee
Die handgemaakte skaduwee

Die basis: Die skywe is in die draaibank gegooi om dit glad en rond te maak. Daarna het ek dit met 'n mahoniehoutvlek bevlek, sodat die denne goed sou lyk. Wat dan?!? Ek het besluit om 'n basis te maak met dieselfde ryp plastiek as die skaduwee, en verlig dit met 'n RGB microLED (Pic5). Die knoppe: ek het die knoppie gemaak van 'n stuk mahonie en die knoppe van 'n neutehout.

Stap 4: Die elektriese stroombaan:

Die elektriese stroombaan
Die elektriese stroombaan
Die elektriese stroombaan
Die elektriese stroombaan
Die elektriese stroombaan
Die elektriese stroombaan

Op die eerste prentjie sien jy my skematika. En hier is nog 'n video: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Stap 5: Die kode:

Die kode
Die kode
Die kode
Die kode
Die kode
Die kode

Op die foto's sien u my proses met Arduino. Eerstens het ek probeer met my selfgemaakte ProtoShield, 'n battery pack en 'n paar LED's. Ek het 'n paar maande gelede begin met "Spooky Projects" en "BionicArduino" deur TodEKurt. Https://todbot.com/blog/spookyarduino/My kode is net 'n moeilike kombinasie van sy projekkode. "RGBMoodlight", "RGBPotMixer" en 'n paar uitbreidings. Drie analoog-in en. een digitaal-in as modus-skakelaar (Dankie aan Ju. vir die onderbrekingsroetine:). Die LED's is verbind na D9, D10 en D11 wat PulseWithModulation ondersteun. As u wil, kan ek die skets publiseer, maar dit is 'n baie kombinasie van hierdie twee wonderlike kodes. Hier is my oorspronklike kode van die lamp. Dit lyk 'n bietjie morsig, want dit was my baie vroeg in die programmering … Maar as u dit kopieer, behoort dit puik te werk. Daar is goeie vredes, soos die "PotColorMixer", die "RGBfadingFunction" en die Interrupt-Routine vir die mode- switch./* nejo June2008

Kode vir my "Moodlamp", gebaseer op "dimmingLEDs" deur Clay Shirky

*nejo Sep2008

  • Finale kode vir die buurlamp met onderbrekingsmodus-skakelaar, analoog snelknop vir RGB-vervaag en RGB-kleurverandering.
  • Die dimfunksie werk net vir die wit kleur

*nejo Oktober 2008

  • Klankuitbreiding vir die bui:
  • 'N Kondensormikrofoon met 'n klein LM368 Amp, 'n ontvanger en 'n RC-laagdeurlaatfilter
  • met 'n ander analoog invoer gebruik ek die RGBPotMixer-funksie om die kleur te verander deur die mikrofoonsein te kry.

* * * Kode vir kruisverbleking van 3 LED's, rooi, groen en blou, of een driekleurige LED, met behulp van PWM

  • Die program vervaag stadig van rooi na groen, groen na blou en blou na rooi
  • Die ontfoutingskode veronderstel Arduino 0004, aangesien dit die nuwe funksies in die styl Serial.begin () gebruik
  • oorspronklik "dimmingLEDs" deur Clay Shirky

*

  • AnalogRead is op Pin A0 aangeskakel om die RGB -vervaagsnelheid te verander
  • AnalogRead is op Pin A2 aangeskakel om die kleur van hueRGB te verander

* * */#sluit in // Outputint ledPin = 13; // controlPin vir debuggingint redPin = 9; // Rooi LED, gekoppel aan digitale pen 9int greenPin = 10; // Groen LED, gekoppel aan digitale pen 10int bluePin = 11; // Blou LED, gekoppel aan digitale pen 11int dimredPin = 3; // Spelde vir die analoog dimwaarde, gekoppel aan die transistor driverint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // skakelaar is gekoppel aan pen D2int val = 0; // veranderlike vir die lees van die pin statusint buttonState; // veranderlike om die knoppie te hou stateint buttonPresses = 0; // 3 druk om te gaan! Int potPin0 = 0; // Pot om die vertraging tussen vervaag in Moodlamp aan te pas; int potPin2 = 2; // Potensiometer uitset vir die verandering van die hueRGB colorint potVal = 0; // Veranderlik om die insette van die potensiometerint maxVal = 0 op te slaan; // waarde om die dimfaktor te red, is standaard 255, as geen pot gekoppel is nie dimPin = 4; // Pot gekoppel aan A4 om die helderheid te verlaag // Program veranderlikesint redVal = 255; // Veranderlikes om die waardes op te slaan om na die pinsint greenVal = 1 te stuur; // Aanvanklike waardes is Rooi vol, Groen en Blou offint blueVal = 1; int i = 0; // Lus teller int wag; // = 15; // 50ms (.05 sekonde) vertraging; verkort vir vinniger fadesint k = 0; // waarde vir die controlLED in die blink-functionint DEBUG = 0; // DEBUG -toonbank; as dit op 1 gestel is, sal die waardes teruggeskryf word via serialint LCD = 0; // LCD toonbank; as dit op 1 gestel is, sal dit die waardes terugskryf via die reeksvoid -opstelling () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // stel die penne in as output pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // stel die penne in as output pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Stel die skakelaarpen in as input attachInterrupt (0, isr0, RISING); if (DEBUG) {// As ons die penwaardes vir ontfouting wil sien … Serial.begin (9600); // … stel die reeksopstelling in op 0004 -styl}} // Hoofprogramvoidlus () {if (buttonPresses == 0) {Moodlamp (); // noem die Moodlight -funksie} if (buttonPresses == 1) {RGBPotMixer (); // noem die funksie manuelmengsel} if (buttonPresses == 2) {White (); // Dit is heeltemal wit hierin} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Wit (); Monitor (); dim ();} void Monitor () {// Stuur staat na die monitor as (DEBUG) {// As ons die uitset DEBUG += 1 wil lees; // Verhoog die DEBUG -teller as (DEBUG> 10) {// Druk elke 10 lusse DEBUG = 1; // Stel die toonbank Serial.print (i) terug; // Reeksopdragte in 0004 -styl Serial.print ("\ t"); // Druk 'n oortjie Serial.print ("R:") uit; // Dui aan dat die uitset rooi waarde is Serial.print (redVal); // Druk rooi waarde Serial.print ("\ t") af; // Druk 'n oortjie Serial.print ("G:") uit; // Herhaal vir groen en blou … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, om af te sluit met 'n koetsopgawe Serial.print ("\ t"); Serial.print ("dimValue:"); Reeks.afdruk (maxVal); // println, om af te sluit met 'n koetsopgawe Serial.print ("\ t"); Serial.print ("wag:"); Serial.print (wag); // skryf die waarde van die potPin0 aan die monitor Serial.print ("\ t"); Serial.print ("hueRGBwaarde"); Serial.print (potVal); // skryf die waarde van die potPin0 aan die monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // skryf die waarde van die potPin0 aan die monitor Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (knoppie druk); // skryf die waarde van die knoppie Druk op die monitor}}} leegte dim () // Funksie vir die verduistering van wit // miskien later vir alle modusse {maxVal = analogRead (dimPin); maxVal /= 4; // Analoog reeks van 0..1024 te veel om die 0..255 -waarde analogWrite (dimredPin, maxVal) te verduister; analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // soek die waarde van die potPin0; // as geen pot gekoppel is nie: wag 255 i += 1; // Toename teller // i = i - maxVal; as (i <255) // Eerste fase van vervaag {redVal -= 1; // Red down greenVal += 1; // Groen op blouval = 1; // Blou laag} anders as (i <509) // Tweede fase van vervaag {redVal = 1; // Rooi lae groenval -= 1; // Groen af blouval += 1; // Blou op} anders as (i <763) // Derde fase van vervaag {redVal += 1; // Rooi op groenVal = 1; // Groen lo2 blouVal -= 1; // Blou af} anders // Stel die toonbank weer in en begin weer met die vervaag {i = 1; } // ons doen "255 -redVal" in plaas van net "redVal" omdat die // LED's gekoppel is aan +5V in plaas van Gnd analogWrite (redPin, 255 - redVal); // Skryf huidige waardes na LED -penne analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // verduistering 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); // Skryf huidige waardes na LED -penne analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / wag / = 4; vertraag (wag); // Wag vir 'wag' millisekondes voordat die lus hervat word} void RGBPotMixer () {potVal = analogRead (potPin2); // lees die potensiometerwaarde by die invoerpen potVal = potVal / 4; // omskakel van 0-1023 na 0-255 hue_to_rgb (potVal); // behandel potVal as 'n kleur en skakel dit om na rgb-vals // "255-" is omdat ons LED's met gewone anode het, nie 'n common-cathode analogWrite nie (redPin, 255-redVal); // Skryf waardes na LED-penne analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } ongeldig White () {analogWrite (redPin, maxVal); // Skryf waardes na LED -penne analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Gegewe die veranderlike kleur 'h', wat wissel van 0-252,
  • stel die RGB -kleurwaarde toepaslik in.
  • Veronderstel maxValimum Saturation & maximum Value (helderheid)
  • Voer suiwer heelgetal wiskunde uit, geen dryfpunt nie.

*/void hue_to_rgb (byte tint) {if (tint> 252) tint = 252; // terugkeer na 252 !! nejo byte hd = hue / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd % 6; // gee 0-5 grepe f = kleur % 42; byte fs = f * 6; skakelaar (hi) {geval 0: redVal = 252; greenVal = fs; blouval = 0; breek; geval 1: redVal = 252-fs; greenVal = 252; blouval = 0; breek; geval 2: redVal = 0; greenVal = 252; blueVal = fs; breek; geval 3: redVal = 0; greenVal = 252-fs; blouval = 252; breek; geval 4: redVal = fs; greenVal = 0; blouval = 252; breek; geval 5: redVal = 252; greenVal = 0; blueVal = 252-fs; breek; }} leegte isr0 () {Serial.println ("\ n / n ononderbroke / n"); buttonState = digitalRead (switchPin); // lees die aanvanklike toestand vertragingMicroseconds (100000); // as (val! = buttonState) {// die knoppie toestand verander het! // as (buttonState == HOOG) {// kyk of die knoppie nou ingedruk word buttonPresses ++; //} // val = buttonState; // stoor die nuwe toestand in ons veranderlike as (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Die volgende fase was die transistor-drywers. Ek het 3 PNP -transistors met 'n maksimum stroom op 3Ampere gebruik. Nadat die voorstroom en die spanning gereguleer is, werk die LED-sender met volle intensiteit goed.

Stap 6: Kry dit selfstandig met PonyProg-verbrande selflaaiprogram

Kry dit selfstandig met PonyProg-verbrande opstartlaaier
Kry dit selfstandig met PonyProg-verbrande opstartlaaier

Hoe u u parallelle poort kan gebruik om die arduino -laaiprogram op 'n ATmega168 of ATmega8 te verbrand om binnekort 'n goedkoop leë chip te gebruik met die arduino -omgewing. /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Stap 7: So is my Arduino gemoedlamp

So Dis My Arduino Moodlamp
So Dis My Arduino Moodlamp

Beoordeel my as u daarvan hou.

Aanbeveel: