#52 Seven Segment Display και Arduino


Στο σημερινό μάθημα μας θα δούμε πως μπορούμε να χρησιμοποιήσουμε ένα ψηφίο 7 segment display με το Arduino uno με σκοπό να τυπώσουμε σε αυτό μέσω της σειριακής οθόνης έναν αριθμό απ' το 1 μέχρι το 9. Αυτόν τον τύπο οθόνης το συναντάμε συχνά σε ψηφιακά ρολόγια, ξυπνητήρια, ακόμα και σε αγώνες μπάσκετ (πίνακας σκορ, αντίστροφη μέτρηση πάνω απ' το καλάθι) και ποδοσφαίρου (αλλαγή παίχτη).  Το αποτέλεσμα του σημερινού μαθήματος μπορείτε να το δείτε και στο παρακάτω βίντεο.



Μια οθόνη - ψηφίο 7 segment είναι ένα παραλληλόγραμμο πλαίσιο που ουσιαστικά αποτελείτε απο επτά LED. Κάθε LED ονομάζεται segment γιατί αναπαριστά μέρος του ψηφίου που μπορεί να εμφανιστεί μέσα σε αυτό. Επιπλέον υπάρχει ενα 8ο LED στην κάτω δεξιά γωνία που χρησιμοποιείτε ως τελεία, π.χ. για να αναπαραστήσει δεκαδικό αριθμό όταν υπάρχουν δυο (ή περισσότερα) ψηφία-οθόνες. Κάποια seven segment displays υποστηρίζουν και γράμματα εκτός απ' αριθμούς. Μπορείτε επίσης να τα βρείτε σε διάφορα χρώματα.

Όπως έχουμε ήδη μάθει, κάθε LED έχει δυο ακροδέκτες, την άνοδο και την κάθοδο. Η άνοδος είναι το θετικό άκρο και η κάθοδος το αρνητικό αντίστοιχα. Υπάρχουν δυο τύποι 7 segment: κοινής ανόδου και κοινής καθόδου. Στα displays κοινής ανόδου, όλοι οι ακροδέκτες των LED είναι βραχυκυκλωμένοι μεταξύ τους, ενώ οι ακροδέκτες καθόδου του κάθε LED βγαίνουν απ' το πίσω μέρος αυτού. Το ανάποδο συμβαίνει με τα displays κοινής καθόδου. Κάθε LED έχει ένα όνομα απ' το A μέχρι το G, όπως φαίνεται και στην παρακάτω εικόνα, για να μπορούμε εύκολα να τα ξεχωρίσουμε απ' τα υπόλοιπα.


Στο συγκεκριμένο μάθημα θα χρησιμοποιήσω ένα ψηφίο 7 segment display κοινής καθόδου. Αν εσείς έχετε διαφορετικό, μπορείτε να το χρησιμοποιήσετε κανονικά, το μόνο που θα χρειαστεί είναι μια αλλαγή στον κώδικα.

Τα υλικά που θα χρειαστούμε:



  • Arduino uno
  • breadboard
  • Ένα ψηφίο seven segment 
  • Μερικά καλώδια 

Προτείνετε να χρησιμοποιήσετε και μια αντίσταση 220Ohm σε κάθε ακροδέκτη-led του display.

Το κύκλωμα:


Η συνδεσμολογία είναι αρκετά απλή. Όπως σας είπα μπορείτε να χρησιμοποιήσετε και μερικές αντιστάσεις, εγώ δεν το έκανα γιατί υπάρχει η δυνατότητα μέσω του κώδικα και της αντίστοιχης βιβλιοθήκης που θα κάνουμε χρήση να ελέγξουμε την φωτεινότητα του μειώνοντας την τάση στους ακροδέκτες, έτσι τα εσωτερικά led δεν καίγονται. ("Δεν ξέρω τι είναι η αντίσταση ούτε πως να την βάλω σε αυτό που λες breadboard!" Ε τότε διάβασε αυτό!)

Συμπληρωματικά και με βάση την ονομασία του κάθε segment LED όπως είδαμε παραπάνω, η συνδεσμολογία είναι η παρακάτω:

  • Ε - Arduino pin 6
  • D - Arduino pin 7
  • CC - Arduino pin 4 (cc=common cathode)
  • DP - 
  • B - Arduino pin 9
  • A - Arduino pin 10
  • CC - Arduino pin 4 (πάλι)
  • F - Arduino pin 11
  • G - Arduino pin 12

Ο κώδικας:

Εδώ θα βρείτε τον κώδικα με την χρήση του Codebender! ​

Για όσους δεν ξέρουν τι είναι το Codebender, πρόκειται για το online Arduino IDE το οποίο σας δίνει την δυνατότητα να προγραμματίσετε το Arduino σας μέσα απ' τον browser σας! Πίο εύκολο δεν γίνεται! Δοκιμάστε το πατώντας το πράσινο κουμπί "Run on Arduino"! Μπορείτε επίσης να κάνετε αλλαγές πατώντας το κουμπί "Edit".

Ο κώδικας περιέχει όλα τα σχόλια που χρειάζονται για την κατανόηση του. Αν έχετε οθόνη κοινής ανόδου, πατήστε edit και σβήστε την γραμμή "disp.setCommonCathode();"

Συμπληρωματικά για την καλύτερη κατανόηση του προγράμματος:

  • numOfDigits = 1 Δείχνει οτι έχουμε ένα ψηφίο, αν είχαμε δύο θα ήταν ίσο με 2.
  • digitPins[numOfDigitls]={4} Δείχνει οτι έχουμε συνδέσει την κοινή κάθοδο (cc pin) με το pin 4 του Arduino. Αν είχαμε και δέυτερο ψηφίο και την κοινή κάθοδο συνδεδεμένη με το pin 3 του Arduino τότε θα ήταν ίσο με {4,3}.
  • disp.setDutyCycle(50) Ελέγχει την φωτεινότητα των led (ποσοστό)
  • disp.writeDigit(number) Εκτυπώνει έναν αριθμό απο 0 μέχρι 9.

Εκτύπωση αριθμού:

Πατήστε το connect παρακάτω και στείλτε έναν αριθμό απ' το 1 μέχρι και το 9.

Αυτό ήταν!


Πατήστε edit στον κώδικα και δοκιμάστε να εκτυπώσετε ένα γράμμα, π.χ. το F, απλά αλλάξτε την γραμμή κώδικα disp.writeDigit(number); σε disp.writeNumber("F"); (άλλα γράμματα που μπορούν να εκτυπωθούν σε αυτόν τον τύπο 7 seg: b, d, A, E)

Εύκολο ή δύσκολο? Πείτε μου στα σχόλια παρακάτω!

Συντάκτης: Βασιλάκης Μιχάλης
www.ardumotive.com Το μεγαλύτερο ελληνικό site για το Arduino