Inhaltsverzeichnis:

Handgefertigte RGB-Stimmungslampe mit Arduino - Gunook
Handgefertigte RGB-Stimmungslampe mit Arduino - Gunook

Video: Handgefertigte RGB-Stimmungslampe mit Arduino - Gunook

Video: Handgefertigte RGB-Stimmungslampe mit Arduino - Gunook
Video: Bemalter Schrank 1801 2024, November
Anonim
Handgefertigte, Arduino-betriebene RGB-Stimmungslampe
Handgefertigte, Arduino-betriebene RGB-Stimmungslampe
Handgefertigte, Arduino-betriebene RGB-Stimmungslampe
Handgefertigte, Arduino-betriebene RGB-Stimmungslampe

Dieses anweisbare ist in 5 Teile unterteilt: - Planung der Konstruktion (Schritt 1) - Der handgefertigte Schirm (Schritt 2 + 3) - Die elektronische Schaltung zum Ansteuern von 3 W LEDs mit dem ATmega8-Controller (Schritt 4) - Der Code (Schritt 5) - Wie man es bekommt Standalone (Arduino Bootloader mit PonyProg flashen und Sketch brennen) (Step6) in Kürze Vid: Einige Impressionen

de.youtube.com/watch?v=apZ9NpaUG84 Bild1: Die Moodlamp Bild2: Eine mächtige 3W LED

Schritt 1: Bauplanung:

Bauplanung
Bauplanung
Bauplanung
Bauplanung

Ich liebe es, ein Konzept auf nur einem Blatt Papier zu erstellen. Auf dem ersten Blatt sehen Sie einige frühe Ideen. Ich habe mich für das Design unten rechts entschieden. Die zweite Seite zeigt einige Details zum Aufbau. Die Messungen sind wie jedes Mal experimentell, aber für mich ok;-) Meine Hardware-Gedanken waren: - Kann ich mit den Materialien umgehen? - Wird das Licht leuchten durch den Schirm?- Welchen Anteil soll sie haben?- Wie viele Knöpfe und Potis benötige ich für ein einfaches Interface?Meine Software-Gedanken waren: Wie viele verschiedene Funktionen soll die Lampe haben? - Automatisches RGB-Fading mit veränderbarer Geschwindigkeit - Manuelle Farbanpassung - Weiß mit einstellbarer Helligkeit

Schritt 2: Der handgemachte Schatten

Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten

Sammeln der Materialien: Der Schatten: Ich fand im Laden ein 3 Fuß x 3 Fuß großes Blatt aus 30-Mill-Kunststoff (Bild 1-3). Verwenden Sie ein scharfes Messer, um es zu schneiden. Ich habe den Kunststoff mit Sandpapier mattiert (Bild 4-6) Holen Sie sich einen glatten Zylinder Ich schraubte alles zusammen, nachdem Sie die richtigen Löcher gebohrt hatten (Bild 7-8). Montieren Sie die Kunststoffschirme auf den Messinggewindestützen. Es sieht gut aus und ist ziemlich einfach zu bekommen und zu handhaben. Ich habe die Löcher gebohrt und mit Gewinde versehen, um der 1/8-Gewindestange (Bild 9-10) zu entsprechen. Inzwischen habe ich einen Kühlkörper gemacht, um die 3W-LEDs abzukühlen und eine solide Basis zu haben. Um nicht zu viele Schirme aus dem Schaft zu bekommen, baue ich einen kleinen Käfig aus Schweißdraht mit einer M8 Mutter oben (Bild12). Als Abschluss habe ich alles zusammengebaut. Die kleinen Schrauben und Muttern waren etwas knifflig, aber 30 Minuten später hatte ich es geschafft.

Schritt 3: Der handgemachte Schatten

Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten
Der handgemachte Schatten

Die Basis: Die Scheiben wurden in die Drehmaschine eingespannt, um sie glatt und rund zu bekommen. Danach habe ich sie mit einer Mahagoni-Holzbeize gebeizt, damit die Kiefer gut aussieht mattierten Kunststoff als Schirm, und hinterleuchtet ihn mit einer RGB-MicroLED (Bild5).

Schritt 4: Der Stromkreis:

Der Stromkreis
Der Stromkreis
Der Stromkreis
Der Stromkreis
Der Stromkreis
Der Stromkreis

Auf dem ersten Bild seht ihr meinen Schaltplan. Und hier noch ein Video:https://de.youtube.com/watch?v=xkiYzQAYf_A&NR=1

Schritt 5: Der Code:

Der Code
Der Code
Der Code
Der Code
Der Code
Der Code

Auf den Bildern sehen Sie meinen Prozess mit Arduino. Zuerst habe ich mich mit meinem selbstgebauten ProtoShield, einem Akkupack und diversen LEDs herumprobiert. Angefangen habe ich vor einigen Monaten mit "Spooky Projects" und "BionicArduino" von TodEKurt.https://todbot.com/blog/spookyarduino/My code is nur eine knifflige Kombination aus seinem Projektcode."RGBMoodlight", "RGBPotMixer"und einigen Erweiterungen. Drei Analog-In und.ein Digital-In als Mode-Schalter (Danke an Ju. für die Interrupt-Routine:). Die LEDs sind angeschlossen zu D9, D10 und D11, die PulseWithModulation unterstützen. Wenn Sie möchten, kann ich den Sketch veröffentlichen, aber es ist eine wirklich kahle Kombination dieser beiden großartigen Codes. Hier ist mein Originalcode der Lampe sehr frühes Programmieren…aber wenn du es kopierst, sollte es super funktionieren. Es gibt feine Stücke, wie den "PotColorMixer", die "RGBfadingFunction" und die Interrupt-Routine für die Mode-Umschaltung./* nejo June2008

Code für meine "Moodlamp", basierend auf "dimmingLEDs" von Clay Shirky

*nejo Sep.2008

  • Endgültiger Code für die Stimmungslampe mit Interrupt-Mode-Schalter, analoger Kurzwahl für RGB-Fading und RGB-Farbwechsel.
  • Die Dimmfunktion funktioniert nur für die weiße Farbe

*nejo Oktober 2008

  • Sound-Erweiterung für die Stimmungslampe:
  • Ein Kondensatormikrofon mit einem winzigen LM368 Amp, einem Gleichrichter und einem RC-Tiefpassfilter
  • mit einem anderen analogInput benutze ich die RGBPotMixer-Funktion, um die Farbe zu ändern, indem ich das Mikrofonsignal empfange.

* * *Code zum Überblenden von 3 LEDs, rot, grün und blau, oder einer dreifarbigen LED mit PWM

  • Das Programm überblendet langsam von Rot zu Grün, Grün zu Blau und Blau zu Rot
  • Der Debugging-Code geht von Arduino 0004 aus, da er die neuen Funktionen im Serial.begin()-Stil verwendet
  • ursprünglich "dimmingLEDs" von Clay Shirky

*

  • AnalogRead ist an Pin A0 aktiviert, um die RGB-Fading-Geschwindigkeit zu variieren
  • AnalogRead ist auf Pin A2 aktiviert, um die hueRGB-Farbe zu variieren

* * */#include // Ausgabeint ledPin = 13; // controlPin zum Debuggenint redPin = 9; // Rote LED, verbunden mit digitalem Pin 9int greenPin = 10; // Grüne LED, verbunden mit digitalem Pin 10int bluePin = 11; // Blaue LED, verbunden mit digitalem Pin 11int dimredPin = 3; // Pins für den analogen Dimmwert, verbunden mit dem Transistor-Treiberint dimgreenPin = 5;int dimbluePin = 6; // Inputint switchPin = 2; // Schalter ist mit Pin D2int val = 0 verbunden; // Variable zum Lesen des Pins statusint buttonState; // Variable zum Halten der Schaltfläche stateint buttonPresses = 0; // 3 Mal drücken, um zu gehen!int potPin0 = 0; // Pot zum Einstellen der Verzögerung zwischen dem Einblenden in Moodlamp; int potPin2 = 2; // Potentiometerausgang zum Ändern des hueRGB colorint potVal = 0; // Variable zum Speichern der Eingabe vom Potentiometerint maxVal = 0; // Wert zum Speichern des Dimmfaktors Standard ist 255, wenn kein Pot angeschlossen istint dimPin = 4; // Pot an A4 angeschlossen, um die Helligkeit zu dimmen // Programmvariablenint redVal = 255; // Variablen zum Speichern der an die Pins zu sendenden Werte greenVal = 1; // Anfangswerte sind Rot voll, Grün und Blau offint blueVal = 1;int i = 0; // Schleifenzähler int wait; // = 15; // 50ms (.05 Sekunden) Verzögerung; verkürzen für schnelleres Fadesint k = 0; // Wert für die controlLED in der Blinkfunktionint DEBUG = 0; // DEBUG-Zähler; wenn auf 1 gesetzt, werden die Werte über serialint LCD = 0 zurückgeschrieben; // LCD-Zähler; wenn auf 1 gesetzt, werden Werte über serialvoid setup () zurückgeschrieben { pinMode (ledPin, OUTPUT); pinMode (rotPin, AUSGANG); // setzt die Pins als Ausgang pinMode (greenPin, OUTPUT); pinMode (bluePin, AUSGANG); pinMode (dimredPin, AUSGANG); pinMode (dimgreenPin, AUSGANG); // setzt die Pins als Ausgang pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // PinMode (potPin0, INPUT); // PinMode (dimPin, INPUT); // PinMode (switchPin, INPUT); // Setzen Sie den Schalterpin als Eingang attachInterrupt (0, isr0, RISING); if (DEBUG) {// Wenn wir die Pin-Werte für das Debuggen sehen möchten… Serial.begin (9600); // …die serielle Ausgabe im 0004-Stil einrichten }} // Main programvoid loop () { if (buttonPresses == 0) { Moodlamp (); // ruft die Moodlight-Funktion auf} if (buttonPresses == 1) { RGBPotMixer(); // ruft die manuelle Mischfunktion auf} if (buttonPresses == 2) { White(); // Hier ist alles weiß } if (buttonPresses == 3) {} //Moodlamp(); // RGBPotMixer (); //Weiß(); Monitor(); dim();}void Monitor(){ // Status an den Monitor senden if (DEBUG) { // Wenn wir die Ausgabe lesen wollen DEBUG += 1; // Inkrementiere den DEBUG-Zähler if (DEBUG > 10) { // Drucke alle 10 Schleifen DEBUG = 1; // Zurücksetzen des Zählers Serial.print (i); // Serielle Befehle im 0004-Stil Serial.print ("\t"); // Drucken Sie eine Registerkarte Serial.print ("R:"); // Geben Sie an, dass die Ausgabe ein roter Wert ist Serial.print (redVal); // Roten Wert drucken Serial.print("\t"); // Drucken Sie eine Registerkarte Serial.print ("G:"); // Wiederholen Sie für Grün und Blau … Serial.print (greenVal); Serial.print("\t"); Serial.print ("B:"); Serial.print (blueVal); // println, um mit einem Wagenrücklauf zu enden Serial.print("\t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, um mit einem Wagenrücklauf zu enden Serial.print("\t"); Serial.print ("warten:"); Serial.print (warten); // schreibt den Wert des potPin0 auf den Monitor Serial.print("\t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // schreibt den Wert des potPin0 auf den Monitor Serial.print("\t"); Serial.print ("buttonState:"); Serial.print (buttonState); // schreibt den Wert des potPin0 auf den Monitor Serial.print("\t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // schreibt den Wert der buttonPresses auf den Monitor } }} void dim() // Funktion zum Dimmen von Weiß // evtl. später für alle Modes {maxVal = analogRead(dimPin); maxVal /= 4; // Analoger Bereich von 0..1024 zu viel zum Dimmen des Wertes 0..255 analogWrite(dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);}void Moodlamp () { warten = analogRead (potPin0); // suche den Wert von potPin0; // wenn kein Pot angeschlossen ist: warte 255 i += 1; // Zähler inkrementieren // i = i - maxVal; if (i < 255) // Erste Phase des Fades { redVal -= 1; // Rot unten greenVal += 1; // Grün auf blueVal = 1; // Blau niedrig} else if (i <509) // Zweite Phase des Fades { redVal = 1; // Rot niedrig greenVal -= 1; // Grün nach unten blueVal += 1; // Blue up} else if (i <763) // Dritte Phase der Fades { redVal += 1; // Rot up greenVal = 1; // Grün lo2 blueVal -= 1; // Blau nach unten} else // Setzen Sie den Zähler zurück und starten Sie die Fades erneut { i = 1; } // wir machen "255-redVal" statt nur "redVal", weil die // LEDs an +5V anstelle von Gnd angeschlossen sind analogWrite(redPin, 255 - redVal); // Aktuelle Werte auf LED-Pins schreiben analogWrite (greenPin, 255 - greenVal); analogWrite(bluePin, 255 - blueVal); /* dimredVal =min(redVal - maxVal, 255); // Dimmen 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); // Aktuelle Werte auf LED-Pins schreiben analogWrite (greenPin, 255 - dimgreenVal); analogWrite(bluePin, 255 - dimblueVal); */ warten /=4; verzögern (warten); // Pause für 'Warten' Millisekunden, bevor die Schleife fortgesetzt wird}void RGBPotMixer () { PotVal = analogRead (potPin2); // den Potentiometerwert am Eingangspin lesen potVal = potVal / 4; // von 0-1023 in 0-255 konvertieren hue_to_rgb(potVal); // PotVal als Farbton behandeln und in RGB-Werte konvertieren // "255-" liegt daran, dass wir LEDs mit gemeinsamer Anode haben, nicht mit gemeinsamer Kathode analogWrite (redPin, 255-redVal); // Werte auf LED-Pins schreiben analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); }void White () { analogWrite (redPin, maxVal); // Werte auf LED-Pins schreiben analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Bei einem variablen Farbton 'h', der von 0-252 reicht,
  • Stellen Sie den RGB-Farbwert entsprechend ein.
  • Nimmt maxValimum Sättigung & Maximalwert (Helligkeit) an
  • Führt rein Integer-Mathematik durch, keine Gleitkommazahlen.

*/void hue_to_rgb(byte hue) { if(hue > 252) hue = 252; // Rückschritt auf 252!! Nejo-Byte hd = Farbton / 42; // 36 == 252/7, 252 == H_MAX Byte hi = hd % 6; // gibt 0-5 Byte f = Farbton % 42; Byte fs = f * 6; switch(hi) {Fall 0: redVal = 252; greenVal = fs; blueVal = 0; brechen; Fall 1: redVal = 252-fs; greenVal = 252; blueVal = 0; brechen; Fall 2: redVal = 0; greenVal = 252; blueVal = fs; brechen; Fall 3: redVal = 0; greenVal = 252-fs; blueVal = 252; brechen; Fall 4: redVal = fs; greenVal = 0; blueVal = 252; brechen; Fall 5: redVal = 252; greenVal = 0; blueVal = 252-fs; brechen; } } void isr0 () {Serial.println ("\n \n inerrupt \n"); buttonState = digitalRead (switchPin); // den Anfangszustand lesen delayMicroseconds (100000); //if (val != buttonState) { // Der Button-Zustand hat sich geändert! // if (buttonState == HIGH) {// prüfen, ob der Button jetzt gedrückt ist buttonPresses++; // } // val = buttonState; // speichere den neuen Zustand in unserer Variablen if (buttonPresses == 3) { // zurücksetzen buttonPresses = 0; } } // }Die nächste Stufe waren die Transistor-Treiber. Ich habe 3 PNP-Transistoren mit einem maximalen Strom von 3 Ampere verwendet. Nachdem Durchlassstrom und Spannung geregelt waren, funktionierte der LEDemitter mit voller Intensität hervorragend.

Schritt 6: Holen Sie es eigenständig mit PonyProg-gebranntem Bootloader

Holen Sie es eigenständig mit PonyProg-gebranntem Bootloader
Holen Sie es eigenständig mit PonyProg-gebranntem Bootloader

So verwenden Sie Ihren parallelen Port, um den Arduino-Bootloader auf einem ATmega168 oder ATmega8 zu brennen, um einen billigen leeren Chip mit der Arduino-Umgebung zu verwenden. Demnächst … /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Schritt 7: Das ist also meine Arduino Moodlamp

Das ist also meine Arduino-Stimmungslampe
Das ist also meine Arduino-Stimmungslampe

Wenn es Ihnen gefallen hat, bewerten Sie mich bitte.

Empfohlen: