Διαφήμιση
Θέλατε ποτέ να έχετε το δικό σας αυτοκίνητο Knight Industries Two Thousand (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 για να δημιουργήσετε κάτι από αυτό και να ξεκινήσετε. Το Arduino "starter kits" είναι ... Διαβάστε περισσότερα είναι πιθανό να έχετε όλα αυτά τα μέρη (τι μπορείτε να φτιάξετε με ένα κιτ εκκίνησης; 5 μοναδικά έργα Arduino για αρχάριους που μπορείτε να κάνετε με ένα απλό κιτ εκκίνησης Διαβάστε περισσότερα ).
Σχεδόν οποιοδήποτε Arduino θα λειτουργήσει, αρκεί να έχει οκτώ διαθέσιμες καρφίτσες (Ποτέ δεν χρησιμοποιήσατε ποτέ Arduino; Ξεκινήστε εδώ Ξεκινώντας με το Arduino: Ένας οδηγός για αρχάριουςΤο Arduino είναι μια πλατφόρμα πρωτοτύπων ηλεκτρονικής ανοικτής πηγής που βασίζεται σε ευέλικτο, εύχρηστο υλικό και λογισμικό. Προορίζεται για καλλιτέχνες, σχεδιαστές, χομπίστες και όσους ενδιαφέρονται να δημιουργήσουν διαδραστικά αντικείμενα ή περιβάλλοντα. Διαβάστε περισσότερα ). Θα μπορούσες χρησιμοποιήστε ένα Shift Register Προγραμματισμός Arduino - Αναπαραγωγή με καταχωρητές Shift (π.χ. ακόμη περισσότερα LED)Σήμερα θα προσπαθήσω να σας διδάξω λίγο για τα Shift Registers. Αυτά είναι ένα αρκετά σημαντικό μέρος του προγραμματισμού Arduino, βασικά επειδή επεκτείνουν τον αριθμό των εξόδων που μπορείτε να χρησιμοποιήσετε, σε αντάλλαγμα για ... Διαβάστε περισσότερα για τον έλεγχο των LED, αν και αυτό δεν είναι απαραίτητο για αυτό το έργο, καθώς το Arduino έχει αρκετές ακίδες.
Σχέδιο κατασκευής
Αυτό είναι ένα πολύ απλό έργο. Ενώ μπορεί να φαίνεται περίπλοκο από τον μεγάλο αριθμό καλωδίων, κάθε μεμονωμένο τμήμα είναι πολύ απλό. Κάθε δίοδος εκπομπής φωτός (LED) συνδέεται με τον δικό της πείρο Arduino. Αυτό σημαίνει ότι κάθε LED μπορεί να ενεργοποιηθεί και να απενεργοποιηθεί ξεχωριστά. Ένα ποτενσιόμετρο συνδέεται με το αναλογικό Arduino σε ακίδες, το οποίο θα χρησιμοποιηθεί για τη ρύθμιση της ταχύτητας του σαρωτή.
Το κύκλωμα
Συνδέστε τον εξωτερικό αριστερό πείρο (κοιτάζοντας μπροστά, με τους πείρους στο κάτω μέρος) του ποτενσιόμετρου στη γείωση. Συνδέστε τον απέναντι εξωτερικό πείρο σε + 5v. Εάν δεν λειτουργεί σωστά, αντιστρέψτε αυτές τις ακίδες. Συνδέστε τον μεσαίο πείρο στο αναλογικό Arduino στο 2.
Συνδέστε την άνοδο (μακρύ πόδι) κάθε LED σε ψηφιακές ακίδες μία έως οκτώ. Συνδέστε τις καθόδους (κοντό πόδι) στο έδαφος Arduino.
Ο κώδικας
Δημιουργήστε ένα νέο σκίτσο και αποθηκεύστε το ως "knightRider". Εδώ είναι ο κωδικός:
const int leds [] = {1,2,3,4,5,6,7,8}; // Καρφίτσες Led. const int totalLeds = 8; ώρα int = 50; // Προεπιλεγμένη ρύθμιση κενής ταχύτητας () {// Αρχικοποίηση όλων των εξόδων για (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } κενός βρόχος () {για (int i = 0; i 0; --i) {// Σάρωση από δεξιά προς τα αριστερά = analogRead (2); digitalWrite (leds [i], HIGH); χρόνος καθυστέρησης); digitalWrite (leds [i - 1], HIGH); χρόνος καθυστέρησης); digitalWrite (leds [i], LOW); } }
Ας το σπάσουμε. Κάθε πείρος LED αποθηκεύεται σε μια σειρά:
const int leds [] = {1,2,3,4,5,6,7,8};
Ένας πίνακας είναι ουσιαστικά μια συλλογή σχετικών στοιχείων. Αυτά τα στοιχεία ορίζονται ως σταθερά ("const"), πράγμα που σημαίνει ότι δεν μπορούν να αλλάξουν αργότερα. Δεν χρειάζεται να χρησιμοποιήσετε μια σταθερά (ο κώδικας θα λειτουργήσει τέλεια εάν αφαιρέσετε το "const"), αν και συνιστάται.
Τα στοιχεία μιας συστοιχίας είναι προσβάσιμα χρησιμοποιώντας αγκύλες ("[]") και έναν ακέραιο αριθμό που ονομάζεται ευρετήριο. Τα ευρετήρια ξεκινούν στο μηδέν, οπότε τα "leds [2]" θα επιστρέψουν το τρίτο στοιχείο του πίνακα - ακίδα 3. Οι συστοιχίες κάνουν τον κώδικα πιο γρήγορο στην εγγραφή και ευκολότερο στην ανάγνωση, κάνουν τον υπολογιστή να κάνει τη σκληρή δουλειά!
Ένα βρόχο για βρόχο χρησιμοποιείται για τη ρύθμιση κάθε ακίδας ως έξοδο:
για (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); }
Αυτός ο κωδικός βρίσκεται στη λειτουργία "setup ()", καθώς πρέπει να εκτελεστεί μόνο μία φορά στην αρχή του προγράμματος. Για βρόχους είναι πολύ χρήσιμο. Σας επιτρέπουν να τρέχετε τον ίδιο κωδικό ξανά και ξανά, με διαφορετική τιμή κάθε φορά. Είναι ιδανικά για εργασία με συστοιχίες. Ένας ακέραιος "i" δηλώνεται και μόνο κώδικας μέσα στον βρόχο μπορεί να έχει πρόσβαση σε αυτήν τη μεταβλητή (αυτό είναι γνωστό ως "εύρος"). Η τιμή του i ξεκινά από το μηδέν και για κάθε επανάληψη του βρόχου αυξάνεται κατά ένα. Μόλις η τιμή του i είναι μικρότερη ή ίση με τη μεταβλητή "totalLeds", ο βρόχος "break" (σταματά).
Η τιμή του i χρησιμοποιείται για πρόσβαση στον πίνακα "leds". Αυτός ο βρόχος έχει πρόσβαση σε κάθε στοιχείο του πίνακα και το διαμορφώνει ως έξοδο. Θα μπορούσατε να πληκτρολογήσετε χειροκίνητα "pinMode (pin, OUTPUT)" οκτώ φορές, αλλά γιατί να γράψετε οκτώ γραμμές όταν μπορείτε να γράψετε τρεις;
Ενώ ορισμένες γλώσσες προγραμματισμού μπορούν να σας πουν πόσα στοιχεία υπάρχουν σε έναν πίνακα (συνήθως με σύνταξη όπως array.length), το Arduino δεν το καθιστά τόσο απλό (περιλαμβάνει λίγο περισσότερα μαθηματικά). Καθώς ο αριθμός των στοιχείων στον πίνακα είναι ήδη γνωστός, δεν είναι πρόβλημα.
Μέσα στον κύριο βρόχο (κενός βρόχος ()) είναι δύο ακόμη για βρόχους. Το πρώτο θέτει τις λυχνίες ON και στη συνέχεια σβήνει από 1 - 8. Ο δεύτερος βρόχος θέτει τις λυχνίες LED ON και στη συνέχεια OFF από 8 - 1. Παρατηρήστε πώς είναι ενεργοποιημένη η τρέχουσα καρφίτσα, καθώς και η τρέχουσα καρφίτσα συν ένα. Αυτό διασφαλίζει ότι υπάρχουν πάντα δύο LED ταυτόχρονα, καθιστώντας το σαρωτή πιο ρεαλιστικό.
Στην αρχή κάθε βρόχου, η τιμή του pot διαβάζεται στη μεταβλητή "time":
time = analogRead (2);
Αυτό γίνεται δύο φορές, μία φορά μέσα σε κάθε βρόχο. Αυτό πρέπει να ελέγχεται και να ενημερώνεται συνεχώς. Εάν αυτό ήταν έξω από τους βρόχους, θα εξακολουθούσε να λειτουργεί, ωστόσο θα υπήρχε μια μικρή καθυστέρηση - θα εκτελεζόταν μόνο όταν ολοκληρωθεί η εκτέλεση ενός βρόχου. Οι γλάστρες είναι αναλογικές, επομένως γιατί χρησιμοποιείται το "analogRead (pin)". Αυτό επιστρέφει τιμές μεταξύ μηδέν (ελάχιστο) και 1023 (μέγιστο). Το Arduino είναι ικανό να μετατρέπει αυτές τις τιμές σε κάτι πιο χρήσιμο, ωστόσο είναι τέλειες για αυτήν την περίπτωση χρήσης.
Η καθυστέρηση μεταξύ αλλαγής LED (ή της ταχύτητας του σαρωτή) ορίζεται σε χιλιοστά του δευτερολέπτου (1/1000 δευτερόλεπτα), οπότε ο μέγιστος χρόνος είναι λίγο πάνω από 1 δευτερόλεπτο.
Προηγμένος σαρωτής
Τώρα που γνωρίζετε τα βασικά, ας δούμε κάτι πιο περίπλοκο. Αυτός ο σαρωτής ανάβει τα LED σε ζευγάρια ξεκινώντας από το εξωτερικό και λειτουργώντας μέσα. Στη συνέχεια θα το αντιστρέψει και θα μεταβεί από εσωτερικά σε εξωτερικά ζεύγη. Εδώ είναι ο κωδικός:
const int leds [] = {1,2,3,4,5,6,7,8}; // Καρφίτσες Led. const int totalLeds = 8; const int halfLeds = 4; ώρα int = 50; // Προεπιλεγμένη ρύθμιση κενής ταχύτητας () {// Αρχικοποίηση όλων των εξόδων για (int i = 0; i <= totalLeds; ++ i) {pinMode (leds [i], OUTPUT); } } κενός βρόχος () {για (int i = 0; i 0; --i) {// Σάρωση εσωτερικών ζευγών time out = analogRead (2); digitalWrite (leds [i], HIGH); digitalWrite (leds [(totalLeds - i) - 1], HIGH); χρόνος καθυστέρησης); digitalWrite (leds [i], LOW); digitalWrite (leds [(totalLeds - i) - 1], LOW); χρόνος καθυστέρησης); } }
Αυτός ο κωδικός είναι ελαφρώς πιο περίπλοκος. Παρατηρήστε πώς και οι δύο βρόχοι πηγαίνουν από το μηδέν στο "halfLeds - 1" (3). Αυτό κάνει έναν καλύτερο σαρωτή. Εάν και οι δύο βρόχοι πήγαν από 4 - 0 και 0 - 4, τότε τα ίδια LED θα αναβοσβήνουν δύο φορές στην ίδια σειρά - αυτό δεν θα φαίνεται πολύ καλό.
Τώρα πρέπει να διαθέτετε έναν σαρωτή LED Knight Rider που λειτουργεί! Θα ήταν εύκολο να το τροποποιήσετε για να χρησιμοποιήσετε περισσότερα ή μεγαλύτερα LED ή να εφαρμόσετε το δικό σας μοτίβο. Αυτό το κύκλωμα είναι πολύ εύκολο στη μεταφορά σε ένα Raspberry Pi (νέο στο Pi; Ξεκινήστε εδώ Raspberry Pi: Το ανεπίσημο σεμινάριοΕίτε είστε τρέχων κάτοχος Pi που θέλετε να μάθετε περισσότερα ή δυνητικός κάτοχος αυτής της συσκευής μεγέθους πιστωτικής κάρτας, αυτός δεν είναι ένας οδηγός που θέλετε να χάσετε. Διαβάστε περισσότερα ) ή ESP8266 Γνωρίστε το Arduino Killer: ESP8266Τι θα συμβεί αν σας είπα ότι υπάρχει μια συμβατή πλατφόρμα συμβατή με Arduino με ενσωματωμένο Wi-Fi για λιγότερο από 10 $; Λοιπόν, υπάρχει. Διαβάστε περισσότερα .
Κατασκευάζετε ένα αντίγραφο KITT; Θα ήθελα να δω όλα τα πράγματα Knight Rider στα σχόλια.
Ο Joe είναι απόφοιτος της Επιστήμης Υπολογιστών από το Πανεπιστήμιο του Λίνκολν του Ηνωμένου Βασιλείου. Είναι επαγγελματίας προγραμματιστής λογισμικού και όταν δεν πετάει drones ή γράφει μουσική, μπορεί συχνά να βρεθεί να φωτογραφίζει ή να δημιουργεί βίντεο.