(Πηγή: Βιβλίο Μαθητή, Πληροφορική Γ΄ Γυμνασίου, Ενότητα 3 «Φυσική Υπολογιστική-Ρομποτικές Διατάξεις», σελ. 29-40. Οι 8 «Δραστηριότητες» παρακάτω βρίσκονται μέσα στη θεωρία των §3.2, §3.3 και §3.4. Οι εκφωνήσεις είναι αυτούσιες από το σχολικό βιβλίο.)
Μεταβείτε στην ιστοσελίδα: https://trinket.io/sense-hat.
Να εκτελέσετε το διπλανό πρόγραμμα και στη συνέχεια να αλλάξετε τις συνθήκες θερμοκρασίας από τον πίνακα ελέγχου.
Δοκιμάστε να αλλάξετε τις 270° στον προσανατολισμό. Τι παρατηρείτε; Να χρησιμοποιήσετε την εντολή print για να εμφανίσετε στην κονσόλα (Text Output) τις τιμές της υγρασίας και της θερμοκρασίας. Τι παρατηρείτε; Πώς μπορούν να γίνουν τα αποτελέσματα πιο ευανάγνωστα;
Το διπλανό πρόγραμμα εμφανίζει τον ακόλουθο κώδικα:
# Import the libraries from sense_hat import SenseHat # Set up the Sense HAT sense = SenseHat() sense.set_rotation(270, False) temperature = sense.get_temperature() humidity = sense.get_humidity() if (humidity>70 and temperature<12) : sense.show_message("SAFE")Εμφανίζεται επίσης ο πίνακας ελέγχου (Space Station Control Panel) με τις ενδείξεις: TEMPERATURE 13°C, PRESSURE 1013hPa, HUMIDITY 45%.
Σκέψη / Μεθοδολογία: Η sense.set_rotation(rotation, redraw) περιστρέφει τον προσανατολισμό της (εικονικής) οθόνης LED 8x8 και του κειμένου κατά 0°, 90°, 180° ή 270° δεξιόστροφα, ώστε η εικόνα/το μήνυμα να διαβάζεται σωστά ανάλογα με τον φυσικό προσανατολισμό της πλακέτας μέσα στη θήκη της (π.χ. αν είναι τοποθετημένη «ανάποδα»). Η δεύτερη παράμετρος (εδώ False) καθορίζει αν θα ξανασχεδιαστεί ΑΜΕΣΩΣ ό,τι υπάρχει ήδη στην οθόνη με τη νέα γωνία· με False, η νέα περιστροφή εφαρμόζεται μόνο στην ΕΠΟΜΕΝΗ εντολή εμφάνισης. Δοκιμάζοντας 0°/90°/180°/270° παρατηρούμε ότι το ίδιο ακριβώς μήνυμα/εικόνα εμφανίζεται περιστραμμένο κατά την αντίστοιχη γωνία. Για το δεύτερο ζητούμενο (print υγρασίας/θερμοκρασίας) εξηγούμε τι εμφανίζεται στην κονσόλα με βάση τις τιμές του πίνακα ελέγχου, γιατί η ακατέργαστη έξοδος είναι δυσανάγνωστη (οι τιμές είναι δεκαδικοί αριθμοί, συχνά με πολλά δεκαδικά ψηφία) και πώς διορθώνεται.
Λύση:
Περιστροφή 270°: αν προσθέσουμε μια εντολή εμφάνισης μηνύματος μετά το sense.set_rotation(270, False) (π.χ. sense.show_message('TEST')), το κείμενο θα κυλήσει περιστραμμένο κατά 270° δεξιόστροφα σε σχέση με την προεπιλογή 0° — αυτό ισοδυναμεί με περιστροφή 90° αριστερόστροφα. Δοκιμάζοντας διαδοχικά 0°, 90°, 180°, 270° παρατηρούμε ότι κάθε φορά το ίδιο μήνυμα εμφανίζεται γυρισμένο κατά την αντίστοιχη γωνία — χρήσιμο όταν η πλακέτα είναι τοποθετημένη με διαφορετικό φυσικό προσανατολισμό μέσα στη θήκη/το ρομπότ.
print(temperature) και print(humidity): προσθέτοντας τις δύο γραμμές print(temperature) και print(humidity) μετά τον υπολογισμό τους, στην κονσόλα (Text Output) θα εμφανιστούν οι τρέχουσες τιμές του εξομοιωτή — με βάση τον πίνακα ελέγχου (TEMPERATURE 13°C, HUMIDITY 45%) θα δούμε τιμές κοντά στο 13 και στο 45, γραμμένες ως δεκαδικοί αριθμοί (τύπου float), συχνά με πολλά δεκαδικά ψηφία — όχι ως στρογγυλεμένους ακέραιους όπως τους δείχνει ο πίνακας. Όταν αλλάζουμε τις τιμές στον πίνακα ελέγχου και ξανατρέχουμε το πρόγραμμα, αλλάζουν αντίστοιχα και οι τιμές που τυπώνονται.
Γιατί δεν εμφανίζεται «SAFE»: η συνθήκη if (humidity>70 and temperature<12) απαιτεί ΚΑΙ τα δύο κριτήρια. Με τις τιμές του πίνακα (humidity≈45, temperature≈13): 45>70 είναι Ψευδές ΚΑΙ 13<12 είναι επίσης Ψευδές — η συνολική συνθήκη είναι False, άρα το μήνυμα 'SAFE' ΔΕΝ εμφανίζεται στην οθόνη LED.
Πιο ευανάγνωστα αποτελέσματα: αντί για print(temperature) ακατέργαστο, χρησιμοποιούμε στρογγυλοποίηση, π.χ. print(round(temperature, 1)) και print(round(humidity, 1)) (εμφανίζεται μόνο ένα δεκαδικό ψηφίο), ή μορφοποιημένη συμβολοσειρά, π.χ. print(f"Θερμοκρασία: {temperature:.1f}°C") και print(f"Υγρασία: {humidity:.1f}%").
Τελική απάντηση: Με περιστροφή 270° το μήνυμα/η εικόνα εμφανίζεται περιστραμμένη κατά 270° δεξιόστροφα σε σχέση με την προεπιλογή. Τα print(temperature)/print(humidity) τυπώνουν στην κονσόλα δεκαδικές τιμές (float) κοντά στις ενδείξεις του πίνακα ελέγχου (13 και 45), συχνά με πολλά δεκαδικά ψηφία — δυσανάγνωστες χωρίς στρογγυλοποίηση. Με τις τιμές του πίνακα (humidity≈45%, temperature≈13°C) η συνθήκη humidity>70 and temperature<12 είναι False, άρα το μήνυμα 'SAFE' δεν εμφανίζεται. Λύση ευαναγνωσίας: round(τιμή, 1) ή μορφοποίηση f-string με {:.1f}.
Πρόσεξε:
Μεταβείτε στην ιστοσελίδα https://photodentro.edu.gr/v/item/ds/8521/738 και, αφού πειραματιστείτε με τον RGB Calculator, σημειώστε τους συνδυασμούς RGB για τα χρώματα κόκκινο, πράσινο, μαύρο, λευκό, μωβ, κίτρινο και μπλε.
Σκέψη / Μεθοδολογία: Το εργαλείο (τίτλος στο Photodentro: «Προσθετική παραγωγή χρώματος») δείχνει πώς προκύπτει κάθε χρώμα φωτός συνδυάζοντας τρία κανάλια φωτός — Κόκκινο (R), Πράσινο (G), Μπλε (B) — καθένα με ένταση από 0 (σβηστό) έως 255 (μέγιστο). Τα ζητούμενα 7 χρώματα είναι ακριβώς οι εξής κορυφές του «κύβου RGB»: οι 3 τιμές κάθε καναλιού είναι είτε 0 είτε 255 (πλήρως σβηστό ή πλήρως αναμμένο) — καμία ενδιάμεση τιμή δεν χρειάζεται για αυτά τα 7 βασικά χρώματα. Το μαύρο προκύπτει με ΚΑΝΕΝΑ κανάλι αναμμένο (απουσία φωτός), το λευκό με ΚΑΙ τα τρία κανάλια στο μέγιστο (πρόσθεση όλων των χρωμάτων φωτός), το κίτρινο από κόκκινο+πράσινο, και το μωβ/ματζέντα από κόκκινο+μπλε.
Λύση:
Κόκκινο (Red): R=255, G=0, B=0
Πράσινο (Green): R=0, G=255, B=0
Μπλε (Blue): R=0, G=0, B=255
Μαύρο (Black): R=0, G=0, B=0 (απουσία και των τριών χρωμάτων φωτός)
Λευκό (White): R=255, G=255, B=255 (πρόσθεση και των τριών πρωτευόντων χρωμάτων φωτός στο μέγιστο)
Κίτρινο (Yellow): R=255, G=255, B=0 (κόκκινο + πράσινο)
Μωβ/Ματζέντα (Magenta/Purple): R=255, G=0, B=255 (κόκκινο + μπλε)
Τελική απάντηση: Κόκκινο (255,0,0), Πράσινο (0,255,0), Μπλε (0,0,255), Μαύρο (0,0,0), Λευκό (255,255,255), Κίτρινο (255,255,0), Μωβ/Ματζέντα (255,0,255).
Πρόσεξε:
Να γράψετε ένα πρόγραμμα για το Sense Hat το οποίο, όταν οι συνθήκες είναι κατάλληλες, δηλαδή υγρασία άνω του 88% και θερμοκρασία άνω των 20°C, θα εμφανίζει ένα ουράνιο τόξο.
Σκέψη / Μεθοδολογία: Χρειαζόμαστε (α) μια λίστα 64 χρωμάτων RGB (πλειάδων (R,G,B)) που να σχηματίζει ένα αναγνωρίσιμο τόξο πάνω στην 8x8 οθόνη LED, και (β) μια σύνθετη συνθήκη if με AND που να ελέγχει ΚΑΙ τα δύο κριτήρια (υγρασία>88 ΚΑΙ θερμοκρασία>20) πριν καλέσει το sense.set_pixels(εικόνα). Χρησιμοποιούμε τα βασικά χρώματα του ουράνιου τόξου (κόκκινο, πορτοκαλί, κίτρινο, πράσινο, μπλε, λουλακί, μωβ) σε τοξωτές γραμμές, με το υπόλοιπο φόντο σβηστό (μαύρο).
Λύση:
Πρόγραμμα Python:
from sense_hat import SenseHat
sense = SenseHat()
R = (255, 0, 0) # κόκκινο
O = (255, 128, 0) # πορτοκαλί
Y = (255, 255, 0) # κίτρινο
G = (0, 255, 0) # πράσινο
B = (0, 0, 255) # μπλε
I = (75, 0, 130) # λουλακί
V = (238, 130, 238) # μωβ
E = (0, 0, 0) # σβηστό (μαύρο)
rainbow = [
E,E,R,R,R,R,E,E,
E,R,R,O,O,R,R,E,
R,R,O,O,Y,Y,R,R,
R,O,O,Y,Y,G,G,R,
O,O,Y,Y,G,G,B,B,
O,Y,Y,G,G,B,B,I,
Y,Y,G,G,B,B,I,V,
Y,G,G,B,B,I,V,V,
] # 8 γραμμές x 8 στοιχεία = 64 στοιχεία
humidity = sense.get_humidity()
temperature = sense.get_temperature()
if humidity > 88 and temperature > 20:
sense.set_pixels(rainbow)
Η λίστα rainbow έχει 8 γραμμές των 8 στοιχείων, δηλαδή 64 πλειάδες — όσα και τα LED της οθόνης 8x8, κάτι απαραίτητο για να δεχτεί η set_pixels() τη λίστα χωρίς σφάλμα.
Με τις τιμές του πίνακα ελέγχου της Δραστηριότητας 1 (υγρασία 45%, θερμοκρασία 13°C) η συνθήκη humidity > 88 and temperature > 20 είναι ψευδής, άρα το τόξο δεν εμφανίζεται· για να εμφανιστεί, αλλάζουμε στον πίνακα ελέγχου την υγρασία πάνω από 88% και τη θερμοκρασία πάνω από 20°C.
Τελική απάντηση: Πλήρες πρόγραμμα: ορίζουμε 8 χρώματα (7 του ουράνιου τόξου + μαύρο φόντο), χτίζουμε λίστα 64 pixel σε σχήμα τοξωτών γραμμών, διαβάζουμε humidity/temperature από τους αισθητήρες, και καλούμε sense.set_pixels(rainbow) ΜΟΝΟ όταν humidity>88 and temperature>20 (και τα δύο μαζί, λόγω AND).
Πρόσεξε:
- Δημιουργήστε ένα νέο πρόγραμμα που να εμφανίζει τη συμβολοσειρά «Hello world!».
- Δημιουργήστε ένα νέο πρόγραμμα με τον τίτλο «Καρδιά» το οποίο να εμφανίζει μια καρδιά.
- Δημιουργήστε ένα νέο πρόγραμμα με τον τίτλο «Καρδιά που αναβοσβήνει» για πάντα.
- Δημιουργήστε ένα νέο πρόγραμμα που να εμφανίζει αρχικά το 2023 και στη συνέχεια για πάντα το 2024.
- Δημιουργήστε ένα νέο πρόγραμμα που να εμφανίζει το όνομά σας στα ελληνικά.
Σκέψη / Μεθοδολογία: Και τα 5 ζητούμενα λύνονται με εντολές του μπλοκ «Βασικά» του Πίνακα 3.1 (§3.3.1): «κατά την έναρξη», «εμφάνισε συμβολοσειρά», «εμφάνιση εικονιδίου», «εμφάνισε αριθμό», «show leds», «καθαρισμός οθόνης», «παύση (ms)» και «για πάντα». Ό,τι πρέπει να γίνει μία φορά μπαίνει στο «κατά την έναρξη», ενώ ό,τι πρέπει να επαναλαμβάνεται συνεχώς μπαίνει στο «για πάντα». Για το όνομα στα ελληνικά προσέχουμε την παρατήρηση του βιβλίου: η εντολή «εμφάνισε συμβολοσειρά» δεν υποστηρίζει ελληνικά γράμματα, οπότε τα γράμματα σχεδιάζονται ένα-ένα με την εντολή «show leds».
Λύση:
«Hello world!»: «κατά την έναρξη» → «εμφάνισε συμβολοσειρά "Hello world!"». Το κείμενο κυλά στην οθόνη LED του προσομοιωτή.
«Καρδιά»: «κατά την έναρξη» → «εμφάνιση εικονιδίου» με επιλεγμένο το εικονίδιο της καρδιάς.
«Καρδιά που αναβοσβήνει»: «για πάντα» → «εμφάνιση εικονιδίου» (καρδιά) → «παύση (ms) 500» → «καθαρισμός οθόνης» → «παύση (ms) 500». Επειδή οι τέσσερις εντολές βρίσκονται μέσα στο «για πάντα», η καρδιά ανάβει και σβήνει συνεχώς.
«2023 και μετά για πάντα 2024»: «κατά την έναρξη» → «εμφάνισε αριθμό 2023»· «για πάντα» → «εμφάνισε αριθμό 2024». Το 2023 εμφανίζεται μία φορά στην αρχή και μετά το 2024 εμφανίζεται ξανά και ξανά.
Όνομα στα ελληνικά: η «εμφάνισε συμβολοσειρά» δεν εμφανίζει ελληνικούς χαρακτήρες, γι' αυτό μέσα στο «κατά την έναρξη» βάζουμε για κάθε γράμμα του ονόματος μία εντολή «show leds», όπου επιλέγουμε τα τετράγωνα που σχηματίζουν το γράμμα, και ανάμεσα στα γράμματα μία «παύση (ms)» (π.χ. 500). Για παράδειγμα, το γράμμα Γ σχηματίζεται ανάβοντας τα 4 πρώτα τετράγωνα της πάνω γραμμής και την αριστερή στήλη· το Λ ανάβοντας το μεσαίο τετράγωνο της πάνω γραμμής και δύο διαγώνιες προς τις κάτω γωνίες. Τα γράμματα που υπάρχουν ίδια και στο λατινικό αλφάβητο (π.χ. Α, Ε, Κ, Μ, Ο) μπορούν να γραφτούν και με την «εμφάνισε συμβολοσειρά» με λατινικούς χαρακτήρες.
Τελική απάντηση: (1) «κατά την έναρξη» → «εμφάνισε συμβολοσειρά "Hello world!"»· (2) «κατά την έναρξη» → «εμφάνιση εικονιδίου» καρδιά· (3) «για πάντα» → καρδιά, παύση, καθαρισμός οθόνης, παύση· (4) «κατά την έναρξη» → «εμφάνισε αριθμό 2023» και «για πάντα» → «εμφάνισε αριθμό 2024»· (5) το όνομα στα ελληνικά σχηματίζεται γράμμα-γράμμα με εντολές «show leds» και παύσεις ανάμεσα, επειδή η «εμφάνισε συμβολοσειρά» δεν υποστηρίζει ελληνικά γράμματα.
Πρόσεξε:
- Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Καρδιά - Πλήκτρο A» που να εμφανίζει μια καρδιά όταν πιέζεται το πλήκτρο A.
- Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Σύμβολα - Πλήκτρα A, B» που να εμφανίζει το σύμβολο «√» όταν πιέζεται το πλήκτρο A και το σύμβολο «Χ» όταν πιέζεται το πλήκτρο B.
- Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Τελεία που κινείται - Πλήκτρα A, B» το οποίο να δείχνει μια τελεία στο κέντρο της οθόνης LED να κινείται προς τα αριστερά, όταν πατάτε το πλήκτρο A και να κινείται προς τα δεξιά όταν πατάτε το πλήκτρο B.
- Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Τελεία που κινείται - Πλήκτρα A, B, AB, logo» το οποίο, να δείχνει μια τελεία στο κέντρο της οθόνης LED να κινείται προς τα αριστερά όταν πατάτε το πλήκτρο A, να κινείται προς τα δεξιά όταν πατάτε το πλήκτρο B, να κινείται προς τα κάτω όταν πατάτε τα πλήκτρα A+B και να κινείται προς τα πάνω όταν πατάτε το logo του micro:bit.
- Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Άνθρωπος που κουνάει τα χέρια - Πλήκτρα A, B» το οποίο να δείχνει έναν άνθρωπο να ανεβάζει και να κατεβάζει τα χέρια συνέχεια και όταν πατάτε το πλήκτρο A να σταματάει ο άνθρωπος να ανεβοκατεβάζει τα χέρια. Όταν πατάτε το πλήκτρο B να εμφανίζει τη συμβολοσειρά «ΟΚ» και μετά από 2 δευτερόλεπτα να ανεβοκατεβάζει πάλι τα χέρια του.
- Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Άνθρωπος που κινείται - Πλήκτρα A, B» το οποίο να δείχνει τον άνθρωπο από τα διαθέσιμα εικονίδια της εντολής «εμφάνιση εικονιδίου» να κινείται προς τα αριστερά όταν πατάτε το πλήκτρο A και να κινείται προς τα δεξιά όταν πατάτε το πλήκτρο B.
- Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Άνθρωπος που κινείται παντού - Πλήκτρα A, B, AB, logo» το οποίο να δείχνει τον άνθρωπο από τα διαθέσιμα εικονίδια της εντολής «εμφάνιση εικονιδίου» να κινείται προς τα αριστερά όταν πατάτε το πλήκτρο A, να κινείται προς τα δεξιά όταν πατάτε το πλήκτρο B, να κινείται προς τα πάνω όταν πατάτε το logo, ενώ όταν πατάτε το A+B να κινείται προς τα κάτω.
Σκέψη / Μεθοδολογία: Τα ζητούμενα βασίζονται στις εντολές του μπλοκ «Είσοδος» (Πίνακας 3.2, §3.3.2): «όταν πιεστεί το πλήκτρο button A/B/A+B» και «on logo pressed» (το λογότυπο υπάρχει μόνο στο micro:bit v2). Για την τελεία χρειαζόμαστε μεταβλητές θέσης x (στήλη) και y (γραμμή) με τιμές 0-4, αφού η οθόνη είναι 5x5· το κέντρο είναι η θέση (2, 2). Για τον άνθρωπο που ανεβοκατεβάζει τα χέρια χρειαζόμαστε μια μεταβλητή που θυμάται αν η κίνηση είναι ενεργή ή σταματημένη.
Λύση:
«Καρδιά - Πλήκτρο Α»: «όταν πιεστεί το πλήκτρο button A» → «εμφάνιση εικονιδίου» καρδιά.
«Σύμβολα - Πλήκτρα Α, Β»: «όταν πιεστεί το πλήκτρο button A» → «εμφάνιση εικονιδίου» με το σύμβολο √· «όταν πιεστεί το πλήκτρο button B» → «εμφάνιση εικονιδίου» με το σύμβολο Χ (τα ίδια εικονίδια που χρησιμοποιεί το Παράδειγμα 1).
«Τελεία που κινείται - Πλήκτρα Α, Β»: «κατά την έναρξη» → x = 2 και ανάβουμε το LED στη θέση (x, 2) (εντολή της κατηγορίας Led). «όταν πιεστεί το πλήκτρο button A» → αν x > 0: σβήνουμε το LED (x, 2), x = x − 1, ανάβουμε το LED (x, 2). «όταν πιεστεί το πλήκτρο button B» → αν x < 4: σβήνουμε το LED (x, 2), x = x + 1, ανάβουμε το LED (x, 2).
«Τελεία που κινείται - Πλήκτρα Α, Β, ΑΒ, logo»: όπως το 3, αλλά με δύο μεταβλητές x = 2, y = 2 και το LED στη θέση (x, y). Α → x = x − 1 (αριστερά), Β → x = x + 1 (δεξιά), «όταν πιεστεί το πλήκτρο button A+B» → y = y + 1 (κάτω), «on logo pressed» → y = y − 1 (πάνω), πάντα με έλεγχο ώστε οι x, y να μένουν από 0 έως 4.
«Άνθρωπος που κουνάει τα χέρια - Πλήκτρα Α, Β»: «κατά την έναρξη» → κίνηση = αληθές. «για πάντα» → αν κίνηση: εικόνα ανθρώπου με χέρια πάνω («show leds»), «παύση (ms) 500», εικόνα ανθρώπου με χέρια κάτω, «παύση (ms) 500». «όταν πιεστεί το πλήκτρο button A» → κίνηση = ψευδές (ο άνθρωπος σταματά). «όταν πιεστεί το πλήκτρο button B» → κίνηση = ψευδές, «εμφάνισε συμβολοσειρά "OK"», «παύση (ms) 2000», κίνηση = αληθές (ξαναρχίζει να ανεβοκατεβάζει τα χέρια).
«Άνθρωπος που κινείται - Πλήκτρα Α, Β»: επιλέγουμε το εικονίδιο του ανθρώπου από τη λίστα της εντολής «εμφάνιση εικονιδίου». Με το Α η εικόνα μετακινείται μία στήλη προς τα αριστερά και με το Β μία στήλη προς τα δεξιά (π.χ. με την εντολή κύλισης εικόνας των εντολών «Για Προχωρημένους», με μετατόπιση −1 ή +1), με την ίδια λογική θέσης που χρησιμοποιήθηκε για την τελεία στο 3.
«Άνθρωπος που κινείται παντού - Πλήκτρα Α, Β, ΑΒ, logo»: συνδυασμός των 4 και 6 — Α αριστερά, Β δεξιά, logo πάνω, Α+Β κάτω, με το εικονίδιο του ανθρώπου στη θέση της τελείας.
Τελική απάντηση: (1) πλήκτρο Α → εικονίδιο καρδιάς· (2) Α → εικονίδιο √, Β → εικονίδιο Χ· (3) τελεία με μεταβλητή θέσης x που μειώνεται με Α και αυξάνεται με Β (όρια 0-4)· (4) επέκταση σε δύο μεταβλητές x, y με Α (αριστερά), Β (δεξιά), Α+Β (κάτω), logo (πάνω)· (5) μεταβλητή που ενεργοποιεί/σταματά την εναλλαγή των δύο εικόνων του ανθρώπου: Α σταματά, Β εμφανίζει «OK» και μετά από 2 δευτερόλεπτα η κίνηση ξαναρχίζει· (6)-(7) ίδια λογική θέσης με (3)-(4), με το εικονίδιο του ανθρώπου αντί για τελεία.
Πρόσεξε:
Παρατηρήστε το breadboard και συζητήστε στην ομάδα σας σχετικά με τις εσωτερικές συνδέσεις του.
Παρατηρήστε την πλακέτα Plus Starter Kit for Arduino και αναγνωρίστε τις ψηφιακές θύρες, τη γείωση, το reset button και την USB διεπαφή.
Συνδέστε την πλακέτα με το καλώδιο USB στην αντίστοιχη θύρα του ηλεκτρονικού υπολογιστή.
Σκέψη / Μεθοδολογία: Πρόκειται για δραστηριότητα παρατήρησης/συζήτησης σε ομάδα, βασισμένη στη δομή breadboard/πλακέτας που περιγράφει το ίδιο το §3.4.1. Δίνουμε την περιγραφή των εσωτερικών συνδέσεων του breadboard και των βασικών στοιχείων της πλακέτας, όπως τα παρουσιάζει το βιβλίο, ώστε η ομαδική συζήτηση να έχει σωστό σημείο αναφοράς.
Λύση:
Εσωτερικές συνδέσεις breadboard (§3.4.1): (α) Στο επάνω και στο κάτω μέρος υπάρχουν δύο οριζόντιες γραμμές οπών, μία κόκκινη και μία μπλε. Οι οπές τους επικοινωνούν οριζόντια, μέχρι εκεί που διακόπτονται οι χρωματιστές γραμμές. Η κόκκινη γραμμή είναι για την τροφοδοσία (Vcc) και η μπλε για τη γείωση (GND). (β) Οι υπόλοιπες οπές επικοινωνούν κατακόρυφα ανά πέντε (π.χ. οι στήλες A, B, C, D, E και F, G, H, I, J). (γ) Η εσοχή στη μέση δείχνει την αλλαγή τμήματος: οι επάνω κατακόρυφες στήλες δεν επικοινωνούν με τις κάτω. Έτσι, ένα εξάρτημα έρχεται σε επαφή με ό,τι άλλο μπει στην ίδια ομάδα των πέντε οπών, χωρίς κόλληση.
Στοιχεία πλακέτας Plus Starter Kit for Arduino: οι ψηφιακές θύρες εισόδου/εξόδου I/O είναι οι αριθμημένες 2 έως 13· η γείωση (αρνητικός πόλος του κυκλώματος) σημειώνεται με το σύμβολο GND· το reset button είναι το κόκκινο πλήκτρο, που εκτελεί επανεκκίνηση (reset) του μικροεπεξεργαστή· η USB διεπαφή είναι ο USB type C connector, για τη σύνδεση της πλακέτας με τον υπολογιστή μέσω καλωδίου USB.
Σύνδεση με USB: συνδέουμε το ένα άκρο του καλωδίου USB στη θύρα της πλακέτας Arduino και το άλλο άκρο σε ελεύθερη θύρα USB του υπολογιστή. Μόλις συνδεθεί, η πλακέτα τροφοδοτείται και ο υπολογιστής την αναγνωρίζει ως νέα συσκευή — αυτό είναι το προαπαιτούμενο βήμα ώστε στη συνέχεια (§3.4.2) να εγκατασταθεί το Arduino IDE και η πλακέτα να εμφανιστεί σε σειριακή θύρα (π.χ. COM 3).
Τελική απάντηση: Στο breadboard, οι οπές της κόκκινης (τροφοδοσία) και της μπλε (γείωση) γραμμής επικοινωνούν οριζόντια μέχρι εκεί που διακόπτονται οι γραμμές, ενώ οι υπόλοιπες οπές επικοινωνούν κατακόρυφα ανά πέντε· η εσοχή στη μέση χωρίζει τις επάνω από τις κάτω στήλες. Στην πλακέτα: ψηφιακές θύρες I/O 2-13, γείωση GND, κόκκινο πλήκτρο reset, USB type C connector για τη σύνδεση με τον υπολογιστή.
Πρόσεξε:
Υλοποιήστε το παραπάνω κύκλωμα στο breadboard της ομάδας σας, συνδέστε το με την πλακέτα Arduino και γράψτε τον αντίστοιχο κώδικα. Εκτελέστε το πρόγραμμα. Τι παρατηρείτε;
Σκέψη / Μεθοδολογία: Το «παραπάνω κύκλωμα» (Εικόνα 3.16) είναι ένα απλό κύκλωμα ενός LED με αντίσταση σε σειρά: η άνοδος του LED συνδέεται μέσω αντίστασης (συνήθως 220Ω) σε μια ψηφιακή θύρα εξόδου (π.χ. pin 2), και η κάθοδος συνδέεται στη γείωση (GND). Ο κώδικας (Εικόνα 3.15) χρησιμοποιεί pinMode() στο setup() για να ορίσει τη θύρα ως OUTPUT, και μέσα στο loop() εναλλάσσει την τιμή της θύρας ανάμεσα σε HIGH/LOW με ενδιάμεσες καθυστερήσεις delay(ms), όπως ήδη περιγράφει το κείμενο πριν τη Δραστηριότητα («ανάβει για ένα δευτερόλεπτο και σβήνει επίσης για ένα δευτερόλεπτο»).
Λύση:
Κύκλωμα: LED (μακρύ πόδι/άνοδος) → αντίσταση 220Ω → ψηφιακή θύρα 2 της Arduino· LED (κοντό πόδι/κάθοδος) → γραμμή γείωσης (−) του breadboard → GND της Arduino.
Κώδικας Arduino (sketch):
int ledPin = 2;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
Παρατήρηση κατά την εκτέλεση: το λαμπάκι ανάβει (HIGH) για 1 δευτερόλεπτο, σβήνει (LOW) για 1 δευτερόλεπτο, και επαναλαμβάνεται αυτό συνέχεια — επειδή όλος ο κώδικας βρίσκεται μέσα στη συνάρτηση loop(), η οποία εκτελείται διαρκώς σε βρόχο όσο η πλακέτα τροφοδοτείται.
Τελική απάντηση: Με pinMode(ledPin, OUTPUT) στο setup() και digitalWrite(ledPin, HIGH/LOW) με delay(1000) ενδιάμεσα στο loop(), το LED αναβοσβήνει διαρκώς με περίοδο 1 δευτερολέπτου αναμμένο/1 δευτερολέπτου σβηστό, επειδή η συνάρτηση loop() του Arduino εκτελείται συνεχώς σε βρόχο.
Πρόσεξε:
Να δημιουργήσετε ένα τρεχαντήρι με τέσσερα λαμπάκια, τα οποία θα ανάβουν από την μια πλευρά στην άλλη και μετά θα επιστρέφουν πίσω. Συγκεκριμένα, το αναμμένο φως θα πηγαίνει από τα αριστερά στα δεξιά και μετά από τα δεξιά στα αριστερά.
Σκέψη / Μεθοδολογία: Η §3.4.4 του βιβλίου δείχνει πώς κατασκευάζεται τρεχαντήρι με ΔΥΟ λαμπάκια (pins 2 και 3, το ένα ανάβει, μετά σβήνει και ανάβει το άλλο). Η Δραστηριότητα 8 ζητά επέκταση σε ΤΕΣΣΕΡΑ λαμπάκια (4 κυκλώματα LED+αντίσταση σε πρόσθετες θύρες, π.χ. 2,3,4,5) με ΕΝΑ αναμμένο λαμπάκι τη φορά που κινείται διαδοχικά από αριστερά προς δεξιά και μετά αντίστροφα (σαν ένα φως που πηγαίνει μπρος-πίσω, όχι σαν το τρεχαντήρι-2-λαμπακιών που απλώς εναλλάσσεται). Χρησιμοποιούμε έναν πίνακα (array) με τους 4 ακροδέκτες και δύο βρόχους for: έναν για τη φορά αριστερά→δεξιά και έναν για δεξιά→αριστερά (χωρίς να ξανανάβουμε τα δύο άκρα δύο φορές συνεχόμενα).
Λύση:
Κύκλωμα: 4 ανεξάρτητα κυκλώματα LED+αντίσταση 220Ω, με τις ανόδους συνδεδεμένες στις ψηφιακές θύρες 2, 3, 4 και 5 αντίστοιχα (κάθε LED σε δική του στήλη του breadboard) και όλες τις καθόδους στην κοινή γραμμή γείωσης.
Κώδικας Arduino (sketch):
int ledPins[] = {2, 3, 4, 5};
int numPins = 4;
int delayTime = 200;
void setup() {
for (int i = 0; i < numPins; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
void loop() {
// Αριστερά -> Δεξιά
for (int i = 0; i < numPins; i++) {
digitalWrite(ledPins[i], HIGH);
delay(delayTime);
digitalWrite(ledPins[i], LOW);
}
// Δεξιά -> Αριστερά (χωρίς να ξανανάψουν τα άκρα)
for (int i = numPins - 2; i > 0; i--) {
digitalWrite(ledPins[i], HIGH);
delay(delayTime);
digitalWrite(ledPins[i], LOW);
}
}
Ακολουθία: ο πρώτος βρόχος (i = 0 έως 3) και ο δεύτερος (i = 2 έως 1) δίνουν την ακολουθία αναμμένων ακροδεκτών [2,3,4,5,4,3], η οποία στη συνέχεια επαναλαμβάνεται διαρκώς (…2,3,4,5,4,3,2,3,4,5,4,3,…) — ΑΚΡΙΒΩΣ το ζητούμενο «πηγαίνει από τα αριστερά στα δεξιά και μετά από τα δεξιά στα αριστερά», με ένα μόνο λαμπάκι αναμμένο κάθε στιγμή.
Τελική απάντηση: Πρόγραμμα με πίνακα 4 ακροδεκτών {2,3,4,5}: πρώτος βρόχος for ανάβει/σβήνει διαδοχικά τα LED από αριστερά προς δεξιά (2→3→4→5), δεύτερος βρόχος for τα ανάβει/σβήνει από δεξιά προς αριστερά (4→3, χωρίς να ξανανάψει το 5, ενώ το 2 ανάβει στην αρχή του επόμενου κύκλου), και το loop() επαναλαμβάνει διαρκώς τον κύκλο — παράγοντας το ζητούμενο εφέ 'τρεχαντηριού' με ένα αναμμένο λαμπάκι που κινείται μπρος-πίσω.
Πρόσεξε: