Προγραμματίζοντας τα χρώματα – μοντέλο RGB – με τα LEDs του κινητού ρομπότ THYMIO (Δραστηριότητα 13)

Δραστηριότητες με τα LEDs που διαθέτει το κινητό ρομποτάκι Thymio

Στις προηγούμενες 12 δραστηριότητες γνωριμίας με το κινητό ρομποτάκι Thymio (βλέπε στον εκπαιδευτικό ιστότοπο Eduportal https://www.eduportal.gr/el/ τις σχετικές αναρτήσεις) χρησιμοποιήσαμε πολλές φορές εντολές οι οποίες αναφέρονται σε φωτισμό με τα LEDs («λεντάκια») του ρομπότ. Εδώ, θα επιμείνουμε σε ορισμένες βασικές εφαρμογές προγραμματισμού των LEDs.

Τα πρώτα ερωτήματα:

Πώς μπορώ να αλλάζω το χρώμα στο πάνω κάλυμμα του Thymio;

Πώς να ανάψω τα LEDs  αριστερά και δεξιά του κάτω μέρους του Thymio;

Πώς να ανάψω ορισμένα μόνο από τα LEDs που σχηματίζουν κύκλο γύρω από τα 4 κουμπιά;

Πώς να ανάψω τα LEDs των τεσσάρων κουμπιών (μπροστά, δεξιά, πίσω, αριστερά) του Thymio;

Για τα παραπάνω ερωτήματα και μια σειρά άλλων που αφορούν τα LEDs του Thymio, θα χρειαστεί να χρησιμοποιήσουμε το προγραμματιστικό περιβάλλον του Aseba (Οπτικό προγραμματισμό — BLOCKLY — Text programming) αξιοποιώντας τις κατάλληλες, κάθε φορά, εντολές τις οποίες  και «καταλαβαίνει» το ρομποτάκι (ειδικές εντολές για τα 39 LEDs του Thymio, εντολές μέσω τηλεκοντρόλ, κουμπιά του Thymio, αισθητήρες απόστασης κ.λ.π.).

Λαμβάνοντας υπόψη τα παραπάνω θα προτείνω μερικές ιδέες με τη μορφή μιας σειράς δραστηριοτήτων στα δύο περιβάλλοντα του Thymio

 «Οπτικό Προγραμματισμό – VPL» και BLOCKLY.

Η πρώτη δραστηριότητα υλοποιείται στο περιβάλλον  BLOCKLY  του ASEBA μια και προσφέρει ένα ευρύ σύνολο εντολών που αναφέρονται στα διαθέσιμα LEDs και είναι σχετικά εύκολα αναγνωρίσιμη η χρησιμότητά τους από την ονομασία τους και μόνο, όπως για παράδειγμα:

(Δυστυχώς, το περιβάλλον ASEBA του Thymio δεν έχει ακόμα μεταφραστεί στα Ελληνικά)

Η εντολή <turn off [top LED]> αναφέρεται στο «σβήσιμο» ενός οποιουδήποτε LED (από τα 39 διαθέσιμα του Thymio) επιλέγοντας το όπως φαίνεται στο σχήμα:

Επίσης, η εντολή <set [top] LED to ….> επιτρέπει με εύκολο τρόπο την επιλογή του χρώματος από μια παλέτα τύπου RGB με τιμές (0, 255) όπως είδαμε πιο πάνω στο project (Scratch). Επιπλέον, επιλέγουμε τόσο τα LEDs του πάνω μέρους του ρομπότ (top) καθώς και τα LEDs στο κάτω μέρος του δεξιά και αριστερά (bottom right και bottom left).

Από την άλλη, η εντολή για την ένταση της κόκκινης ακτινοβολίας στο LED του τηλεκοντρόλ (remote control) και της μπλε ακτινοβολίας στο LED του μικροφώνου (microphone) – που βρίσκονται στη δεξιά πλευρά του Thymio – χρησιμοποιούνται οι τιμές έντασης στο διάστημα (0, 32).

Τέλος, ο Thymio διαθέτει και τις εντολές χρονομέτρησης όπως φαίνεται παρακάτω:

Αμέσως παρακάτω, ακολουθεί το πρόγραμμα της πρώτης δραστηριότητας που σκέφτηκα να κάνω στο περιβάλλον BLOCKLY του Thymio, όπως αυτή διαμορφώθηκε, τελικά, μετά από πειραματισμό.

Το αρχείο φορτώνεται στο ρομποτάκι και όποτε του ζητηθεί εκτελεί συνεχώς τις εντολές. Στην αρχή του κώδικα, με δύο εντολές turn off,  θέτω τα LEDs (του πάνω μέρους-top, τηλεκοντρόλ-remote control)  σε κατάσταση OFF (σβηστά και τα δύο).  Στη συνέχεια, με δύο ιδιαίτερα χρήσιμες εντολές, ορίζω τις τιμές των περιόδων δύο χρονομέτρων (500 και 1000 milliseconds αντίστοιχα). Τέλος, θέτω σε λειτουργία δύο διαδικασίες του τύπου:

Τα δύο LEDs, το μπλε και το κόκκινο, αναβοσβήνουν εναλλάξ κάθε 500 ms.

Για να «μεταφράσω» τις απαιτήσεις αυτών των ερωτημάτων σε κώδικα BLOCKLY, πρώτα απ’ όλα, θα χρειαστεί να ορίσω δύο μεταβλητές <Μ1> και <Μ2> οι οποίες να αναλαμβάνουν την αύξηση ή την ελάττωση των εντάσεων φωτισμού των δύο LEDs που εδώ μας ενδιαφέρουν.

Από τη «Δραστηριότητα 1» κρατάμε τις εντολές ορισμού των δύο περιόδων χρονομέτρησης, 500 ms και 1000 ms, αντίστοιχα και προσαρμόζουμε τις δύο εντολές για τις περιόδους των χρονομέτρων όπως στο σχήμα:

Τελικά, αυτό που έμεινε να δούμε είναι η διαμόρφωση των εντολών τύπου if…..then κατάλληλων για τη λειτουργία του τηλεκοντρόλ.

—-       Όποτε πατάω το κουμπί 1 του τηλεκοντρόλ (Remote Control)

TOTE

θέσε στις δύο μεταβλητές Μ1 και Μ2 την τιμή μηδέν

—-        Όποτε πατάω το κουμπί 2 του τηλεκοντρόλ

TOTE

θέσε το Μ1=0 (για να σβήσει το LED)

ενώ η τιμή του Μ2 αυξάνει κατά 1

—-         Όποτε πατάω το κουμπί 3 του τηλεκοντρόλ

TOTE

θέσε το Μ1=0 (για να σβήσει το LED)

ενώ η τιμή του Μ2 ελαττώνεται κατά 1

—-           Όποτε πατάω το κουμπί 4 του τηλεκοντρόλ

TOTE

θέσε το Μ1=0 και το Μ2=32

ώστε να επαναφέρουμε την αρχική κατάσταση των LEDs

Ο εμπλουτισμένος κώδικας BLOCKLY για τη δεύτερη δραστηριότητα

Παρακάτω δίνουμε τον εμπλουτισμένο κώδικα στο περιβάλλον «Text Programming»

 

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

EVENT (γεγονός / συμβάν) ——- ACTION (ενέργεια / δράση)

και αξιοποιώντας τα αποτελέσματα του πειραματισμού που είδαμε προηγούμενα με το project στο SCRATCH.

α) Στην πρώτη σειρά του «οπτικού κώδικα» επιλέγουμε ως γεγονός το κουμπί <μπροστά> και για ενέργεια/δράση το ΚΟΚΚΙΝΟ χρώμα αρκεί να επιλέξουμε το εικονίδιο επιλογής χρώματος με τιμές (32, 0, 0). Η κόκκινη μπάρα παίρνει μέγιστη τιμή 32 ενώ τόσο η πράσινη όσο και η μπλε είναι 0.

β) Στην δεύτερη σειρά του «οπτικού κώδικα» επιλέγουμε ως γεγονός το κουμπί <δεξιά> και για ενέργεια/δράση το ΠΡΑΣΙΝΟ χρώμα αρκεί να επιλέξουμε το εικονίδιο επιλογής χρώματος με τιμές (0, 32, 0). Η πράσινη μπάρα παίρνει μέγιστη τιμή 32 ενώ τόσο η κόκκινη όσο και η μπλε είναι 0.

γ) Στην τρίτη σειρά επιλέγουμε ως γεγονός το κουμπί <πίσω> και για ενέργεια/δράση το ΜΠΛΕ χρώμα αρκεί να επιλέξουμε το εικονίδιο επιλογής χρώματος με τιμές (0, 0, 32).

δ) Στην τέταρτη σειρά επιλέγουμε ως γεγονός το κουμπί <αριστερά> και για ενέργεια/δράση το ΜΑΥΡΟ χρώμα (απουσία φωτός)  αρκεί να επιλέξουμε το εικονίδιο επιλογής χρώματος με τιμές (0, 0, 0). Υπενθυμίζω το συμπέρασμα από το project Scratch: «Αν θέσω στους τρεις προβολείς τις τιμές (0, 0, 0) τότε η σύνθεσή τους είναι ΜΑΥΡΟ (απουσία φωτός)».

ε) Στην τέταρτη σειρά επιλέγουμε ως γεγονός το <κεντρικό> κουμπί (button center) και για ενέργεια/δράση το ΛΕΥΚΟ χρώμα  αρκεί να επιλέξουμε το εικονίδιο επιλογής χρώματος με τιμές (32, 32, 32). Υπενθυμίζω το συμπέρασμα από το project Scratch: Αν θέσω στους τρεις προβολείς τις μέγιστες τιμές (32, 32, 32) τότε η σύνθεσή τους είναι ΛΕΥΚΟ = Κόκκινο + Πράσινο + Μπλε».

Δραστηριότητα 3: Ο κώδικας στο περιβάλλον «Οπτικού Προγραμματισμού»

Θα χρειαστεί να ξεκινήσουμε με την εντολή < on [proximity sensors] updated >  και να προγραμματίσουμε πέντε εντολές ελέγχου (if ….. do) με σκοπό την ανίχνευση ενός εμποδίου (το δάχτυλό ή το στυλό μας) μπροστά τους. Όσον αφορά τα χρώματα υπενθυμίζουμε ότι χρησιμοποιούμε τις τριάδες τιμών

( 32,0,0) για το κόκκινο,  (0,32,0) για το πράσινο     ( 0,0,32) για το μπλε

(0,0,0) για το μαύρο και   (32,32,32) για το λευκό.

Ακολουθεί ο κώδικας του προγράμματος BLOCKLY για ην δραστηριότητα 4.

Πρόκειται για δραστηριότητα παρόμοια με τη «Δραστηριότητα 3» εφόσον και σ’ αυτήν απαιτείται προγραμματισμός κουμπιών στο Visual του ASEBA. Εύκολα, λοιπόν, μπορεί να γίνει ο προγραμματισμός με το τηλεκοντρόλ.

Ακολουθεί ο κώδικας στο περιβάλλον του «Visual Programming» για τη «Δραστηριότητα 5»:

Υπενθυμίζω τα συμπεράσματα που καταλήξαμε με το project σύνθεσης χρωμάτων στο Scratch. Το διάγραμμα μπορεί να μας διευκολύνει…

α. Αν αναμείξω το Κόκκινο (Red – Rouge με τιμή 255) και το Μπλε (Bleu-Blue με τιμή 255) φροντίζοντας, βέβαια, να μην έχω Πράσινο (Green-Vert με τιμή 0) τότε η σύνθεσή τους είναι MAGENTA (βιολετί). Αυτό το χρώμα, το magenta, είναι δευτερεύον μια και προκύπτει από την ανάμειξη δύο βασικών.
Κόκκινο + Μπλε = Magenta (το συμπληρωματικό χρώμα του Πράσινου)
β. Αν αναμείξω το Κόκκινο (Red – Rouge με τιμή 255) και το Πράσινο (Green-Vert με τιμή 255) φροντίζοντας, βέβαια, να μην έχω Μπλε (Bleu-Blue με τιμή 0) τότε η σύνθεσή τους είναι ΚΙΤΡΙΝO (άλλο ένα δευτερεύον χρώμα)
Κόκκινο + Πράσινο = Κίτρινο (το συμπληρωματικό χρώμα του Μπλε)
γ. Αν αναμείξω Μπλε (Bleu-Blue με τιμή 255) και Πράσινο (Green-Vert με τιμή 255)  φροντίζοντας, βέβαια, να μην έχω Κόκκινο (Red – Rouge με τιμή 0) τότε η σύνθεσή τους είναι ΚΥΑΝΟ (άλλο ένα δευτερεύον χρώμα).
Μπλε + Πράσινο = Κυανό (το συμπληρωματικό χρώμα του Κόκκινου)

δ) Αν θέσω και στα τρία βασικά χρώματα R, G, B ίδιο επίπεδο έντασης, τότε το αποτέλεσμα της μείξης είναι γκρι χρώμα.

Για τις 4 περιπτώσεις θα χρησιμοποιήσουμε το τηλεκοντρόλ: κουμπί <1> για το βιολετί, κουμπί <2> για το κίτρινο, κουμπί <3> για το κυανό και το κουμπί <4> για το γκρι χρώμα.

Πρόκειται για δραστηριότητα στην οποία επιβάλλεται η αξιοποίηση της λεγόμενης υπο-ρουτίνας (subroutine) του προγραμματιστικού περιβάλλοντος BLOCKLY.

α) Εφόσον θα αξιοποιήσουμε τα κουμπιά του Thymio τόσο για την κίνηση και τις στροφές (μπροστά/πίσω, δεξιά/αριστερά) όσο και για το σταμάτημα χρειαζόμαστε τη γνωστή μας εντολή < on [button values] updated >. Μια  σειρά από πέντε εντολές ελέγχου {if…..then} είναι αρκετές για την πραγματοποίηση της δραστηριότητας (α’ μέρος).

Επιπλέον, για ευκολία του προγραμματισμού, φτιάχνουμε τρεις υπο-ρουτίνες με ονόματα  < TURN_OFF >, < TURN_RIGHT >, < TURN_LEFT>  για το σβήσιμο, άναμμα δεξιού LED, άναμμα αριστερού LED αντίστοιχα.

Ο κώδικας της δραστηριότητας 7_ α  στο BLOCKLY

β) Στη δεύτερη περίπτωση θα αξιοποιήσουμε το τηλεκοντρόλ οπότε  χρειαζόμαστε τη γνωστή μας εντολή < on [remote control] updated > και τις τρεις υπο-ρουτίνες του α’ μέρους.

Ο κώδικας της δραστηριότητας 7_ β  στο BLOCKLY

Σημείωση  Οι αντιστοιχίες των κουμπιών του τηλεκοντρόλ και της τιμής της εντολής στο BROCKLY δίνεται στο παρακάτω σχήμα.

Για τη χρήση του τηλεκοντρόλ (Remote Control) βλέπε την ανάρτηση μου στο eduportal.gr

Δραστηριότητες εξοικείωσης με τη ρομποτική και τον προγραμματισμό με το ρομποτάκι Thymio


Χρήσιμες διευθύνσεις