Σε αυτό το σεμινάριο θα σχεδιάσουμε μια 8x8 LED Matrix Scrolling Display χρησιμοποιώντας το Arduino Uno, το οποίο θα εμφανίζει κύλιση αλφάβητα.
Το 8x8 LED Matrix περιέχει 64 LED (Light Emitting Diodes) τα οποία είναι διατεταγμένα με τη μορφή μήτρας, εξ ου και το όνομα είναι LED matrix. Πρόκειται να φτιάξουμε αυτό το Matrix με συγκόλληση αυτών των 64 LED στο perfboard ή στο DOT PCB. Τα LED μπορούν να είναι οποιουδήποτε χρώματος, επιλέξτε αυτά που είναι διαθέσιμα μαζί σας. Στη συνέχεια, θα γράψουμε ένα πρόγραμμα για το Arduino για τον έλεγχο αυτών των 64 LED matrix. Το UNO, σύμφωνα με το πρόγραμμα, παρέχει κατάλληλες λυχνίες LED για την εμφάνιση χαρακτήρων με κύλιση.
Απαιτούμενα στοιχεία:
- Arduino Uno
- 64 LED
- Πλακέτα με άλλα εργαλεία συγκόλλησης
- Αντίσταση 1KΩ (8 τεμάχια)
- Τροφοδοσία (5v)
Κύκλωμα και επεξήγηση εργασίας:
Υπάρχουν 64 LED τοποθετημένα σε μορφή μήτρας. Έχουμε λοιπόν 8 στήλες και 8 σειρές. Πάνω από αυτές τις σειρές και τις στήλες, όλα τα θετικά τερματικά στη σειρά συγκεντρώνονται. Για κάθε σειρά, υπάρχει ένα κοινό θετικό τερματικό και για τα 8 LED σε αυτήν τη σειρά. Εμφανίζεται στο παρακάτω σχήμα,
Έτσι, για 8 σειρές έχουμε 8 κοινά θετικά τερματικά. Εξετάστε την πρώτη σειρά, όπως φαίνεται στο σχήμα, 8 LED από D57 έως D64 έχουν ένα κοινό θετικό τερματικό και επισημαίνονται με το «POSITIVE0». Τώρα αν θέλουμε να λάμψουμε ένα ή όλα τα LED στην πρώτη σειρά του matrix, τότε θα πρέπει να τροφοδοτήσουμε το PIN0 του LED Matrix. Παρομοίως, αν θέλουμε να ανάβουμε οποιαδήποτε LED (ή όλα) σε οποιαδήποτε ROW, τότε πρέπει να τροφοδοτήσουμε τον αντίστοιχο Κοινό Θετικό Ακροδέκτη του αντίστοιχου Row.
Αυτό δεν έχει τελειώσει ακόμα και το να αφήσετε το MATRIX ROWS με θετική προσφορά δεν θα αποφέρει τίποτα. Πρέπει να γειώσουμε τα αρνητικά LED για να τα λάμψουμε. Έτσι, σε μήτρα LED 8x8, όλοι οι αρνητικοί ακροδέκτες των LED σε οποιαδήποτε στήλη συγκεντρώνονται για να σχηματίσουν οκτώ κοινά αρνητικά τερματικά, όπως όλοι οι αρνητικοί ακροδέκτες στην πρώτη στήλη συνδέονται μεταξύ τους με το PIN-A1 (NEGATIVE7). Αυτό φαίνεται στο παρακάτω σχήμα:
Κάποιος πρέπει να προσέξει αυτές τις καρφίτσες ενώ συγκολλά τα LED στο Perfboard.
Τώρα, εάν χρειαστεί να γειώσουμε οποιοδήποτε LED στην πρώτη στήλη, τότε θα γειώσουμε το PIN-A1 (NEGATIVE7) του MATRIX και θα γειώσει όλα τα LED στην πρώτη στήλη. Η ίδια διαδικασία ισχύει για όλες τις άλλες επτά κοινές αρνητικές στήλες.
Από τώρα ξέρετε πώς λειτουργεί το κοινό θετικό και το κοινό αρνητικό. Ας τα συνδυάσουμε για να δούμε πώς δουλεύουν μαζί και το τελικό κύκλωμα LED Scrolling 8x8 LED Matrix θα μοιάζει με αυτό:
Οδήγηση 8x8 LED Matrix με χρήση πολυπλεξίας:
Τώρα ας πούμε ότι θέλουμε να ανάψουμε το LED57, τότε πρέπει να ενεργοποιήσουμε το PIN0 του UNO και να γειώσουμε το PIN-8 του UNO. Τώρα για την ενεργοποίηση τόσο των LED57 όσο και των LED50, πρέπει να ενεργοποιήσουμε τους PIN0, PIN1 και να γειώσουμε τους PIN8, PIN9. Αλλά αυτό δεν θα ενεργοποιήσει μόνο τα D57, D50 αλλά και D49, D58. Για να το αποφύγουμε, χρησιμοποιούμε μια τεχνική που ονομάζεται Multiplexing. Έχουμε ήδη συζητήσει λεπτομερώς αυτήν την τεχνική Multiplex στο Matrix 8x8 LED. διαβάστε αυτό το άρθρο για λεπτομερή εξήγηση. Εδώ εξηγούμε εν συντομία την πολυπλεξία.
Το ανθρώπινο μάτι δεν μπορεί να συλλάβει συχνότητα μεγαλύτερη από 30 HZ. Αυτό συμβαίνει εάν μια λυχνία LED ανάβει και σβήνει συνεχώς με ρυθμό 30 ΗΖ ή περισσότερο. Το μάτι βλέπει το LED ως συνεχώς αναμμένο. Ωστόσο, αυτό δεν συμβαίνει και το LED θα ανάβει και σβήνει συνεχώς. Αυτή η τεχνική ονομάζεται Multiplexing.
Ας πούμε για παράδειγμα, θέλουμε να ενεργοποιήσουμε μόνο τα LED57 και LED50 χωρίς να ενεργοποιήσουμε τα D49 και D58. Το κόλπο είναι ότι θα παρέχουμε πρώτα ισχύ στην πρώτη σειρά για να ανάψετε το LED57 και θα περιμένουμε 1mSEC και μετά θα το απενεργοποιήσουμε. Τότε θα παρέχουμε ισχύ στη δεύτερη σειρά για να ανάψουμε το LED50 και περιμένουμε 1mSEC και μετά θα το απενεργοποιήσουμε. Ο κύκλος συνεχίζεται συνεχώς με υψηλή συχνότητα και τα LED57 & LED50 ανάβουν και σβήνουν γρήγορα και τα δύο LED θα εμφανίζονται συνεχώς αναμμένα στο μάτι μας. Σημαίνει ότι παρέχουμε ισχύ μόνο στη μία σειρά κάθε φορά, εξαλείφοντας τις πιθανότητες ενεργοποίησης άλλων LED σε άλλες σειρές. Θα χρησιμοποιήσουμε αυτήν την τεχνική για να δείξουμε όλους τους χαρακτήρες.
Υπάρχει επίσης μια βιβλιοθήκη που ονομάζεται LedControlMS.h για να φροντίσει όλη αυτή την πολυπλοκότητα της πολυπλεξίας, όπου πρέπει να εισαγάγετε μόνο τον χαρακτήρα ή τον αριθμό που θέλετε να εκτυπώσετε σε LED matrix, ελέγξτε αυτό το Arduino LED matrix με το έργο MAX7219 για περισσότερες λεπτομέρειες.
Επεξήγηση προγραμματισμού:
Στον Κώδικα μας, έχουμε γράψει δεκαδική τιμή για κάθε χαρακτήρα και προγραμματίσαμε αυτές τις τιμές στο Arduino. Το πρόγραμμα έχει γράψει για να μετατοπίσει αυτές τις τιμές στην επόμενη σειρά για κάθε 0,2 δευτερόλεπτα, αυτό θα θεωρηθεί ως κύλιση των χαρακτήρων προς τα πάνω, είναι πολύ απλό.
Για να αλλάξετε τους χαρακτήρες που θα εμφανιστούν, απλώς αντικαταστήστε την τιμή στο πίνακα ALPHA char σύμφωνα με τις τιμές χαρακτήρων που δίνονται παρακάτω, 24,60,102,126,102,102,102,0,0,0, // A 124,102,102,124,102,102,124,0,0,0, // B 60,102,96,96,96,102,60,0, 0,0, // C 120,108,102,102,102,108,120,0, 0,0, // D 126,96,96,120,96,96,126,0, 0,0, // E 126,96,96,120,96,96,96,0, 0,0, // F 60,102,96,110,102,102,60, 0, 0,0, // G 102,102,102,126,102,102,102,0, 0,0, // H 60,24,24,24,24,24,60,0, 0,0, // I 30,12,12,12, 12,108,56,0, 0,0, // J 102,108,120,112,120,108,102,0, 0,0, // K 96,96,96,96,96,96,126,0, 0,0, // L 99,119,127,107,99, 99,99,0, 0,0, // M 102,118,126,126,110,102,102,0, 0,0, // N 60,102,102,102,102,102,60,0, 0,0, // O 124,102,102,124,96,96,96,0, 0,0, // P 60,102,102,102,102,60,14,0, 0,0, // Q 124,102,102,124,120,108,102,0, 0,0, // R 60,102,96,60,6,102,60,0, 0,0, // S 126, 24,24,24,24,24,24,0, 0,0, // T 102,102,102,102,102,102,60,0, 0,0, // U 102,102,102,102,102,60,24,0, 0,0, // V 99,99,99,107,127,119,99,0, 0,0, // W 102,102,60,24,60,102,102,0, 0,0, // Χ 102,102,102,60,24,24,24,0, 0,0, // Υ 126,6,12, 24,48,96,126,0, 0,0, // Ζ
Όπως εάν θέλετε να εμφανίσετε το DAD στο LED Matrix, τότε αντικαταστήστε πρώτα τις τιμές χαρακτήρων στη συστοιχία ALPHA char βάζοντας τιμές για τους χαρακτήρες D, A και D από την παραπάνω λίστα:
char ALPHA = {0,0,0,0,0,0,0,0,0,0,0, 120,108,102,102,102,108,120,0,0,0, 24,60,102,126,102,102,102,0,0,0, 120,108,102,102,102,108,120,0,0, 0, 0,0,0,0,0,0,0,0,0,0,0};
Οι συνολικές τιμές είναι τώρα 5 * 10 = 50 τιμές, έτσι
Αντικατάσταση, για (int x = 0; x <142; x ++) // 150-8 (για διακοπή υπερχείλισης) {…….. Με, για (int x = 0; x <42; x ++) // 50-8 (για να σταματήσει η υπερχείλιση) {……..
Επομένως, απλά πρέπει να αλλάξετε τον αριθμό.
Με αυτό έχετε ολοκληρώσει τον προγραμματισμό και τώρα μπορείτε να κάνετε κύλιση οποιουδήποτε κειμένου στο 8x8 LED Matrix, ελέγξτε τον Πλήρες κώδικα παρακάτω με ένα βίντεο επίδειξης.