Πίνακας περιεχομένων:

Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino: 7 βήματα
Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino: 7 βήματα

Βίντεο: Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino: 7 βήματα

Βίντεο: Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino: 7 βήματα
Βίντεο: 12 ΩΡΕΣ, Μέδουσες-🌈Χρώμα ουράνιου τόξου με ήχο ωκεανού για🧘🏼‍♂️Γιόγκα και🙏🏼διαλογισμό. 2024, Ιούλιος
Anonim
Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino
Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino
Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino
Χειροποίητο RGB Moodlamp με τροφοδοσία Arduino

Αυτό το εκπαιδευτικό υποδιαιρείται σε 5 μέρη:- Προγραμματισμός κατασκευής (Βήμα 1)- Χειροποίητη σκιά (Βήμα 2+3)- Το ηλεκτρονικό κύκλωμα οδήγησης LED 3W με τον ελεγκτή ATmega8 (Βήμα 4)- Ο Κώδικας (Βήμα 5)- Πώς να το αποκτήσετε αυτόνομο (αναβοσβήστε το πρόγραμμα εκκίνησης Arduino με το PonyProg και κάψτε το σκίτσο) (Βήμα 6) σύντομα Vid: Μερικές εμφανίσεις

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: A Ισχυρό LED 3W

Βήμα 1: Σχεδιασμός της κατασκευής:

Προγραμματισμός της κατασκευής
Προγραμματισμός της κατασκευής
Προγραμματισμός της κατασκευής
Προγραμματισμός της κατασκευής

Μου αρέσει να κάνω μια ιδέα σε ένα μόνο φύλλο χαρτιού. Στο πρώτο φύλλο βλέπετε μερικές πρώτες ιδέες. Επέλεξα το σχέδιο κάτω δεξιά. Η δεύτερη σελίδα δείχνει κάποιες λεπτομέρειες για την κατασκευή. Οι μετρήσεις είναι πειραματικές όπως κάθε φορά, αλλά εντάξει για μένα;-) Οι σκέψεις μου για το υλικό ήταν:- Μπορώ να χειριστώ τα υλικά;- Θα λάμψει το φως μέσω της σκιάς; - Τι αναλογία πρέπει να έχει; - Πόσα πόμολα και γλάστρες θα χρειαστώ για μια απλή διεπαφή; Οι σκέψεις μου στο λογισμικό ήταν: Πόσες διαφορετικές λειτουργίες πρέπει να έχει η λάμπα; - Αυτόματο ξεθώριασμα RGB με μεταβλητή ταχύτητα - Χειροκίνητη ρύθμιση χρώματος - Λευκό με ρυθμιζόμενη φωτεινότητα

Βήμα 2: Η χειροποίητη σκιά

Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά

Συγκέντρωση υλικών: Η σκιά: Βρήκα ένα φύλλο 3 ποδιών x 3 ποδιών από πλαστικό 30 μύλων στο κατάστημα (Εικ.1-3). Χρησιμοποιήστε ένα κοφτερό μαχαίρι για να το κόψετε. Πάγωσα το πλαστικό χρησιμοποιώντας γυαλόχαρτο (Εικ.4-6). πάρε έναν ομαλό κύλινδρο Το βίδωσα όλα μαζί μετά το άνοιγμα των σωστών οπών (Εικ.7-8). Τοποθετήστε τις πλαστικές αποχρώσεις στα σπειρωτά στηρίγματα από ορείχαλκο. Φαίνεται όμορφα και είναι αρκετά εύκολο να το πάρετε και να το χειριστείτε. Διάτρησα και χτύπησα τις τρύπες για να ταιριάξω με την 1/8η ράβδο με σπείρωμα (Pic9-10). Εν τω μεταξύ, έκανα μια ψύκτρα για να κρυώσει τα LED 3W και να έχει μια σταθερή βάση. Για να μην παίρνω πάρα πολλές αποχρώσεις από τον άξονα, χτίζω ένα μικρό κλουβί από ράβδο συγκόλλησης με παξιμάδι M8 στην κορυφή (Εικ. 12). Στο τέλος, συγκεντρώθηκα όλα μαζί. Οι μικρές βίδες και τα παξιμάδια ήταν λίγο περίπλοκα, αλλά 30 λεπτά αργότερα τα κατάφερα.

Βήμα 3: Η χειροποίητη σκιά

Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά
Η Χειροποίητη Σκιά

Η βάση: Οι δίσκοι κόλλησαν στον τόρνο για να γίνει λεία και στρογγυλή. Στη συνέχεια, το έβαψα με λεκέ από ξύλο μαόνι έτσι ώστε το πεύκο να φαίνεται καλό. Τι μετά;!; Αποφάσισα να φτιάξω μια βάση χρησιμοποιώντας το ίδιο παγωμένο πλαστικό ως σκιά, και οπίσθιο φωτισμό με ένα RGB microLED (Εικ. 5). Τα πόμολα: Έφτιαξα το κουμπί από ένα κομμάτι μαόνι και τα πόμολα από ένα τεμάχιο καρυδιάς.

Βήμα 4: Το ηλεκτρικό κύκλωμα:

Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα
Το ηλεκτρικό κύκλωμα

Στην πρώτη εικόνα βλέπετε το σχηματικό μου. Και εδώ είναι ένα άλλο βίντεο: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Βήμα 5: Ο Κώδικας:

Ο κώδικας
Ο κώδικας
Ο κώδικας
Ο κώδικας
Ο κώδικας
Ο κώδικας

Στις φωτογραφίες βλέπετε τη διαδικασία μου με το Arduino. Πρώτα δοκίμασα με το αυτοσχέδιο ProtoShield, μια μπαταρία και κάποια LED. Ξεκίνησα με "Spooky Projects" και "BionicArduino" του TodEKurt πριν από μερικούς μήνες. απλώς ένας περίπλοκος συνδυασμός του κώδικα του έργου του. "RGBMoodlight", "RGBPotMixer" και μερικές επεκτάσεις. Τρεις αναλογικοί και. ένας διακόπτης ψηφιακής λειτουργίας (Χάρη στον Ju. για τη ρουτίνα διακοπής:). Τα LED είναι συνδεδεμένα στα D9, D10 και D11 που υποστηρίζουν το PulseWithModulation. Αν θέλετε, μπορώ να δημοσιεύσω το σκίτσο, αλλά είναι ένας πραγματικά γυμνός συνδυασμός αυτών των δύο υπέροχων κωδικών. Εδώ είναι ο αρχικός μου κωδικός της λάμπας. Φαίνεται λίγο ακατάστατο, γιατί ήταν δικό μου πολύ πρώιμο στάδιο στον προγραμματισμό … Αλλά αν το αντιγράψετε, θα πρέπει να λειτουργεί τέλεια. Υπάρχουν υπέροχες ειρήνες, όπως το "PotColorMixer", το "RGBfadingFunction" και η Διακοπή-Ρουτίνα για τον διακόπτη λειτουργίας./*** nejo Ιούνιος2008

Κωδικός για το "Moodlamp" μου, βασισμένο στο "dimmingLEDs" του Clay Shirky

*nejo Σεπτέμβριος 2008

  • Τελικός κώδικας για το moodlamp με διακόπτη λειτουργίας διακοπής, αναλογική γρήγορη κλήση για ξεθώριασμα RGB και αλλαγή χρώματος RGB.
  • Η λειτουργία dimming λειτουργεί μόνο για το λευκό χρώμα

*nejo Οκτώβριος 2008

  • Extensionχος-επέκταση για το moodlamp:
  • Συμπυκνωτικό μικρόφωνο με μικροσκοπικό ενισχυτή LM368, ρυθμιστή και φίλτρο χαμηλής διέλευσης RC
  • με άλλο analogInput χρησιμοποιώ τη λειτουργία RGBPotMixer για να αλλάξω χρώμα παίρνοντας το σήμα μικροφώνου.

* * * Κωδικός για διασταύρωση 3 LED, κόκκινο, πράσινο και μπλε, ή ένα LED τριών χρωμάτων, χρησιμοποιώντας PWM

  • Το πρόγραμμα διασταυρώνεται αργά από κόκκινο σε πράσινο, πράσινο σε μπλε και μπλε σε κόκκινο
  • Ο κώδικας εντοπισμού σφαλμάτων υποθέτει το Arduino 0004, καθώς χρησιμοποιεί τις νέες λειτουργίες στυλ Serial.begin ()
  • αρχικά "dimmingLEDs" του Clay Shirky

*

  • Το AnalogRead είναι ενεργοποιημένο στο Pin A0 για να διαφοροποιήσει την ταχύτητα εξασθένισης RGB
  • Το AnalogRead είναι ενεργοποιημένο στο Pin A2 για να αλλάξει το χρώμα hueRGB

* * */#include // Έξοδος ledPin = 13; // controlPin για εντοπισμό σφαλμάτων redPin = 9; // Κόκκινο LED, συνδεδεμένο με την ψηφιακή ακίδα 9int greenPin = 10; // Πράσινο LED, συνδεδεμένο με την ψηφιακή ακίδα 10int bluePin = 11; // Μπλε LED, συνδεδεμένο με την ψηφιακή ακίδα 11int dimredPin = 3; // Καρφίτσες για την τιμή αναλογικής εξασθένησης, συνδεδεμένη με το πρόγραμμα οδήγησης τρανζίστορ dimgreenPin = 5; int dimbluePin = 6; // Διακόπτης εισόδουPin = 2; // ο διακόπτης είναι συνδεδεμένος στο pin D2int val = 0; // μεταβλητή για ανάγνωση του πλήκτρου statusint της καρφίτσαςState; // μεταβλητή για να κρατήσετε το κουμπί κατάσταση κρατήματος κουμπίΠιέζει = 0; // 3 πατήματα για μετάβαση! Int potPin0 = 0; // Δοχείο για τη ρύθμιση της καθυστέρησης μεταξύ εξασθένισης στο Moodlamp. int potPin2 = 2; // Έξοδος ποτενσιόμετρου για αλλαγή του hueRGB colorint potVal = 0; // Μεταβλητή για αποθήκευση της εισόδου από το potentiometerint maxVal = 0; // η τιμή για αποθήκευση του προεπιλεγμένου συντελεστή dimming είναι 255, εάν δεν είναι συνδεδεμένο Potint dimPin = 4; // Δοχείο συνδεδεμένο με το A4 για να μειώσει τη φωτεινότητα // Μεταβλητές προγράμματοςint redVal = 255; // Μεταβλητές για αποθήκευση των τιμών για αποστολή στο pinsint greenVal = 1; // Οι αρχικές τιμές είναι Red full, Green και Blue offint blueVal = 1; int i = 0; // Μετρητής βρόχου int wait; // = 15; // 50ms (.05 δευτερόλεπτο) καθυστέρηση. συντομεύστε για ταχύτερη ξεθώριασμα k = 0; // τιμή για το controlLED στο blink-functionint DEBUG = 0; // μετρητής DEBUG. αν οριστεί σε 1, θα γράψει τιμές πίσω μέσω σειριακής οθόνης LCD = 0. // Μετρητής LCD. εάν έχει οριστεί σε 1, θα γράψει τιμές πίσω μέσω serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // ορίζει τις ακίδες ως pinMode εξόδου (greenPin, OUTPUT). pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // ορίζει τις ακίδες ως pinMode εξόδου (dimbluePin, OUTPUT). pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Ορίστε τον πείρο διακόπτη ως είσοδο attachInterrupt (0, isr0, RISING). if (DEBUG) {// Αν θέλουμε να δούμε τις τιμές pin για εντοπισμό σφαλμάτων … Serial.begin (9600); //… ρυθμίστε τη σειριακή έξοδο στο στυλ 0004}} // Κύριος βρόχος programvoid () {if (buttonPresses == 0) {Moodlamp (); // καλεί τη λειτουργία Moodlight} εάν (buttonPresses == 1) {RGBPotMixer (); // καλεί τη λειτουργία μίξης manuel} if (buttonPresses == 2) {White (); // Είναι όλα λευκά εδώ} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Λευκό(); Οθόνη(); dim ();} void Monitor () {// Αποστολή κατάστασης στην οθόνη εάν (DEBUG) {// Εάν θέλουμε να διαβάσουμε την έξοδο DEBUG += 1; // Αυξήστε τον μετρητή DEBUG εάν (DEBUG> 10) {// Εκτυπώστε κάθε 10 βρόχους DEBUG = 1; // Επαναφορά του μετρητή Serial.print (i); // Σειριακές εντολές σε στυλ 0004 Serial.print ("\ t"); // Εκτύπωση καρτέλας Serial.print ("R:"); // Υποδείξτε ότι η έξοδος είναι κόκκινη τιμή Serial.print (redVal); // Εκτύπωση κόκκινης τιμής Serial.print ("\ t"); // Εκτύπωση καρτέλας Serial.print ("G:"); // Επανάληψη για πράσινο και μπλε… Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, για να τελειώσει με μια επιστροφή μεταφοράς Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, για να τελειώσει με μια επιστροφή μεταφοράς Serial.print ("\ t"); Serial.print ("περιμένετε:"); Serial.print (αναμονή); // γράφει την τιμή του potPin0 στην οθόνη Serial.print ("\ t"). Serial.print ("hueRGBvalue"); Serial.print (potVal); // γράφει την τιμή του potPin0 στην οθόνη Serial.print ("\ t"). Serial.print ("buttonState:"); Serial.print (buttonState); // γράφει την τιμή του potPin0 στην οθόνη Serial.print ("\ t"). Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // γράφει την τιμή του κουμπιούΠιέζει στην οθόνη}}} void dim () // Function for dimming White // ίσως αργότερα για όλες τις λειτουργίες {maxVal = analogRead (dimPin); maxVal /= 4; // Αναλογικό εύρος από 0..1024 πάρα πολύ για να μειωθεί η τιμή 0..255 analogWrite (dimredPin, maxVal). analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // αναζητήστε την τιμή από το potPin0; // αν δεν είναι συνδεδεμένο Pot: περιμένετε 255 i += 1; // Αριθμός αύξησης // i = i - maxVal; εάν (i <255) // Πρώτη φάση ξεθωριάζει {redVal -= 1; // Κόκκινο προς τα κάτω greenVal += 1; // Green up blueVal = 1; // Μπλε χαμηλό} else if (i <509) // Δεύτερη φάση ξεθωριάζει {redVal = 1; // Κόκκινο χαμηλό greenVal -= 1; // Πράσινο κάτω blueVal += 1; // Μπλε επάνω} else if (i <763) // Τρίτη φάση εξασθένισης {redVal += 1; // Red up greenVal = 1; // Πράσινο lo2 blueVal -= 1; // Μπλε κάτω} άλλο // Ρυθμίστε ξανά τον μετρητή και ξεκινήστε ξανά το ξεθώριασμα {i = 1; } // κάνουμε "255 -redVal" αντί για "redVal" επειδή τα // LED είναι συνδεδεμένα έως +5V αντί για Gnd analogWrite (redPin, 255 - redVal). // Γράψτε τρέχουσες τιμές σε ακίδες LED 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); // Γράψτε τρέχουσες τιμές σε ακίδες LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / αναμονή / = 4; καθυστέρηση (αναμονή)? // Παύση για «αναμονή» χιλιοστά του δευτερολέπτου πριν συνεχίσετε τον βρόχο} void RGBPotMixer () {potVal = analogRead (potPin2); // διαβάστε την τιμή του ποτενσιόμετρου στην ακίδα εισόδου potVal = potVal / 4; // μετατροπή από 0-1023 σε 0-255 hue_to_rgb (potVal); // μεταχειριστείτε το potVal ως απόχρωση και μετατρέψτε σε rgb vals // "255-" είναι επειδή έχουμε LED κοινής ανόδου και όχι analogWrite κοινής καθόδου (redPin, 255-redVal). // Γράψτε τιμές σε ακίδες LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Γράψτε τιμές σε ακίδες LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Δεδομένης μιας μεταβλητής απόχρωσης «h», που κυμαίνεται από 0-252,
  • ορίστε κατάλληλα την τιμή χρώματος RGB.
  • Υποθέτει maxValimum Saturation & maximum Value (brightness)
  • Εκτελεί καθαρά ακέραιους μαθηματικούς, χωρίς κυμαινόμενο σημείο.

*/void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // επιστροφή στο 252 !! nejo byte hd = απόχρωση / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd % 6; // δίνει 0-5 byte f = απόχρωση % 42; byte fs = f * 6; διακόπτης (γεια) {περίπτωση 0: redVal = 252; greenVal = fs; blueVal = 0; Διακοπή; περίπτωση 1: redVal = 252-fs; greenVal = 252; blueVal = 0; Διακοπή; περίπτωση 2: redVal = 0; greenVal = 252; blueVal = fs; Διακοπή; περίπτωση 3: redVal = 0; greenVal = 252-fs; blueVal = 252; Διακοπή; περίπτωση 4: redVal = fs; greenVal = 0; blueVal = 252; Διακοπή; περίπτωση 5: redVal = 252; greenVal = 0; blueVal = 252-fs; Διακοπή; }} void isr0 () {Serial.println ("\ n / n διεφθαρμένο / n"); buttonState = digitalRead (switchPin); // διαβάστε την αρχική κατάσταση delayMicroseconds (100000). // if (val! = buttonState) {// η κατάσταση του κουμπιού έχει αλλάξει! // if (buttonState == HIGH) {// ελέγξτε αν το κουμπί έχει πλέον πατηθεί κουμπίΠιέζει ++; //} // val = buttonState; // αποθηκεύστε τη νέα κατάσταση στη μεταβλητή μας εάν (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Επόμενο στάδιο ήταν τα προγράμματα οδήγησης τρανζίστορ. Χρησιμοποίησα 3 τρανζίστορ PNP με μέγιστο ρεύμα στα 3Αμπέρ. Αφού ρυθμίστηκε το ρεύμα και η τάση, το LEDemitter λειτούργησε τέλεια με πλήρη ένταση.

Βήμα 6: Αποκτήστε το αυτόνομα με το πρόγραμμα εγγραφής εκκίνησης PonyProg

Αποκτήστε το αυτόνομα με το πρόγραμμα εκκίνησης PonyProg που έχει καεί
Αποκτήστε το αυτόνομα με το πρόγραμμα εκκίνησης PonyProg που έχει καεί

Πώς να χρησιμοποιήσετε τη θύρα paralell για να κάψετε τον εκκίνηση arduino σε ένα ATmega168 ή ATmega8 για να χρησιμοποιήσετε ένα φθηνό κενό τσιπ με το περιβάλλον arduino. Σύντομα….. ίσως σε ξεχωριστό εκπαιδευτικό /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Βήμα 7: Αυτό είναι το Arduino Moodlamp μου

Αυτό είναι το Arduino Moodlamp μου
Αυτό είναι το Arduino Moodlamp μου

Αν σας άρεσε, βαθμολογήστε με.

Συνιστάται: