Κάντε έναν ανιχνευτή LED Knight Rider με το Arduino

Πάντα ήθελες να έχεις το δικό σου Knight Industries Δύο χιλιάδες (KITT) αυτοκίνητο - ξέρετε, από τον Knight Rider; Κάντε το όνειρό σας ένα βήμα πιο κοντά στην πραγματικότητα κατασκευάζοντας ένα σαρωτή LED!

Πάντα ήθελες να έχεις το δικό σου Knight Industries Δύο χιλιάδες (KITT) αυτοκίνητο - ξέρετε, από τον Knight Rider;  Κάντε το όνειρό σας ένα βήμα πιο κοντά στην πραγματικότητα κατασκευάζοντας ένα σαρωτή LED!
Διαφήμιση

Πάντα ήθελες να έχεις το δικό σου Knight Industries Δύο χιλιάδες (KITT) αυτοκίνητο - ξέρετε, από τον Knight Rider; Κάντε το όνειρό σας ένα βήμα πιο κοντά στην πραγματικότητα κατασκευάζοντας ένα σαρωτή LED! Εδώ είναι το τελικό αποτέλεσμα:

Ο, τι χρειάζεσαι

Δεν χρειάζονται πολλά μέρη για αυτό το έργο και μπορεί να έχετε πολλά από αυτά ήδη:

  • 1 x Arduino UNO ή παρόμοια
  • 1 x Breadboard
  • 8 x κόκκινα LED
  • 8 x 220 ohm αντιστάσεις
  • Ποτενσιόμετρο 1 x 10k ohm
  • Αρσενικό με αρσενικό σύρμα σύρμα

Αν έχετε ένα κιτ εκκίνησης Arduino Τι περιλαμβάνεται σε ένα κιτ εκκίνησης Arduino; [Το MakeUseOf εξηγεί] Τι περιλαμβάνεται σε ένα κιτ εκκίνησης Arduino; [MakeUseOf Εξηγεί] Έχω εισαγάγει προηγουμένως το υλικό ανοικτού κώδικα Arduino εδώ στο MakeUseOf, αλλά θα χρειαστείτε κάτι περισσότερο από το πραγματικό Arduino για να χτίσετε κάτι από αυτό και να ξεκινήσετε πραγματικά. Τα αρduino αρχικά κιτ είναι ... Διαβάστε περισσότερα είναι πιθανό να έχετε όλα αυτά τα μέρη (τι μπορείτε να κάνετε με ένα πακέτο εκκίνησης;) 5 Μοναδικά έργα Arduino για αρχάριους μπορείτε να κάνετε μόνο με ένα κιτ εκκίνησης 5 μοναδικά έργα Arduino για αρχάριους You Μπορεί να κάνει μόνο με ένα κιτ Starter Διαβάστε περισσότερα).

Σχετικά με τον Arduino: Οδηγός για αρχάριους Ξεκινώντας εδώ Με τον Arduino: Οδηγός για αρχάριους Το Arduino είναι μια πλατφόρμα πρωτοτύπου ηλεκτρονικών ανοικτών πηγών που βασίζεται σε ευέλικτες εφαρμογές, , εύκολο στη χρήση υλικό και λογισμικό, προορίζεται για καλλιτέχνες, σχεδιαστές, χομπίστες και όσους ενδιαφέρονται να δημιουργήσουν διαδραστικά αντικείμενα ή περιβάλλοντα. Θα μπορούσατε να χρησιμοποιήσετε έναν προγραμματισμό Shift Register Arduino Programming - Παίζοντας με Shift Registers (aka ακόμα περισσότερα LED) Προγραμματισμός Arduino - Αναπαραγωγή με Shift Registers (aka ακόμα περισσότερα LED) Σήμερα θα προσπαθήσω να σας διδάξω λίγα για Shift Registers. Αυτά είναι ένα αρκετά σημαντικό μέρος του προγραμματισμού Arduino, βασικά επειδή επεκτείνουν τον αριθμό των εξόδων που μπορείτε να χρησιμοποιήσετε, σε αντάλλαγμα για ... Διαβάστε περισσότερα για τον έλεγχο των LEDs, αν και αυτό δεν είναι απαραίτητο για αυτό το έργο, όπως το Arduino έχει αρκετές ακίδες .

Δημιουργία σχεδίου

Arduino-Knight-Rider-Led-Scanner-Ολοκληρώθηκε
Αυτό είναι ένα πολύ απλό έργο. Ενώ μπορεί να φαίνεται περίπλοκη από τον μεγάλο αριθμό καλωδίων, κάθε μεμονωμένο τμήμα είναι πολύ απλό. Κάθε δίοδος εκπομπής φωτός (LED) συνδέεται με την δική της Arduino pin. Αυτό σημαίνει ότι κάθε LED μπορεί να ενεργοποιηθεί και να απενεργοποιηθεί ξεχωριστά. Ένα ποτενσιόμετρο συνδέεται στο αναλογικό σύστημα Arduino σε ακίδες, το οποίο θα χρησιμοποιηθεί για τη ρύθμιση της ταχύτητας του σαρωτή.

Το κύκλωμα

Αρκούνο-ιππότης-αναβάτη-κύκλωμα
Συνδέστε τον εξωτερικό αριστερό πείρο (κοιτάζοντας μπροστά, με τις καρφίτσες στο κάτω μέρος) του ποτενσιόμετρου στη γείωση. Συνδέστε τον αντίθετο εξωτερικό πείρο με + 5v. Εάν δεν λειτουργεί σωστά, αντιστρέψτε αυτές τις ακίδες. Συνδέστε τη μεσαία καρφίτσα στο αναλογικό Arduino στο 2.

Συνδέστε την άνοδο (μακρύ πόδι) κάθε LED σε ψηφιακούς ακροδέκτες ένα έως οκτώ. Συνδέστε τις κάθοδοι (κοντά πόδια) στο έδαφος Arduino.

Ο κώδικας

Δημιουργήστε ένα νέο σκίτσο και αποθηκεύστε το ως "knightRider". Εδώ είναι ο κώδικας:

const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); } }  const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i 0; --i) { // Scan right to left time = analogRead(2); digitalWrite(leds[i], HIGH); delay(time); digitalWrite(leds[i - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); } } 

Ας σπάσουμε. Κάθε ακίδα LED αποθηκεύεται σε μια συστοιχία:

 const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; 

Ένας πίνακας είναι ουσιαστικά μια συλλογή σχετικών αντικειμένων. Αυτά τα στοιχεία ορίζονται ως σταθερά ("const"), που σημαίνει ότι δεν μπορούν να αλλάξουν αργότερα. Δεν χρειάζεται να χρησιμοποιήσετε μια σταθερά (ο κώδικας θα λειτουργήσει τέλεια αν καταργήσετε το "const"), αν και συνιστάται.

Στοιχεία ενός πίνακα προσπελάνονται χρησιμοποιώντας αγκύλες ("[]") και έναν ακέραιο που ονομάζεται ευρετήριο. Οι δείκτες ξεκινούν από το μηδέν, οπότε οι "leds [2]" θα επέστρεφαν το τρίτο στοιχείο στο pin array 3. Οι πίνακες καθιστούν τον κώδικα γρηγορότερο για εγγραφή και ευκολότερη στην ανάγνωση, κάνουν τον υπολογιστή να κάνει τη σκληρή δουλειά!

Ο κύκλος A for χρησιμοποιείται για να ρυθμίσει κάθε πείρο ως έξοδο:

 for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } 

Αυτός ο κώδικας βρίσκεται μέσα στη συνάρτηση "setup ()", καθώς χρειάζεται μόνο να εκτελεστεί μία φορά στην αρχή του προγράμματος. Για τους βρόχους είναι πολύ χρήσιμο. Σας επιτρέπουν να τρέχετε τον ίδιο κωδικό ξανά και ξανά, με διαφορετική τιμή κάθε φορά. Είναι ιδανικά για εργασία με συστοιχίες. Ένας ακέραιος "i" δηλώνεται και μόνο ο κώδικας εντός του βρόχου μπορεί να έχει πρόσβαση σε αυτήν τη μεταβλητή (αυτό είναι γνωστό ως "πεδίο"). Η τιμή του i αρχίζει από το μηδέν, και για κάθε επανάληψη του βρόχου, το i αυξάνεται κατά ένα. Μόλις η τιμή του i είναι μικρότερη ή ίση με τη μεταβλητή "totalLeds", ο βρόχος «σπάει» (σταματάει).

Η τιμή του i χρησιμοποιείται για την πρόσβαση στη συστοιχία "leds". Αυτός ο βρόχος προσεγγίζει κάθε στοιχείο του πίνακα και το διαμορφώνει ως έξοδο. Θα μπορούσατε να πληκτρολογήσετε με το χέρι "pinMode (pin, OUTPUT)" οκτώ φορές, αλλά γιατί να γράψετε οκτώ γραμμές όταν μπορείτε να γράψετε τρία;

Ενώ κάποιες γλώσσες προγραμματισμού μπορούν να σας πει πόσα στοιχεία είναι σε ένα πίνακα (συνήθως με σύνταξη όπως array.length), το Arduino δεν το κάνει τόσο απλό (περιλαμβάνει λίγο περισσότερο μαθηματικά). Καθώς ο αριθμός των στοιχείων στη συστοιχία είναι ήδη γνωστός, δεν είναι πρόβλημα.

Arduino-Knight-Rider-LEDS

Μέσα στον κύριο βρόχο ( κενός βρόχος () ) υπάρχουν δύο ακόμη βρόχοι. Ο πρώτος ρυθμίζει τις ενδεικτικές λυχνίες ON και στη συνέχεια OFF από 1 έως 8. Ο δεύτερος βρόχος θέτει τις ενδεικτικές λυχνίες ON και στη συνέχεια OFF από 8 - 1. Παρατηρήστε πως είναι ενεργοποιημένη η τρέχουσα καρφίτσα και ενεργοποιείται και ο τρέχων ακροδέκτης συν ένα. Αυτό εξασφαλίζει ότι υπάρχουν πάντα δύο LEDs ταυτόχρονα, καθιστώντας το scanner πιο ρεαλιστικό.

Στην αρχή κάθε βρόχου, η τιμή του δοχείου διαβάζεται στην μεταβλητή "time":

 time = analogRead(2); 

Αυτό γίνεται δύο φορές, μία φορά μέσα σε κάθε βρόχο. Αυτό πρέπει να ελέγχεται και να ενημερώνεται συνεχώς. Εάν αυτό ήταν εκτός των βρόχων, θα εξακολουθούσε να λειτουργεί, ωστόσο, θα υπήρχε μια μικρή καθυστέρηση - θα τρέξει μόνο όταν ένας βρόχος έχει τελειώσει την εκτέλεση. Οι γλάστρες είναι αναλογικές, γι 'αυτό και χρησιμοποιείται το "analogRead (pin)". Αυτό επιστρέφει τιμές μεταξύ μηδέν (ελάχιστο) και 1023 (μέγιστο). Το Arduino είναι ικανό να μετατρέπει αυτές τις αξίες σε κάτι πιο χρήσιμο, ωστόσο είναι τέλειο για αυτή τη χρήση.

Η καθυστέρηση μεταξύ των αλλαγών των LED (ή της ταχύτητας του σαρωτή) ρυθμίζεται σε χιλιοστά του δευτερολέπτου (1/1000 δευτερόλεπτα), οπότε ο μέγιστος χρόνος είναι λίγο περισσότερο από 1 δευτερόλεπτο.

Προηγμένος σαρωτής

LED Arduino-εξωτερικά ζεύγη

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

 const int leds[] = {1, 2, 3, 4, 5, 6, 7, 8}; // Led pins const int totalLeds = 8; const int halfLeds = 4; int time = 50; // Default speed void setup() { // Initialize all outputs for(int i = 0; i<= totalLeds; ++i) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i<(halfLeds - 1); ++i) { // Scan outside pairs in time = analogRead(2); digitalWrite(leds[i], HIGH); digitalWrite(leds[(totalLeds - i) - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); digitalWrite(leds[(totalLeds - i) - 1], LOW); delay(time); } for(int i = (halfLeds - 1); i>0; --i) { // Scan inside pairs out time = analogRead(2); digitalWrite(leds[i], HIGH); digitalWrite(leds[(totalLeds - i) - 1], HIGH); delay(time); digitalWrite(leds[i], LOW); digitalWrite(leds[(totalLeds - i) - 1], LOW); delay(time); } } 

Αυτός ο κώδικας είναι λίγο πιο περίπλοκος. Παρατηρήστε πώς οι δύο βρόχοι μεταβαίνουν από το μηδέν στο "halfLeds - 1" (3). Αυτό κάνει έναν καλύτερο σαρωτή. Εάν και οι δύο βρόχοι πήγαν από 4 - 0 και 0 - 4, τότε τα ίδια LED θα αναβοσβήσουν δύο φορές στην ίδια σειρά - αυτό δεν θα φαινόταν πολύ καλό.

Θα πρέπει τώρα να διαθέτετε ένα λειτουργικό σαρωτή LED Knight Rider LED! Θα ήταν εύκολο να το τροποποιήσετε για να χρησιμοποιήσετε περισσότερες ή μεγαλύτερες λυχνίες LED ή να εφαρμόσετε το δικό σας μοτίβο. Αυτό το κύκλωμα είναι πολύ εύκολο να μεταφερθούν σε ένα Raspberry Pi (νέο στο Pi;) Ξεκινήστε εδώ Raspberry Pi: Το Ανεπίσημο Tutorial Raspberry Pi: Το Ανεπίσημο Tutorial Είτε είστε ένας σημερινός ιδιοκτήτης Pi που θέλει να μάθει περισσότερα είτε έναν πιθανό κάτοχο αυτής της πίστωσης Δεν είναι ένας οδηγός που θέλετε να χάσετε. Διαβάστε περισσότερα) ή ESP8266 Γνωρίστε το Killer του Arduino: ESP8266 Γνωρίστε τον Kildeur του Arduino: ESP8266 Τι θα γίνει αν σας είπα ότι υπάρχει μια πλακέτα Dev συμβατή με Arduino με ενσωματωμένο Wi-Fi για λιγότερο από $ 10; Λοιπόν, υπάρχει. Διαβάστε περισσότερα .

Κτίζετε ένα αντίγραφο KITT; Θα ήθελα πολύ να δω όλα τα πράγματα Knight Rider στα σχόλια.

In this article