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

Βελτίωση ενός Arduino LED Mood Cube (Απλό) (Περιλαμβάνεται βίντεο): 4 βήματα
Βελτίωση ενός Arduino LED Mood Cube (Απλό) (Περιλαμβάνεται βίντεο): 4 βήματα

Βίντεο: Βελτίωση ενός Arduino LED Mood Cube (Απλό) (Περιλαμβάνεται βίντεο): 4 βήματα

Βίντεο: Βελτίωση ενός Arduino LED Mood Cube (Απλό) (Περιλαμβάνεται βίντεο): 4 βήματα
Βίντεο: Make your own LED Mood Lamp | Arduino + WS2812 2024, Ιούλιος
Anonim
Βελτίωση ενός Arduino LED Mood Cube (Απλό) (Περιλαμβάνεται βίντεο)
Βελτίωση ενός Arduino LED Mood Cube (Απλό) (Περιλαμβάνεται βίντεο)

Αφού είδα ένα έργο μικρού κύβου διάθεσης LED που δημιουργήθηκε από τον «κόμη», αποφάσισα να κάνω μια βελτιωμένη έκδοση του LED Mood Cube. Η έκδοση μου θα είναι πιο πολύπλοκη από την αρχική, καθώς θα είναι ελαφρώς μεγαλύτερη από την αρχική, θα έχει δύο ακόμη χρώματα σε σύγκριση με τον αρχικό κύβο (προστέθηκε κίτρινο και λευκό), θα έχει άπειρη περιστροφή χρωμάτων κ.λπ. θα πρέπει να είναι ένα καλό έργο για την περαιτέρω χρήση των φώτων LED για όσους κατάλαβαν την ιδέα της σύνδεσης των φώτων LED με καλώδια.

Βήμα 1: Υλικά

Υλικά
Υλικά
Υλικά
Υλικά

Εδώ είναι μερικά υλικά που θα χρειαστείτε για να φτιάξετε αυτόν τον κύβο διάθεσης:

  • Breadboard
  • Arduino - (έχω τον Λεονάρντο εδώ)
  • Τροφοδοτικό Arduino / καλώδιο USB
  • Breadboard
  • Jumper Wires (Πολλά από αυτά, χρησιμοποίησα 29 καλώδια)
  • Κόκκινο LED x 2
  • Μπλε LED x 2
  • Πράσινο LED x 2
  • Κίτρινο LED x 2
  • Λευκό LED x 1
  • 9 αντιστάσεις
  • Κουτί αρκετά μεγάλο για να χωρέσει το breadboard (χρησιμοποίησα κουτί παπουτσιών)
  • Μαχαίρι χρησιμότητας
  • Χαρτί

Βήμα 2: Κωδικός

Μερικές εξηγήσεις για τον κωδικό που δίνεται εδώ:

Η πίστωση των κωδικών πηγαίνει στην αρχική πηγή του έργου μου καθώς ο συντάκτης του έργου δημιούργησε αυτούς τους κωδικούς. Απλώς βελτίωσα μερικά από αυτά κάνοντάς τα πιο περίπλοκα. Σε ορισμένους κωδικούς, ενδέχεται να δείτε // 改 στο τέλος. Αυτό σημαίνει ότι αυτός ο κώδικας έχει επεξεργαστεί από εμένα, επομένως είναι διαφορετικός από την αρχική πηγή μου.

Έχω επίσης μια έκδοση του κώδικα στο Arduino Creator.

/* Κωδικός για διασταύρωση 3 LED, κόκκινο, πράσινο και μπλε (RGB) Για να δημιουργήσετε ξεθώριασμα, πρέπει να κάνετε δύο πράγματα: 1. Περιγράψτε τα χρώματα που θέλετε να εμφανίζονται 2. Καταχωρίστε τη σειρά με την οποία θέλετε να ξεθωριάζουν

ΠΕΡΙΓΡΑΦΗ ΧΡΩΜΑΤΟΣ:

Ένα χρώμα είναι απλώς ένας πίνακας τριών ποσοστών, 0-100, που ελέγχει τα κόκκινα, πράσινα και μπλε LED

Το κόκκινο είναι το κόκκινο LED εντελώς, μπλε και πράσινο σβηστό

int κόκκινο = {100, 0, 0} Λευκό λευκό είναι και τα τρία LED σε 30% int dimWhite = {30, 30, 30} κ.λπ.

Κάποια κοινά χρώματα παρέχονται παρακάτω ή φτιάξτε τα δικά σας

ΑΚΟΥΣΤΕ ΤΗΝ ΠΑΡΑΓΓΕΛΙΑ:

Στο κύριο μέρος του προγράμματος, πρέπει να αναφέρετε τη σειρά με την οποία θέλετε να εμφανίζονται τα χρώματα, π.χ. crossFade (κόκκινο) crossFade (πράσινο) crossFade (μπλε)

Αυτά τα χρώματα θα εμφανιστούν με αυτή τη σειρά, ξεθωριάζοντας

ένα χρώμα και στο επόμενο

Επιπλέον, υπάρχουν 5 προαιρετικές ρυθμίσεις που μπορείτε να προσαρμόσετε:

1. Το αρχικό χρώμα έχει οριστεί σε μαύρο (έτσι το πρώτο χρώμα σβήνει), αλλά μπορείτε να ορίσετε το αρχικό χρώμα να είναι οποιοδήποτε άλλο χρώμα 2. Ο εσωτερικός βρόχος εκτελείται για 1020 ενσωματώσεις. η μεταβλητή 'αναμονή' ορίζει την κατά προσέγγιση διάρκεια μιας μεμονωμένης διασταύρωσης. Θεωρητικά, μια «αναμονή» 10 ms θα πρέπει να κάνει ένα crossFade ~ 10 δευτερολέπτων. Στην πράξη, οι άλλες λειτουργίες που εκτελεί ο κώδικας επιβραδύνονται σε seconds 11 δευτερόλεπτα στον πίνακα μου. YMMV. 3. Εάν η ένδειξη «επανάληψη» έχει οριστεί σε 0, το πρόγραμμα θα κάνει βρόχο επ 'αόριστον. αν έχει οριστεί σε έναν αριθμό, θα κάνει βρόχο αυτόν τον αριθμό φορές και μετά θα σταματήσει στο τελευταίο χρώμα της ακολουθίας. (Ορίστε την "επιστροφή" σε 1 και κάντε το τελευταίο χρώμα μαύρο αν θέλετε να εξαφανιστεί στο τέλος.) 4. Υπάρχει μια προαιρετική μεταβλητή "κράτημα", η οποία περνά το πρόγραμμα για "κράτημα" χιλιοστά του δευτερολέπτου όταν ένα χρώμα είναι ολοκληρωμένο, αλλά πριν ξεκινήσει το επόμενο χρώμα. 5. Ορίστε τη σημαία DEBUG σε 1 εάν θέλετε να αποσταλεί η έξοδος εντοπισμού σφαλμάτων στη σειριακή οθόνη.

Τα εσωτερικά του προγράμματος δεν είναι περίπλοκα, αλλά

είναι λίγο θορυβώδη - οι εσωτερικές λειτουργίες εξηγούνται κάτω από τον κύριο βρόχο.

Απρίλιος 2007, Κλέι Σίρκι

*

/ Έξοδος

int ylwPin = 5; // Κίτρινο LED, συνδεδεμένο με τον ψηφιακό pin 5 // 改 int redPin = 6; // Κόκκινο LED, συνδεδεμένο με τον ψηφιακό pin 6 // 改 int grnPin = 7; // Πράσινο LED, συνδεδεμένο με την ψηφιακή ακίδα 7 // 改 int bluPin = 8; // Μπλε LED, συνδεδεμένο με τον ψηφιακό ακροδέκτη 8 // 改 int whiPin = 9; // Λευκό LED, συνδεδεμένο με την ψηφιακή ακίδα 9 // 改 int ylwPin2 = 10; // Κίτρινο LED, συνδεδεμένο με τον ψηφιακό pin 10 // 改 int redPin2 = 11; // Κόκκινο LED, συνδεδεμένο με τον ψηφιακό pin 11 // 改 int grnPin2 = 12; // Πράσινο LED, συνδεδεμένο με την ψηφιακή ακίδα 12 // 改 int bluPin2 = 13; // Μπλε LED, συνδεδεμένο με την ψηφιακή ακίδα 13 // 改

// Πίνακες χρωμάτων

int μαύρο [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // 改 int λευκό [9] = {100, 100, 100, 100, 100, 100, 100, 100, 100}; // 改 int κόκκινο [9] = {0, 0, 100, 0, 0, 0, 100, 0, 0}; // 改 int πράσινο [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // 改 int μπλε [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // 改 int κίτρινο [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // 改 int μοβ [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // 改 int orange [9] = {50, 50, 0, 0, 0, 50, 50, 0, 0}; // 改 int ροζ [9] = {0, 50, 0, 0, 50, 0, 0, 50, 0,}; // 改 // κ.λπ.

// Ορίστε το αρχικό χρώμα

int redVal = μαύρο [0]; int grnVal = μαύρο [1]; int bluVal = μαύρο [2]; int ylwVal = μαύρο [3]; // 改 int whiVal = μαύρο [4]; // 改

int αναμονή = 15; // 10ms εσωτερική καθυστέρηση crossFade? αύξηση για πιο αργές εξασθενίσεις //

int hold = 1; // Προαιρετικό κράτημα όταν ολοκληρωθεί ένα χρώμα, πριν από το επόμενο crossFade // 改 int DEBUG = 1; // μετρητής DEBUG. αν οριστεί σε 1, θα γράψει τιμές πίσω μέσω σειριακού int loopCount = 60; // Πόσο συχνά πρέπει να αναφέρει η DEBUG; int επανάληψη = 0; // Πόσες φορές πρέπει να κάνουμε βρόχο πριν σταματήσουμε; (0 χωρίς στάση) // 改 int j = 0; // Μετρητής βρόχου για επανάληψη

// Αρχικοποίηση μεταβλητών χρώματος

int prevR = redVal; int prevG = grnVal; int prevB = bluVal; int prevY = ylwVal; int prevW = whiVal; // 改

// Ρυθμίστε τις εξόδους LED

void setup () {pinMode (redPin, OUTPUT); // ορίζει τις ακίδες ως pinMode εξόδου (grnPin, OUTPUT). pinMode (bluPin, OUTPUT); pinMode (ylwPin, OUTPUT); // 改 pinMode (whiPin, OUTPUT); // 改 pinMode (grnPin2, OUTPUT); // 改 pinMode (bluPin2, OUTPUT); // 改 pinMode (ylwPin2, OUTPUT); // 改 pinMode (redPin2, OUTPUT); // 改

if (DEBUG) {// Αν θέλουμε να δούμε τιμές για εντοπισμό σφαλμάτων…

Serial.begin (9600); //… ρυθμίστε τη σειριακή έξοδο}}

// Κύριο πρόγραμμα: απαριθμήστε τη σειρά των διασταυρώσεων

void loop () {crossFade (κόκκινο); crossFade (πράσινο) crossFade (μπλε) crossFade (κίτρινο) crossFade (λευκό) crossFade (ροζ)? crossFade (μοβ)? crossFade (πορτοκαλί)?

εάν (επανάληψη) {// Κάνουμε βρόχο έναν πεπερασμένο αριθμό φορών;

j += 1; εάν (j> = επανάληψη) {// Είμαστε ακόμα εκεί; έξοδο (ι) · // Αν ναι, σταματήστε. }}}

/* ΠΑΡΑΚΑΤΩ ΑΥΤΗ Η ΓΡΑΜΜΗ ΕΙΝΑΙ ΤΟ ΜΑΘΗΜΑ - ΔΕΝ ΠΡΕΠΕΙ ΝΑ ΤΟ ΑΛΛΑΞΕΤΕ ΑΥΤΟ ΓΙΑ ΤΑ ΒΑΣΙΚΑ

Το πρόγραμμα λειτουργεί ως εξής:

Φανταστείτε ένα crossfade που μετακινεί το κόκκινο LED από 0-10, το πράσινο από 0-5 και το μπλε από 10 σε 7, σε δέκα βήματα. Θα θέλαμε να μετρήσουμε τα 10 βήματα και να αυξήσουμε ή να μειώσουμε τις τιμές χρωμάτων σε ομοιόμορφα βήματα. Φανταστείτε ότι το + δείχνει αύξηση της τιμής κατά 1 και a - ισοδυναμεί με μείωση. Το ξεθώριασμα των 10 βημάτων μας θα μοιάζει με:

1 2 3 4 5 6 7 8 9 10

R + + + + + + + + + + + G + + + + + B - - -

Το κόκκινο ανεβαίνει από το 0 στο 10 σε δέκα βήματα, το πράσινο από

0-5 σε 5 βήματα και το μπλε πέφτει από 10 σε 7 σε τρία βήματα.

Στο πραγματικό πρόγραμμα, τα ποσοστά χρώματος μετατρέπονται σε

0-255 τιμές και υπάρχουν 1020 βήματα (255*4).

Για να καταλάβετε πόσο μεγάλο βήμα πρέπει να γίνει μεταξύ ενός επάνω ή

down-tick μιας από τις τιμές LED, ονομάζουμε calcStep (), που υπολογίζει το απόλυτο κενό μεταξύ των αρχικών και τελικών τιμών και στη συνέχεια διαιρεί αυτό το κενό κατά 1020 για να καθορίσει το μέγεθος του βήματος μεταξύ των προσαρμογών της τιμής. */

int calcStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Ποιο είναι το συνολικό κενό; εάν (βήμα) {// Εάν είναι μηδενικό, βήμα = 1020 / βήμα. // διαίρεση με 1020} βήμα επιστροφής. }

/* Η επόμενη συνάρτηση είναι το CalcVal. Όταν η τιμή του βρόχου, φτάνει το μέγεθος του βήματος που είναι κατάλληλο για ένα από τα χρώματα, αυξάνει ή μειώνει την τιμή αυτού του χρώματος κατά 1. (τα R, G και B υπολογίζονται το καθένα ξεχωριστά.) */

int calcVal (int step, int val, int i) {

εάν ((βήμα) && i % βήμα == 0) {// Εάν το βήμα είναι μη μηδενικό και ήρθε η ώρα να αλλάξει μια τιμή, εάν (βήμα> 0) {// αυξήστε την τιμή εάν το βήμα είναι θετικό… val += 1; } else if (βήμα 255) {val = 255; } else if (val <0) {val = 0; } επιστροφή val; }

/* crossFade () μετατρέπει το ποσοστό των χρωμάτων σε a

Εύρος 0-255, στη συνέχεια βρόχος 1020 φορές, έλεγχος για να δείτε εάν η τιμή πρέπει να ενημερώνεται κάθε φορά και, στη συνέχεια, γράφετε τις τιμές χρώματος στις σωστές ακίδες. */

void crossFade (int χρώμα ) {// 改

// Μετατροπή σε 0-255 int R = (χρώμα [0] * 255) / 100; int G = (χρώμα [1] * 255) / 100; int B = (χρώμα [2] * 255) / 100; int Y = (χρώμα [3] * 255) / 100; // 改 int W = (χρώμα [4] * 255) /100; // 改

int stepR = calcStep (prevR, R);

int stepG = calcStep (prevG, G); int βήμαB = υπολογισμός Βήμα (prevB, B); int stepY = calcStep (prevY, Y); // 改 int stepW = calcStep (prevW, W); // 改

για (int i = 0; i <= 1020; i ++) {redVal = calcVal (stepR, redVal, i); grnVal = υπολογισμόςVal (stepG, grnVal, i); bluVal = calcVal (stepB, bluVal, i); ylwVal = υπολογισμόςVal (βήμαY, ylwVal, i); // 改 whiVal = υπολογισμόςVal (βήμαW, whiVal, i); // 改

analogWrite (redPin, redVal); // Γράψτε τις τρέχουσες τιμές στις ακίδες LED

analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal); analogWrite (ylwPin, ylwVal); // 改 analogWrite (whiPin, whiVal); // 改 analogWrite (grnPin2, grnVal); // 改 analogWrite (bluPin2, bluVal); // 改 analogWrite (ylwPin2, ylwVal); // 改 analogWrite (redPin2, redVal); // 改

καθυστέρηση (αναμονή)? // Παύση για «αναμονή» χιλιοστά του δευτερολέπτου πριν συνεχίσετε τον βρόχο

if (DEBUG) {// Αν θέλουμε σειριακή έξοδο, εκτυπώστε το στο

if (i == 0 ή i % loopCount == 0) {// αρχή, και κάθε loopCount φορές Serial.print ("Loop/RGBYW: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print (" /"); Serial.print (grnVal); Serial.print (" /"); Serial.println (bluVal); Serial.print (" /"); Serial.println (ylwVal); // 改 Serial.print (" /"); // 改 Serial.println (whiVal); // 改 Serial.print (" /"); // 改} DEBUG += 1; }} // Ενημέρωση τρεχουσών τιμών για τον επόμενο βρόχο prevR = redVal; prevG = grnVal; prevB = bluVal; prevY = ylwVal; // 改 prevW = whiVal; // 改 καθυστέρηση (κράτημα); // Παύση για προαιρετική «αναμονή» χιλιοστά του δευτερολέπτου προτού συνεχίσετε τον βρόχο}

Βήμα 3: Ρύθμιση

Στήνω
Στήνω
Στήνω
Στήνω
Στήνω
Στήνω
  1. Πάρτε το breadboard.
  2. Επίδειξη των καλωδίων σύνδεσης ώστε να ανάβει ένα φως LED:

    1. Τοποθετήστε το LED στο breadboard. Τοποθετήστε το μεγαλύτερο άκρο στα αριστερά και το μικρότερο άκρο στα δεξιά.
    2. Τοποθετήστε το ένα άκρο ενός καλωδίου βραχυκυκλωτήρα σε ένα σημείο που βρίσκεται στην ίδια σειρά με το μεγαλύτερο άκρο του LED. Τοποθετήστε το άλλο άκρο στην ενότητα Digitalηφιακό PWM. Ο κώδικας καθορίζει τα κίτρινα LED που θα συνδεθούν με 10 και 5, κόκκινα σε 6 και 11, μπλε σε 8 και 13, πράσινα σε 7 και 12 και τέλος λευκά LED σε 9.
    3. Τοποθετήστε το ένα άκρο μιας αντίστασης στην ίδια σειρά με το μικρότερο άκρο του LED. Τοποθετήστε το άλλο άκρο κάπου κοντά.
    4. Τοποθετήστε ένα άκρο ενός άλλου καλωδίου άλματος με την ίδια σειρά με το άκρο της αντίστασης που δεν βρίσκεται στην ίδια σειρά με το μικρότερο άκρο του LED. Τοποθετήστε το άλλο άκρο του σύρματος στη σειρά αρνητικού φορτίου.
    5. Τοποθετήστε ένα άκρο ενός άλλου καλωδίου βραχυκυκλωτή στη σειρά αρνητικού φορτίου και τοποθετήστε το άλλο του άκρο στο GND.
  3. Επαναλάβετε το Βήμα 2 για 8 φορές καθώς θέλετε να λάμπουν 9 LED
  4. Τοποθετήστε το breadboard μέσα στο κουτί. Μερικές υπενθυμίσεις εδώ:

    1. Χρησιμοποίησα τροφοδοτικό. Δημιουργήστε μια μικρή τρύπα για τα καλώδια σας χρησιμοποιώντας ένα μαχαίρι χρησιμότητας για να περάσετε από το κουτί και να συνδεθείτε με το ψωμί.
    2. Βεβαιωθείτε ότι το κουτί είναι μια πλευρά που είναι ανοιχτή. Ένα κουτί παπουτσιών έχει ήδη τη μία πλευρά που είναι ανοιχτή. Εάν το κουτί είναι πλήρως κλειστό, κόψτε τη μία πλευρά του κουτιού για να δημιουργήσετε έναν ανοιχτό χώρο.
    3. Καλύψτε την πλευρά με τίποτα με χαρτί. Αυτό είναι για να λάμπουν τα φώτα LED μέσα από το χαρτί.

Συνιστάται: