Inhaltsverzeichnis:
- Schritt 1: Bauplanung:
- Schritt 2: Der handgemachte Schatten
- Schritt 3: Der handgemachte Schatten
- Schritt 4: Der Stromkreis:
- Schritt 5: Der Code:
- Schritt 6: Holen Sie es eigenständig mit PonyProg-gebranntem Bootloader
- Schritt 7: Das ist also meine Arduino Moodlamp
Video: Handgefertigte RGB-Stimmungslampe mit Arduino - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:22
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:
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
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
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:
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:
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
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
Wenn es Ihnen gefallen hat, bewerten Sie mich bitte.
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: 7 Schritte (mit Bildern)
Schnittstellentastatur mit Arduino. [Einzigartige Methode]: Hallo, und willkommen zu meinem ersten instructable! :) In diesem instructables möchte ich eine fantastische Bibliothek für die Schnittstelle der Tastatur mit Arduino teilen - 'Password Library' einschließlich 'Keypad Library'. Diese Bibliothek enthält die besten Funktionen, die wir wi
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: Update: 7. April 2019 - Rev 3 von lp_BLE_TempHumidity, fügt Datums- / Zeitdiagramme mit pfodApp V3.0.362+ hinzu und automatische Drosselung beim Senden von DatenUpdate: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E