Indholdsfortegnelse:

Håndlavet Arduino-drevet RGB Moodlamp: 7 trin
Håndlavet Arduino-drevet RGB Moodlamp: 7 trin

Video: Håndlavet Arduino-drevet RGB Moodlamp: 7 trin

Video: Håndlavet Arduino-drevet RGB Moodlamp: 7 trin
Video: 4 умопомрачительных проекта Mosfet, которые могут создать даже новички! 2024, Juli
Anonim
Håndlavet Arduino-drevet RGB humørlampe
Håndlavet Arduino-drevet RGB humørlampe
Håndlavet Arduino-drevet RGB humørlampe
Håndlavet Arduino-drevet RGB humørlampe

Denne instruktive er opdelt i 5 dele:- Planlægning af konstruktionen (trin1)- Den håndlavede skygge (trin2+3)- Det elektroniske kredsløb til at køre 3W-lysdioder med ATmega8-controlleren (trin4)- koden (trin5)- Sådan får du det stand-alone (flash Arduino bootloader med PonyProg og brænd skitsen) (Step6) kommer snart Vid: Nogle indtryk

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

Trin 1: Planlægning af byggeriet:

Planlægning af byggeriet
Planlægning af byggeriet
Planlægning af byggeriet
Planlægning af byggeriet

Jeg elsker at lave et koncept på kun et ark papir. På det første ark ser du nogle tidlige ideer. Jeg valgte designet nederst til højre. Den anden side viser nogle detaljer til konstruktionen. Målinger er eksperimentelle som hver gang, men ok for mig;-) Mine hardware tanker var:- Kan jeg klare materialerne?- Vil lyset skinne gennem skyggen? - Hvilken andel skal den have? - Hvor mange knapper og gryder skal jeg bruge til en simpel grænseflade? Mine softwaretanker var: Hvor mange forskellige funktioner skulle lampen have? - Automatisk RGB -fading med udskiftelig hastighed - Manuel farvejustering - Hvid med justerbar lysstyrke

Trin 2: Den håndlavede skygge

Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge

Indsamling af materialer: Skyggen: Jeg fandt et ark på 3 fod x 3 fod af 30 mill plast i butikken (Pic1-3). Brug en skarp kniv til at skære det. Jeg frostede plasten ved hjælp af sandpapir (Pic4-6). Til få en glat cylinder Jeg skruede det hele sammen efter at have boret de rigtige huller (Pic7-8). Monter plastskærmene på de gevindskårne messingstøtter. Det ser pænt ud og er ret let at få og håndtere. Jeg borede og bankede på hullerne for at matche den 1/8 gevindstang (Pic9-10). I mellemtiden lavede jeg en køleplade for at afkøle 3W LED'erne og have en solid bund. For at få ikke for mange nuancer fra akslen, bygger jeg et lille bur fra svejsestang med en M8 møtrik ovenpå (Pic12). Som finish samlede jeg alt sammen. De små skruer og møtrikker var lidt vanskelige, men 30 minutter senere fik jeg det gjort.

Trin 3: Den håndlavede skygge

Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge
Den håndlavede skygge

Basen: Skiverne blev revet i drejebænken for at få den glat og rund. Bagefter farvede jeg den med en bejdse i mahogni, så fyrret så godt ud. Hvad så?!? Jeg besluttede at lave en base ved hjælp af den samme frostet plast som skygge, og baggrundsbelysning med en RGB microLED (Pic5). Knapperne: Jeg lavede knappen fra et stykke mahogni og knapperne fra et afsnit af nøddetræ.

Trin 4: Det elektriske kredsløb:

Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb
Det elektriske kredsløb

På det første billede kan du se mit skema. Og her er endnu en video: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Trin 5: Koden:

Koden
Koden
Koden
Koden
Koden
Koden

På billederne ser du min proces med Arduino. For det første prøvede jeg rundt med mit selvlavede ProtoShield, en batteripakke og nogle slags lysdioder. Jeg startede med "Spooky Projects" og "BionicArduino" af TodEKurt for nogle måneder siden. Http://todbot.com/blog/spookyarduino/Min kode er bare en vanskelig kombination af hans projektkode. "RGBMoodlight", "RGBPotMixer" og nogle udvidelser. Tre analog-in og. én digital-in som mode switch (Tak til Ju. for interrupt-rutinen:). LED'erne er tilsluttet til D9, D10 og D11, der understøtter PulseWithModulation. Hvis du vil, kan jeg offentliggøre skitsen, men det er en virkelig bar kombination af disse to store koder. Her er min originale kode til lampen. Det ser lidt rodet ud, fordi det var min meget tidligt i programmeringen … Men hvis du kopierer det, burde det fungere godt. Der er fine freden, som "PotColorMixer", "RGBfadingFunction" og Interrupt-Routine for mode- switch./* nejo juni2008

Kode til min "Moodlamp", baseret på "dimmingLEDs" af Clay Shirky

*nejo sep 2008

  • Endelig kode for stemningslampen med interrupt-mode-switch, analogt hurtigopkald til RGB-fading og RGB-farveændring.
  • Dæmpningsfunktionen fungerer kun for den hvide farve

*nejo oktober 2008

  • Lydforlængelse til stemningslampen:
  • En kondensatormikrofon med en lille LM368 Amp, en modtager og et RC-lavpasfilter
  • med en anden analogInput bruger jeg RGBPotMixer-funktionen til at ændre farven ved at hente mikrofonsignalet.

* * * Kode til krydsfading 3 lysdioder, rød, grøn og blå eller en trefarvet LED ved hjælp af PWM

  • Programmet krydsfader langsomt fra rødt til grønt, grønt til blåt og blåt til rødt
  • Fejlfindingskoden forudsætter Arduino 0004, da den bruger de nye funktioner i Serial.begin ()-stil
  • oprindeligt "dimmingLEDs" af Clay Shirky

*

  • AnalogRead er aktiveret på Pin A0 for at variere RGB -fadinghastigheden
  • AnalogRead er aktiveret på Pin A2 for at variere hueRGB -farven

* * */#inkluderer // Outputint ledPin = 13; // controlPin til debuggingint redPin = 9; // Rød LED, tilsluttet digital pin 9int greenPin = 10; // Grøn LED, tilsluttet digital pin 10int bluePin = 11; // Blå LED, tilsluttet digital pin 11int dimredPin = 3; // Pins til den analoge dæmpningsværdi, forbundet til transistor driverint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // switch er forbundet til pin D2int val = 0; // variabel til læsning af pin -statusint buttonState; // variabel til at holde knappen stateint button trykker = 0; // 3 tryk for at gå! Int potPin0 = 0; // Pot til justering af forsinkelsen mellem fading i Moodlamp; int potPin2 = 2; // Potentiometerudgang til ændring af hueRGB colorint potVal = 0; // Variabel til lagring af input fra potentiometerint maxVal = 0; // værdi for at gemme dæmpningsfaktorens standard er 255, hvis der ikke er tilsluttet en gryde i dimPin = 4; // Gryde forbundet til A4 for at dæmpe lysstyrken // Programvariabler i redVal = 255; // Variabler til lagring af de værdier, der skal sendes til pinsint greenVal = 1; // Indledende værdier er rød fuld, grøn og blå offint blueVal = 1; int i = 0; // Sløjfe tæller int vent; // = 15; // 50 ms (.05 sekund) forsinkelse; forkort for hurtigere fadesint k = 0; // værdi for controlLED i blink-funktionen DEBUG = 0; // DEBUG tæller; hvis den er indstillet til 1, vil værdierne blive sendt tilbage via serialint LCD = 0; // LCD -tæller; hvis den er indstillet til 1, vil værdierne blive sendt tilbage via serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // indstiller benene som output pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // indstiller benene som output pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Indstil switch pin som input attachInterrupt (0, isr0, RISING); hvis (DEBUG) {// Hvis vi vil se pinværdierne til fejlfinding … Serial.begin (9600); // … konfigurer den serielle udgang på 0004 stil}} // Hovedprogramlomme loop () {if (buttonPresses == 0) {Moodlamp (); // kalder Moodlight -funktionen} if (buttonPresses == 1) {RGBPotMixer (); // kalder manuel mix -funktionen} if (buttonPresses == 2) {White (); // Det er helt hvidt herinde} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Hvid(); Overvåge(); dim ();} void Monitor () {// Send tilstand til monitoren hvis (DEBUG) {// Hvis vi vil læse output DEBUG += 1; // Forøg DEBUG -tælleren, hvis (DEBUG> 10) {// Udskriv hver 10. sløjfe DEBUG = 1; // Nulstil tælleren Serial.print (i); // Serielle kommandoer i 0004 stil Serial.print ("\ t"); // Udskriv en fane Serial.print ("R:"); // Angiv, at output er rød værdi Serial.print (redVal); // Udskriv rød værdi Serial.print ("\ t"); // Udskriv en fane Serial.print ("G:"); // Gentag for grønt og blåt … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, for at slutte med en vognretur Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, for at slutte med en vognretur Serial.print ("\ t"); Serial.print ("vent:"); Serial.print (vent); // skriver værdien af potPin0 til skærmen Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // skriver værdien af potPin0 til skærmen Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // skriver værdien af potPin0 til skærmen Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // skriver værdien af knappenTryk på skærmen}}} void dim () // Funktion til dæmpning af hvid // måske senere for alle tilstande {maxVal = analogRead (dimPin); maxVal /= 4; // Analogt område fra 0..1024 for meget til dæmpning af 0..255 -værdien analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // se efter værdien fra potPin0; // hvis der ikke er tilsluttet en gryde: vent 255 i += 1; // Forøgelsestæller // i = i - maxVal; hvis (i <255) // Første fase af fades {redVal -= 1; // Red down greenVal += 1; // Grøn op blåVal = 1; // Blå lav} ellers hvis (i <509) // Anden fase af fades {redVal = 1; // Rød lav greenVal -= 1; // Grøn ned blåVal += 1; // Blå op} ellers hvis (i <763) // Tredje fase af fades {redVal += 1; // Rød op greenVal = 1; // Grøn lo2 blueVal -= 1; // Blå ned} ellers // Genindstil tælleren, og start fadesen igen {i = 1; } // vi gør "255 -redVal" i stedet for bare "redVal", fordi // LED'erne er tilsluttet +5V i stedet for Gnd analogWrite (redPin, 255 - redVal); // Skriv aktuelle værdier til LED -pins analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // dæmpning 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 aktuelle værdier til LED -pins analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / vent / = 4; forsinkelse (vent); // Sæt en pause i 'vent' millisekunder, før sløjfen genoptages} void RGBPotMixer () {potVal = analogRead (potPin2); // læs potentiometerværdien ved input pin potVal = potVal / 4; // konvertere fra 0-1023 til 0-255 hue_to_rgb (potVal); // behandle potVal som farvetone og konverter til rgb-vals // "255-" er fordi vi har fælles-anode LED'er, ikke common-cathode analogWrite (redPin, 255-redVal); // Skriv værdier til LED-pins analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } ugyldig hvid () {analogWrite (redPin, maxVal); // Skriv værdier til LED -pins analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • I betragtning af en variabel farvetone 'h', der spænder fra 0-252,
  • indstil RGB -farveværdien korrekt.
  • Antager maxValimum Saturation & maximum Value (lysstyrke)
  • Udfører rent helt tal, ingen flydende 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; // giver 0-5 byte f = farvetone 42; byte fs = f * 6; switch (hej) {case 0: redVal = 252; greenVal = fs; blueVal = 0; pause; tilfælde 1: redVal = 252-fs; greenVal = 252; blueVal = 0; pause; tilfælde 2: redVal = 0; greenVal = 252; blueVal = fs; pause; tilfælde 3: redVal = 0; greenVal = 252-fs; blueVal = 252; pause; sag 4: redVal = fs; greenVal = 0; blueVal = 252; pause; sag 5: redVal = 252; greenVal = 0; blueVal = 252-fs; pause; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // læs initial state delayMicroseconds (100000); // hvis (val! = buttonState) {// knaptilstanden er ændret! // hvis (buttonState == HIGH) {// tjek om knappen nu er trykket knappen tryk på ++; //} // val = buttonState; // gem den nye tilstand i vores variabel, hvis (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Næste trin var transistor-driverne. Jeg brugte 3 PNP -transistorer med en maksimal strøm på 3Ampere. Efter at fremadgående strøm og spænding var reguleret, fungerede LEDemitteren godt med fuld intensitet.

Trin 6: Få det selvstændigt med PonyProg-brændt bootloader

Få det selvstændigt med PonyProg-brændt bootloader
Få det selvstændigt med PonyProg-brændt bootloader

Sådan bruges din paralellport til at brænde arduino -bootloaderen på en ATmega168 eller ATmega8 til at bruge en billig blank chip med arduino -miljøet. Snart ….. måske på en separat instruerbar Her er også en god instruktion til at bruge chip -standalone: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

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

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

Bedøm mig, hvis du kunne lide det.

Anbefalede: