ΤΕΣΤ (ΑΣΚΗΣΕΙΣ) ONLINE
31 Tests / Διαγωνίσματα

Ενότητα 3 – Δραστηριότητες – Σελίδα 29-40 – ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ ΓΥΜΝΑΣΙΟΥ – Απαντήσεις – Λύσεις – ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ ΓΥΜΝΑΣΙΟΥ

(Πηγή: Βιβλίο Μαθητή, Πληροφορική Γ΄ Γυμνασίου, Ενότητα 3 «Φυσική Υπολογιστική-Ρομποτικές Διατάξεις», σελ. 29-40. Οι 8 «Δραστηριότητες» παρακάτω βρίσκονται μέσα στη θεωρία των §3.2, §3.3 και §3.4. Οι εκφωνήσεις είναι αυτούσιες από το σχολικό βιβλίο.)

Δραστηριότητες Κεφαλαίου 3

Δραστηριότητα 1 (εξομοιωτής Sense HAT/Astro Pi στο trinket.io) (σελ. 29)

Μεταβείτε στην ιστοσελίδα: 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}.

Πρόσεξε:

  • Με τις συγκεκριμένες τιμές του πίνακα ελέγχου η συνθήκη if είναι False — αν ο μαθητής αλλάξει πραγματικά τη θερμοκρασία στον πίνακα (π.χ. κάτω από 12°C ΚΑΙ υγρασία πάνω από 70%), τότε ΘΑ εμφανιστεί το μήνυμα SAFE.
  • Ο αισθητήρας/εξομοιωτής επιστρέφει δεκαδικούς αριθμούς (float) με πολλά δεκαδικά ψηφία — είναι φυσιολογικό, όχι σφάλμα προγράμματος.
  • Η δεύτερη παράμετρος False στο set_rotation() σημαίνει ότι η αλλαγή προσανατολισμού ΔΕΝ ξανασχεδιάζει άμεσα ό,τι υπάρχει ήδη στην οθόνη.

Δραστηριότητα 2 (RGB Calculator, Photodentro) (σελ. 29)

Μεταβείτε στην ιστοσελίδα 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).

Πρόσεξε:

  • Πρόκειται για προσθετική (φωτός) σύνθεση χρώματος, όχι αφαιρετική (μελανιών/χρωμάτων ζωγραφικής) — γι' αυτό η πρόσθεση ΟΛΩΝ των χρωμάτων φωτός δίνει ΛΕΥΚΟ (όχι μαύρο, όπως θα περίμενε κανείς με μπογιές).
  • Το «μωβ» της δραστηριότητας αντιστοιχεί στο πλήρες κόκκινο+μπλε (255,0,255), γνωστό και ως ματζέντα — δεν πρόκειται για το πιο σκούρο/βαθύ μωβ (π.χ. 128,0,128) που θα προέκυπτε με μερική ένταση.
  • Το εργαλείο είναι εξωτερικό διαδραστικό learning object· η ακριβής αλληλουχία κλικ διαφέρει ανά μαθητή, αλλά οι 7 αριθμητικοί συνδυασμοί RGB παραπάνω είναι σταθεροί/μοναδικοί.

Δραστηριότητα 3 (πρόγραμμα ουράνιου τόξου στο Sense HAT) (σελ. 30)

Να γράψετε ένα πρόγραμμα για το 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).

Πρόσεξε:

  • Το sense.set_pixels() απαιτεί ΑΚΡΙΒΩΣ 64 στοιχεία (πλειάδες RGB) — λιγότερα ή περισσότερα προκαλούν σφάλμα.
  • Η λέξη «και» στην εκφώνηση («υγρασία άνω του 88% και θερμοκρασία άνω των 20°C») μεταφράζεται σε λογικό AND, όχι OR — χρειάζονται ΚΑΙ οι δύο συνθήκες μαζί.
  • Το ακριβές σχέδιο/χρωματισμός του τόξου δεν είναι μοναδικό (πολλές σωστές διατάξεις pixel δίνουν αναγνωρίσιμο τόξο) — δίνεται μία ενδεικτική υλοποίηση.

Δραστηριότητα 4 (5 μικρά προγράμματα μπλοκ για το micro:bit) (σελ. 35)

  1. Δημιουργήστε ένα νέο πρόγραμμα που να εμφανίζει τη συμβολοσειρά «Hello world!».
  2. Δημιουργήστε ένα νέο πρόγραμμα με τον τίτλο «Καρδιά» το οποίο να εμφανίζει μια καρδιά.
  3. Δημιουργήστε ένα νέο πρόγραμμα με τον τίτλο «Καρδιά που αναβοσβήνει» για πάντα.
  4. Δημιουργήστε ένα νέο πρόγραμμα που να εμφανίζει αρχικά το 2023 και στη συνέχεια για πάντα το 2024.
  5. Δημιουργήστε ένα νέο πρόγραμμα που να εμφανίζει το όνομά σας στα ελληνικά.

Σκέψη / Μεθοδολογία: Και τα 5 ζητούμενα λύνονται με εντολές του μπλοκ «Βασικά» του Πίνακα 3.1 (§3.3.1): «κατά την έναρξη», «εμφάνισε συμβολοσειρά», «εμφάνιση εικονιδίου», «εμφάνισε αριθμό», «show leds», «καθαρισμός οθόνης», «παύση (ms)» και «για πάντα». Ό,τι πρέπει να γίνει μία φορά μπαίνει στο «κατά την έναρξη», ενώ ό,τι πρέπει να επαναλαμβάνεται συνεχώς μπαίνει στο «για πάντα». Για το όνομα στα ελληνικά προσέχουμε την παρατήρηση του βιβλίου: η εντολή «εμφάνισε συμβολοσειρά» δεν υποστηρίζει ελληνικά γράμματα, οπότε τα γράμματα σχεδιάζονται ένα-ένα με την εντολή «show leds».

Λύση:

  1. «Hello world!»: «κατά την έναρξη» → «εμφάνισε συμβολοσειρά "Hello world!"». Το κείμενο κυλά στην οθόνη LED του προσομοιωτή.

  2. «Καρδιά»: «κατά την έναρξη» → «εμφάνιση εικονιδίου» με επιλεγμένο το εικονίδιο της καρδιάς.

  3. «Καρδιά που αναβοσβήνει»: «για πάντα» → «εμφάνιση εικονιδίου» (καρδιά) → «παύση (ms) 500» → «καθαρισμός οθόνης» → «παύση (ms) 500». Επειδή οι τέσσερις εντολές βρίσκονται μέσα στο «για πάντα», η καρδιά ανάβει και σβήνει συνεχώς.

  4. «2023 και μετά για πάντα 2024»: «κατά την έναρξη» → «εμφάνισε αριθμό 2023»· «για πάντα» → «εμφάνισε αριθμό 2024». Το 2023 εμφανίζεται μία φορά στην αρχή και μετά το 2024 εμφανίζεται ξανά και ξανά.

  5. Όνομα στα ελληνικά: η «εμφάνισε συμβολοσειρά» δεν εμφανίζει ελληνικούς χαρακτήρες, γι' αυτό μέσα στο «κατά την έναρξη» βάζουμε για κάθε γράμμα του ονόματος μία εντολή «show leds», όπου επιλέγουμε τα τετράγωνα που σχηματίζουν το γράμμα, και ανάμεσα στα γράμματα μία «παύση (ms)» (π.χ. 500). Για παράδειγμα, το γράμμα Γ σχηματίζεται ανάβοντας τα 4 πρώτα τετράγωνα της πάνω γραμμής και την αριστερή στήλη· το Λ ανάβοντας το μεσαίο τετράγωνο της πάνω γραμμής και δύο διαγώνιες προς τις κάτω γωνίες. Τα γράμματα που υπάρχουν ίδια και στο λατινικό αλφάβητο (π.χ. Α, Ε, Κ, Μ, Ο) μπορούν να γραφτούν και με την «εμφάνισε συμβολοσειρά» με λατινικούς χαρακτήρες.

Τελική απάντηση: (1) «κατά την έναρξη» → «εμφάνισε συμβολοσειρά "Hello world!"»· (2) «κατά την έναρξη» → «εμφάνιση εικονιδίου» καρδιά· (3) «για πάντα» → καρδιά, παύση, καθαρισμός οθόνης, παύση· (4) «κατά την έναρξη» → «εμφάνισε αριθμό 2023» και «για πάντα» → «εμφάνισε αριθμό 2024»· (5) το όνομα στα ελληνικά σχηματίζεται γράμμα-γράμμα με εντολές «show leds» και παύσεις ανάμεσα, επειδή η «εμφάνισε συμβολοσειρά» δεν υποστηρίζει ελληνικά γράμματα.

Πρόσεξε:

  • Στο ζητούμενο 5 η εντολή «εμφάνισε συμβολοσειρά» με ελληνικό κείμενο δεν κάνει τίποτα, όπως σημειώνει το βιβλίο — χρειάζεται «show leds» για κάθε ελληνικό γράμμα. Το όνομα είναι προσωπικό, άρα η λύση διαφέρει από μαθητή σε μαθητή.
  • Στο ζητούμενο 3, η «καρδιά που αναβοσβήνει» χρειάζεται ΚΑΙ την εμφάνιση ΚΑΙ τον καθαρισμό της οθόνης μέσα στο «για πάντα», με παύσεις ανάμεσα, αλλιώς η καρδιά μένει μόνιμα αναμμένη.
  • Στο ζητούμενο 4, το 2023 μπαίνει στο «κατά την έναρξη» (εκτελείται μία φορά) και το 2024 στο «για πάντα» (εκτελείται συνεχώς) — η θέση των εντολών έχει σημασία.

Δραστηριότητα 5 (7 μικρά προγράμματα με πλήκτρα A/B για το micro:bit) (σελ. 36)

  1. Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Καρδιά - Πλήκτρο A» που να εμφανίζει μια καρδιά όταν πιέζεται το πλήκτρο A.
  2. Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Σύμβολα - Πλήκτρα A, B» που να εμφανίζει το σύμβολο «√» όταν πιέζεται το πλήκτρο A και το σύμβολο «Χ» όταν πιέζεται το πλήκτρο B.
  3. Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Τελεία που κινείται - Πλήκτρα A, B» το οποίο να δείχνει μια τελεία στο κέντρο της οθόνης LED να κινείται προς τα αριστερά, όταν πατάτε το πλήκτρο A και να κινείται προς τα δεξιά όταν πατάτε το πλήκτρο B.
  4. Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Τελεία που κινείται - Πλήκτρα A, B, AB, logo» το οποίο, να δείχνει μια τελεία στο κέντρο της οθόνης LED να κινείται προς τα αριστερά όταν πατάτε το πλήκτρο A, να κινείται προς τα δεξιά όταν πατάτε το πλήκτρο B, να κινείται προς τα κάτω όταν πατάτε τα πλήκτρα A+B και να κινείται προς τα πάνω όταν πατάτε το logo του micro:bit.
  5. Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Άνθρωπος που κουνάει τα χέρια - Πλήκτρα A, B» το οποίο να δείχνει έναν άνθρωπο να ανεβάζει και να κατεβάζει τα χέρια συνέχεια και όταν πατάτε το πλήκτρο A να σταματάει ο άνθρωπος να ανεβοκατεβάζει τα χέρια. Όταν πατάτε το πλήκτρο B να εμφανίζει τη συμβολοσειρά «ΟΚ» και μετά από 2 δευτερόλεπτα να ανεβοκατεβάζει πάλι τα χέρια του.
  6. Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Άνθρωπος που κινείται - Πλήκτρα A, B» το οποίο να δείχνει τον άνθρωπο από τα διαθέσιμα εικονίδια της εντολής «εμφάνιση εικονιδίου» να κινείται προς τα αριστερά όταν πατάτε το πλήκτρο A και να κινείται προς τα δεξιά όταν πατάτε το πλήκτρο B.
  7. Δημιουργήστε ένα νέο πρόγραμμα με το όνομα «Άνθρωπος που κινείται παντού - Πλήκτρα 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). Για τον άνθρωπο που ανεβοκατεβάζει τα χέρια χρειαζόμαστε μια μεταβλητή που θυμάται αν η κίνηση είναι ενεργή ή σταματημένη.

Λύση:

  1. «Καρδιά - Πλήκτρο Α»: «όταν πιεστεί το πλήκτρο button A» → «εμφάνιση εικονιδίου» καρδιά.

  2. «Σύμβολα - Πλήκτρα Α, Β»: «όταν πιεστεί το πλήκτρο button A» → «εμφάνιση εικονιδίου» με το σύμβολο √· «όταν πιεστεί το πλήκτρο button B» → «εμφάνιση εικονιδίου» με το σύμβολο Χ (τα ίδια εικονίδια που χρησιμοποιεί το Παράδειγμα 1).

  3. «Τελεία που κινείται - Πλήκτρα Α, Β»: «κατά την έναρξη» → 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).

  4. «Τελεία που κινείται - Πλήκτρα Α, Β, ΑΒ, 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.

  5. «Άνθρωπος που κουνάει τα χέρια - Πλήκτρα Α, Β»: «κατά την έναρξη» → κίνηση = αληθές. «για πάντα» → αν κίνηση: εικόνα ανθρώπου με χέρια πάνω («show leds»), «παύση (ms) 500», εικόνα ανθρώπου με χέρια κάτω, «παύση (ms) 500». «όταν πιεστεί το πλήκτρο button A» → κίνηση = ψευδές (ο άνθρωπος σταματά). «όταν πιεστεί το πλήκτρο button B» → κίνηση = ψευδές, «εμφάνισε συμβολοσειρά "OK"», «παύση (ms) 2000», κίνηση = αληθές (ξαναρχίζει να ανεβοκατεβάζει τα χέρια).

  6. «Άνθρωπος που κινείται - Πλήκτρα Α, Β»: επιλέγουμε το εικονίδιο του ανθρώπου από τη λίστα της εντολής «εμφάνιση εικονιδίου». Με το Α η εικόνα μετακινείται μία στήλη προς τα αριστερά και με το Β μία στήλη προς τα δεξιά (π.χ. με την εντολή κύλισης εικόνας των εντολών «Για Προχωρημένους», με μετατόπιση −1 ή +1), με την ίδια λογική θέσης που χρησιμοποιήθηκε για την τελεία στο 3.

  7. «Άνθρωπος που κινείται παντού - Πλήκτρα Α, Β, ΑΒ, logo»: συνδυασμός των 4 και 6 — Α αριστερά, Β δεξιά, logo πάνω, Α+Β κάτω, με το εικονίδιο του ανθρώπου στη θέση της τελείας.

Τελική απάντηση: (1) πλήκτρο Α → εικονίδιο καρδιάς· (2) Α → εικονίδιο √, Β → εικονίδιο Χ· (3) τελεία με μεταβλητή θέσης x που μειώνεται με Α και αυξάνεται με Β (όρια 0-4)· (4) επέκταση σε δύο μεταβλητές x, y με Α (αριστερά), Β (δεξιά), Α+Β (κάτω), logo (πάνω)· (5) μεταβλητή που ενεργοποιεί/σταματά την εναλλαγή των δύο εικόνων του ανθρώπου: Α σταματά, Β εμφανίζει «OK» και μετά από 2 δευτερόλεπτα η κίνηση ξαναρχίζει· (6)-(7) ίδια λογική θέσης με (3)-(4), με το εικονίδιο του ανθρώπου αντί για τελεία.

Πρόσεξε:

  • Τα σύμβολα √ και Χ του ζητούμενου 2 είναι εικονίδια της εντολής «εμφάνιση εικονιδίου» (όπως στο Παράδειγμα 1), όχι γράμματα.
  • Στο ζητούμενο 5 το «ΟΚ» πρέπει να γραφτεί με λατινικούς χαρακτήρες (OK), γιατί η «εμφάνισε συμβολοσειρά» δεν υποστηρίζει ελληνικά γράμματα.
  • Στη Δραστηριότητα 5.5 χρειάζεται μια μεταβλητή-«σημαία» για να θυμάται το πρόγραμμα αν ο άνθρωπος κινείται ή έχει σταματήσει.
  • Τα όρια της οθόνης (0-4 σε κάθε άξονα, αφού είναι 5x5) πρέπει να ελέγχονται, ώστε η τελεία να μη «βγαίνει» εκτός οθόνης.
  • Η εντολή «on logo pressed» είναι διαθέσιμη μόνο στο micro:bit v2.

Δραστηριότητα 6 (παρατήρηση breadboard και πλακέτας Arduino Starter Kit) (σελ. 37)

  1. Παρατηρήστε το breadboard και συζητήστε στην ομάδα σας σχετικά με τις εσωτερικές συνδέσεις του.

  2. Παρατηρήστε την πλακέτα Plus Starter Kit for Arduino και αναγνωρίστε τις ψηφιακές θύρες, τη γείωση, το reset button και την USB διεπαφή.

  3. Συνδέστε την πλακέτα με το καλώδιο USB στην αντίστοιχη θύρα του ηλεκτρονικού υπολογιστή.

Σκέψη / Μεθοδολογία: Πρόκειται για δραστηριότητα παρατήρησης/συζήτησης σε ομάδα, βασισμένη στη δομή breadboard/πλακέτας που περιγράφει το ίδιο το §3.4.1. Δίνουμε την περιγραφή των εσωτερικών συνδέσεων του breadboard και των βασικών στοιχείων της πλακέτας, όπως τα παρουσιάζει το βιβλίο, ώστε η ομαδική συζήτηση να έχει σωστό σημείο αναφοράς.

Λύση:

  1. Εσωτερικές συνδέσεις breadboard (§3.4.1): (α) Στο επάνω και στο κάτω μέρος υπάρχουν δύο οριζόντιες γραμμές οπών, μία κόκκινη και μία μπλε. Οι οπές τους επικοινωνούν οριζόντια, μέχρι εκεί που διακόπτονται οι χρωματιστές γραμμές. Η κόκκινη γραμμή είναι για την τροφοδοσία (Vcc) και η μπλε για τη γείωση (GND). (β) Οι υπόλοιπες οπές επικοινωνούν κατακόρυφα ανά πέντε (π.χ. οι στήλες A, B, C, D, E και F, G, H, I, J). (γ) Η εσοχή στη μέση δείχνει την αλλαγή τμήματος: οι επάνω κατακόρυφες στήλες δεν επικοινωνούν με τις κάτω. Έτσι, ένα εξάρτημα έρχεται σε επαφή με ό,τι άλλο μπει στην ίδια ομάδα των πέντε οπών, χωρίς κόλληση.

  2. Στοιχεία πλακέτας Plus Starter Kit for Arduino: οι ψηφιακές θύρες εισόδου/εξόδου I/O είναι οι αριθμημένες 2 έως 13· η γείωση (αρνητικός πόλος του κυκλώματος) σημειώνεται με το σύμβολο GND· το reset button είναι το κόκκινο πλήκτρο, που εκτελεί επανεκκίνηση (reset) του μικροεπεξεργαστή· η USB διεπαφή είναι ο USB type C connector, για τη σύνδεση της πλακέτας με τον υπολογιστή μέσω καλωδίου USB.

  3. Σύνδεση με USB: συνδέουμε το ένα άκρο του καλωδίου USB στη θύρα της πλακέτας Arduino και το άλλο άκρο σε ελεύθερη θύρα USB του υπολογιστή. Μόλις συνδεθεί, η πλακέτα τροφοδοτείται και ο υπολογιστής την αναγνωρίζει ως νέα συσκευή — αυτό είναι το προαπαιτούμενο βήμα ώστε στη συνέχεια (§3.4.2) να εγκατασταθεί το Arduino IDE και η πλακέτα να εμφανιστεί σε σειριακή θύρα (π.χ. COM 3).

Τελική απάντηση: Στο breadboard, οι οπές της κόκκινης (τροφοδοσία) και της μπλε (γείωση) γραμμής επικοινωνούν οριζόντια μέχρι εκεί που διακόπτονται οι γραμμές, ενώ οι υπόλοιπες οπές επικοινωνούν κατακόρυφα ανά πέντε· η εσοχή στη μέση χωρίζει τις επάνω από τις κάτω στήλες. Στην πλακέτα: ψηφιακές θύρες I/O 2-13, γείωση GND, κόκκινο πλήκτρο reset, USB type C connector για τη σύνδεση με τον υπολογιστή.

Πρόσεξε:

  • Οι επάνω κατακόρυφες στήλες ΔΕΝ επικοινωνούν με τις κάτω — η εσοχή στη μέση χωρίζει τα δύο τμήματα (χρήσιμο για ολοκληρωμένα κυκλώματα και push buttons).
  • Οι οπές της κόκκινης και της μπλε γραμμής επικοινωνούν μόνο μέχρι εκεί που διακόπτονται οι χρωματιστές γραμμές.
  • Το κουμπί reset επανεκκινεί τον μικροεπεξεργαστή· δε σβήνει το πρόγραμμα.

Δραστηριότητα 7 (κύκλωμα ενός λαμπακιού στο Arduino) (σελ. 39)

Υλοποιήστε το παραπάνω κύκλωμα στο 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 εκτελείται συνεχώς σε βρόχο.

Πρόσεξε:

  • Η αντίσταση σε σειρά με το LED είναι απαραίτητη — χωρίς αυτήν περνάει υπερβολικό ρεύμα και το LED μπορεί να καεί.
  • Η πολικότητα του LED έχει σημασία: το μακρύ πόδι (άνοδος) πάει προς τη θετική τάση, το κοντό (κάθοδος) προς τη γείωση — ανάποδα συνδεδεμένο το LED δεν ανάβει καθόλου.
  • Αλλάζοντας την τιμή του delay() αλλάζει αναλογικά ο ρυθμός αναβοσβήματος (π.χ. delay(200) θα κάνει το LED να αναβοσβήνει πολύ πιο γρήγορα).

Δραστηριότητα 8 (τρεχαντήρι με τέσσερα λαμπάκια, Arduino) (σελ. 40)

Να δημιουργήσετε ένα τρεχαντήρι με τέσσερα λαμπάκια, τα οποία θα ανάβουν από την μια πλευρά στην άλλη και μετά θα επιστρέφουν πίσω. Συγκεκριμένα, το αναμμένο φως θα πηγαίνει από τα αριστερά στα δεξιά και μετά από τα δεξιά στα αριστερά.

Σκέψη / Μεθοδολογία: Η §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() επαναλαμβάνει διαρκώς τον κύκλο — παράγοντας το ζητούμενο εφέ 'τρεχαντηριού' με ένα αναμμένο λαμπάκι που κινείται μπρος-πίσω.

Πρόσεξε:

  • Το δεύτερο άκρο (θύρα 5) ΔΕΝ πρέπει να ξανανάψει αμέσως μετά τον πρώτο βρόχο, αλλιώς το λαμπάκι θα 'κολλήσει' αναμμένο δύο φορές συνεχόμενα στην ίδια άκρη — γι' αυτό ο δεύτερος βρόχος ξεκινάει από numPins-2 (θύρα 4), όχι από numPins-1 (θύρα 5). Για τον ίδιο λόγο σταματά πριν από το i = 0 (συνθήκη i > 0): η θύρα 2 θα ανάψει στην αρχή του επόμενου κύκλου του loop().
  • Πρόκειται για επέκταση, όχι απλή αντιγραφή, του παραδείγματος 2-λαμπακιών της §3.4.4 — χρειάζεται πίνακας (array) αντί για δύο ξεχωριστές μεταβλητές ώστε ο κώδικας να παραμένει σύντομος και επεκτάσιμος.
ΠΛΗΡΟΦΟΡΙΚΗ Γ' ΓΥΜΝΑΣΙΟΥ - ΣΧΟΛΙΚΟ ΒΙΒΛΙΟ ΜΑΘΗΤΗ (PDF)