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

Η μηχανή αλγορίθμου: 13 βήματα (με εικόνες)
Η μηχανή αλγορίθμου: 13 βήματα (με εικόνες)

Βίντεο: Η μηχανή αλγορίθμου: 13 βήματα (με εικόνες)

Βίντεο: Η μηχανή αλγορίθμου: 13 βήματα (με εικόνες)
Βίντεο: Γεωργία Βασιλειάδου - Η Μηχανή Του Χρόνου 2024, Ιούλιος
Anonim
Image
Image
Γραμμή LED: Εκτύπωση 3D της μάσκας
Γραμμή LED: Εκτύπωση 3D της μάσκας

Διδάσκω επιστήμη των υπολογιστών σε επίπεδο κολλεγίων για 15 χρόνια και παρόλο που η τεχνογνωσία μου είναι περισσότερο στον τομέα του προγραμματισμού, εξακολουθώ να περνάω πολύ χρόνο καλύπτοντας τυπικούς αλγόριθμους αναζήτησης και ταξινόμησης. Από τη σκοπιά της διδασκαλίας το κεντρικό ζήτημα είναι η υπολογιστική πολυπλοκότητα: πόσο χρόνο απαιτεί κάθε αλγόριθμος, δεδομένης της εισόδου συγκεκριμένου μεγέθους; Υπάρχουν όμως πολλές αποχρώσεις. Για παράδειγμα, οι αλγόριθμοι έχουν διαφορετικούς χρόνους εκτέλεσης ανάλογα με τις συγκεκριμένες τιμές εισόδου (σε αντίθεση με το μέγεθος); Σε ποιες περιπτώσεις θα επιλέγατε έναν αλγόριθμο ταξινόμησης έναντι άλλου; Παρόλο που συζητάμε αυτά τα ζητήματα αφηρημένα, πάντα με προβλημάτιζε ότι δεν υπήρχε εύκολος τρόπος να δω πώς λειτουργούν διαφορετικοί αλγόριθμοι υπό διάφορες συνθήκες.

Γκολ

Ο κύριος στόχος μου για αυτό το έργο ήταν να δημιουργήσω μια διαδραστική οθόνη για τους μαθητές να απεικονίσουν και να εξερευνήσουν αλγόριθμους. Περιορίστηκα σε αλγόριθμους που λειτουργούν σε συστοιχίες τιμών (ακέραιοι αριθμοί), οπότε μπορώ να χρησιμοποιήσω μια διευθυνσιοδοτούμενη λωρίδα LED RGB για να απεικονίσω τα περιεχόμενα του πίνακα. Ο πίνακας έχει 100 στοιχεία και κάθε ακέραιος αντιστοιχεί σε ένα χρώμα με σειρά ουράνιου τόξου, έτσι ώστε να είναι άμεσα προφανές όταν ο πίνακας ταξινομείται, μερικώς ταξινομείται ή τυχαιοποιείται. Εκτός από τις τιμές, ωστόσο, ήθελα έναν τρόπο οπτικοποίησης πτυχών ελέγχου του αλγορίθμου - για παράδειγμα, ποια στοιχεία του πίνακα συγκρίνονται ή ανταλλάσσονται αυτήν τη στιγμή.

Οι συγκεκριμένοι στόχοι είναι:

- Παρέχετε μια ποικιλία αλγορίθμων αναζήτησης και ταξινόμησης

- Οπτικοποιήστε τις τιμές στον πίνακα με τρόπο που τονίζει την πρόοδο του αλγορίθμου

- Οπτικοποιήστε τον έλεγχο αλγορίθμων. ιδίως, τα στοιχεία που εξετάζονται.

- Επιτρέψτε στους χρήστες να επιλέγουν τα μοτίβα δεδομένων εισόδου αντί να δημιουργούν πάντα τυχαίες τιμές

- Επιτρέψτε στους χρήστες να ελέγχουν την ταχύτητα και να θέτουν σε παύση τον αλγόριθμο

-Επιτρέψτε στους χρήστες να επιβάλλουν την καλύτερη περίπτωση, τη χειρότερη περίπτωση, τη μέση περίπτωση (ειδικά για αλγόριθμο)

- Εμφάνιση του αριθμού των βημάτων καθώς προχωρά ο αλγόριθμος

Οραματισμός

Από την άποψη της φυσικής σχεδίασης, το πιο ενδιαφέρον μέρος αυτού του έργου είναι η απεικόνιση του πίνακα. Δυσκολεύτηκα να δείξω τα δεδομένα και τον έλεγχο και πώς να φτιάξω την ίδια τη συσκευή προβολής. Ο στόχος μου ήταν να δείξω τις τιμές δεδομένων ως έγχρωμους κύκλους και τα σημεία ελέγχου ως έγχρωμα βέλη που δείχνουν τις τιμές δεδομένων. Μετά από κάποιους πειραματισμούς, κατέληξα σε ένα σχέδιο με δύο παράλληλες λωρίδες 100 RGB LED (WS2812) με μια κυκλική μάσκα πάνω από κάθε LED δεδομένων και μια τριγωνική μάσκα πάνω από κάθε LED ελέγχου. Έφτιαξα ένα τρισδιάστατο μοντέλο της μάσκας με 10 ζεύγη κύκλων και τριγώνων και στη συνέχεια εκτύπωσα 3D 10 από αυτές τις ενότητες για συνολικά 100 κύκλους και 100 τρίγωνα. Το μέγεθος και το διάστημα της μάσκας μου έχουν σχεδιαστεί για λωρίδες με 100 LED ανά μέτρο. Τα αρχεία μοντέλου 3D παρέχονται αργότερα σε αυτήν την περιγραφή.

Ηλεκτρονικά και περίβλημα

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

Μπορείτε να δημιουργήσετε το περίβλημα για αυτήν τη συσκευή σε πολλές διαφορετικές μορφές. Αρχικά το φανταζόμουν ως μια μεγάλη ορθογώνια σανίδα με τη λωρίδα LED στην κορυφή και ένα πλέγμα κουμπιών στη μέση. Η μορφή με την οποία κατέληξα είναι εμπνευσμένη από ένα είδος άποψης της τεχνολογίας του διαστήματος-ηλικίας του 1960. Θα μπορούσατε επίσης να το κατασκευάσετε με τις λωρίδες LED σε κάθετο προσανατολισμό. Or κάντε το τμήμα LED πολύ μεγαλύτερο - γεμίστε ολόκληρο τον τοίχο - με ξεχωριστό πίνακα ελέγχου.

Λογισμικό

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

Προμήθειες

ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ

1 πίνακας ανάπτυξης ESP32 (π.χ., 2 λωρίδες WS2812 ή παρόμοιες, πυκνότητα 100 LED ανά μέτρο (π.χ., 1 Κουμπί "έναρξης" τριγώνου (π.χ., 12 στιγμιαία κουμπιά (π.χ., https://amzn.com/B01N4D4750) - διαφορετικά σχήματα αν θέλετε

1 συσκευασία (20) προ -συνδεδεμένοι σύνδεσμοι κουμπιών (π.χ., 1 συσκευασία σύνδεσης JST (π.χ., 1 Περιστροφικός κωδικοποιητής (π.χ., 1 Κουμπί για περιστροφικό κωδικοποιητή (π.χ., 1 Συσκευασία συνδετήρων Dupont (π.χ., https://amzn.com/B014YTPFT8) - αξίζει να αποκτήσετε και το εργαλείο πτύχωσης.

1 υποδοχή βαρελιού (για ισχύ) (π.χ., 1 αριθμητική οθόνη TM1637 7 τμημάτων (π.χ., Εργαλεία συγκόλλησης και καλωδίωσης

Αρχεία τρισδιάστατων μοντέλων

Μπορείτε να βρείτε το τρισδιάστατο μοντέλο για ένα ζευγάρι 10 μονάδων φωτός στο Thingiverse:

www.thingiverse.com/thing:4178181

Θα χρειαστεί να εκτυπώσετε αυτό το μοντέλο πέντε φορές για συνολικά 10 μονάδες.

Λογισμικό

github.com/samguyer/AlgorithmMachine

Περίφραξη

Ξύλο, πλεξιγκλάς, μπουλόνια και βίδες από ανοξείδωτο ατσάλι

Υλικό διάχυσης. Το αγαπημένο μου είναι το Lee Filters #216 full white diffusion, αλλά υπάρχουν και άλλες επιλογές. Ακόμα και το απλό λευκό χαρτί κάνει καλή δουλειά.

Βήμα 1: Αλγόριθμοι 101

Πολλοί άνθρωποι πιστεύουν ότι η επιστήμη των υπολογιστών είναι ουσιαστικά η μελέτη του προγραμματισμού. Αλλά η πραγματική καρδιά και η ψυχή αυτού του τομέα είναι οι αλγόριθμοι: η μελέτη συστηματικών διαδικασιών για την επίλυση προβλημάτων και το κόστος τους (συνήθως, πόσο χρόνο χρειάζονται). Σημαντικές μορφές στον τομέα, όπως ο Alan Turing, ο Alonzo Church και ο Edsger Dijkstra, σκεφτόντουσαν αυτές τις ιδέες πριν από τους υπολογιστές, όπως γνωρίζουμε ότι υπήρχαν.

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

Πόση ώρα θα πάρει?

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

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

Για παράδειγμα, η αναζήτηση μιας λίστας αριθμών τηλεφώνου Ν απαιτεί N βήματα. Η αναζήτηση της λίστας δύο φορές απαιτεί 2 Ν βήματα. Και τα δύο αυτά ονομάζονται γραμμικοί αλγόριθμοι χρόνου - ο συνολικός αριθμός βημάτων είναι πολλαπλάσιο του μεγέθους εισόδου. Άλλοι αλγόριθμοι είναι τετραγωνικοί (N τετραγωνισμένος χρόνος) ή κυβικοί (N κυβικοί) ή λογαριθμικοί (log N) ή κάποιος συνδυασμός αυτών. Μερικά από τα πιο δύσκολα υπολογιστικά προβλήματα απαιτούν εκθετικούς χρόνους αλγόριθμους (2^Β).

Εντάξει, τι;

Όταν ο αριθμός των στοιχείων δεδομένων Ν είναι μικρός δεν έχει μεγάλη σημασία. Για παράδειγμα, για το Ν = 10, το 10Ν είναι αυτό το όνομα ως τετράγωνο. Τι γίνεται όμως με το N = 1000; ή Ν = 1000000; Ένα εκατομμύριο σε τετράγωνο είναι ένας αρκετά μεγάλος αριθμός. Ακόμα και σε έναν πολύ γρήγορο υπολογιστή, ένας τετραγωνικός αλγόριθμος μπορεί να διαρκέσει πολύ εάν η είσοδος είναι αρκετά μεγάλη. Οι εκθετικοί αλγόριθμοι είναι πολύ πιο ενοχλητικοί: για N = 50 ένας εκθετικός αλγόριθμος θα χρειαζόταν δύο εβδομάδες για να ολοκληρωθεί ακόμη και σε έναν υπολογιστή όπου κάθε βήμα είναι μόνο ένα νανοδευτερόλεπτο (1 δισεκατομμυριοστό του δευτερολέπτου). Ωχ!

Στο άλλο άκρο της κλίμακας έχουμε αλγορίθμους λογαριθμικού χρόνου, οι οποίοι είναι πολύ γρήγοροι. Ο χρόνος καταγραφής είναι το αντίθετο του εκθετικού χρόνου: δεδομένου μεγέθους εισόδου Ν, ο αριθμός των βημάτων είναι ο εκθέτης Τ στον τύπο 2^T = Ν. Για παράδειγμα, εάν το μέγεθος εισόδου μας είναι ένα δισεκατομμύριο, τότε ένας αλγόριθμος χρόνου καταγραφής απαιτεί μόνο 30 βήματα, αφού 2^30 = 1, 000, 000, 000. Πόσο γλυκό είναι αυτό;!;;!

Mightσως αναρωτιέστε, ποιος νοιάζεται για τα μεγέθη εισόδου εκατομμυρίων ή δισεκατομμυρίων; Σκεφτείτε το: πόσοι χρήστες υπάρχουν στο Facebook; Πόσες ιστοσελίδες είναι ευρετηριασμένες από την Google; Πόσα ζεύγη βάσεων υπάρχουν στο ανθρώπινο γονιδίωμα; Πόσες μετρήσεις αφορούν μια προσομοίωση καιρού;

Βήμα 2: Οι αλγόριθμοι

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

Γραμμική αναζήτηση

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

Δυαδική αναζήτηση

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

Ταξινόμηση φυσαλίδων

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

Ταξινόμηση εισαγωγής

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

Γρήγορη ταξινόμηση

Ταξινόμηση μιας λίστας διαιρώντας επανειλημμένα τη λίστα στο μισό και μετακινώντας όλες τις τιμές μικρότερες από τη διάμεση στο πρώτο μισό και όλες τις τιμές μεγαλύτερες από τη διάμεση στο δεύτερο μισό. Στην πράξη, δεν μπορούμε να βρούμε αποτελεσματικά τη διάμεσο, οπότε επιλέγουμε μια τιμή τυχαία. Ως αποτέλεσμα, αυτός ο αλγόριθμος μπορεί να είναι τετραγωνικός στη χειρότερη περίπτωση, αλλά συνήθως απαιτεί N * logN χρόνο.

Συγχώνευση ταξινόμησης

Ταξινόμηση μιας λίστας διαιρώντας τη στο μισό, ταξινομώντας τα δύο μισά χωριστά (χρησιμοποιώντας ταξινόμηση συγχώνευσης) και, στη συνέχεια, συγχωνεύοντάς τα μεταξύ τους αφήνοντας τις τιμές μεταξύ τους. Απαιτεί πάντα χρόνο N * logN.

Ταξινόμηση σωρού

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

Μπιτονική ταξινόμηση

Παρόμοια με τη συγχώνευση sort and quicksort, διαιρέστε μια λίστα στο μισό, ταξινομήστε τα μισά και ανασυνδυάστε τα. Αυτός ο αλγόριθμος απαιτεί χρόνο N * logN * logN, αλλά έχει το πλεονέκτημα ότι είναι εύκολος ο παράλληλος.

Βήμα 3: Γραμμή LED: Εκτύπωση 3D της μάσκας

Γραμμή LED: Εκτύπωση 3D της μάσκας
Γραμμή LED: Εκτύπωση 3D της μάσκας
Γραμμή LED: Εκτύπωση 3D της μάσκας
Γραμμή LED: Εκτύπωση 3D της μάσκας

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

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

Βήμα 4: Εναλλακτικές λύσεις LED

Εναλλακτικές λύσεις LED
Εναλλακτικές λύσεις LED
Εναλλακτικές λύσεις LED
Εναλλακτικές λύσεις LED
Εναλλακτικές λύσεις LED
Εναλλακτικές λύσεις LED

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

Για τους κύκλους, αγόρασα έναν σωλήνα από ορείχαλκο 13/32, ο οποίος έχει διάμετρο σχεδόν 1 εκατοστό. Το έκοψα σε εκατό κομμάτια 1 εκατοστού και στη συνέχεια τα έβαψα με σπρέι σε λευκό χρώμα.

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

Βήμα 5: Περίβλημα μπάρας LED

Περίβλημα μπάρας LED
Περίβλημα μπάρας LED
Περίβλημα μπάρας LED
Περίβλημα μπάρας LED
Περίβλημα μπάρας LED
Περίβλημα μπάρας LED

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

Για διάχυση μου αρέσουν πολύ τα Lee Filters #216 (full white diffusion). Είναι ένα λεπτό πλαστικό φύλλο που δίνει ομοιόμορφη διάχυση χωρίς να χάνει πολύ φως. Είναι όμως ακριβά πράγματα. Μερικές φορές μπορείτε να βρείτε μικρότερα φύλλα προς πώληση στο διαδίκτυο, αλλά ένα ολόκληρο ρολό θα σας επιστρέψει περίπου $ 125. Ορισμένες άλλες επιλογές είναι λευκό χαρτί ή οποιοδήποτε άλλο είδος σατέν ή παγωμένο πλαστικό. Μια δημοφιλής επιλογή είναι τα λεπτά πλαστικά στρώματα κοπής.

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

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

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

Εκτελέστε ένα μοτίβο δοκιμής. Καλή δουλειά! Έχετε κάνει το πιο δύσκολο κομμάτι!

Βήμα 6: Πίνακας ελέγχου

Πίνακας Ελέγχου
Πίνακας Ελέγχου
Πίνακας Ελέγχου
Πίνακας Ελέγχου
Πίνακας Ελέγχου
Πίνακας Ελέγχου
Πίνακας Ελέγχου
Πίνακας Ελέγχου

Ο πίνακας ελέγχου είναι το μέρος που παρέχει την πιο δημιουργική ελευθερία. Χρειάζεται απλώς να κρατήσει όλα τα χειριστήρια και τα ηλεκτρονικά, μαζί με τη γραμμή LED. Ο πιο απλός σχεδιασμός είναι ένας ορθογώνιος πίνακας: ανοίξτε τρύπες για τα κουμπιά και τα χειριστήρια και συνδέστε τη γραμμή LED. Μου αρέσει να συνδυάζω ξύλο, πλεξιγκλάς και άλλα υλικά για να δώσω ένα είδος steampunk / retro-modern εμφάνιση. Σε αυτή την περίπτωση, έκοψα ένα κομμάτι πλεξιγκλάς βαρέως τύπου για να κρατήσω τα κύρια κουμπιά επιλογής αλγορίθμου και μια ξύλινη μπάρα για να κρατήσει τα υπόλοιπα ηλεκτρονικά. Άνοιξα τρύπες για να ταιριάζουν με το μέγεθος των κουμπιών arcade. Η καλωδίωση εμφανίζεται στο πίσω μέρος, αλλά μου αρέσει!

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

Βήμα 7: Εξάρτηση κουμπιού

Button Harness
Button Harness
Button Harness
Button Harness
Button Harness
Button Harness

Η καλωδίωση πολλών κουμπιών μπορεί να είναι πραγματικός πόνος. Ευτυχώς, οι άνθρωποι που κατασκευάζουν μηχανές arcade έχουν βρει κάποιους τυπικούς συνδετήρες που μπορείτε να χρησιμοποιήσετε. Κάθε καλώδιο σύνδεσης κουμπιού έχει δύο καλώδια, ένα για VCC και ένα για γείωση. Το ένα άκρο έχει συνδετήρες με φτυάρι που ταιριάζουν με τους αγωγούς στο πίσω μέρος του κουμπιού - συνδέστε τη γείωση στο "κανονικά ανοιχτό" καλώδιο και VCC στο "κοινό" καλώδιο. Σε αυτήν τη διαμόρφωση, όταν ο χρήστης πιέσει το κουμπί, το κύκλωμα ολοκληρώνεται και ο μικροελεγκτής θα διαβάσει Υ HIGHΗΛΗ στην αντίστοιχη ακίδα εισόδου.

Το άλλο άκρο του καλωδίου έχει μια υποδοχή JST (το μικρό λευκό πράγμα). Αυτό που είναι ωραίο με αυτούς τους συνδετήρες είναι ότι εισέρχονται μόνο στην υποδοχή με έναν τρόπο, οπότε δεν υπάρχει τρόπος να αντιστρέψετε κατά λάθος το VCC και τη γείωση.

Αυτό που έκανα ήταν να χτίσω μια μικρή πλεξούδα για αυτούς τους συνδετήρες. Συγκόλλησα μια σειρά δοχείων JST σε ένα κομμάτι protoboard και μετά τρέχω καλώδια πίσω στους συνδετήρες Dupont που θα συνδέσω στον μικροελεγκτή. Το κόκκινο σύρμα είναι η γραμμή VCC και συνδέεται με όλα τα δοχεία JST. Τα μπλε σύρματα είναι αυτά που είναι ξεχωριστά για κάθε κουμπί.

Βήμα 8: Περιστροφικός κωδικοποιητής

Περιστροφικός κωδικοποιητής
Περιστροφικός κωδικοποιητής

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

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

Βήμα 9: Οθόνη 7 τμημάτων

Οθόνη 7 τμημάτων
Οθόνη 7 τμημάτων

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

Το πίσω μέρος έχει τέσσερις ακίδες: VCC, γείωση και δύο καλώδια για το σειριακό πρωτόκολλο. Συγκόλλησα ένα κομμάτι κεφαλίδας 4 ακίδων, το οποίο συνδέεται με έναν αντίστοιχο σύνδεσμο Dupont που συνδέεται με τον μικροελεγκτή.

Βήμα 10: Κύριος πίνακας ελεγκτή

Κύριος πίνακας ελεγκτών
Κύριος πίνακας ελεγκτών
Κύριος πίνακας ελεγκτών
Κύριος πίνακας ελεγκτών
Κύριος πίνακας ελεγκτών
Κύριος πίνακας ελεγκτών

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

ΣΗΜΕΙΩΣΗ: σως θελήσετε να δείτε τον κώδικα (https://github.com/samguyer/AlgorithmMachine) πριν ξεκινήσετε την καλωδίωση της κύριας πλακέτας, έτσι ώστε η διαμόρφωση της καρφίτσας να ταιριάζει με τη δική μου.

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

Για να απλοποιήσω την καλωδίωση του κουμπιού, κόλλησα μια λωρίδα κεφαλίδας δεξιάς γωνίας από άντρα σε γυναίκα σε ολόκληρη την πλευρά του μικροελεγκτή (στην επάνω πλευρά του πίνακα όπως φαίνεται). Οι σύνδεσμοι Dupont από τη ζώνη κουμπιού συνδέονται απευθείας σε αυτήν την κεφαλίδα.

ΣΗΜΑΝΤΙΚΟ: η τροφοδοσία των κουμπιών (το κόκκινο καλώδιο) πρέπει να συνδεθεί στη γραμμή τροφοδοσίας 3,3V του μικροελεγκτή. Το ESP32 είναι ένα τσιπ 3.3V, επομένως μόνο οι πηγές 3.3V πρέπει να είναι προσαρτημένες στις ακίδες δεδομένων.

Ο μικροελεγκτής αντλεί ισχύ (ή σπρώχνει την ισχύ) στις ράγες (κάτω πλευρά της πλακέτας όπως φαίνεται) μέσω του 5V USB pin και γείωσης. Όλα τα άλλα κόκκινα/μαύρα καλώδια είναι VCC και γείωσης.

Τα δύο μπλε σύρματα είναι οι γραμμές δεδομένων για τις λωρίδες LED (τα WS2812). Το κίτρινο/πράσινο ζεύγος είναι οι γραμμές δεδομένων για τον περιστροφικό κωδικοποιητή και το κίτρινο ζεύγος είναι η σειριακή σύνδεση με την οθόνη των 7 τμημάτων.

Βήμα 11: Συναρμολόγηση

Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση
Συνέλευση

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

Πριν την ενεργοποιήσω, έκανα μερικούς ελέγχους για να αποφύγω τυχόν δυσάρεστες εκπλήξεις. Συγκεκριμένα, για να βεβαιωθείτε ότι δεν είχα συνδέσμους τροφοδοσίας/γείωσης προς τα πίσω και κανένα βραχυκύκλωμα. Ρυθμίστε το πολύμετρό σας για να ελέγξει τη συνέχεια - θα ακούγεται μπιπ όταν υπάρχει ηλεκτρική διαδρομή μεταξύ των δύο καλωδίων. Συνδέστε ένα καλώδιο στην κοινή γραμμή VCC στα κουμπιά. Στη συνέχεια, συνδέστε το άλλο καλώδιο σε κάθε πείρο της πλεξούδας ένα προς ένα. Το πολύμετρο πρέπει να ηχεί μόνο όταν πατάτε το κουμπί. Εάν λάβετε άλλα ηχητικά σήματα σημαίνει ότι έχετε αναστροφή ή βραχυκύκλωμα. Παρακολουθήστε το και διορθώστε το πριν ενεργοποιήσετε το ρεύμα!

Βήμα 12: Κωδικός

Αρχικά, ανοίξτε το Arduino IDE και βεβαιωθείτε ότι έχετε εγκαταστήσει τη βιβλιοθήκη FastLED.

Κατεβάστε τον κώδικα του Algorithm Machine από το GitHub:

github.com/samguyer/AlgorithmMachine.git

Μπορείτε είτε να το κλωνοποιήσετε απευθείας στο φάκελο Arduino είτε να το αντιγράψετε με το χέρι.

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

Ανεβάστε και απολαύστε!

Βήμα 13: Τρόπος χρήσης

Η μηχανή αλγορίθμων είναι απλή στη χρήση και σχεδόν κάθε συνδυασμός κουμπιών είναι εντάξει!

Αρχικά, χρησιμοποιήστε τα κουμπιά δεδομένων για να ξεκινήσετε τις τιμές στον πίνακα. Υπάρχουν τρεις επιλογές: (1) τυχαιοποίηση, (2) προσθήκη μίας τυχαίας τιμής και (3) αντιστροφή του πίνακα. Λάβετε υπόψη ότι οι τιμές είναι επίμονες, ώστε να μπορείτε να κάνετε πράγματα όπως να τις ταξινομήσετε πρώτα, στη συνέχεια να προσθέσετε λίγο θόρυβο και, στη συνέχεια, να εκτελέσετε διαφορετικό αλγόριθμο ταξινόμησης ή αναζήτησης.

Επιλέξτε έναν αλγόριθμο αναζήτησης ή ταξινόμησης από τις άλλες επιλογές κουμπιών. Προς το παρόν, δεν υπάρχει ανατροφοδότηση όταν κάνετε αυτήν την επιλογή (κάτι για μελλοντική εργασία). Στη συνέχεια, πατήστε το κουμπί "αναπαραγωγή".

Το κουμπί ελέγχει την ταχύτητα. Μπορείτε επίσης να πατήσετε "play" για παύση και παύση του αλγορίθμου.

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

Διαγωνισμός STEM
Διαγωνισμός STEM
Διαγωνισμός STEM
Διαγωνισμός STEM

Μεγάλο βραβείο στο διαγωνισμό STEM

Συνιστάται: