Έχουμε δημιουργήσει μια σειρά από Tutorial Raspberry Pi, στα οποία έχουμε καλύψει το Interfacing του Raspberry Pi με όλα τα βασικά στοιχεία όπως LED, LCD, κουμπί, κινητήρας DC, Servo Motor, Stepper Motor, ADC, shift Register κ.λπ. δημοσίευσε μερικά απλά έργα Raspberry Pi για αρχάριους, μαζί με μερικά καλά έργα IoT. Σήμερα, σε συνέχεια αυτών των σεμιναρίων, πρόκειται να ελέγξουμε το 8x8 LED Matrix Module από το Raspberry Pi. Θα γράψουμε ένα πρόγραμμα python για να δείξουμε χαρακτήρες στο matrix module.
Ελέγξτε επίσης Interfacing 8x8 LED Matrix με Arduino και LED Matrix με AVR Microcontorller.
Απαιτούμενα στοιχεία:
Εδώ χρησιμοποιούμε το Raspberry Pi 2 Model B με το Raspbian Jessie OS. Όλες οι βασικές απαιτήσεις υλικού και λογισμικού συζητήθηκαν προηγουμένως, μπορείτε να το αναζητήσετε στο Raspberry Pi Εισαγωγή και στο Raspberry PI LED Blinking για να ξεκινήσετε, εκτός από αυτό που χρειαζόμαστε:
- Πίνακας Raspberry Pi
- Τροφοδοσία (5v)
- Πυκνωτής 1000uF (συνδεδεμένος σε τροφοδοτικό)
- Αντίσταση 1KΩ (8 τεμάχια)
Ενότητα 8x8 LED Matrix:
Μια μονάδα μήτρας 8 * 8 LED περιέχει 64 LED (Light Emitting Diodes) που είναι διατεταγμένα με τη μορφή μήτρας, εξ ου και το όνομα είναι LED matrix. Αυτές οι συμπαγείς μονάδες διατίθενται σε διάφορα μεγέθη και πολλά χρώματα. Κάποιος μπορεί να τα επιλέξει για ευκολία. Η διαμόρφωση PIN της μονάδας είναι όπως φαίνεται στην εικόνα. Λάβετε υπόψη ότι, τα pinouts της μονάδας δεν είναι σωστά, οπότε τα PIN πρέπει να αριθμούνται ακριβώς όπως φαίνεται στην εικόνα για την αποφυγή σφαλμάτων.
Υπάρχουν 8 + 8 = 16 κοινά τερματικά στη μονάδα LED Matrix. Πάνω από αυτά, έχουμε 8 κοινά θετικά τερματικά και 8 κοινά αρνητικά τερματικά, με τη μορφή 8 σειρών και 8 στηλών, για τη σύνδεση 64 LED σε μορφή μήτρας. Εάν η μονάδα σχεδιάστηκε με τη μορφή διαγράμματος κυκλώματος, θα έχουμε μια εικόνα όπως φαίνεται παρακάτω:
Έτσι, για 8 σειρές, έχουμε 8 κοινά θετικά τερματικά (9, 14, 8, 12, 17, 2, 5). Εξετάστε την πρώτη σειρά, οι λυχνίες LED από D1 έως D8 έχουν κοινό θετικό τερματικό και ο πείρος βγαίνει στο PIN9 της μονάδας LED Matrix. Όταν θέλουμε να ανάβουν ένα ή όλα τα LED σε μια σειρά, ο αντίστοιχος ακροδέκτης LED MODULE πρέπει να τροφοδοτείται με + 3.3v.
Παρόμοια με τα κοινά θετικά τερματικά, έχουμε 8 κοινά αρνητικά τερματικά ως στήλες (13, 3, 4, 10, 6, 11, 15, 16). Για τη γείωση οποιουδήποτε LED σε οποιαδήποτε στήλη, πρέπει να γειωθεί ο αντίστοιχος κοινός αρνητικός ακροδέκτης.
Επεξήγηση κυκλώματος:
Οι συνδέσεις που πραγματοποιούνται μεταξύ του Raspberry Pi και του LED matrix module παρουσιάζονται στον παρακάτω πίνακα.
LED Matrix Module Pin αρ. |
Λειτουργία |
Raspberry Pi GPIO Pin No. |
13 |
ΘΕΤΙΚΟ0 |
GPIO12 |
3 |
ΘΕΤΙΚΟ |
GPIO22 |
4 |
ΘΕΤΙΚΟ2 |
GPIO27 |
10 |
ΘΕΤΙΚΟ3 |
GPIO25 |
6 |
ΘΕΤΙΚΟ 4 |
GPIO17 |
11 |
ΘΕΤΙΚΟ 5 |
GPIO24 |
15 |
ΘΕΤΙΚΟ6 |
GPIO23 |
16 |
ΘΕΤΙΚΟ 7 |
GPIO18 |
9 |
ΑΡΝΗΤΙΚΟ0 |
GPIO21 |
14 |
ΑΡΝΗΤΙΚΟ1 |
GPIO20 |
8 |
ΑΡΝΗΤΙΚΟ2 |
GPIO26 |
12 |
ΑΡΝΗΤΙΚΟ3 |
GPIO16 |
1 |
ΑΡΝΗΤΙΚΟ4 |
GPIO19 |
7 |
NEGATIVE5 |
GPIO13 |
2 |
ΑΡΝΗΤΙΚΟ6 |
GPIO6 |
5 |
ΑΡΝΗΤΙΚΟ7 |
GPIO5 |
Εδώ είναι το τελικό διάγραμμα κυκλώματος για Interfacing 8x8 LED Matrix με Raspberry Pi:
Επεξήγηση εργασίας:
Εδώ θα χρησιμοποιήσουμε την Πολλαπλή Τεχνική για να δείξουμε χαρακτήρες στο 8x8 LED Matrix Module. Ας συζητήσουμε λοιπόν για αυτήν την πολυπλεξία λεπτομερώς. Πείτε εάν θέλουμε να ανάψουμε το LED D10 στη μήτρα, πρέπει να ενεργοποιήσουμε το PIN14 της μονάδας και να γειώσουμε το PIN3 της μονάδας. Με αυτό το LED D10 θα ανάψει όπως φαίνεται στο παρακάτω σχήμα. Αυτό πρέπει επίσης να ελεγχθεί πρώτα ώστε το MATRIX να γνωρίζει ότι όλα είναι εντάξει.
Τώρα, ας πούμε αν θέλουμε να ενεργοποιήσουμε το D1, πρέπει να ενεργοποιήσουμε το PIN9 του πίνακα και να γειώσουμε το PIN13. Με αυτό το LED D1 θα ανάψει. Η τρέχουσα κατεύθυνση σε αυτήν την περίπτωση φαίνεται στο παρακάτω σχήμα.
Τώρα για το δύσκολο μέρος, σκεφτείτε ότι θέλουμε να ενεργοποιήσουμε ταυτόχρονα το D1 και το D10. Επομένως, θα πρέπει να τροφοδοτήσουμε και τους δύο PIN9, PIN14 και να γειώσουμε και τους δύο PIN13, PIN3. Αυτό θα ανάψει τα LED D1 και D10, αλλά μαζί με αυτό θα ανάψει επίσης τα LED D2 και D9. Είναι επειδή μοιράζονται κοινούς τερματικούς σταθμούς. Αν λοιπόν θέλουμε να ανάψουμε τα LED κατά μήκος της διαγώνιας, θα αναγκαστούμε να ανάβουμε όλα τα LED κατά μήκος της διαδρομής. Αυτό φαίνεται στο παρακάτω σχήμα:
Για να αποφύγουμε αυτό το πρόβλημα, χρησιμοποιούμε μια τεχνική που ονομάζεται Multiplexing. Έχουμε επίσης συζητήσει αυτήν την τεχνική πολυπλεξίας ενώ διασυνδέουμε 8x8 LED Matrix με AVR, εδώ εξηγούμε ξανά. Αυτή η ίδια τεχνική πολυπλεξίας χρησιμοποιείται επίσης στο Scrolling Text on 8x8 LED matrix με Arduino και με AVR μικροελεγκτή.
Το ανθρώπινο μάτι δεν μπορεί να συλλάβει συχνότητα μεγαλύτερη από 30 HZ. Αυτό συμβαίνει εάν μια λυχνία LED ανάβει και σβήνει συνεχώς με ρυθμό 30 ΗΖ ή περισσότερο. Το μάτι βλέπει το LED ως συνεχώς αναμμένο. Ωστόσο, αυτό δεν συμβαίνει και το LED θα ανάβει και σβήνει συνεχώς. Αυτή η τεχνική ονομάζεται Multiplexing.
Ας πούμε για παράδειγμα, θέλουμε να ενεργοποιήσουμε μόνο τα LED D1 και LED D10 χωρίς να ενεργοποιήσουμε τα D2 και D9. Το κόλπο είναι ότι θα παρέχουμε πρώτα ισχύ μόνο στο LED D1 χρησιμοποιώντας το PIN 9 & 13 και θα περιμένουμε το 1mSEC και μετά θα το απενεργοποιήσουμε. Τότε θα παρέχουμε ισχύ στο LED D10 χρησιμοποιώντας το PIN 14 & 3 και περιμένουμε 1mSEC και στη συνέχεια θα το απενεργοποιήσουμε. Ο κύκλος συνεχίζεται συνεχώς με υψηλή συχνότητα και οι D1 & D10 θα ανάβουν και σβήνουν γρήγορα και και οι δύο λυχνίες LED θα φαίνονται συνεχώς αναμμένες στο μάτι μας. Σημαίνει ότι παρέχουμε ισχύ μόνο στη μία σειρά (LED) κάθε φορά, εξαλείφοντας τις πιθανότητες ενεργοποίησης άλλων LED σε άλλες σειρές. Θα χρησιμοποιήσουμε αυτήν την τεχνική για να δείξουμε όλους τους χαρακτήρες.
Μπορούμε να το κατανοήσουμε περαιτέρω με ένα παράδειγμα, όπως εάν θέλουμε να εμφανίσουμε το "A" στη μήτρα, όπως φαίνεται παρακάτω:
Όπως είπαμε, θα ενεργοποιήσουμε μια σειρά σε μια στιγμή, Σε t = 0m SEC, το PIN09 έχει ρυθμιστεί ΥΨΗΛΟ (άλλες καρφίτσες ROW είναι ΧΑΜΗΛΕΣ αυτήν τη στιγμή) αυτήν τη στιγμή, γείωσης PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε t = 1m SEC, το PIN14 έχει ρυθμιστεί ΥΨΗΛΟ (οι υπόλοιπες καρφίτσες ROW είναι ΧΑΜΗΛΕΣ αυτήν τη στιγμή) αυτήν τη στιγμή, οι PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 είναι γειωμένοι (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε t = 2m SEC, το PIN08 έχει ρυθμιστεί ΥΨΗΛΟ (άλλες καρφίτσες ROW είναι χαμηλές αυτήν τη στιγμή) αυτήν τη στιγμή, οι γείωσης PIN13, PIN3, PIN15, PIN16 (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε t = 3m SEC, το PIN12 έχει ρυθμιστεί ΥΨΗΛΟ (οι υπόλοιπες καρφίτσες ROW είναι ΧΑΜΗΛΕΣ αυτήν τη στιγμή) αυτήν τη στιγμή, οι γείωσης PIN13, PIN3, PIN15, PIN16 (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε t = 4m SEC, το PIN01 έχει ρυθμιστεί ΥΨΗΛΟ (άλλες καρφίτσες ROW είναι ΧΑΜΗΛΕΣ αυτήν τη στιγμή) αυτήν τη στιγμή, οι γείωσης PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε t = 5m SEC, το PIN07 έχει ρυθμιστεί ΥΨΗΛΟ (άλλες καρφίτσες ROW είναι ΧΑΜΗΛΕΣ αυτήν τη στιγμή) αυτήν τη στιγμή, οι PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 είναι γειωμένοι (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε t = 6m SEC, το PIN02 έχει ρυθμιστεί ΥΨΗΛΟ (άλλες καρφίτσες ROW είναι ΧΑΜΗΛΕΣ αυτήν τη στιγμή) αυτήν τη στιγμή, οι γείωσης PIN13, PIN3, PIN15, PIN16 (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε t = 7m SEC, το PIN05 έχει ρυθμιστεί ΥΨΗΛΟ (άλλες καρφίτσες ROW είναι ΧΑΜΗΛΕΣ αυτήν τη στιγμή) αυτήν τη στιγμή, οι γείωσης PIN13, PIN3, PIN15, PIN16 (άλλες ακίδες COLUMN είναι ΥΨΗΛΕΣ αυτήν τη στιγμή)
Σε αυτήν την ταχύτητα, η οθόνη θα φαίνεται συνεχώς να δείχνει τον χαρακτήρα «Α» όπως φαίνεται στην εικόνα.
Το πρόγραμμα Python για την εμφάνιση χαρακτήρων στο LED Matrix χρησιμοποιώντας το Raspberry Pi δίνεται παρακάτω. Το πρόγραμμα εξηγείται καλά από σχόλια. Τιμές θύρας για κάθε χαρακτήρα δίνονται στο πρόγραμμα. Μπορείτε να δείξετε ό, τι χαρακτήρες θέλετε απλά αλλάζοντας τις τιμές «pinp» στο «for loop» στο συγκεκριμένο πρόγραμμα. Δείτε επίσης το βίντεο επίδειξης παρακάτω.