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

Starry Sky Led Tie: 9 βήματα (με εικόνες)
Starry Sky Led Tie: 9 βήματα (με εικόνες)

Βίντεο: Starry Sky Led Tie: 9 βήματα (με εικόνες)

Βίντεο: Starry Sky Led Tie: 9 βήματα (με εικόνες)
Βίντεο: Днестр- от истока до моря Часть 9 Начало каньона Дворец Бадени Коропец Возиловский водопад Сплав 2024, Νοέμβριος
Anonim
Image
Image
Γραβάτα Starry Sky Led
Γραβάτα Starry Sky Led
Γραβάτα Starry Sky Led
Γραβάτα Starry Sky Led

Πριν από λίγο καιρό βρήκα ένα παιδικό παιχνίδι με οπτικές ίνες σε ένα κατάστημα δολαρίων και άρχισα να σκέφτομαι τι θα μπορούσα να κάνω με αυτό.

Μία από τις τρελές ιδέες που είχα, ήταν να κάνω μια γραβάτα με την επίδραση ενός έναστρου ουρανού.

Είχα ακόμα arduino pro mini, σανίδες adafruit και μπαταρίες που θα ταιριάζουν πιθανώς σε αυτό το έργο.

Μόλις λοιπόν βρήκα μια ωραία φαρδιά γραβάτα σε ένα ενεχυροδανειστήριο στην πόλη μου και βρήκα ένα κουτί που θα μπορούσε να ταιριάζει στο υλικό, αποφάσισα να το πάω και να προσπαθήσω να το φτιάξω.

Αυτό το διδακτικό σας δείχνει πώς το έφτιαξα.

Λειτουργεί με φορτιστή arduino pro mini, adafruit powerboost 500, φορτηγό emmerich icr 18650nh-sp και 5 λευκά LED. Ο κώδικας καθιστά την αλλαγή φωτεινότητας της λυχνίας LED τυχαία. (Τα πρώτα 40 δευτερόλεπτα του βίντεο είναι 3x ταχύτητα)

Βήμα 1: Σχήματα και υλικό

Σχήματα και υλικό
Σχήματα και υλικό
Σχήματα και υλικό
Σχήματα και υλικό

Χρησιμοποιώ το ακόλουθο υλικό:

- PCB με LED λευκού πάγου και αντιστάσεις 220 Ohm.

-Arduino pro mini (χρησιμοποίησα knockoff)

-Φορτιστής Adafruit Powerboost 500

-Emmerich Li-ion accu ICR-18650NH-SP

- Οπτικές ίνες (σε διαφορετικά μεγέθη)

Βήμα 2: Κάνοντας το PCB να φιλοξενεί τα LED

Κάνοντας το PCB Hosting των LED
Κάνοντας το PCB Hosting των LED
Κάνοντας το PCB Hosting των LED
Κάνοντας το PCB Hosting των LED
Κάνοντας το PCB Hosting των LED
Κάνοντας το PCB Hosting των LED

Έκοψα μια λωρίδα από ένα PCB για να συγκρατήσω τα LED και χρησιμοποίησα τις καρφίτσες LED για να το κολλήσω στο κύριο PCB.

Συνδέθηκε όλες οι κάθοδοι (-) με το GND και χρησιμοποίησε τις μισές ακίδες για να το κολλήσει κολλημένο στο κύριο PCB.

Συνδέθηκε όλες οι άνοδοι (+) με αντιστάσεις και με καλώδια στο arduino.

Κάθε LED πρέπει να είναι συνδεδεμένο σε μία από τις ακόλουθες θύρες PWM: 3, 5, 6, 9, 10, 11

Ο ανόητος με έκανε πολλά λάθη με αυτό το έργο και ξέχασα να ελέγξω τις σωστές θύρες PWM, οπότε έπρεπε να μεταπωλήσω μερικά αργότερα. Δοκιμασμένο με υψηλό/χαμηλό, έτσι το παρατήρησα μόνο αργότερα.

Ξεκίνησα με 7 LED, αλλά υπήρχαν μόνο 6 θύρες PWM και ένα από τα LED που μεταπωλήθηκε πέθανε. Απλώς κράτησα τα 5 LED που λειτουργούν και δεν χρησιμοποιώ το 6ο.

Βήμα 3: Φτιάχνοντας το κουτί

Κάνοντας το κουτί
Κάνοντας το κουτί
Κάνοντας το κουτί
Κάνοντας το κουτί
Κάνοντας το κουτί
Κάνοντας το κουτί
Κάνοντας το κουτί
Κάνοντας το κουτί

Χρησιμοποίησα ένα Bosch GRO (σαν Dremel) και ένα τρυπάνι για να κόψω το σχήμα της μπαταρίας, το κουμπί, τη θύρα micro-usb, τις κεφαλίδες από το Arduino και τις οπτικές ίνες. (χρησιμοποιήστε μάσκα σκόνης!)

Κόλλησε την μπαταρία στη θήκη με 2 ζώνες.

Χρησιμοποιήθηκαν βίδες για την τοποθέτηση της πλακέτας Adafruit και του PCB.

Η τριβή από το άνοιγμα και το κλείσιμο υπέστη ζημιά σε ορισμένα καλώδια. Έπρεπε να τα ξανακολλήσω και να χρησιμοποιήσω κόλλα για να μην ξανασυμβεί.

Βήμα 4: Προετοιμασία της γραβάτας

Προετοιμασία της γραβάτας
Προετοιμασία της γραβάτας
Προετοιμασία της γραβάτας
Προετοιμασία της γραβάτας
Προετοιμασία της γραβάτας
Προετοιμασία της γραβάτας

Αφαίρεσε τις ραφές από το κάτω μέρος της γραβάτας για να ταιριάζει στο λαστιχένιο φύλλο.

Για να αποκρύψω το υλικό και να έχω ακόμα πρόσβαση σε αυτό, αν χρειαστεί, αποφάσισα να χρησιμοποιήσω ένα φερμουάρ.

Δεν είμαι καλός με μια ραπτομηχανή, οπότε η γλυκιά μου μαμά έβαλε ένα φερμουάρ στο πίσω μέρος της γραβάτας.

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

Το κουτί και η γραβάτα έχουν τελειώσει. Timeρα να κολλήσετε τα φυτικά οπτικά!

Βήμα 5: Κολλήστε τα Fiberoptics

Κολλήστε τα Fiberoptics
Κολλήστε τα Fiberoptics
Κολλήστε τα Fiberoptics
Κολλήστε τα Fiberoptics
Κολλήστε τα Fiberoptics
Κολλήστε τα Fiberoptics
Κολλήστε τα Fiberoptics
Κολλήστε τα Fiberoptics

Το παιχνίδι είχε ένα μεγάλο καλώδιο οπτικών ινών δέσμης που διασπάστηκε εύκολα. Προσπάθησα να τα κολλήσω ένα ένα στην αρχή, αλλά σύντομα παρατήρησα ότι θα ήταν καλύτερα να φτιάξω μικρές δέσμες και να τις κολλήσω αμέσως στο LED. Αυτό θα διευκολύνει τη διατήρησή του μέχρι να στεγνώσει η κόλλα. Μπέρδεψε το πρώτο LED που το κατάλαβε.

Χρησιμοποιήστε οπωσδήποτε διαφανή κόλλα! Αυτό που χρησιμοποίησα στέγνωσε πολύ αργά και η κόλλα ταχείας ξήρανσης που δοκίμασα στο πρώτο LED έγινε άσπρο, κάνοντας μερικές ίνες από το πρώτο LED λιγότερο φωτεινές.

Κόλλησα μικρά μαύρα λαστιχένια φύλλα για να αποφύγω τη διαρροή φωτός από πάνω και να διαχωρίσω τα LED.

Ένα από τα φύλλα εμπόδισε το κλείσιμο της θήκης, οπότε πρόσθεσα μια λαστιχένια ταινία για να κρατήσω το κάλυμμα κλειστό.

Βήμα 6: Βάζοντας Fiberoptics Through the Tie

Βάζοντας Fiberoptics Through the Tie
Βάζοντας Fiberoptics Through the Tie
Βάζοντας Fiberoptics Through the Tie
Βάζοντας Fiberoptics Through the Tie
Βάζοντας Fiberoptics Through the Tie
Βάζοντας Fiberoptics Through the Tie

Ξεκινώντας από το κάτω μέρος, τσίμπησα τρύπες με μια βελόνα και έβαλα τις ίνες μία προς μία. Οι ίνες κάθε LED απλώνονται τυχαία σε όλη τη γραβάτα.

Κόλλησα μια μαύρη λωρίδα στο πίσω μέρος που έπρεπε να φτάσει μέχρι το μικρότερο μέρος της γραβάτας για να κρατήσει το βάρος του κουτιού, αλλά αφού έβαλα όλα τα καλώδια και ένιωσα την ένταση των καλωδίων αποφάσισα να κολλήσω όλα για τη γραβάτα ήταν καλύτερη ιδέα και έκοψαν τη λωρίδα.

Δεδομένου ότι τα καλώδια οπτικών ινών από το παιχνίδι ήταν τόσο κοντά, ήταν δύσκολο να τα τοποθετήσουμε σε όλη τη γραβάτα. Περιορίστηκα στη θέση του κουτιού και δυσκολεύτηκα να τα κάνω όλα όσο πιο επίπεδα ήθελα.

Βήμα 7: Κολλήστε τα Fiberoptics στη γραβάτα

Κολλήστε Fiberoptics στη γραβάτα
Κολλήστε Fiberoptics στη γραβάτα
Κολλήστε Fiberoptics στη γραβάτα
Κολλήστε Fiberoptics στη γραβάτα
Κολλήστε Fiberoptics στη γραβάτα
Κολλήστε Fiberoptics στη γραβάτα
Κολλήστε Fiberoptics στη γραβάτα
Κολλήστε Fiberoptics στη γραβάτα

Κόλλησα όλα τα καλώδια οπτικών ινών στο λαστιχένιο φύλλο για να αποτρέψω την αφαίρεση των καλωδίων από το λαστιχένιο φύλλο και για να γίνει η γραβάτα επίπεδη.

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

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

Οι φωτογραφίες με το λευκό πουκάμισο γίνονται πριν κόψω το τελευταίο κομμάτι καουτσούκ.

Βήμα 8: Ο κώδικας

Κάτω από τον κωδικό που έγραψα για τη γραβάτα.

Όλες οι λυχνίες LED έχουν ένα "μέσο όρο" (όχι στην πραγματικότητα μέσο όρο αλλά μεσαία φωτεινότητα).

Μόλις φτάσει σε αυτόν τον μέσο όρο, θα αποφασίσει με πιθανότητα 3/4 να πάει σε χαμηλότερη φωτεινότητα. Ορίζει επίσης τυχαία μια νέα ελάχιστη φωτεινότητα, μέγιστη φωτεινότητα, χρόνο αναμονής για ελάχιστη και μέγιστη φωτεινότητα και την ταχύτητα που αυξάνει ή μειώνει κάθε γύρο (1-255) από 5 προκαθορισμένες τιμές. Στη συνέχεια, θα κάνει έναν κύκλο μέχρι να φτάσει ξανά στο μέσο όρο. Μόνο 2 LED μπορούν να είναι σε υψηλό κύκλο ταυτόχρονα.

Κάθε κατάσταση αντιπροσωπεύεται από μια ακέραιη τιμή (1-7) που καθορίζει εάν πηγαίνει κατά μέσο όρο χαμηλό, χαμηλό μέσο όρο, χαμηλή αναμονή, ενημέρωση κ.λπ.

Για πληροφορίες σχετικά με τη μεταφόρτωση κώδικα στο arduino, ρίξτε μια ματιά στο www.arduino.cc

/ * Starry Sky Tie * * Αυτό είναι ένα σενάριο για να ξεθωριάζει τυχαία 5 LED από μέσο όρο σε χαμηλότερο * ή υψηλότερη φωτεινότητα με τυχαίες χαμηλότερες, υψηλότερες και χρονικές ρυθμίσεις * για να μοιάζει με έναν έναστρο ουρανό όταν χρησιμοποιείται με οπτικές ίνες. * Σε αυτή την περίπτωση αυτά θα εφαρμοστούν ισόπαλα. * * Πάνω/κάτω πιθανότητα = 1/4 πάνω, 3/4 κάτω, με μέγιστο 2 * να ανεβαίνει στο μέγιστο ταυτόχρονα. * * Ο μέσος όρος παραμένει ο ίδιος. * Οι ελάχιστες, μέγιστες και χρονικές επιλογές αλλάζουν τυχαία * από 5 επιλογές κάθε φορά που ένα LED φτάνει ξανά στο μέσο όρο. * * Δημιουργήθηκε από τον Billy Jaspers, Μάιος 2019. *

/ Δηλώστε καρφίτσες

int LED01 = 3; int LED02 = 5; int LED03 = 6; int LED04 = 9; int LED05 = 11;

// Μεταβλητές χρόνου

ανυπόγραφο μακρύ currentTime; ανυπόγραφη μεγάλη αναμονήTime [5]; ανυπόγραφο long lastRound;

// Μεταβλητές LED

int brightMin [5] = {10, 10, 10, 10, 10}; // Ελάχιστη φωτεινότητα int brightAvg [5] = {200, 200, 200, 200, 200}; // Μέση φωτεινότητα int brightMax [5] = {240, 240, 240, 240, 240}; // Μέγιστη φωτεινότητα int timeWaitLow [5] = {1000, 1000, 1000, 1000, 1000}; // Χρόνος αναμονής int timeWaitAvg [5] = {5000, 5000, 5000, 5000, 5000}; // Χρόνος αναμονής int timeWaitMax [5] = {4000, 3000, 3000, 3000, 3000}; // Χρόνος αναμονής int προσαύξηση [5] = {2, 5, 4, 5, 2}; // Αύξηση φωτεινότητας int currentBright [5] = {200, 230, 210, 210, 235}; // Τρέχουσα φωτεινότητα

// Μεταβλητές LED Δυνατότητες

int brightMinPos [5] = {5, 20, 40, 5, 20}; // Ελάχιστες δυνατότητες φωτεινότητας int brightMaxPos [5] = {240, 245, 230, 225, 245}; // Μέγιστες δυνατότητες φωτεινότητας int timeLowPos [5] = {3000, 5000, 4000, 2000, 1000}; // Χρόνος αναμονής σε δυνατότητες χαμηλής φωτεινότητας int timeHighPos [5] = {3000, 1000, 500, 2000, 4000}; // Χρόνος αναμονής σε δυνατότητες υψηλής φωτεινότητας int timeAvgPos [5] = {3000, 5000, 4000, 7000, 8000}; // Χρόνος αναμονής στις μέσες δυνατότητες φωτεινότητας int incrementPos [5] = {2, 4, 5, 3, 1}; // αύξηση των δυνατοτήτων φωτεινότητας

// Μεταβλητές

bool startup = true? // Πρέπει να ξεκινήσουν οι ρυθμίσεις έναρξης;

// Μεταβλητές κατεύθυνσης

/* 0 = Αναμονή κατά μέσο όρο 1 = μέσος όρος χαμηλός 2 = αναμονή χαμηλός 3 = μετάβαση χαμηλός σε μέσος όρος 4 = μετάβαση μέγ. Σε μέγ. 5 = αναμονή στο μέγιστο 6 = μετάβαση σε υψηλό σε μέσο όρο 7 = ενημέρωση μεταβλητών*/ int κατάστασηLED [5] = {0, 0, 0, 0, 0}; int ποσόHighLED = 0; int refreshRate = 50; bool statusWaiting [5] = {false, false, false, false, false}; // Περιμένει το Led;

// Τυχαίες μεταβλητές

long randomNumber? // Long για αποθήκευση τυχαίου αριθμού long randomNumberTwo; // Παρατεταμένη αποθήκευση του δεύτερου τυχαίου αριθμού

// μετρητές

int i = 0; // Μετρητής για τον κύριο βρόχο

void setup () {

Serial.begin (115200); // Έναρξη σειριακού randomSeed (analogRead (A0)); // Ορίστε τυχαίο σπόρο

// Δήλωση εξόδων

pinMode (LED01, OUTPUT); pinMode (LED02, OUTPUT); pinMode (LED03, OUTPUT); pinMode (LED04, OUTPUT); pinMode (LED05, OUTPUT); }

// Γράψτε δεδομένα σε LED

void writeToLED () {analogWrite (LED01, currentBright [0]); analogWrite (LED02, currentBright [1]); analogWrite (LED03, currentBright [2]); analogWrite (LED04, currentBright [3]); analogWrite (LED05, currentBright [4]); }

// Κύριος βρόχος

void loop () {if (εκκίνηση) {// Ρυθμίσεις εκκίνησης lastRound = millis (); // Ορισμός lastRound για εκκίνηση writeToLED (); // Γράψτε δεδομένα έναρξης σε εκκίνηση LED = false; // Απενεργοποίηση εκκίνησης} currentTime = millis (); // Ρυθμίστε την τρέχουσα ώρα

if (currentTime - lastRound> = refreshRate) {

για (i = 0; i <5; i ++) {if (statusLED == 7) {// -7- Update Led randomNumber = random (5); brightMin = brightMinPos [randomNumber]; // Ορίστε τυχαία τιμή για ελάχιστη φωτεινότητα randomNumber = random (5); brightMax = brightMaxPos [randomNumber]; // Ορίστε τυχαία τιμή για μέγιστη φωτεινότητα randomNumber = random (5); timeWaitLow = timeLowPos [randomNumber]; // Ορίστε τυχαία τιμή για χαμηλό χρόνο αναμονής randomNumber = random (5); timeWaitMax = timeHighPos [randomNumber]; // Ορίστε τυχαία τιμή για υψηλό χρόνο αναμονής randomNumber = random (5); timeWaitAvg = timeAvgPos [τυχαίος αριθμός]; // Ορίστε τυχαία τιμή για τον μέσο χρόνο αναμονής randomNumber = random (5); προσαύξηση = incrementPos [τυχαίος αριθμός]; // Ορίστε τυχαία τιμή για τιμή αύξησης randomNumber = random (2); // Ορίστε τυχαία τιμή για την κατεύθυνση randomNumberTwo = τυχαία (2); // Ορίστε τυχαία τιμή για την κατεύθυνση εάν (randomNumber == 1 && randomNumberTwo == 0 && amountHighLED = brightAvg ) {statusLED = 0; // Εάν στο χαμηλότερο σημείο: Μεταβείτε στο Μέσο αναμονής} άλλο {currentBright = currentBright +προσαύξηση ; // Άλλο: Υψηλότερη φωτεινότητα}} αλλιώς εάν (κατάστασηLED == 2) {// -2- Χαμηλή αναμονή εάν (! StatusWaiting ) {// Εάν δεν περιμένετε: αναμονήTime = millis () ? // Ορισμός χρόνου αναμονής statusWaiting = true; // Ξεκινήστε να περιμένετε} αλλιώς εάν (statusWaiting && currentTime-waitTime > = timeWaitLow ) {// Εάν η αναμονή ΚΑΙ ο χρόνος WaitAvg έχει παρέλθει: statusWaiting = false; // Σταματήστε την κατάσταση αναμονήςLED = 3; // Ορισμός statusLed σε Αναμονή για ενημέρωση}} αλλιώς αν (statusLED == 1) {// -1- Μετάβαση σε χαμηλό εάν (currentBright <= brightMin ) {statusLED = 2; // Εάν στο χαμηλότερο σημείο: Μεταβείτε στο Waiting Low} άλλο {currentBright = currentBright -αύξηση ; // Άλλο: Χαμηλότερη φωτεινότητα}} αλλιώς αν (κατάστασηLED == 6) {// -6- Μετάβαση μέγ. Μέσου όρου εάν (currentBright = timeWaitMax ) {// Εάν περιμένει ΚΑΙ έχει περάσει η ώραWaitAvg: statusWaiting = false; // Σταματήστε την κατάσταση αναμονήςLED = 6; // Ορισμός statusLed σε Αναμονή για ενημέρωση}} αλλιώς αν (statusLED == 4) {// -4- Μετάβαση μέσου όρου στο μέγιστο εάν (currentBright > = brightMax ) {statusLED = 5; // Εάν στο χαμηλότερο σημείο: Μεταβείτε στο Waiting High} else {currentBright = currentBright +προσαύξηση ; // Άλλο: Υψηλότερη φωτεινότητα}} αλλιώς αν (statusLED == 0) {// -0- Αναμονή κατά μέσο όρο εάν (! StatusWaiting ) {// Εάν δεν περιμένετε: αναμονήTime = millis (); // Ορισμός χρόνου αναμονής statusWaiting = true; // Ξεκινήστε να περιμένετε} αλλιώς εάν (statusWaiting && currentTime-waitTime > = timeWaitAvg ) {// Εάν η αναμονή ΚΑΙ ο χρόνοςWaitAvg έχει παρέλθει: statusWaiting = false; // Σταματήστε την κατάσταση αναμονήςLED = 7; // Ορισμός statusLed σε Αναμονή για ενημέρωση}}} i = 0; lastRound = millis (); // Ορίστε όταν τελειώσει ο τελευταίος γύρος. writeToLED (); // Γράψτε όλα τα δεδομένα στις λυχνίες LED}}

Βήμα 9: Τελικό προϊόν

Image
Image
Τελικό προϊόν
Τελικό προϊόν
Τελικό προϊόν
Τελικό προϊόν

Νομίζω ότι λειτούργησε καλά. Η γραβάτα δεν είναι πολύ παχιά, άκαμπτη, μακριά ή βαριά και το εφέ αστεριού φαίνεται εκπληκτικό.

Συνιστάται: