To Raspberry Pi αλληλεπιδρά με το περιβάλλον – LED

Το Raspberry Pi είναι ένας υπολογιστής με μέγεθος λίγο μεγαλύτερο από πιστωτική κάρτα, ο οποίος αναπτύσσεται από το μη κερδοσκοπικό ίδρυμα Raspberry Pi Foundation. Ο κύριος σκοπός της δημιουργίας του Raspberry Pi είναι η προώθηση της εκπαίδευσης της επιστήμης των υπολογιστών. Η τελευταία έκδοση του Raspberry Pi είναι η 4, ενώ εμείς στο σχολείο διαθέτουμε την έκδοση 3Β.

Το Raspberry Pi, όπως και οποιοσδήποτε άλλος υπολογιστής, έχει επεξεργαστή, μνήμη RAM, μνήμη για μόνιμη αποθήκευση καθώς και διεπαφές για είσοδο και έξοδο δεδομένων. Έχει όμως και ένα χαρακτηριστικό το οποίο δεν το βρίσκουμε στους συνηθισμένους υπολογιστές και αυτό είναι οι ακροδέκτες GPIO (General Purpose Input Output). Σ’ αυτούς τους ακροδέκτες έχουμε τη δυνατότητα να συνδέσουμε ηλεκτρονικά εξαρτήματα, την λειτουργία των οποίων μπορούμε να προγραμματίσουμε χρησιμοποιώντας κάποια γλώσσα προγραμματισμού (π.χ. Scratch, Python). Χρησιμοποιώντας τους ακροδέκτες GPIO το Raspberry Pi μπορεί να επικοινωνεί με τον πραγματικό κόσμο και έτσι εμείς έχουμε τη δυνατότητα να αναπτύξουμε συστήματα τα οποία θα μπορούν να αποκρίνονται σε ερεθίσματα από το περιβάλλον. Η διαδικασία ανάπτυξης τέτοιου είδους συστημάτων ονομάζεται physical computing και σ’ αυτήν την σειρά άρθρων θα κάνουμε τα πρώτα μας βήματα σ’ αυτόν τον “κόσμο”.

Κάτοψη του Raspberry Pi 3B
Κάτοψη του Raspberry Pi 3B

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

Τα υλικά που θα χρειαστούμε για την υλοποίηση των συστημάτων είναι τα παρακάτω:

  • Raspberry Pi με κατάλληλο τροφοδοτικό
  • Κάρτα MicroSD με εγκατεστημένη την τελευταία έκδοση του Raspberry Pi OS (Οδηγός εγκατάστασης)
  • Οθόνη με είσοδο HDMI και καλώδιο σύνδεσης HDMI
  • Breadboard
  • Τουλάχιστον 3 διόδους LED
  • Αντιστάσεις 330Ω και 1ΚΩ
  • Διακόπτες
  • Ανιχνευτή κίνησης
  • Καλώδια σύνδεσης

Δραστηριότητα 1

Στην παρακάτω εικόνα, μπορούμε να διακρίνουμε του ακροδέκτες GPIO του Raspberry Pi καθώς και την λειτουργία του καθενός. Με μια μικρή αναζήτηση θα βρούμε δύο ακροδέκτες οι οποίοι παρέχουν τάση 5V, δύο ακροδέκτες με τάση 3.3V και οκτώ ακροδέκτες γείωσης GND. Αυτοί οι ακροδέκτες δεν προγραμματίζονται και χρησιμοποιούνται είτε για να παρέχουν κατάλληλη τάση στο κύκλωμά μας είτε για να “κλείνουν” το κύκλωμα. Στους υπόλοιπους ακροδέκτες GPIOx, μπορούμε να συνδέσουμε συσκευές εξόδου ή εισόδου και να ελέγξουμε την λειτουργία τους χρησιμοποιώντας την γλώσσα προγραμματισμού Python.

Raspberry Pi ακροδέκτες GPIO
Raspberry Pi ακροδέκτες GPIO

Προσοχή

Θα πρέπει να είμαστε προσεκτικοί με τις συνδέσεις που κάνουμε στους ακροδέκτες GPIO, ιδιαίτερα με την τάση 5V. Μια λάθος σύνδεση, μπορεί να οδηγήσει στην καταστροφή του Raspberry Pi.

Ανάβω και σβήνω μια δίοδο LED

Η δίοδος LED (Light Emitting Diode) είναι ένα εξάρτημα το όποιο εκπέμπει φως όταν εφαρμόσουμε την κατάλληλη και με την σωστή πολικότητα τάση στα άκρα του. Επίσης, θα πρέπει να γνωρίζουμε ότι δεν πρέπει να συνδέουμε μια δίοδο LED απευθείας σε τάση 3,3V ή 5V, γιατί κινδυνεύει να καεί από την μεγάλη ποσότητα ρεύματος που θα διαρρεύσει από μέσα της. Για αυτόν τον λόγο, συνδέουμε πάντα μια αντίσταση σε σειρά με τον μακρύτερο ακροδέκτη του LED, ο οποίος ονομάζεται άνοδος και συνδέεται στην τάση. Τον πιο κοντό ακροδέκτη του LED, τον οποίο ονομάζουμε κάθοδο, τον συνδέουμε στην γείωση (GND) με σκοπό να κλείσουμε το κύκλωμα.

Ας περάσουμε όμως στην δράση με την υλοποίηση του παρακάτω κυκλώματος.

Σύνδεση LED στα 3.3V
Σύνδεση LED στα 3.3V

Αν το κύκλωμα είναι σωστό τότε θα δούμε το LED να ανάβει και να παραμένει συνεχώς αναμμένο.

Τώρα, ας τροποποιήσουμε λίγο το κύκλωμα σύμφωνα με την παρακάτω εικόνα (μεταφέρουμε το πορτοκαλί καλώδιο από τον ακροδέκτη 3.3V στον ακροδέκτη GP17):

Σύνδεση LED στο GPIO 17
Σύνδεση LED στο GPIO 17

Παρατηρούμε ότι το LED δεν ανάβει πλέον, αλλά θα μπορούμε να προγραμματίσουμε την λειτουργία του χρησιμοποιώντας εντολές της γλώσσας Python. Για να γράψουμε ένα πρόγραμμα σε Python, ανοίγουμε το πρόγραμμα Thonny (Προγραμματισμός->Thonny Python IDE), το οποίο είναι ένα περιβάλλον προγραμματισμού και θα κάνει πιο εύκολη συγγραφής και εκτέλεσης εντολών.

Αρχική οθόνη Thonny

Αντιγράφουμε τις παρακάτω εντολές στο Thonny:

from gpiozero import LED led17 = LED(17) led17.on()
Code language: Python (python)

Πριν εκτελέσουμε το πρόγραμμα ας δούμε την λειτουργία κάθε μιας εντολής.

Η γλώσσα python, στην βασική της εγκατάσταση, δεν μπορεί να χειριστεί τους ακροδέκτες GPIO. Για αυτό τον λόγο προσθέτουμε την ενότητα LED από το άρθρωμα (module) gpiozero στην πρώτη γραμμή του προγράμματος μας. Στην τρίτη γραμμή, δημιουργούμε ένα αντικείμενο με όνομα led17 το οποίο αντιπροσωπεύει το LED που έχουμε συνδέσει στον ακροδέκτη GPIO17. Στην τελευταία γραμμή του προγράμματος, χρησιμοποιούμε την μέθοδο on() με σκοπό να ανάψουμε το LED.

Πληροφορία

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

Αποθηκεύουμε το πρόγραμμα δίνοντας το όνομα led-on.py και το εκτελούμε πατώντας το κουμπί Run. Αν όλα έχουν εξελιχθεί ομαλά, θα δούμε το LED να ανάβει και να παραμένει αναμμένο μέχρι να εκτελέσουμε εντολή η οποία θα το σβήνει ή να πατήσουμε τον συνδυασμό πλήκτρων Ctrl+C.

Αναμμένο LED
Αναμμένο LED

Η μέθοδος με την οποία σβήνουμε το LED είναι η off(). Έτσι, αν θελήσουμε να σβήσουμε το LED, θα πρέπει να αντικαταστήσουμε την μέθοδο on() με την μέθοδο off() στην τρίτη γραμμή του προγράμματος. Δηλαδή:

from gpiozero import LED led17 = LED(17) led17.off()
Code language: Python (python)

Τώρα, ας προσπαθήσουμε να κάνουμε το LED να ανάβει και να σβήνει συνεχώς. Για αυτό το λόγο, θα δημιουργήσουμε ένα καινούριο πρόγραμμα στο Thonny πατώντας το κουμπί New. Στη συνέχεια θα αντιγράψουμε και θα επικολλήσουμε το παρακάτω πρόγραμμα και αφού το αποθηκεύσουμε με όνομα led-blink.py, θα το εκτελέσουμε με τον γνωστό τρόπο.

from gpiozero import LED from time import sleep led17 = LED(17) while True: led17.on() sleep(1) led17.off() sleep(1)
Code language: Python (python)

Παρατηρούμε ότι στο πρόγραμμά μας έχουμε εισάγει την ενότητα sleep από το άρθρωμα time, με σκοπό να μας δώσει τη δυνατότητα να χρησιμοποιήσουμε την συνάρτηση sleep με την οποία μπορούμε να σταματήσουμε προσωρινά την εκτέλεση του προγράμματος για έναν προκαθορισμένο χρόνο (στην περίπτωσή μας 1 δευτερόλεπτο). Επίσης, υπάρχει μια καινούρια εντολή, η while, με την οποία μπορούμε να εκτελούμε επαναλήψεις. Χωρίς να μπούμε σε λεπτομέρειες, όλες οι εντολές μετά την εντολή while θα εκτελούνται για πάντα (μέχρι να σταματήσουμε εμείς την εκτέλεση του προγράμματος). Έτσι, oι εντολές στις γραμμές 7 και 8 θα ανάβουν το LED για 1 δευτερόλεπτο και οι δύο επόμενες εντολές θα σβήνουν το LED για 1 δευτερόλεπτο. Αυτός ο κύκλος θα επαναλαμβάνεται μέχρι να σταματήσουμε εμείς την εκτέλεση του προγράμματος.

LED που αναβοσβήνει

Εσοχή στις εντολές

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

Το άρθρωμα gpiozero μας δίνει τη δυνατότητα να ανάβουμε και να σβήνουμε ένα LED με έναν πιο εύκολο τρόπο, ο οποίος μπορεί να μας φανεί χρήσιμος κάποιες φορές. Δημιουργούμε ένα καινούριο αρχείο στο Thonny, κάνουμε αντιγραφή και επικόλληση το παρακάτω πρόγραμμα και το αποθηκεύουμε με όνομα led-blink2.py.

from gpiozero import LED led17 = LED(17) led17.blink(1,0.5)
Code language: Python (python)

Σ’ αυτό το πρόγραμμα παρατηρούμε ότι έχουμε μόνο μία εντολή με την οποία ανάβουμε και σβήνουμε το LED. Χρησιμοποιούμε την μέθοδο blink() η οποία ανάβει και σβήνει το LED ανάλογα με τους χρόνους που έχουμε ορίσει μέσα στις παρενθέσεις. Στην περίπτωσή μας, αυτοί οι χρόνοι, είναι 1 δευτερόλεπτο αναμμένο το LED και 0.5 δευτερόλεπτο σβηστό.

Εργασία

Αρχικά, να υλοποιήσετε το κύκλωμα που απαιτείται για την δημιουργία ενός φωτεινού σηματοδότη (πρέπει να περιλαμβάνει τρεις διόδους LED, διαφορετικού χρώματος και αντίστοιχες αντιστάσεις). Στη συνέχεια, να δημιουργήσετε πρόγραμμα σε python έτσι ώστε να ανάβουν και να σβήνουν οι δίοδοι LED όπως σε έναν πραγματικό φωτεινό σηματοδότη. Στην αρχή να ανάβει το πράσινο LED για 8 δευτερόλεπτα, στη συνέχεια να αναβοσβήνει το πορτοκαλί LED για 5 δευτερόλεπτα με ρυθμό 0.5 δευτερόλεπτα και τέλος να ανάβει το κόκκινο LED για 10 δευτερόλεπτα.

Κύκλωμα φωτεινού σηματοδότη
Κύκλωμα φωτεινού σηματοδότη
Κοινοποίηση
Προεπιλεγμένη Εικόνα
Θοδωρής Θεμελής
Άρθρα: 26

Υποβολή απάντησης