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

Fancy LED Hat: 5 Βήματα (με Εικόνες)
Fancy LED Hat: 5 Βήματα (με Εικόνες)

Βίντεο: Fancy LED Hat: 5 Βήματα (με Εικόνες)

Βίντεο: Fancy LED Hat: 5 Βήματα (με Εικόνες)
Βίντεο: Δεν το περιμενα ετσι 2024, Νοέμβριος
Anonim
Image
Image
Φανταχτερό καπέλο LED
Φανταχτερό καπέλο LED

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

Το γκολ με το καπέλο ήταν το εξής:

  1. Βάλτε ένα σετ φώτων να μετακινούνται από το κεντρικό μπροστινό μέρος του καπέλου προς τα πίσω, με ένα φως σε κάθε πλευρά
  2. Αλλάξτε την ταχύτητα της διαδρομής του φωτός που υπαγορεύεται από την κλίση του καπέλου μπροστά προς τα πίσω
  3. Αφήστε τα φώτα να αντιστραφούν όταν η ζώνη του καπέλου έγειρε προς τα κάτω (δηλ. Μιμηθείτε την επίδραση της βαρύτητας στα φώτα)
  4. Αλλάξτε χρώμα με βάση την κλίση του καπέλου από αριστερά προς τα δεξιά
  5. Αισθανθείτε σοκ και εμφανίστε ένα ειδικό εφέ
  6. Αισθανθείτε τον χρήστη που περιστρέφεται και εμφανίστε ένα ειδικό εφέ
  7. Βάλτε το εντελώς στο καπέλο

Βήμα 1: Απαιτούνται εξαρτήματα

Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά
Απαιτούμενα ανταλλακτικά

Χρησιμοποίησα τα ακόλουθα κύρια συστατικά (περιλαμβάνονται οι σύνδεσμοι Amazon που δεν είναι συνδεδεμένοι):

  • Μικροελεγκτής Teensy LC - επέλεξα αυτό έναν κανονικό Arduino λόγω του μικρού μεγέθους του και είχε ειδική σύνδεση για τον έλεγχο των LED μου, καθώς και ισχυρή βιβλιοθήκη και υποστήριξη κοινότητας.
  • Αισθητήρας θέσης με βάση το Bosch BNO055 - ειλικρινά ένας από τους πρώτους που βρήκα τεκμηρίωση. Υπάρχουν πολύ λιγότερο δαπανηρές επιλογές, ωστόσο μόλις καταλάβετε το Bosch κάνει πολλά για εσάς που διαφορετικά θα έπρεπε να κάνετε σε κώδικα
  • WS2812 διευθυνσιοδοτούμενη λωρίδα LED - επέλεξα μήκος 1 μέτρου με 144 LED ανά μέτρο. Η κατοχή αυτής της πυκνότητας βοηθά το φως να μοιάζει περισσότερο σαν να κινείται, παρά μεμονωμένα στοιχεία που φωτίζονται με τη σειρά.

Και τα ακόλουθα δευτερεύοντα συστατικά:

  • Ένα καπέλο - κάθε καπέλο με ένα καπέλο θα κάνει. Αυτό είναι ένα καπέλο 6 $ από ένα τοπικό κατάστημα. Εάν έχει ραφή στο πίσω μέρος, θα είναι ευκολότερο να περάσετε την καλωδίωση. Δώστε προσοχή εάν η ζώνη καπέλου είναι κολλημένη καθώς αυτό θα προκαλέσει επιπλέον δυσκολία. Αυτό είναι ραμμένο κατά μήκος της κορυφής, αλλά το κάτω τραβιέται εύκολα.
  • Αντιστάσεις 4,7K ohm
  • Θήκη μπαταρίας 3x AAA - χρησιμοποιώντας 3 μπαταρίες AAA εξάγει τάση ακριβώς στο εύρος που θέλουν τα ηλεκτρονικά, γεγονός που απλοποιεί τα πράγματα. Το AAA ταιριάζει σε ένα καπέλο ευκολότερα από το AA και εξακολουθεί να έχει εξαιρετικό χρόνο εκτέλεσης.
  • Μικρό καλώδιο μετρητή - χρησιμοποίησα κάποιο συμπαγές σύρμα που είχα τοποθετήσει από προηγούμενο έργο LED.
  • Συγκολλητικό σίδερο και συγκόλληση
  • Κάποιο spandex που ταιριάζει με το εσωτερικό χρώμα του καπέλου και νήμα

Προτεινόμενο, αλλά προαιρετικό:

  • Γρήγοροι σύνδεσμοι για τα καλώδια της μπαταρίας
  • Εργαλείο Helping Hands, αυτά τα πράγματα είναι πολύ μικρά και δύσκολα συγκολλούνται

Βήμα 2: Τροποποιήστε το καπέλο

Τροποποιήστε το καπέλο
Τροποποιήστε το καπέλο
Τροποποιήστε το καπέλο
Τροποποιήστε το καπέλο
Τροποποιήστε το καπέλο
Τροποποιήστε το καπέλο
Τροποποιήστε το καπέλο
Τροποποιήστε το καπέλο

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

Οι τσέπες ήταν σπαρμένες με νήμα που ταιριάζει με το χρώμα του καπέλου, όλη τη γραμμή του στέμματος. Ανάλογα με το στυλ του καπέλου και των υλικών είναι κατασκευασμένο από YMMV με αυτήν την τεχνική.

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

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

Βήμα 3: Συνδέστε το

Wire It Up
Wire It Up

Ο πίνακας Teensy και οι λυχνίες LED θα λειτουργούν με οπουδήποτε από 3.3v έως 5v για ισχύ. Αυτός είναι ο λόγος για τον οποίο επέλεξα να χρησιμοποιήσω 3 μπαταρίες AAA, η τάση εξόδου 4,5v είναι ωραία σε αυτό το εύρος και έχουν άφθονο χρόνο εκτέλεσης για τον τρόπο που έχω προγραμματίσει να λειτουργούν τα LED. Θα πρέπει να είστε σε θέση να ξεπεράσετε πολύ περισσότερο από 8 ώρες χρόνου εκτέλεσης.

Καλωδίωση ρεύματος

Συνδέω τα θετικά και αρνητικά καλώδια από το κουτί της μπαταρίας και τα LED μαζί, και μετά τα συγκολλώνω στο Teensy σε κατάλληλες θέσεις. Το θετικό από την μπαταρία πρέπει να συνδεθεί με την επάνω δεξιά ακίδα του Teensy στο διάγραμμα (με την ένδειξη Vin στον πίνακα) και το αρνητικό μπορεί να συνδεθεί με οποιαδήποτε καρφίτσα με την ένδειξη GND. Βολικά υπάρχει ένα ακριβώς στην αντίθετη πλευρά του πίνακα, ή ακριβώς δίπλα στον πείρο Vin. Το πλήρες διάγραμμα pinout για τον πίνακα βρίσκεται στο κάτω μέρος αυτής της σελίδας. Και σε ορισμένες περιπτώσεις περιλαμβάνεται ένα έντυπο αντίγραφο όταν παραγγέλνετε τον πίνακα.

Εάν σκοπεύετε να εκτελέσετε κώδικα που έχει μόνο λίγα LED ενεργοποιημένα ταυτόχρονα, μπορείτε να τροφοδοτήσετε τα LED από το ίδιο το Teensy, χρησιμοποιώντας έξοδο 3.3v και GND, ωστόσο αν προσπαθήσετε να τραβήξετε πολύ ενέργεια, μπορείτε βλάψει τον πίνακα. Για να δώσετε στον εαυτό σας τις περισσότερες επιλογές, είναι καλύτερο να συνδέσετε τα LED στην πηγή της μπαταρίας σας απευθείας.

Καλωδίωση των LED

Επέλεξα το Teensy LC για αυτό το έργο, καθώς έχει μια καρφίτσα που καθιστά πολύ πιο εύκολη τη σύνδεση των διευθύνσιμων LED. Στο κάτω μέρος του πίνακα ο πείρος που είναι δεύτερος από τους αριστερούς καθρέφτες Pin #17, αλλά έχει επίσης 3.3v πάνω του. Αυτό αναφέρεται ως pull-up και σε άλλες σανίδες θα πρέπει να συνδέσετε μια αντίσταση για να παρέχετε αυτήν την τάση. Στην περίπτωση του Teensy LC, μπορείτε απλά να συνδέσετε από αυτόν τον πείρο κατευθείαν στο καλώδιο δεδομένων LED σας.

Καλωδίωση του αισθητήρα θέσης

Ορισμένες από τις διαθέσιμες πλακέτες BNO055 είναι πολύ πιο αυστηρές στην τάση και θέλουν μόνο 3,3v. Εξαιτίας αυτού, συνδέσα το Vin στον πίνακα BNO055 από την αποκλειστική έξοδο 3.3v στο Teensy, το οποίο είναι το 3ο pin κάτω δεξιά. Στη συνέχεια, μπορείτε να συνδέσετε το GND στο BNO055 με οποιοδήποτε GND στο Teensy.

Ο αισθητήρας θέσης BNO055 χρησιμοποιεί I2c για να μιλήσει στο Teensy. Το I2c απαιτεί pull-ups, οπότε ένωσα δύο αντιστάσεις 4.7K ohm από μια έξοδο 3.3v στο Teensy στους ακροδέκτες 18 και 19. Στη συνέχεια, συνδέσα τον πείρο 19 στον πείρο SCL στον πίνακα BNO055 και 18 στον πείρο SDA.

Συμβουλές/κόλπα καλωδίωσης

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

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

Βήμα 4: Προγραμματισμός

Τώρα που όλα είναι συγκεντρωμένα θα χρειαστείτε ένα συμβατό εργαλείο προγραμματισμού με Arduino. Χρησιμοποίησα το πραγματικό Arduino IDE (λειτουργεί με Linux, Mac και PC). Θα χρειαστείτε επίσης το λογισμικό Teensyduino για διασύνδεση με τον πίνακα Teensy. Αυτό το έργο χρησιμοποιεί σε μεγάλο βαθμό τη βιβλιοθήκη FastLED για τον προγραμματισμό χρωμάτων και θέσεων των LED.

Βαθμονόμηση

Το πρώτο πράγμα που θα θέλετε να κάνετε είναι να μεταβείτε στο εξαιρετικό αποθετήριο GitHub του Kris Winer για το BNO055 και να κατεβάσετε το σκίτσο του BNO_055_Nano_Basic_AHRS_t3.ino. Εγκαταστήστε αυτόν τον κωδικό με τη Σειριακή οθόνη σε λειτουργία και θα σας πει εάν ο πίνακας BNO055 συνδέεται σωστά στο διαδίκτυο και περνάει τις αυτο -δοκιμές του. Θα σας καθοδηγήσει επίσης στη βαθμονόμηση του BNO055, το οποίο θα σας δώσει πιο σταθερά αποτελέσματα αργότερα.

Ξεκινώντας με το σκίτσο Fancy LED

Ο κωδικός για το καπέλο Fancy LED επισυνάπτεται συγκεκριμένα και επίσης στο αποθετήριο GitHub. Σκοπεύω να κάνω περισσότερες τροποποιήσεις στον κώδικα και αυτές θα αναρτηθούν στο repo του GitHub. Το αρχείο εδώ αντικατοπτρίζει τον κώδικα όταν δημοσιεύτηκε αυτό το Instructable. Μετά τη λήψη και το άνοιγμα του σκίτσου, υπάρχουν μερικά πράγματα που θα χρειαστεί να αλλάξετε. Οι περισσότερες από τις σημαντικές τιμές που πρέπει να αλλάξετε βρίσκονται στην κορυφή ως δηλώσεις #define:

Γραμμή 24: #ορίστε NUM_LEDS 89 - αλλάξτε αυτό στον πραγματικό αριθμό LED στη λωρίδα LED

Γραμμή 28: #define SERIAL_DEBUG false - πιθανότατα θα θέλετε να το κάνετε αυτό αληθινό, έτσι ώστε να μπορείτε να δείτε την έξοδο στη σειριακή οθόνη

Κωδικός ανίχνευσης θέσης

Η ανίχνευση θέσης και το μεγαλύτερο μέρος της προσαρμογής σας ξεκινά από τη γραμμή 742 και περνάει από την 802. Λαμβάνουμε δεδομένα Pitch, Roll και Yaw από τον αισθητήρα θέσης και τα χρησιμοποιούμε για να ορίσουμε τιμές. Ανάλογα με τον τρόπο τοποθέτησης των ηλεκτρονικών σας, ίσως χρειαστεί να τα αλλάξετε. Εάν τοποθετήσετε τον αισθητήρα θέσης με το τσιπ προς την κορυφή του καπέλου και το βέλος δίπλα στο Χ που είναι τυπωμένο στην σανίδα προς το μπροστινό μέρος του καπέλου, θα πρέπει να δείτε τα εξής:

  • Ο Πίτσου κουνάει το κεφάλι σου
  • Ο ρόλος γέρνει το κεφάλι σας, π.χ. αγγίξτε το αυτί σας στον ώμο σας
  • Yaw είναι ποια κατεύθυνση. αντιμετωπίζετε (Βόρεια, Δυτικά, κλπ).

Εάν η πλακέτα σας είναι τοποθετημένη σε διαφορετικό προσανατολισμό, θα πρέπει να αλλάξετε Pitch/Roll/Yaw για να συμπεριφερθούν όπως θα θέλατε.

Για να προσαρμόσετε τις ρυθμίσεις Roll, μπορείτε να αλλάξετε τις ακόλουθες τιμές #ορισμού:

  • ROLLOFFSET: με το καπέλο σας σταθερό και όσο κεντραρισμένο μπορεί να είναι, αν το Roll δεν είναι 0, αλλάξτε αυτό με τη διαφορά. Δηλ. αν βλέπετε το Roll στο -20 όταν το καπέλο σας είναι στο κέντρο, κάντε αυτό το 20.
  • ROLLMAX: η μέγιστη τιμή που χρησιμοποιείται για τη μέτρηση ρολών. Το πιο εύκολο να το βρεις φορώντας το καπέλο και μετακινώντας το δεξί σου αυτί προς τον δεξιό σου ώμο. Θα χρειαστείτε ένα μακρύ καλώδιο USB για να το κάνετε αυτό ενώ χρησιμοποιείτε τη σειριακή οθόνη.
  • ROLLMIN: η χαμηλότερη τιμή που πρέπει να χρησιμοποιηθεί για τη μέτρηση του κυλίνδρου, όταν γέρνετε προς τα αριστερά

Ομοίως, για το Pitch:

  • MAXPITCH - η μέγιστη τιμή όταν κοιτάζετε προς τα πάνω
  • MINPITCH - η ελάχιστη τιμή όταν κοιτάζετε προς τα κάτω
  • PITCHCENTER - η τιμή του βήματος όταν κοιτάτε κατευθείαν προς τα εμπρός

Εάν ορίσετε το SERIALDEBUG σε true στο επάνω μέρος του αρχείου, θα πρέπει να δείτε τις τρέχουσες τιμές για την έξοδο Roll/Pitch/Yaw στη σειριακή οθόνη για να σας βοηθήσει να τροποποιήσετε αυτές τις τιμές.

Άλλες παράμετροι που μπορεί να θέλετε να αλλάξετε

  • MAX_LED_DELAY 35 - το πιο αργό που μπορεί να κινήσει το σωματίδιο LED. Αυτό είναι σε χιλιοστά του δευτερολέπτου. Είναι η καθυστέρηση από τη μετάβαση από το ένα LED στο άλλο στη συμβολοσειρά.
  • MIN_LED_DELAY 10 - η νηστεία που μπορεί να κινήσει το σωματίδιο LED. Όπως παραπάνω είναι σε χιλιοστά του δευτερολέπτου.

συμπέρασμα

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

Βήμα 5: Προηγμένο και προαιρετικό: Μέσα στον κώδικα

Ανίχνευση κρούσης & περιστροφής

Η ανίχνευση κρούσης/περιστροφής γίνεται με τη χρήση των λειτουργιών αισθητήρα υψηλής G του BNO055. Μπορείτε να τροποποιήσετε την ευαισθησία του με τις ακόλουθες γραμμές στο initBNO055 ():

  • Γραμμή #316: BNO055_ACC_HG_DURATION - πόσος χρόνος πρέπει να διαρκέσει η εκδήλωση
  • Γραμμή #317: BNO055_ACC_HG_THRESH - πόσο σκληρός πρέπει να είναι ο αντίκτυπος
  • Γραμμή #319: BNO055_GYR_HR_Z_SET - κατώφλι ταχύτητας περιστροφής
  • Γραμμή #320: BNO055_GYR_DUR_Z - πόσο καιρό πρέπει ακόμη να διαρκέσει η περιστροφή

Και οι δύο τιμές είναι δυαδικές 8 bit, επί του παρόντος ο αντίκτυπος έχει οριστεί σε B11000000, που είναι 192 από 255.

Όταν εντοπιστεί πρόσκρουση ή περιστροφή, το BNO055 ορίζει μια τιμή την οποία αναζητά ο κώδικας στην αρχή του βρόχου:

// Εντοπισμός τυχόν διακοπών που ενεργοποιούνται, δηλαδή λόγω υψηλού G byte intStatus = readByte (BNO055_ADDRESS, BNO055_INT_STATUS). if (intStatus> 8) {impact (); } else if (intStatus> 0) {spin (); }

Αναζητήστε τη γραμμή κενής πρόσκρουσης () παραπάνω στον κώδικα για να αλλάξετε τη συμπεριφορά στην κρούση ή την κενή περιστροφή () για να αλλάξετε τη συμπεριφορά περιστροφής.

Βοηθοί

Έχω δημιουργήσει μια απλή βοηθητική λειτουργία (void setAllLeds ()) για γρήγορη ρύθμιση όλων των LED σε ένα χρώμα. Χρησιμοποιήστε το για να τα απενεργοποιήσετε όλα:

setAllLeds (CRGB:: Μαύρο);

Or μπορείτε να επιλέξετε οποιοδήποτε χρώμα αναγνωρίζεται από τη βιβλιοθήκη FastLED:

setAllLeds (CRGB:: Κόκκινο);

Υπάρχει επίσης μια λειτουργία fadeAllLeds () που θα μειώσει όλα τα LED κατά 25%.

Η κλάση σωματιδίων

Προκειμένου να απλοποιήσω πολύ την καλωδίωση, ήθελα να χρησιμοποιήσω μία μόνο σειρά LED, αλλά να συμπεριφέρονται σαν πολλαπλές χορδές. Δεδομένου ότι αυτή ήταν η πρώτη μου προσπάθεια, ήθελα να το κρατήσω όσο το δυνατόν πιο απλό, οπότε αντιμετωπίζω τη μία συμβολοσειρά ως δύο, με τα μεσαία LED (α) να είναι εκεί που θα ήταν η διάσπαση. Δεδομένου ότι θα μπορούσαμε είτε να έχουμε έναν άρτιο ή έναν περιττό αριθμό, πρέπει να το λάβουμε υπόψη. Ξεκινάω με μερικές γενικές μεταβλητές:

/ * * Μεταβλητή και δοχεία για LED */ CRGB led [NUM_LEDS]. στατική χωρίς υπογραφή int curLedDelay = MAX_LED_DELAY; στατικό int centerLed = NUM_LEDS / 2; static int maxLedPos = NUM_LEDS / 2; στατικό bool oddLeds = 0; στατικό bool σωματίδιοDir = 1; στατικό bool speedDir = 1; ανυπόγραφο μεγάλο dirCount; ανυπόγραφη μακρά απόχρωση

Και κάποιος κώδικας στη ρύθμιση ():

εάν (NUM_LEDS % 2 == 1) {oddLeds = 1; maxLedPos = NUM_LEDS/2; } else {oddLeds = 0; maxLedPos = NUM_LEDS/2 - 1; }

Εάν έχουμε περιττούς αριθμούς, θέλουμε να χρησιμοποιήσουμε το 1/2 σημείο ως μέσο, διαφορετικά θέλουμε το 1/2 σημείο - 1. Αυτό είναι εύκολο να το δούμε με 10 ή 11 LED:

  • 11 λυχνίες LED: 11/2 με ακέραιους αριθμούς θα πρέπει να υπολογίζονται στο 5 και οι υπολογιστές μετρούν από το 0. Έτσι το 0 - 4 είναι το μισό, το 6 - 10 είναι το άλλο μισό και το 5 είναι μεταξύ τους. Αντιμετωπίζουμε το #5 σε αυτήν την περίπτωση σαν να ήταν μέρος και των δύο, δηλαδή είναι το #1 και για τις δύο εικονικές σειρές LED
  • 10 LED: 10/2 είναι 5. Αλλά αφού οι υπολογιστές μετρούν από 0 πρέπει να αφαιρέσουμε ένα. Τότε έχουμε 0 - 4 για το ένα ημίχρονο και 5 - 9 για το άλλο. Το #1 για την πρώτη εικονική συμβολοσειρά θα είναι 4 και το #1 για τη δεύτερη εικονική συμβολοσειρά θα είναι #5.

Στη συνέχεια, στον κώδικα σωματιδίων πρέπει να μετρήσουμε από τη συνολική μας θέση έως τις πραγματικές θέσεις στη συμβολοσειρά LED:

if (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } else {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }

Ο κώδικας έχει επίσης συνθήκες όπου το σωματίδιο μπορεί να αλλάξει κατεύθυνση, οπότε πρέπει επίσης να το λάβουμε υπόψη:

if (particleDir) {if ((currPos == NUM_LEDS/2) && oddLeds) {currPos = 0; } else if ((currPos == NUM_LEDS/2 - 1) && (! oddLeds)) {currPos = 0; } else {currPos ++; }} else {if ((currPos == 0) && oddLeds) {currPos = centerLed; } else if ((currPos == 0) && (! oddLeds)) {currPos = centerLed - 1; } else {currPos--; }}

Χρησιμοποιούμε λοιπόν την προβλεπόμενη κατεύθυνση (particleDir), για να υπολογίσουμε ποια LED πρέπει να ανάψει στη συνέχεια, αλλά πρέπει επίσης να εξετάσουμε εάν έχουμε φτάσει είτε στο πραγματικό άκρο της συμβολοσειράς LED, είτε στο κεντρικό μας σημείο, το οποίο λειτουργεί επίσης ως τέλος για καθεμία από τις εικονικές συμβολοσειρές.

Αφού καταλάβουμε όλα αυτά, ανάβουμε το επόμενο φως, όπως απαιτείται:

if (particleDir) {if (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } else {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }} else {if (oddLeds) {Pos1 = centerLed - currPos; Pos2 = centerLed + currPos; } else {Pos1 = centerLed - currPos; Pos2 = (centerLed -1) + currPos; }} leds [Pos1] = CHSV (currHue, 255, 255); leds [Pos2] = CHSV (currHue, 255, 255); FastLED.show ();}

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

Συνιστάται: