Προγραμματίζοντας «Ευθύγραμμες Ομαλά Επιταχυνόμενες Κινήσεις» του κινητού-ρομπότ Thymio (8η Δραστηριότητα )

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

Μετά τον προγραμματισμό του κινητού-ρομπότ έτσι ώστε να εκτελεί ευθύγραμμες ομαλές κινήσεις (βλέπε 7η Δραστηριότητα, όπου οι δύο τροχοί-κινητήρες του Thymio έχουν ίσες και σταθερές ταχύτητες), σκέφτηκα να δοκιμάσω μια δεύτερη, γνωστή από το Γυμνάσιο κίνηση, την «Ευθύγραμμη Ομαλά Επιταχυνόμενη Κίνηση».

Σκοπός μου είναι να πειραματιστώ με το κινητό – ρομποτάκι εδάφους (εδώ με το Thymio) προγραμματίζοντας κινήσεις με σταθερή επιτάχυνση στο BLOCKLY, και ταυτόχρονα να γνωρίσω καλύτερα το περιβάλλον του «Text Programming». Έτσι, όπως θα δούμε, μας παρέχεται η ευκαιρία να έχουμε πρόσβαση και στις τιμές μεταβλητών του προγράμματος μας κατά την εκτέλεση του.

Ας ξεκινήσουμε από τα βασικά της Φυσικής:

thymio8_1

Για τις ανάγκες του προγραμματισμού στο περιβάλλον BLOCKLY (ή στο Scratch όταν συνδέεται με το Thymio) είναι αρκετό να σκεφτεί κανείς ότι:

Η (νέα) ταχύτητα του ρομπότ = την (προηγούμενη) ταχύτητα του ρομπότ + επιτάχυνση * Δt

ή thymio8_2

Συνοπτικά, θέτοντας Δt =1 θα έχουμε μια πιο απλή σχέση για τον προγραμματισμό του κινητού-ρομπότ Thymio και από μαθητές Γυμνασίου που ενδιαφέρονται: Velocity = Velocity + α

thymio8_3

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

α) Τις αρχικές συνθήκες (ταχύτητα 0, χρόνος 0 και την σταθερή επιτάχυνση acc = 33) και

β) Το block on <temperature> updated  το οποίο ανανεώνεται κάθε δευτερόλεπτο οπότε μας εξυπηρετεί για τη μέτρηση του χρόνου.

Επιπλέον, θα χρειαστεί να ορίσω τη μεταβλητή <time> ώστε να μετράει τα δευτερόλεπτα (1, 2, 3, 4 ….) με τη γνωστή τεχνική

time = time + 1,

και τη μεταβλητή <velocity> που εξυπηρετεί την έκφραση

velocity = velocity + acc * 1

Για να ξεκινήσει το πρόγραμμα θα πρέπει, προφανώς, να αξιοποιήσω το γνωστό μας block  on <forward> button touched

Τελικά, γρήγορα κατέληξα στον παρακάτω κώδικα προγραμματισμού:

thymio8_4

Φορτώνω στο ρομποτάκι το προγραμματάκι που έφτιαξα στο BLOCKLY και όποτε θέλω το σταματάω χρησιμοποιώντας τα κουμπιά (Load & Run και Stop):

thymio8_5

Στη συνέχεια, με το άγγιγμα του κουμπιού <μπροστά> ξεκινάει η κίνηση:

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

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

«η κίνηση του ρομπότ γίνεται πάνω στο γνωστό μας Καρτεσιανό άξονα-χ ή άξονα Χ’ΟΧ με το Ο να παριστάνει την αρχική θέση του κινητού και ΟΧ , ΟΧ’ να αναφέρονται στην κατεύθυνση της κίνησης (προς τα θετικά +χ ή αρνητικά -χ)».     

Για παράδειγμα, «ας προβλέψουμε το πώς θα είναι η κίνηση» του κινητού-ρομπότ και στη συνέχεια ας το επιβεβαιώσουμε πειραματικά, στις παρακάτω τρεις απλές περιπτώσεις, χρησιμοποιώντας το block on <forward> button touched:

Περίπτωση 1: Προβλέψτε την κίνηση αν θέσουμε ως (αρχική ταχύτητα) velocity=-150 και (επιτάχυνση) acceleration=33 και επιβεβαιώστε.

      Απάντηση: Όπισθεν —–μηδενισμός —- μπροστά με σταθερή επιτάχυνση

Περίπτωση 2: Προβλέψτε την κίνηση αν θέσουμε ως (αρχική ταχύτητα) velocity=0 και (επιτάχυνση) acceleration=-33 και επιβεβαιώστε.

     Απάντηση: Το ρομποτάκι κινείται με την όπισθεν!

Περίπτωση 3: Προβλέψτε την κίνηση αν θέσουμε ως (αρχική ταχύτητα) velocity=80 και (επιτάχυνση) acceleration=-33 και επιβεβαιώστε.

    Απάντηση: Μπροστά και μετά όπισθεν με σταθερή επιτάχυνση.

ΣΗΜΕΙΩΣΗ: Η ευθύγραμμη επιταχυνόμενη κίνηση (με α = 33 μονάδες) του Thymio μπορεί να προγραμματιστεί αξιοποιώντας το block subroutine <όνομα> όπως δείχνεται στον παρακάτω κώδικα:

thymio8_6

thymio8_7

Αυτό που μας ενδιαφέρει εδώ είναι ο προγραμματισμός της δυνατότητας να ελέγχουμε την ομαλά επιταχυνόμενη κίνηση του ρομπότ με τα κουμπιά αφής που διαθέτει το Thymio. Σ’ αυτήν την περίπτωση χρησιμοποιούμε το block {on <motor> updated} το οποίο ενσωματώνει τρεις εντολές οι οποίες αναφέρονται στο άγγιγμα των κουμπιών αφής «μπροστά / πίσω / στοπ» και καταλήγουμε στο πρόγραμμα:

thymio8_8

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

Για όσους ενδιαφέρονται περισσότερο θα πρέπει να τονιστεί ότι υπάρχει η δυνατότητα να «διαβάζουμε» τις τιμές των μεταβλητών, που εμείς ορίζουμε κάθε φορά, μέσα από το πρόγραμμα ASEBA που συνοδεύει το ρομποτάκι.

Ας δούμε αυτό το θέμα από πιο κοντά:

Έστω ότι δουλέψαμε με το παραπάνω πρόγραμμα σε BLOCKLY και ολοκληρώσαμε τον πειραματισμό μας με το ρομποτάκι. Μπορούμε να κλείσουμε το παράθυρο του BLOCKLY και να επικεντρώσουμε το ενδιαφέρον μας στο «Text Programming».

Φορτώνω το πρόγραμμα στο ρομποτάκι (Load) και πατάω το κουμπί (Run) φροντίζοντας ταυτόχρονα στο πλαίσιο Variables να επιλέξω το <auto>. Έτσι, θα μπορώ να βλέπω ταυτόχρονα τόσο «το τι κάνει το ρομποτάκι» όσο και τις τιμές των μεταβλητών χρόνου, ταχύτητας και επιτάχυνσης: <time>, <speed>, <acc2>.

thymio8_9

Πρόκειται για ένα εξαιρετικό εργαλείο που μας εξυπηρετεί και στη διαμόρφωση του κώδικα αλλά και στην εξαγωγή ποικίλων συμπερασμάτων αναφορικά με τη συμπεριφορά του Thymio.

thymio8_10

Για να εκτελέσει το ρομποτάκι μια ομαλά επιταχυνόμενη κίνηση, όπως γνωρίσαμε προηγούμενα, έχουμε ανάγκη από έναν σταθερό «μηχανισμό» μέτρησης των δευτερολέπτων που διαθέτει το Thymio (βλέπε block {on <temperature> updated}.

Σκέφτηκα ότι θα μπορούσε το τηλεκοντρόλ να μας βοηθήσει προς αυτήν την κατεύθυνση: για παράδειγμα, γιατί να μην χρησιμοποιήσω το κουμπί <μπροστά> έτσι ώστε με το πάτημά του να αυξάνει την ταχύτητα κατά μια ποσότητα και μετά από κάποιο χρονικό διάστημα να το επαναλαμβάνω; Έτσι, η ταχύτητα θα μεταβάλλεται κατά βούληση και με το ρυθμό που εμείς επιθυμούμε, όμως η κίνηση δεν θα είναι «ομαλά επιταχυνόμενη»!

Με το πάτημα του κουμπιού <μπροστά>/ <πίσω> η ταχύτητα αυξάνει κατά + ή – 12 μονάδες. Με τα κουμπιά αριστερά / δεξιά μπορώ να μεταβάλλω την ταχύτητα περιστροφής του ρομπότ γύρω από τους αντίστοιχους τροχούς.

Μ’ αυτές τις προδιαγραφές έφτιαξα το παρακάτω προγραμματάκι και στη συνέχεια πειραματίστηκα με τα πέντε κουμπιά του τηλεκοντρόλ.

thymio8_11

Μετά τη χρήση των κουμπιών αφής και του τηλεχειριστήριου για τον έλεγχο μιας επιταχυνόμενης κίνησης του κινητού – ρομπότ Thymio, έρχεται η σειρά της αξιοποίησης των επτά αισθητήρων απόστασης (βλέπε την ανάρτηση στο Eduportal Ας πειραματιστούμε με τους επτά “Οριζόντιους αισθητήρες απόστασης” κατάλληλους για την ανίχνευση εμποδίων (4η Δραστηριότητα) ).

Υπενθυμίζω ότι το προγραμματιστικό περιβάλλον BLOCKLY διαθέτει το block {on <proximity sensors > updated} καθώς και εντολές ανίχνευσης εμποδίων που βρίσκονται κοντά στο ρομποτάκι.

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

  1. i) —με το που πλησιάζω το δάχτυλό μου στο μπροστινό δεξιό ή αριστερό αισθητήρα

                                             ΤΟΤΕ

η ταχύτητα να μεγαλώνει κατά μια επιθυμητή ποσότητα

  1. ii) —με το που πλησιάζω το δάχτυλό μου στον οπίσθιο δεξιό ή αριστερό αισθητήρα

                                             ΤΟΤΕ

η ταχύτητα να  μικραίνει κατά μια επιθυμητή ποσότητα.

thymio8_12

Παρατήρηση 1: Για όσο χρονικό διάστημα προσεγγίζω τους αισθητήρες παρατηρώ ότι η ταχύτητα των τροχών αυξάνει ολοένα και περισσότερο.
Παρατήρηση 2: Εννοείται ότι και σ’ αυτήν την περίπτωση μπορώ να παρακολουθώ τις τιμές της μεταβλητής <speed> αλλά και τις τιμές των αισθητήρων απόστασης.