Μια πρώτη επαφή με τον προγραμματισμό ήχων και μουσικής με το Thymio και εισαγωγή στο «προχωρημένο – advanced VPL» (6η Δραστηριότητα )

Tου Νίκου Δαπόντε

Το ρομποτάκι Thymio, εκτός από τους πολλούς και ποικίλους αισθητήρες, τους δύο τροχούς-κινητήρες και τα πέντε κουμπιά αφής που διαθέτει, έχει ενσωματωμένο στο εσωτερικό του τόσο ένα μικρόφωνο ως αισθητήρα όσο και ένα μεγάφωνο.

Με ποιο τρόπο θα τα εκμεταλλευτούμε ώστε να βελτιώσουμε και διευρύνουμε τις προγραμματιστικές δυνατότητες που γνωρίσαμε μέσα από τις πέντε προηγούμενες δραστηριότητες;

Ας ξεκινήσουμε με ένα παράδειγμα που αναφέρεται στο γνωστό λάθος- απόρριψη μιας γραμμής εντολών στο βασικό περιβάλλον «Οπτικού Προγραμματισμού – VPL ».

Αν αγγίζω το κεντρικό κουμπί (γεγονός1) ΤΟΤΕ το ρομποτάκι να κινείται μπροστά (δράση1) thymio7_1

Αν αγγίξω ξανά το κεντρικό κουμπί (γεγονός2) ΤΟΤΕ το ρομποτάκι να σταματάει (δράση2)

Στο μικρό αυτό πρόγραμμα παρατηρούμε ότι στην πρώτη γραμμή δίνεται εντολή στο ρομπότ, με το άγγιγμα του κεντρικού κουμπιού, να κινηθεί μπροστά και στη δεύτερη γραμμή με το ίδιο κουμπί να σταματήσει. Κι αυτό είναι ….αδύνατον!

Αυτήν την «ανεπάρκεια», μαζί με άλλες, έρχεται να εξαλείψει το περιβάλλον VPL για προχωρημένους (Advanced Mode) όπως θα δούμε λίγο παρακάτω με την εισαγωγή της έννοιας «κατάσταση» (state condition).

Ας προχωρήσουμε σε μια σύντομη παρουσίαση του «VPL για προχωρημένους» κάνοντας κλικ στο εικονίδιο του «Base Mode VPL» thymio7_2
το οποίο αλλάζει σε (εικονίδιο του Advanced Mode VPL). thymio7_3

Στο περιβάλλον «Visual Programming» για προχωρημένους, η επιλογή ενός γεγονότος-event (για παράδειγμα, άγγιγμα του κουμπιού «μπροστά») γίνεται αρχικά από μια μικρή συλλογή έξι εικονιδίων τα οποία μεταφέρονται στην περιοχή προγραμματισμού με την τεχνική drag-and-drop . Με ανάλογο τρόπο επιλέγουμε μία έως και έξι επιτρεπόμενες δράσεις – actions και τις μεταφέρουμε στην περιοχή προγραμματισμού (βλέπε στο eduportal τη 2η Δραστηριότητα)

thymio7_4

Σ’ αυτήν τη δραστηριότητα με το VPL, εκτός από τα κουμπιά και τους κινητήρες του Thymio, ενδιαφερόμαστε κυρίως για τα δύο γεγονότα-events (tap detection και clap detection) και τις δύο δράσεις-actions (music και state) που σχετίζονται με ήχους και μουσική:

thymio7_5

Πρόκειται για δύο κατηγορίες γεγονότων και δράσεων που παροτρύνουν το μαθητή να πειραματιστεί ο ίδιος με το «έτοιμο» κινητό ρομποτάκι Thymio. Δεν έχει παρά να «χτυπήσει» το ρομποτάκι, να «χτυπήσει» παλαμάκια ή να δημιουργήσει ήχους και το Thymio να αντιδρά παίζοντας νότες ή αλλάζοντας κατάσταση κ.λ.π.

Το πρώτο παράδειγμα – επίδειξη

Πώς να προγραμματίσω το ρομποτάκι Thymio έτσι ώστε:

  • όταν αγγίζω το κεντρικό κουμπί να προχωράει μπροστά και
  • όταν το αγγίζω ξανά να σταματάει;

Σημείωση: Ας σκεφτούμε το άνοιγμα –ΟΝ  και το κλείσιμο –OFF του υπολογιστή μας με το ίδιο κουμπί. Απλά, ο υπολογιστής «θυμάται» συνεχώς σε ποια κατάσταση βρίσκεται: κατάσταση ΟΝ ή OFF.

Α. Αρχικά, ας δούμε πώς μπορούμε να προσεγγίσουμε την απάντηση σ’ αυτό το ερώτημα στο  «προγραμματιστικό περιβάλλον BLOCKLY » μια και κάτι τέτοιο θα μας βοηθήσει να καταλάβουμε καλύτερα την έννοια «state-κατάσταση» του Advanced VPL.

Ακολουθώντας τη λογική προγραμματισμού του Scratch, σκέφτομαι ότι πρέπει να ορίσω μια μεταβλητή με όνομα, ας πούμε Ν, που επιδέχεται δύο τιμές 1 και 0, αντιπροσωπεύοντας τις δύο καταστάσεις, την κίνηση και το σταμάτημα, αντίστοιχα.

thymio7_6

Με άλλα λόγια ζητάω από το ρομποτάκι, κάθε φορά που αγγίζω το κεντρικό κουμπί, να απομνημονεύει την κατάστασή του 0 ή 1 (state condition).

Εύκολα μπορώ να μεταφράσω αυτές τις σκέψεις στη γλώσσα προγραμματισμού BLOCKLY και το αποτέλεσμα παρουσιάζεται αμέσως παρακάτω μαζί με τον κώδικα σε «Text Programming» (το πρόγραμμα αποθήκευσα στον υπολογιστή μου με όνομα act_6_but_center_BL.aesl )

thymio7_7

Β. Με βάση τα παραπάνω οικοδόμησα το μικρό προγραμματάκι στο advanced VPL

(αρχείο act_6_button_center_FD_stop.aesl) αξιοποιώντας μια νέα action που αναπαριστά την κατάσταση του Thymio και εμπλουτίζοντας το με χρώματα (RGB sliders).

thymio7_8

Ας δούμε από κοντά το μικρό προγραμματάκι φτιαγμένο στο περιβάλλον «προχωρημένο VPL».

Κάθε γεγονός (event) συνοδεύεται από ένα εικονίδιο της κατάστασης του Thymio και παριστάνεται με τη μορφή τεσσάρων τεταρτημορίων που το καθένα μπορεί να έχει χρώμα:

ΛΕΥΚΟ ——à όταν η κατάσταση είναι OFF

ΠΟΡΤΟΚΑΛΙ –à όταν η κατάσταση είναι ON

ΓΚΡΙ ———> όταν η κατάσταση αγνοείται

όπως φαίνεται στα εικονίδια κατάστασης:

thymio7_9

Εφόσον το καθένα από τα 4 τεταρτημόρια είναι ΟΝ ή OFF υπάρχουν συνολικά 16 δυνατές  καταστάσεις του ρομπότ.

Στη δεξιά φωτογραφία του Thymio διαπιστώνουμε ότι το ρομποτάκι είναι στην κατάσταση (ΟΝ, ΟΝ, ΟΝ, ΟΝ).

thymio7_10

Ας επανέλθουμε στο προγραμματάκι του VPL.

Εύκολα διαπιστώνουμε ότι η πρώτη γραμμή διαβάζεται ως εξής:

Αν αγγίξω το κεντρικό  κουμπί και

η κατάσταση είναι OFF (το πάνω αριστερό τεταρτημόριο είναι λευκού χρώματος)

ΤΟΤΕ

η κατάσταση αλλάζει σε ON (το πάνω αριστερό τεταρτημόριο είναι πορτοκαλί),

το ρομποτάκι φωτίζεται κόκκινο και κινείται μπροστά.

Η δεύτερη γραμμή διαβάζεται ως εξής:

Αν αγγίξω το κεντρικό  κουμπί και

η κατάσταση είναι ON (το πάνω αριστερό τεταρτημόριο είναι πορτοκαλί χρώματος)

ΤΟΤΕ

η κατάσταση αλλάζει σε OFF (το πάνω αριστερό τεταρτημόριο είναι λευκού χρώματος),

το ρομποτάκι φωτίζεται μπλε και σταματάει.

Ας θυμόμαστε ότι:

thymio7_11

Ας Πειραματιστούμε ….

α. Θεωρώ ότι η κατανόηση της έννοιας «κατάσταση του ρομπότ» στο περιβάλλον advanced VPL διευκολύνεται εφόσον πειραματιστούμε οι ίδιοι και σκεφτούμε πάνω στα αποτελέσματα που παίρνουμε κάθε φορά.

Προτείνω, λοιπόν, για καθένα από τα παρακάτω 6 προγραμματάκια (που αναφέρονται στο πρώτο παράδειγμα-επίδειξη)  να σκεφτούμε πρώτα ποιο είναι σωστό και ποιο λάθος και να επιβεβαιώσουμε  την ορθότητα της απάντησής μας στο VPL.

thymio7_12

β. Σκέφτηκα να αλλάξω λίγο τη διατύπωση της πρώτης επίδειξης και να προσθέσω άλλη μία εντολή «σταματήματος» αξιοποιώντας το γεγονός – event «ελαφρό χτυπηματάκι» στο ρομποτάκι.

Πώς να προγραμματίσω το ρομποτάκι Thymio έτσι ώστε:

  • όταν αγγίζω το κεντρικό κουμπί να προχωράει μπροστά και να παίρνει χρώμα κόκκινο,
  • όταν το αγγίζω ξανά να κινείται πίσω και να αλλάζει το χρώμα σε μπλε και
  • όταν το «χτυπήσω» να σταματάει και να …. σβήνουν τα λαμπάκια ;

Στο περιβάλλον BLOCKLY το πρόγραμμα διαμορφώνεται όπως παρακάτω.

thymio7_13

Εδώ, αξιοποιήσαμε την εντολή-block «on shock detected» του BLOCKLY με σκοπό τόσο το σταμάτημα του ρομπότ και το σβήσιμο των LED αλλά και την αλλαγή της μεταβλητής σε N=0.

Το δεύτερο παράδειγμα – επίδειξη

Πώς να προγραμματίσω το ρομποτάκι Thymio έτσι ώστε:

  • όταν το «χτυπήσω» ελαφρά, αυτό να προχωράει μπροστά και να αποκτά ένα χρώμα
  • όταν το «χτυπήσω» ξανά, να προχωράει πίσω και να αποκτάει άλλο χρώμα
  • όταν αγγίξω το κεντρικό κουμπί του Thymio να σταματάει.

Ας ξεκινήσουμε με το περιβάλλον «Οπτικού Προγραμματισμού» VPL του Thymio.

Στην πρώτη γραμμή του προγράμματος το «ελαφρό χτύπημα» είναι ένα γεγονός – event του VPL που συνοδεύεται από την κατάσταση-state OFF. Αυτό το γεγονός προκαλεί όχι μόνο τις επιθυμητές δύο δράσεις-actionς (κίνηση μπροστά και χρώμα κόκκινο)  αλλά επιβάλλει να ενεργοποιηθεί και η νέα κατάσταση-state ΟΝ.

 Στην δεύτερη γραμμή του προγράμματος το «ελαφρό χτύπημα» είναι ξανά ένα γεγονός – event που συνοδεύεται από την κατάσταση –state ON. Το γεγονός αυτό προκαλεί κίνηση του ρομπότ προς τα πίσω, αλλαγή στο χρώμα (από κόκκινο σε μπλε) και νέα κατάσταση ίδια ακριβώς με αυτήν της αρχικής κατάστασης («χτύπημα»).

Στην τρίτη γραμμή, με το άγγιγμα του κεντρικού κουμπιού το ρομπότ σταματάει χωρίς να αλλάξει κατάσταση. Έτσι, συνεχίζεται η ακολουθία των δράσεων {μπροστά – πίσω – stop}…..

thymio7_14

Μετά τον πειραματισμό στο VPL ας προσπαθήσουμε να οικοδομήσουμε το πρόγραμμα στο περιβάλλον του BLOCKLY για την ίδια επίδειξη.

Αφετηρία μας θα είναι το μπλοκ «on shock detected» και το οποίο αξιοποιήσαμε για να πετύχουμε το σταμάτημα του Thymio.

Πολύ γρήγορα η ιδέα φάνηκε αποτελεσματική όπως φαίνεται στο μικρό προγραμματάκι:

thymio7_15

Το τρίτο παράδειγμα – επίδειξη

Πώς να προγραμματίσω το ρομποτάκι Thymio έτσι ώστε:

  • όταν «χτυπήσω» παλαμάκια, δυνατά, αυτό να προχωράει μπροστά και να αποκτά ένα χρώμα
  • όταν το «χτυπήσω» ξανά παλαμάκια, να προχωράει πίσω και να αποκτάει άλλο χρώμα
  • όταν αγγίξω το κεντρικό κουμπί του Thymio να σταματάει.

Ας ξεκινήσουμε με το περιβάλλον «advanced VPL» του Thymio. Είναι φανερό ότι η λογική οικοδόμησης είναι ίδια με το δεύτερο παράδειγμα επίδειξης που είδαμε πιο πάνω.

Στην πρώτη γραμμή του προγράμματος ένα «δυνατό παλαμάκι» είναι ένα γεγονός – event του VPL που συνοδεύεται από την κατάσταση-state OFF. Αυτό το γεγονός προκαλεί όχι μόνο τις επιθυμητές δύο δράσεις-actionς (κίνηση μπροστά και χρώμα κόκκινο)  αλλά επιβάλλει να ενεργοποιηθεί και η νέα κατάσταση-state ΟΝ.

Στη δεύτερη γραμμή του προγράμματος το «δυνατό παλαμάκι» είναι και πάλι ένα γεγονός – event που συνοδεύεται από την κατάσταση –state ON. Αυτό το γεγονός προκαλεί κίνηση του ρομπότ προς τα πίσω, αλλαγή στο χρώμα (από κόκκινο σε μπλε) και νέα κατάσταση ίδια ακριβώς με αυτήν της αρχικής κατάστασης («πρώτη φορά παλαμάκι»).

Τέλος, στην τρίτη γραμμή, με το άγγιγμα του κεντρικού κουμπιού το ρομπότ σταματάει χωρίς να αλλάξει κατάσταση. Έτσι, συνεχίζεται η ακολουθία των δράσεων {μπροστά – πίσω – stop}…..

thymio7_16

Σημείωση: Το περιβάλλον VPL δεν αποκλείει τη συνύπαρξη των δύο blocks (clap – tap) αλλά δεν λειτουργεί, πάντα, όσο σωστά θα θέλαμε και θα πρέπει να αποφεύγεται. Όμως έχει ενδιαφέρον να το δοκιμάσετε και εσείς…. Το ίδιο ισχύει και με τη συνύπαρξη των εντολών κινητήρα και «παλαμάκια».thymio7_17

Το τέταρτο παράδειγμα – επίδειξη

α) Πώς να προγραμματίσω  και τους επτά οριζόντιους αισθητήρες που διαθέτει το ρομποτάκι Thymio έτσι ώστε να «παίζουμε» με τις μουσικές νότες (ντο-ρε-μι-φα-σολ-λα-σι);

β) Πώς να προγραμματίσω τα κουμπιά επαφής «μπροστά» και «πίσω» έτσι ώστε να αυξάνω ή να ελαττώνω τη διάρκεια κάθε νότας;

Από το διαδίκτυο βρήκα πολλές ιστοσελίδες που μας παρέχουν τις συχνότητες που έχουν οι μουσικές νότες στις διάφορες οκτάβες. Μια από αυτές με ικανοποίησε περισσότερο για τις ανάγκες του προγραμματισμού στο περιβάλλον BLOCKLY μια και διαθέτει τρεις  εντολές:

thymio7_18

Για να παραχθεί μια μουσική νότα από μια χορδή (κιθάρας ή ανθρώπινη ή άλλη χορδή), πρέπει αυτή να πάλλεται. Συχνότητα λέγεται ο αριθμός παλμών στο κάθε δευτερόλεπτο και μετριέται σε Η (Χερτζ). Επειδή στην Ευρωπαϊκή μουσική έχουμε 7 νότες αλλά 12 ημιτόνια (μεταξύ μι-φα και σι-ντο δεν υπάρχει ημιτόνιο), ο τύπος με τον οποίο προκύπτουν όλες οι συχνότητες για τις νότες χρησιμοποιεί την “δωδεκάτη ρίζα του 2” και είναι ο εξής:

thymio7_19

Όπου:   κ=0,2,4,5,7,9,11  για τις νότες αντίστοιχα: ντο, ρε, μι, φα, σολ, λα, σι.  Αν προσθέσουμε και τις ενδιάμεσες τιμές του κ=1,3,6,8,10 προκύπτουν οι νότες με τις διέσεις και λ=1,2,3,4,5,6,7,8   για τις οκτάβες

Οι συχνότητες ν είναι σε Hz. Ο δείκτης στο ν δείχνει “ποιά νότα σε ποιά οκτάβα.  Οι συχνότητες που προκύπτουν στις νότες  λα  είναι σε ακέραιους αριθμούς:   110 Hz,  220Hz, 440Hz,  880Hz,  1760 Hz,  3520 Hz,  7040 Hz , 14080 Ηz  (ύστερα από την όγδοη οκτάβα «κουδουνίζουν τα … αυτιά!!!).   (http://users.sch.gr/stamgian/home8.htm)

Διάλεξα την 3η Οκτάβα (στην οποία η νότα λα έχει συχνότητα 440 Hz) και δέχτηκα τις παρακάτω συχνότητες όπως παρουσιάζεται στον πίνακα:

thymio7_20

(Για τις μουσικές νότες και τις συχνότητές τους βλέπε: http://users.sch.gr/stamgian/home8.htm )

Το πρόγραμμα που ακολουθεί αποτελεί μια προσέγγιση στο 4ο παράδειγμα-επίδειξη:

thymio7_21

Η μεταβλητή < item > μας εξυπηρετεί για τον προγραμματισμό της διάρκειας της εκάστοτε νότας.

Το πέμπτο παράδειγμα – επίδειξη

Πώς να προγραμματίζω μικρά μουσικά μοτίβα με τις διαθέσιμες νότες του Advanced Οπτικού περιβάλλοντος;

 

Από τον επίσημο οδηγό του Thymio πληροφορούμεθα ότι οι 6 μουσικές νότες αναπαριστάνονται με κυκλάκια τα οποία τοποθετούνται πάνω σε πέντε οριζόντιες γραμμές που αναπαριστάνουν πέντε τόνους . Με κλικ πάνω στα κυκλάκια αλλάζουμε το χρώμα τους (λευκό / μαύρο ) καθώς και την απουσία τους (κενά):

Τα μαύρα σημαίνουν short noteς και

τα λευκά long motes

ενώ η απουσία τους σημαίνει παύση   

thymio7_22

Ένας τρόπος να γνωρίσουμε τη σημασία που έχουν τα μικρά λευκά και μαύρα κυκλάκια καθώς και τα κενά που αφήνουν στα εικονίδια της δράσης – action όταν αγγίζουμε τα κουμπιά «μπροστά / πίσω» του Thymio είναι ο πειραματισμός μας με τη δημιουργία ενός δικού μας εικονιδίου δράσης-action και η μετάφρασή τους στο «Text Programming» όπως δείχνεται στο παρακάτω σχήμα:   

thymio7_23

( https://www.youtube.com/watch?v=AR49kBgKLzI  Ένα βίντεο κατάλληλο για να πάρουμε μια ιδέα για το τι μπορούμε να κάνουμε με το Thymio αναφορικά με τη μουσική).