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

DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα: 4 βήματα (με εικόνες)
DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα: 4 βήματα (με εικόνες)

Βίντεο: DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα: 4 βήματα (με εικόνες)

Βίντεο: DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα: 4 βήματα (με εικόνες)
Βίντεο: GIVI V47NNT 2024, Νοέμβριος
Anonim
Image
Image
DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα
DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα
DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα
DIY Givi V56 Μοτοσικλέτα Topbox Light Kit με ενσωματωμένα σήματα

Ως οδηγός μοτοσικλέτας, είμαι πολύ εξοικειωμένος με το να με αντιμετωπίζουν σαν να είμαι αόρατος στο δρόμο. Ένα πράγμα που προσθέτω πάντα στα ποδήλατά μου είναι ένα top box το οποίο συνήθως έχει ενσωματωμένο φως. Πρόσφατα αναβάθμισα σε μια νέα μοτοσυκλέτα και αγόρασα το κιβώτιο Givi V56 Monokey, καθώς είχε πολύ χώρο για αντικείμενα. Αυτό το κουτί διαθέτει μια θέση για ένα εργοστασιακό κιτ φωτισμού που αποτελείται από δύο λωρίδες LED για κάθε πλευρά. Το πρόβλημα είναι ότι αυτό το κιτ είναι περίπου $ 70 και κάνει μόνο φρένα. Υπάρχει ένα κιτ aftermarket που πιθανώς κάνει παρόμοια πράγματα και μπορεί να είναι λίγο πιο εύκολο στην εγκατάσταση, αλλά η τιμή σας ανεβαίνει στα 150 $. Όντας ένα πολυμήχανο άτομο και αναζητώντας μια δικαιολογία για να δοκιμάσω τις ταινίες LED που απευθύνονται, αποφάσισα να φτιάξω ένα ολοκληρωμένο σύστημα που όχι μόνο θα έχει φώτα φρένων, αλλά και φώτα πορείας (αναμμένα κάθε φορά που κινούνται), φλας και φώτα κινδύνου. Απλώς για το καλό, πρόσθεσα ακόμη και μια ακολουθία εκκίνησης…. γιατί μπορούσα. Σημειώστε ότι αυτό χρειάστηκε πολλή δουλειά για να γίνει αν και είχα πολλά πράγματα να καταλάβω. Παρά τη δουλειά, είμαι μάλλον ευχαριστημένος με το πώς εξελίχθηκε αυτό. Ας ελπίσουμε ότι αυτό θα καταλήξει χρήσιμο σε κάποιον άλλο.

Η βασική λειτουργία του τρόπου λειτουργίας αυτού του συστήματος είναι ότι η μονάδα Arduino αναζητά σήματα στις ακίδες: φως φρένων, αριστερό φλας και δεξί φως στροφής. Για να διαβάσω το σήμα των 12 volt από τη μοτοσικλέτα, χρησιμοποίησα οπτοαπομονωτές για να μετατρέψω το σήμα 12V σε σήμα 5V που μπορεί να διαβάσει το Arduino. Στη συνέχεια, ο κώδικας περιμένει ένα από αυτά τα σήματα και στη συνέχεια εξάγει τις εντολές στη λωρίδα LED χρησιμοποιώντας τη βιβλιοθήκη FastLED. Αυτά είναι τα βασικά, τώρα για να μπούμε στις λεπτομέρειες.

Προμήθειες

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

  1. Arduino - Χρησιμοποίησα ένα nano για λόγους μεγέθους, αλλά μπορείτε να χρησιμοποιήσετε ό, τι αισθάνεστε αρκεί να έχετε πέντε καρφίτσες για χρήση.
  2. Ρυθμιστής 5V - Χρησιμοποίησα ένα L7805CV που ήταν ικανό 1,5 αμπέρ. Αυτό το έργο θα χρησιμοποιήσει 0,72 αμπέρ για τις λυχνίες LED συν την ισχύ για το νανο, οπότε το 1,5 λειτουργεί τέλεια για αυτό το έργο.
  3. Πυκνωτές - θα χρειαστείτε ένα 0,33 uF και ένα 0,1 uF για να λειτουργήσει σωστά ο ρυθμιστής τάσης.
  4. 3x οπτικοαπομονωτές - για να κάνετε τη μετατροπή σήματος από 12V σε 5V. Χρησιμοποίησα τον τύπο PC817X που έχει μόνο τέσσερις ακίδες, το μόνο που χρειαζόμαστε.
  5. Αντιστάσεις - θα χρειαστείτε δύο τύπους, τρεις από κάθε τύπο. Το πρώτο πρέπει να είναι αρκετό για να μειώσει το ρεύμα μέσω του οπτικοαπομονωτή IR LED. Θα χρειαστείτε τουλάχιστον 600 ohm, αλλά τα 700 θα ήταν καλύτερη ιδέα να χειριστείτε τις μεταβαλλόμενες τάσεις στη μοτοσικλέτα. Το άλλο πρέπει να είναι κάπου μεταξύ 10k και 20k για ένα γρήγορο σήμα στην άλλη πλευρά του οπτικοαπομονωτή.
  6. Πρωτότυπος πίνακας - Είχα μερικά που ήταν αρκετά μικρά για να χωρέσουν μέσα σε ένα μικρό κουτί έργου με μια μικρή ποσότητα κοπής.
  7. Κουτί έργου - αρκετά μεγάλο για να χωρέσει τα εξαρτήματα, αλλά αρκετά μικρό για να μπορεί να τοποθετηθεί εύκολα.
  8. Wire - Χρησιμοποίησα καλώδιο ethernet Cat 6 επειδή είχα πολλά από αυτά καθισμένα. Αυτό έχει οκτώ σύρματα, όλα χρωματικά κωδικοποιημένα, τα οποία βοήθησαν σε όλες τις διαφορετικές συνδέσεις και ήταν αρκετά μεγάλο εύρος για να χειριστεί τις τρέχουσες κληρώσεις.
  9. Βύσματα - οπουδήποτε θέλετε το σύστημα να αφαιρείται εύκολα. Χρησιμοποίησα ένα αδιάβροχο βύσμα για να αφαιρέσω το πάνω κιβώτιο και να χειριστώ τυχόν βροχή ή νερό που πέφτει πάνω του. Χρειαζόμουν επίσης μικρότερα βύσματα για τις λωρίδες LED, ώστε να μην χρειάζεται να ανοίξω μεγάλες τρύπες.
  10. Σύνδεσμοι με φερμουάρ και κόλλες με φερμουάρ για να συγκρατούν τα πάντα στη θέση τους.
  11. Συρρικνώστε το περιτύλιγμα για να τακτοποιήσετε τις συνδέσεις.

Βήμα 1: Δημιουργία κυκλώματος

Χτίζοντας το κύκλωμα
Χτίζοντας το κύκλωμα
Χτίζοντας το κύκλωμα
Χτίζοντας το κύκλωμα
Χτίζοντας το κύκλωμα
Χτίζοντας το κύκλωμα

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

Ο βασικός σχεδιασμός ξεκινά με την εισαγωγή της ισχύος 12V από μια πηγή μεταγωγής (ένα καλώδιο που είναι αναμμένο μόνο όταν η μοτοσικλέτα είναι αναμμένη). Ένα διάγραμμα καλωδίωσης μπορεί πραγματικά να βοηθήσει στην εύρεση αυτού του καλωδίου. Αυτό τροφοδοτείται στη μία πλευρά του ρυθμιστή τάσης. Ένας πυκνωτής 0,33 uF συνδέει αυτήν την είσοδο στη γείωση στον ρυθμιστή τάσης, ο οποίος στη συνέχεια τροφοδοτείται ξανά στο έδαφος της μοτοσικλέτας. Η έξοδος του ρυθμιστή τάσης θα έχει έναν πυκνωτή 0.1uF συνδεδεμένο με αυτόν στη γείωση. Αυτοί οι πυκνωτές βοηθούν στην εξομάλυνση της τάσης από τον ρυθμιστή. Εάν δεν μπορείτε να τα βρείτε στην εικόνα της πλακέτας κυκλώματος, βρίσκονται κάτω από τον ρυθμιστή τάσης. Από εκεί, η γραμμή 5V πηγαίνει στο Vin στο Arduino, στον ακροδέκτη τροφοδοσίας που θα τροφοδοτήσει τις λωρίδες LED και δύο στην πλευρά πηγής του οπτικοαπομονωτή που θα τροφοδοτηθεί στις ακίδες Arduino παρέχοντας το απαραίτητο σήμα 5V.

Όσον αφορά τους οπτικοαπομονωτές, υπάρχουν δύο πλευρές: η μία με LED LED και η άλλη με τρανζίστορ με και ανιχνευτή IR. Θέλουμε να χρησιμοποιήσουμε την πλευρά LED IR για τη μέτρηση του σήματος 12V. Δεδομένου ότι η λυχνία LED έχει τάση 1,2V προς τα εμπρός, χρειαζόμαστε μια σειρά αντίστασης περιορισμού ρεύματος σε σειρά. 12V - 1.2V = 10.8V και για να λειτουργήσετε το LED στα 18 mA (μου αρέσει πάντα να τρέχω λιγότερο από 20 mA για λόγους ζωής), θα χρειαστείτε μια αντίσταση R = 10.8V/0.018A = 600 ohm. Οι τάσεις στα οχήματα τείνουν επίσης να λειτουργούν υψηλότερα, δυνητικά έως 14V, οπότε είναι καλύτερο να σχεδιάσετε κάτι τέτοιο, το οποίο είναι περίπου 710 ohm, αν και τα 700 θα ήταν κάτι παραπάνω από λογικά. Η έξοδος για την πλευρά LED τροφοδοτείται στη συνέχεια στη γείωση. Για την πλευρά εξόδου του οπτικοαπομονωτή, η είσοδος θα χρησιμοποιήσει το σήμα 5V από τον ρυθμιστή και η έξοδος θα συνδεθεί με άλλη αντίσταση πριν πάει στη γείωση. Αυτή η αντίσταση πρέπει να είναι περίπου 10k - 20k ohm, τουλάχιστον αυτό έδειξε το φύλλο δεδομένων μου. Αυτό θα δώσει μια γρήγορη μέτρηση σήματος αφού δεν έχουμε να κάνουμε με θορυβώδες περιβάλλον. Η έξοδος στον πείρο Arduino θα βγει μεταξύ της αντίστασης και της εξόδου του οπτικοαπομονωτή, έτσι ώστε όταν το σήμα είναι σβηστό, ο πείρος είναι χαμηλός και όταν το σήμα είναι στον πείρο είναι υψηλό.

Τα φώτα λωρίδας LED συνδέονται με τρία καλώδια: Ισχύς, γείωση και δεδομένα. Η ισχύς πρέπει να είναι 5V. Αυτό το έργο χρησιμοποιεί συνολικά 12 LED (αν και έχω περισσότερες λυχνίες LED στις λωρίδες αλλά χρησιμοποιώ μόνο κάθε τρίτο LED) και το καθένα παίρνει 60mA όταν χρησιμοποιείται λευκό φως σε πλήρη φωτεινότητα. Αυτό δίνει συνολικά 720 mA. Είμαστε πολύ καλά στην ισχύ εξόδου για τον ρυθμιστή τάσης, οπότε είμαστε καλοί. Απλώς βεβαιωθείτε ότι το καλώδιο είναι αρκετά μεγάλο για να χειριστεί την ισχύ, χρησιμοποίησα καλώδιο Ethernet Cat 6 24 μετρητών. Το σύρμα Ethernet ήταν κάτι που είχα καθισμένο και έχει 8 έγχρωμα κωδικοποιημένα καλώδια, οπότε λειτούργησε καλά για αυτό το έργο. Τα μόνα καλώδια που πρέπει στη συνέχεια να μεταβούν στο topbox είναι η τροφοδοσία και η γείωση (που χωρίζονται και οι δύο μεταξύ των λωρίδων) και δύο γραμμές δεδομένων (μία για κάθε λωρίδα).

Η υπόλοιπη καλωδίωση συνδέεται με τις ακίδες του arduino και τροφοδοτεί με ισχύ. Οι καρφίτσες που χρησιμοποιήθηκαν για αυτό το έργο ήταν οι ακόλουθες:

  1. Vin - συνδεδεμένο σε 5V
  2. Gnd - συνδέεται με τη γείωση
  3. Pin2 - συνδεδεμένο στη γραμμή δεδομένων της αριστερής λωρίδας
  4. Pin3 - συνδεδεμένο στη γραμμή δεδομένων Δεξιάς λωρίδας
  5. Pin4 - συνδεδεμένο στο σήμα φρένων από τον οπτικοαπομονωτή
  6. Pin5 - συνδεδεμένο στο αριστερό φλας από τον οπτικοαπομονωτή
  7. Pin6 - συνδεδεμένο στο δεξιό φλας από τον οπτικοαπομονωτή

Βήμα 2: Καλωδίωση και εγκατάσταση

Καλωδίωση και εγκατάσταση
Καλωδίωση και εγκατάσταση
Καλωδίωση και εγκατάσταση
Καλωδίωση και εγκατάσταση
Καλωδίωση και εγκατάσταση
Καλωδίωση και εγκατάσταση

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

  • Διακόπτης τροφοδοσίας
  • Εδαφος
  • Σήμα φρένων
  • Είσοδος αριστερού σήματος στροφής
  • Εισαγωγή σήματος στροφής δεξιά

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

Χρησιμοποίησα δύο μίνι βύσματα JST στις λωρίδες LED επειδή χρειαζόμουν ένα βύσμα αρκετά μικρό για να περάσω από μια τρύπα ελάχιστης διαμέτρου και επειδή ήθελα να βεβαιωθώ ότι υπάρχει αρκετό σύρμα για να χειριστεί τις τρέχουσες απαιτήσεις. Και πάλι, μπορεί να ήταν υπερβολικό και δεν είχα κανένα μικρό βύσμα με τρία καλώδια. Η τρύπα στο κουτί για να περάσουν τα καλώδια της λωρίδας σφραγίσματος σφραγίστηκε για να μην υπάρχει νερό. Όσον αφορά τη τοποθέτηση των λωρίδων LED, επειδή υπάρχει μια μικρή αναντιστοιχία στο διάστημα (υπήρχε περίπου 1 - 1,5 mm διαφορά μεταξύ των οπών στον ανακλαστήρα και των LED), τις τοποθέτησα έτσι ώστε να χωρίσουν τη διαφορά μεταξύ των LED και η τρύπα όσο το δυνατόν περισσότερο. Στη συνέχεια χρησιμοποίησα θερμή κόλλα για να τα κολλήσω στη θέση τους και στεγανωτικό για να σφραγίσω πλήρως την περιοχή. Οι λωρίδες LED είναι αδιάβροχες, οπότε δεν υπάρχει πρόβλημα αν βραχούν. Παρόλο που φαίνεται πολύ να εγκατασταθεί, αυτό καθιστά το σύστημα πιο εύκολο να αφαιρεθεί στο μέλλον ή να αντικατασταθούν μέρη, επειδή μπορεί να συμβεί.

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

Ο πηγαίος μου κώδικας πρέπει να βρίσκεται στην αρχή αυτού του Instructable. Πάντα σχολιάζω τον κώδικα μου σε μεγάλο βαθμό, ώστε να είναι πιο εύκολο να το καταλάβω αργότερα. Αποποίηση ευθυνών: Δεν είμαι επαγγελματίας συγγραφέας κώδικα. Ο κώδικας γράφτηκε με μια μέθοδο που ήταν πιο εύκολο να ξεκινήσει και έγιναν κάποιες βελτιώσεις, αλλά ξέρω ότι θα μπορούσε να είναι πιο εκλεπτυσμένος. Χρησιμοποιώ επίσης ένα μεγάλο μέρος της λειτουργίας καθυστέρησης () για χρονισμό που δεν είναι το ιδανικό. Ωστόσο, τα σήματα που λαμβάνει η μονάδα δεν είναι γρήγορα σήματα σε σύγκριση, οπότε εξακολουθούσα να αισθάνομαι δικαιολογημένη να τα διατηρήσω χρησιμοποιώντας κάτι σαν millis (). Είμαι επίσης πολύ απασχολημένος πατέρας και σύζυγος, οπότε το να ξοδεύω χρόνο για να βελτιώσω κάτι που τελικά δεν θα αλλάξει τη λειτουργία δεν είναι ψηλά στη λίστα.

Για αυτό το έργο, απαιτείται μόνο μία βιβλιοθήκη που είναι η βιβλιοθήκη FastLED. Αυτό έχει όλο τον κωδικό για τον έλεγχο των λωρίδων LED τύπου WS2811/WS2812B. Από εκεί, θα καλύψω τις βασικές λειτουργίες που θα χρησιμοποιηθούν.

Ο πρώτος εκτός από τους τυπικούς ορισμούς είναι να δηλώσετε τις δύο λωρίδες σας. Θα χρησιμοποιήσετε τον ακόλουθο κώδικα για κάθε λωρίδα:

FastLED.addLeds (leds [0], NUM_LEDS);

Αυτή η γραμμή κώδικα που ρυθμίζει το pin 2 ορίζει αυτήν τη λωρίδα ως λωρίδα 0 με τον αριθμό των LED που ορίζονται από τη σταθερά NUM_LEDS, η οποία στην περίπτωσή μου έχει οριστεί σε 16. Για να ορίσετε τη δεύτερη λωρίδα, η 2 θα γίνει 3 (για το pin3) και η λωρίδα θα φέρει την ένδειξη λωρίδα 1.

Η επόμενη γραμμή που θα είναι σημαντική είναι ο καθορισμός του χρώματος.

leds [0] [1] = Color_high CRGB (r, g, b);

Αυτή η γραμμή κώδικα χρησιμοποιείται αν και με διαφορετική εμφάνιση (το μεγαλύτερο μέρος μου χρησιμοποιεί σταθερά). Βασικά, αυτός ο κωδικός στέλνει μια τιμή σε κάθε κανάλι LED (κόκκινο, πράσινο, μπλε) που καθορίζει κάθε φωτεινότητα. Η τιμή φωτεινότητας μπορεί να οριστεί με έναν αριθμό 0 - 255. Αλλάζοντας το επίπεδο φωτεινότητας για κάθε κανάλι, μπορείτε να ορίσετε διαφορετικά χρώματα. Για αυτό το έργο, θέλω ένα λευκό χρώμα για να διατηρήσω το φως όσο το δυνατόν πιο φωτεινό. Έτσι, οι μόνες αλλαγές που κάνω είναι να ορίσω το επίπεδο φωτεινότητας το ίδιο και στα τρία κανάλια.

Το επόμενο σύνολο κωδικών χρησιμοποιείται για τον ξεχωριστό φωτισμό κάθε φωτός. Σημειώστε ότι για κάθε λωρίδα, κάθε LED έχει μια διεύθυνση που ξεκινά από το 0 για το πλησιέστερο στη σύνδεση γραμμής δεδομένων μέχρι τον υψηλότερο αριθμό LED που έχετε μείον 1. Παράδειγμα, αυτές είναι 16 λωρίδες LED, οπότε η υψηλότερη είναι 16 - 1 = 15. Ο λόγος για αυτό είναι επειδή το πρώτο LED φέρει την ένδειξη 0.

για (int i = NUM_LEDS -1; i> -1; i = i -3) {// Αυτό θα αλλάξει το φως για κάθε τρίτο LED που μεταβαίνει από το τελευταίο στο πρώτο. leds [0] = Color_low? // Ορίστε τη λωρίδα 0 χρώματος LED στο επιλεγμένο χρώμα. leds [1] = Color_low? // Ορίστε το χρώμα της λωρίδας 1 LED στο επιλεγμένο χρώμα. FastLED.show (); // Εμφάνιση των καθορισμένων χρωμάτων. leds [0] = CRGB:: Μαύρο; // Απενεργοποιήστε το καθορισμένο χρώμα στην προετοιμασία για το επόμενο χρώμα. leds [1] = CRGB:: Μαύρο; καθυστέρηση (150)? } FastLED.show (); // Εμφάνιση των καθορισμένων χρωμάτων.

Ο τρόπος λειτουργίας αυτού του κώδικα είναι ότι μια μεταβλητή (i) χρησιμοποιείται μέσα σε έναν βρόχο for ως διεύθυνση LED η οποία στη συνέχεια αναφέρεται στον πλήρη αριθμό των LED (NUM_LEDS). Ο λόγος για αυτό είναι ότι θέλω τα φώτα να ξεκινούν στο τέλος της ταινίας και όχι στην αρχή. Η ρύθμιση εξέρχεται και στις δύο λωρίδες (leds [0] και leds [1]) και στη συνέχεια εκδίδεται μια εντολή για την εμφάνιση της αλλαγής. Στη συνέχεια, αυτό το φως σβήνει (CRGB:: Μαύρο) και ανάβει το επόμενο φως. Η μαύρη αναφορά είναι ένα συγκεκριμένο χρώμα στη βιβλιοθήκη FastLED, οπότε δεν χρειάζεται να εκδώσω 0, 0, 0 για κάθε κανάλι, αν και θα έκαναν το ίδιο πράγμα. Ο βρόχος For προωθεί 3 LED ταυτόχρονα (i = i-3) αφού χρησιμοποιώ μόνο κάθε άλλη LED. Μέχρι το τέλος αυτού του βρόχου, η ακολουθία φωτός θα μεταβεί από τη μία λυχνία LED στην άλλη με μόνο ένα φωτισμένο ανά λωρίδα, σαν εφέ Knight Rider. Εάν θέλετε να διατηρήσετε αναμμένο κάθε φως έτσι ώστε να δημιουργείται η μπάρα, απλώς θα αφαιρέσετε τις γραμμές που απενεργοποιούν τα LED που συμβαίνει στο επόμενο σύνολο κωδικών στο πρόγραμμα.

για (int i = 0; i <dim; i ++) {// Σβήστε γρήγορα τα φώτα στο επίπεδο φωτισμού λειτουργίας. rt = rt + 1; gt = gt + 1; bt = bt + 1; για (int i = 9; i <NUM_LEDS; i = i +3) {// Αυτό θα ανάψει τα τρία τελευταία φώτα για το φως θέσης. leds [0] = CRGB (rt, gt, bt); // Ρυθμίστε το χρώμα της λωρίδας 0 στο επιλεγμένο χρώμα. leds [1] = CRGB (rt, gt, bt); // Ρυθμίστε τη λωρίδα 1 χρώματος LED στο επιλεγμένο χρώμα. } FastLED.show (); καθυστέρηση (3)? }

Το τελευταίο παράδειγμα κώδικα που χρησιμοποιώ για τα LED είναι ένας βρόχος εξασθένισης. Εδώ, χρησιμοποιώ προσωρινές υποδοχές για τη φωτεινότητα για κάθε κανάλι (rt, gt, bt) και τις αυξάνω κατά 1 με καθυστέρηση μεταξύ κάθε εμφάνισης για να επιτύχω την εμφάνιση που θέλω. Σημειώστε επίσης ότι αυτός ο κώδικας αλλάζει μόνο τις τρεις τελευταίες λυχνίες LED καθώς αυτό εξασθενεί στα φώτα πορείας, οπότε ξεκινάω από το 9 και όχι από το 0.

Ο υπόλοιπος κώδικας LED είναι επαναλήψεις αυτών. Όλα τα άλλα επικεντρώνονται στην αναζήτηση σήματος στα τρία διαφορετικά καλώδια. Η περιοχή Loop () του κώδικα αναζητά φώτα φρένων, τα οποία θα αναβοσβήνει μία φορά πριν παραμείνει αναμμένη (αυτό είναι ρυθμιζόμενο αν θέλετε) ή αναζητώντας φλας. Για αυτόν τον κωδικό, επειδή δεν μπορούσα να υποθέσω ότι τα φώτα αριστερής και δεξιάς στροφής θα ανάβουν ακριβώς την ίδια στιγμή για κινδύνους, πρέπει πρώτα να αναζητήσω τον κωδικό, στη συνέχεια, μετά από μια μικρή καθυστέρηση, ελέγχω αν και τα δύο είναι ενδεικτικά τα φώτα κινδύνου είναι αναμμένα. Το ένα δύσκολο κομμάτι που είχα ήταν τα φλας γιατί το φως θα σβήσει για κάποιο χρονικό διάστημα οπότε πώς μπορώ να ξεχωρίσω τη διαφορά μεταξύ του σήματος που είναι ακόμα ανοιχτό αλλά στην περίοδο απενεργοποίησης και ενός ακυρωμένου σήματος; Αυτό που κατέληξα ήταν η εφαρμογή ενός βρόχου καθυστέρησης που έχει οριστεί να συνεχίσει περισσότερο από την καθυστέρηση μεταξύ των αναλαμπών σήματος. Εάν το φλας είναι ακόμα αναμμένο, τότε ο βρόχος σήματος θα συνεχίσει. Εάν το σήμα δεν επανέλθει όταν τελειώσει η καθυστέρηση, τότε επιστρέφει στην αρχή του βρόχου (). Για να προσαρμόσετε το μήκος της καθυστέρησης, αλλάξτε τον αριθμό για τη σταθερή φωτεινή ένδειξη καθυστέρησης για κάθε 1 στο φως

while (digitalRead (leftTurn) == LOW) {for (int i = 0; i <lightDelay; i ++) {leftTurnCheck (); if (digitalRead (leftTurn) == HIGH) {leftTurnLight (); } καθυστέρηση (100); } για (int i = 0; i <NUM_LEDS; i = i +3) {// Αυτό θα αλλάξει το φως για κάθε τρίτο LED από το τελευταίο στο πρώτο. leds [0] = CRGB (0, 0, 0); // Ρυθμίστε το χρώμα της λωρίδας 0 στο επιλεγμένο χρώμα. } για (int i = 9; i <NUM_LEDS; i = i +3) {// Αυτό θα ρυθμίσει τα φώτα πορείας που χρησιμοποιούν μόνο τα τρία τελευταία. leds [0] = Color_low? // Ρυθμίστε το χρώμα της λωρίδας 0 στο επιλεγμένο χρώμα. } FastLED.show (); // Οι ρυθμίσεις εξόδου επιστρέφουν. // Μόλις το φλας δεν είναι πλέον ενεργοποιημένο, επιστρέψτε στον βρόχο. }

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

Βήμα 4: Αποτελέσματα

Αποτελέσματα
Αποτελέσματα

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

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

Συνιστάται: