ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Τασολάµπρου Σταυρούλα Α.Ε.Μ 1349 Εισαγωγή στον Προγραµµατισµό µε δραστηριότητες Εκπαιδευτικής Ροµποτικής:Χρήση της RobotC (Introduction to Programming with Educational Robotics:The use of RobotC) Επιβλέπων: ΣΤΑΥΡΟΣ ΗΜΗΤΡΙΑ ΗΣ Επίκουρος Καθηγητής ΘΕΣΣΑΛΟΝΙΚΗ, 2010
ΚΕΦΑΛΑΙΟ 1: ΕΚΠΑΙΔΕΥΤΙΚΗ ΡΟΜΠΟΤΙΚΗ... 6 1.1 ΕΙΣΑΓΩΓΗ... 6 1.2 ΕΚΠΑΙΔΕΥΤΙΚΗ ΑΞΙΟΠΟΙΗΣΗ... 6 1.3 LEGO MINDSTORMS... 7 1.3.1 Υποστηριζόμενες Γλώσσες προγραμματισμού... 9 1.3.2 Δημοφιλείς Γλώσσες τρίτων κατασκευαστών... 9 1.4 LEGO MINDSTORMS ΝΧΤ... 9 1.4.1 Η ανανέωση των Ρομπότ... 9 1.4.2 Λογισμικό LABVIEW... 9 1.4.3 Απεικόνιση του ΝΧΤ Ανάλυση των μερών που το αποτελούν... 10 1.4.4 Θύρες Μηχανών... 10 Motorports (κινητήρες)...10 Sensor ports (αισθητήρες)...10 USB port (θύρα USB)...10 1.4.5 NXT κουμπιά... 10 1.4.6 Υλικό του NXT... 11 ΑΙΣΘΗΤΗΡΑΣ ΑΦΗΣ(TOUCH SENSOR)...11 ΑΙΣΘΗΤΗΡΑΣ ΗΧΟΥ(SOUND SENSOR)...12 ΑΙΣΘΗΤΗΡΑΣ ΦΩΤΟΣ(LIGHT SENSOR)...13 ΑΙΣΘΗΤΗΡΑΣ ΥΠΕΡΗΧΩΝ (ULTRASONIC SENSOR)...14 ΣΕΡΒΟΜΗΧΑΝΕΣ (SERVO MOTORS)...14 ΑΙΣΘΗΤΗΡΑΣ ΠΕΡΙΣΤΡΟΦΗΣ...15 ΚΕΦΑΛΑΙΟ 2: ΠΑΡΟΥΣΙΑΣΗ ΙΔΙΟΤΗΤΩΝ ΤΩΝ ΠΡΟΣΦΕΡΟΜΕΝΩΝ ΠΕΡΙΒΑΛΛΟΝΤΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΤΟΥ NXT... 16 2.1 ΤΟ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ LEGO MINDSTORMS... 16 2.2 ROBOTC... 19 2.3 NXC... 22 2.4 NBC... 23 2.5 ROBOLAB... 24 2.6 NXJ... 25 2.7 PBLUA... 27 2.8 LEJOS OSEK... 30 ΚΕΦΑΛΑΙΟ 3: ROBOTC... 32 3.1 ΕΓΚΑΤΑΣΤΑΣΗ ΚΑΙ ΑΠΕΓΚΑΤΑΣΤΑΣΗ ΤΗΣ ROBOTC... 33 3.2 ΑΠΑΙΤΗΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ... 34 3.3 ROBOTC FOR MINDSTORMS - SELECT CONTROLLER... 35 3.4 ROBOTC FOR MINDSTORMS - SAMPLE PROGRAMMES... 36 3.5 ROBOTC FOR MINDSTORMS - DOWNLOAD FIRMWARE... 37 3.6 ROBOTC FOR MINDSTORMS - COMPILING AND DOWNLOADING... 40 3.7 ROBOTC FOR MINDSTORMS - INTERFACE... 44 3.7.1 ROBOTC for MINDSTORMS - Code editor... 45 RobotC for Mindstorms-Writing code...45 RobotC for Mindstorms-Error Display(Εμφάνιση λάθους)...45 RobotC for Mindstorms-Breakpoints...46 RobotC for Mindstorms-Bookmarks...48 3.7.2 ROBOTC for MINDSTORMS - Status Bar(Γραμμή κατάστασης)... 50 3.7.3 ROBOTC for MINDSTORMS - Code Template(πρότυπο κώδικα)... 50 3.7.4 ROBOTC for MINDSTORMS - Toolbar(Γραμμή Εργαλείων)... 50 3.7.5 ROBOTC for MINDSTORMS - Menu(Γραμμή Μενού)... 50 File...50 Edit...51 View...52 Robot...52 Window...54 3.8 NXT BRICK MENU... 54 3.8.1 ROBOTC for MINDSTORMS Preferences... 54 2
3.8.2 ROBOTC for MINDSTORMS - Text Message Link... 55 3.9 BLUETOOTH ΚΑΙ NXT... 56 3.9.1 ROBOTC for MINDSTORMS - Bluetooth... 56 3.9.2 ROBOTC for MINDSTORMS - Συνδέοντας δύο NXT Bricks... 57 3.10 DEBUGGER WINDOWS... 57 3.10.1 ROBOTC for MINDSTORMS - Program Debugging... 57 3.10.2 ROBOTC for MINDSTORMS - Global Variables... 58 3.10.3 ROBOTC for MINDSTORMS - NXT Remote Screen... 60 3.11 ΛΕΙΤΟΥΡΓΙΕΣ ΤΟΥ NXT ΣΤΟ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ ROBOTC... 61 3.11.1 ROBOTC for MINDSTORMS - Battery and Power Control... 61 3.11.2 ROBOTC for MINDSTORMS Bluetooth... 62 3.11.3 ROBOTC for MINDSTORMS - Math... 62 3.11.4 ROBOTC for MINDSTORMS - Display... 62 3.11.5 ROBOTC for MINDSTORMS - Messaging... 63 3.11.6 ROBOTC for MINDSTORMS - Motors... 64 3.11.7 ROBOTC for MINDSTORMS - Sensors... 66 3.11.8 ROBOTC for MINDSTORMS - Sound... 69 3.11.9 ROBOTC for MINDSTORMS Timing... 71 ΚΕΦΑΛΑΙΟ 4: ΦΥΛΛΑ ΕΡΓΑΣΙΑΣ ΚΑΙ ΣΧΕΔΙΑ ΜΑΘΗΜΑΤΟΣ ΓΙΑ ΤΗΝ ΠΛΑΤΦΟΡΜΑ ROBOTC... 73 4.1 ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΑΤΦΟΡΜΑ ROBOTC... 75 4.1.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ... 75 4.1.2 ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ... 89 4.1.3 ΑΞΙΟΛΟΓΗΣΗ... 96 4.2 ΜΕΤΑΒΛΗΤΗ... 98 4.2.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ... 98 4.2.2 ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ... 106 4.2.3 ΑΞΙΟΛΟΓΗΣΗ... 112 4.3 ΔΟΜΗ ΕΠΑΝΑΛΗΨΗΣ... 114 4.3.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ... 114 4.3.2 ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ... 135 4.3.3 ΑΞΙΟΛΟΓΗΣΗ... 144 4.4 ΔΟΜΗ ΕΠΙΛΟΓΗΣ... 146 4.4.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ... 146 4.4.2 ΣΧΕΔΙΟ ΜΑΘΗΜΑΤΟΣ... 156 4.4.3 ΑΞΙΟΛΟΓΗΣΗ... 161 4.5 ΔΥΣΚΟΛΙΕΣ ΚΑΤΑ ΤΗΝ ΕΚΜΑΘΗΣΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΤΩΝ LEGO MINDSTORMS 162 ΚΕΦΑΛΑΙΟ 5: ΣΥΜΠΕΡΑΣΜΑΤΑ... 163 5.1 ΜΑΘΗΜΑΤΑ ΡΟΜΠΟΤΙΚΗΣ... 163 5.2 ΑΝΑΛΥΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΩΝ ΜΑΘΗΜΑΤΩΝ... 163 5.3 ΤΕΛΙΚΗ ΔΡΑΣΤΗΡΙΟΤΗΤΑ... 218 3
Περίληψη Αντικείµενο της παρούσας διπλωµατικής εργασίας είναι η περιγραφή της πλατφόρµας RobotC και η παρουσίαση µίας διδακτικής προσέγγισης,η οποία συνδυάζει τη µάθηση µε το παιχνίδι, για υποστήριξη µαθητών δευτεροβάθµιας εκπαίδευσης στην εκµάθηση βασικών εννοιών προγραµµατισµού.ο αρχικός µας στόχος είναι η πλήρης ανάλυση του περιβάλλοντος της πλατφόρµας,ενώ ο επόµενος στόχος είναι η δηµιουργία ολοκληρωµένου εκπαιδευτικού υλικού(φύλλα εργασίας),το οποίο θα είναι διαθέσιµο προς χρήση για τη διδασκαλία του προγραµµατισµού µε τη χρήση των ροµπότ. Η παρούσα εργασία χωρίζεται σε 5 κεφάλαια. Αρχικά,γίνεται µία εισαγωγή στην εκπαιδευτική ροµποτική και την εξέλιξη των Lego Mindstorms.Στη συνέχεια,γίνεται αναφορά στο hardware του NXT,αναλύοντας τον κάθε αισθητήρα και τη λειτουργία του. Στο δεύτερο κεφάλαιο παρουσιάζονται κύρια πλεονεκτήµατα και µειονεκτήµατα των προσφερόµενων περιβαλλόντων προγραµµατισµού του NXT,καθώς και σηµαντικές ιδιότητες,ενώ γίνεται και µία σηµαντική σύγκριση των πλατφορµών µεταξύ τους. Στο τρίτο κεφάλαιο,γίνεται ανάλυση της πλατφόρµας RobotC,µία γνωριµία και εξοικείωση µε το περιβάλλον.παρουσιάζονται αναλυτικά τα βήµατα για βασικές λειτουργίες της RobotC(όπως για παράδειγµα η φόρτωση του firmware) καθώς και λειτουργίες του NXT στο περιβάλλον. Οι δυσκολίες που συναντούν οι αρχάριοι προγραµµατιστές αποτέλεσαν και κίνητρο για την αναζήτηση νέων µεθόδων διδασκαλίας για τα εισαγωγικά µαθήµατα προγραµµατισµού.στο τέταρτο κεφάλαιο,λοιπόν,προτείνεται µία µέθοδος διδασκαλίας του προγραµµατισµού που στηρίζεται στην καθοδήγηση των ροµπότ Lego Mindstorms, από προγράµµατα που συντάσσονται µε τη βοήθεια του προγραµµατιστικού περιβάλλοντος RobotC.Στην ενότητα αυτή εκτός από τα φύλλα εργασίας,περιγράφεται η µεθοδολογία που χρησιµοποιήθηκε κατά τη διάρκεια των µαθηµάτων,οι δραστηριότητες που πραγµατοποιήθηκαν σε ότι αφορά τον τρόπο διεξαγωγής και τα εκπαιδευτικά εργαλεία που χρησιµοποιήθηκαν.τέλος,παρουσιάζονται και φύλλα αξιολόγησης που δίνονται στους µαθητές. Στο πέµπτο και τελευταίο κεφάλαιο,καταγράφονται παρατηρήσεις µέσα από την προσωπική µας εµπειρία στο µάθηµα.ένα φύλλο εργασίας µε ασκήσεις σχετικά µε την πλατφόρµα NXT software παρουσιάζεται στους µαθητές,ενώ σηµειώνονται συµπεράσµατα κατά τη διάρκεια της τελικής αυτής πρόκλησης. 4
Abstract Subject of this work is to describe the platform of Lego Mindstorms,RobotC,and to present a didactic approach that combines learning and entertainment to introduce students of secondary education to basic concepts of programming.our main objective is the full environmental analysis platform and the next objective is to develop learning material worksheets for introducing students to the concepts of programming through the use of robots. This work is divided into five chapters. Firstly,there is an introduction to educational robotics and the development of Lego Mindstorms.Then it refers to the hardware of the NXT,analyzing each sensor and its operation. The second chapter,presents the main advantages and disadvantages of programming environments that NXT offers,and important properties,while making a significant comparison between platforms. The third chapter, analyzes the platform RobotC,an acquaintance and familiarity with the environment.this chapter informs us about the steps for basic functions of RobotC(such as loading the firmware). The difficulties encountered by novice programmers were motivated to seek new methods for teaching the introductory programming classes.in the fourth chapter,therefore,proposed a method of teaching programming, based on programs using the programming environment RobotC.This section outlines the method used during the lessons,activities undertaken in terms of the pattern and educational tool used.also,presented and evaluation sheets to be given to students. In the fifth and final chapter,record observations through our personal experience in class.a worksheet with exercises on the NXT software platform is presented to students and conclusions indicated during this final challenge. 5
ΚΕΦΑΛΑΙΟ 1: ΕΚΠΑΙ ΕΥΤΙΚΗ ΡΟΜΠΟΤΙΚΗ 1.1 ΕΙΣΑΓΩΓΗ Η ιδέα των προγραµµατιζόµενων ροµποτικών κατασκευών ξεκίνησε µε τη χελώνα της Logo από τα τέλη της δεκαετίας του '60. Οι χελώνες αυτές συνδέονταν µε τον υπολογιστή µε ένα καλώδιο και µπορούσαν να κινούνται στο πάτωµα ανάλογα µε τις εντολές που λάµβαναν. Σήµερα ποικιλία δοµικών στοιχείων και ηλεκτρονικών εξαρτηµάτων χρησιµοποιούνται για τη σύνθεση ροµποτικών κατασκευών, ενώ η ανάγκη της αυτονοµίας των κατασκευών από τον υπολογιστή οδήγησε στη χρήση προγραµµατιζόµενων κύβων µε ενσωµατωµένους µικροεπεξεργαστές. Το σύστηµα Lego ΝΧΤ προσφέρει ένα ευφυές ελεγχόµενο από υπολογιστή «τούβλο» Lego, που αποτελεί τον εγκέφαλο του εκπαιδευτικού ροµπότ του Lego Mindstorms (http://www.legomindstorms.com), διαδραστικούς κινητήρες, ηχητικούς, υπερηχητικούς και άλλους αισθητήρες, καθώς και µια µεγάλη συλλογή υλικών κατασκευής («τουβλάκια», γρανάζια, τροχαλίες, άξονες κ.λπ.) που δοµούνται γύρω ή πάνω στον µικροεπεξεργαστή (.Αλιµήσης, 2008). 1.2 ΕΚΠΑΙ ΕΥΤΙΚΗ ΑΞΙΟΠΟΙΗΣΗ Στις µέρες µας, ροµπότ και έξυπνα συστήµατα βρίσκονται οπουδήποτε-έξυπνα αυτοκίνητα, έξυπνα σπίτια, κτίρια, τηλέφωνα, ιατροφαρµακευτική τεχνολογία, µηχανές αναζήτησης, συστήµατα ασφαλείας,- είναι δηλαδή τα έξυπνα συστήµατα πανταχού παρόν. Οι µαθητές, σαν καινοτόµοι, οφείλουν να ξέρουν να τα χρησιµοποιούν. Τα ροµπότ γενικότερα συγκεντρώνουν την περιέργεια όλων των ανθρώπων και των ηλικιών. Υπάρχει κάτι που γοητεύει τους ανθρώπους όταν βλέπουν ένα ροµπότ να κινείται τριγύρω παίρνοντας µόνο του αποφάσεις. Αυτή η έλξη µπορεί να οδηγήσει σε έµπνευση και διαφωτισµό. Στην πραγµατικότητα, η ροµποτική σήµερα ολοκληρώνει την εκπαίδευση. Όταν οι µαθητές µαθαίνουν σχετικά µε τη ροµποτική, κερδίζουν εµπειρία στο να διαχειρίζονται έργα, αναλύουν συστήµατα, έχουν πρόσβαση σε πληροφορίες, δουλεύουν σε οµάδες και επιλύουν προβλήµατα. Το πανεπιστήµιο Carnegie Mellon και η Lego δουλεύουν µαζί για να σχεδιάσουν εκπαιδευτικά εργαλεία που προωθούν τη µαθηµατική και κατασκευαστική ικανότητα. Τα παιδιά µαθαίνουν να σχεδιάζουν, να χτίζουν και να προγραµµατίζουν. Αυτά τα έργα µεταφέρουν τα παιδιά από τη µέτρηση στην ανάλυση, από τον υπολογισµό στην επικοινωνία και από την ατοµική εργασία στη συνεργατική. Σήµερα, τα περισσότερα γυµνάσια και λύκεια χρησιµοποιούν MINDSTORMS και άλλα ροµπότ, πέρα του NXT, για να εισάγουν έννοιες ελέγχου(r.shoop,2008). Η εκπαιδευτική δυναµική των προγραµµατιζόµενων ροµποτικών κατασκευών Lego Mindstorms συνίσταται στη δυνατότητα που προσφέρει στους µαθητές να συνθέσουν µια µηχανική οντότητα (π.χ. ένα µοντέλο αυτοκινήτου) και να την κατευθύνουν µε τη βοήθεια ενός απλού και εύχρηστου προγραµµατιστικού περιβάλλοντος. Το πακέτο Lego Mindstorms, αν αξιοποιηθεί κατάλληλα, µπορεί να υποστηρίξει τη δηµιουργία ενός περιβάλλοντος εποικοδοµητικής µάθησης (constructive learning) που θα παρέχει αυθεντικές εκπαιδευτικές δραστηριότητες ενταγµένες σε διαδικασίες επίλυσης 6
ανοιχτών προβληµάτων από τον πραγµατικό κόσµο, θα ενθαρρύνει την έκφραση και την προσωπική εµπλοκή στη µαθησιακή διαδικασία και θα υποστηρίζει την κοινωνική αλληλεπίδραση. Με τα Lego Mindstorms γίνονται πράξη οι ιδέες του S. Papert για «µαστόρεµα της γνώσης» (constructionism): τα παιδιά οικοδοµούν πιο αποτελεσµατικά τη γνώση όταν εµπλέκονται ενεργά στη σχεδίαση και κατασκευή (χειρωνακτική και ψηφιακή) πραγµατικών αντικειµένων που έχουν νόηµα για τους ίδιους, είτε αυτά είναι κάστρα από άµµο, είτε κατασκευές Lego και προγράµµατα υπολογιστών (Papert, 1991). Η σχεδίαση δραστηριοτήτων µε τις ροµποτικές κατασκευές Lego Mindstorms συνδέεται µε την εκπλήρωση ενός έργου µε στόχο την επίλυση ενός προβλήµατος. Σε ένα τέτοιο µαθησιακό περιβάλλον η µάθηση καθοδηγείται από το προς επίλυση πρόβληµα. Προκειµένου να εµπλέξουµε τους µαθητές σε δραστηριότητες σχεδίασης και κατασκευής πραγµατικών αντικειµένων, δηλαδή ροµποτικών κατασκευών που έχουν νόηµα για τους ίδιους και τους γύρω τους, θα πρέπει να επινοήσουµε δραστηριότητες που θα προτρέπουν τους µαθητές να κατασκευάσουν αλλά συγχρόνως να τους ενθαρρύνουµε και να τους υποστηρίξουµε κατάλληλα ώστε να πειραµατιστούν και να διερευνήσουν ιδέες που διέπουν τις κατασκευές τους (Rensick & Silverman, 2005). Οι δραστηριότητες αυτές είναι συνήθως διαθεµατικές και µπορούν να ενταχθούν στα σχολικά µαθήµατα της τεχνολογίας, των φυσικών επιστηµών και της πληροφορικής, τόσο στην πρωτοβάθµια όσο και στη δευτεροβάθµια εκπαίδευση (.Αλιµήσης, 2008). Εικόνα 1.1 Το προγραµµατιζόµενο «τούβλο» RCX της 1ης γενιάς (1998) και το πιο σύγχρονο NXT της 2ης γενιάς (2006) 1.3 Lego Mindstorms Τα Lego Mindstorms είναι µια γραµµή παραγωγής της Lego που συνδυάζει προγραµµατίσηµα τούβλα µε ηλεκτρικές µηχανές, αισθητήρες, τούβλα Lego, και τεχνικά κοµµάτια Lego (όπως εργαλεία, άξονες, ακτίνες, και υδραυλικά µέρη)κατάλληλα για να χτίσει ο χρήστης ροµπότ και άλλα αυτοµατοποιηµένα ή διαλογικά συστήµατα. Η πρώτη λιανική έκδοση Lego Mindstorms κυκλοφόρησε το 1998 και πωλήθηκε εµπορικά µε την επωνυµία Robotics Invention System (RIS). Η τρέχουσα έκδοση κυκλοφόρησε το 2006 ως Lego Mindstorms NXT. Η αρχική Mindstorms Robotics Invention System περιείχε δύο µηχανές, δύο αισθητήρες αφής, και έναν αισθητήρα φωτός. Η έκδοση NXT έχει τρεις 7
σερβοµηχανές και τέσσερις αισθητήρες για την αφή, το φως, τον ήχο, και την απόσταση. Τα Lego Mindstorms µπορούν να χρησιµοποιηθούν για να κατασκευαστεί ένα µοντέλο ενσωµατωµένου συστήµατος µε ηλεκτροµηχανικά µέρη ελεγχόµενα από υπολογιστή. Πολλά είδη πραγµατικών ενσωµατωµένων συστηµάτων, από ελεγκτές ανελκυστήρων έως βιοµηχανικά ροµπότ, µπορούν να διαµορφωθούν χρησιµοποιώντας τα Mindstorms. Τα Mindstorms kits πωλούνται επίσης και χρησιµοποιούνται ως εκπαιδευτικό εργαλείο, αρχικά µέσω µιας συνεργασίας µεταξύ της Lego και του MIT Media Laboratory. Η εκπαιδευτική έκδοση των προϊόντων καλείται Lego Mindstorms for Schools, και έρχεται µε το βασισµένο σε γραφική διεπαφή λογισµικό προγραµµατισµού ROBOLAB, που αναπτύχθηκε στο Πανεπιστήµιο Tufts χρησιµοποιώντας ως µηχανή το National Instruments LabVIEW. Εικόνα 1.2 Robotics Invention System - RCX brick First-generation RCX programmable brick. Η πρώτη γενιά LEGO Mindstorms χτίστηκε γύρω από το κοµµάτι της LEGO µε τη µορφή τούβλου γνωστό ως RCX. Περιέχει έναν µικροελεγκτή Renesas H8/300 ως εσωτερική ΚΜΕ του. Το τούβλο προγραµµατίζεται µε τη µεταφόρτωση ενός προγράµµατος (που γράφεται σε µια από διάφορες διαθέσιµες γλώσσες προγραµµατισµού) από ένα PC ή MAC στη RAM του τούβλου µέσω µιας ειδικής υπέρυθρης διεπαφής (IR). Αφότου αρχίσει ο χρήστης ένα πρόγραµµα, µια δηµιουργία RCX Mindstorms µπορεί να λειτουργήσει από µόνη της, ενεργώντας στα εσωτερικά και εξωτερικά ερεθίσµατα σύµφωνα µε τις προγραµµατισµένες οδηγίες. Επίσης, δύο ή περισσότερα τούβλα RCX µπορούν να επικοινωνήσουν το ένα µε το άλλο µέσω της διεπαφής IR, επιτρέποντας τη συνεργασία ή τον ανταγωνισµό µεταξύ των τούβλων. Εκτός από τη θύρα IR, υπάρχουν τρεις θύρες εισαγωγής αισθητήρων και τρεις θύρες σύνδεσης µηχανών (επίσης χρησιµοποιήσιµες για τους λαµπτήρες, κ.λπ.). Υπάρχει επίσης µία LCD που µπορεί να επιδείξει το επίπεδο φόρτισης των µπαταριών, την κατάσταση των θυρών εισόδουεξόδου, το ποιο πρόγραµµα εκτελείται, καθώς και άλλες πληροφορίες. Τα τούβλα RCX έκδοσης 1.0 διαθέτουν µία παροχή ρεύµατος για να επιτρέπουν τη συνεχή λειτουργία αντί της λειτουργίας περιορισµένου χρόνου κατά τη χρησιµοποίηση µπαταριών. Στην έκδοση RCX 2.0, η παροχή ρεύµατος αφαιρέθηκε. Τα τούβλα RCX µε παροχή ρεύµατος είναι δηµοφιλή για τα στατικά προγράµµατα ροµποτικής (όπως τα ροµπότ βραχίονες) ή για τα πρότυπα µοντέλα τρένων Lego. 8
1.3.1 Υποστηριζόµενες Γλώσσες προγραµµατισµού RCX Code (περιέχεται στις Mindstorm εκδόσεις λιανικής) ROBOLAB (βασίζεται στο LabVIEW και αναπτύχθηκε στο Tufts University) 1.3.2 ηµοφιλείς Γλώσσες τρίτων κατασκευαστών C and C++ under BrickOS (formerly LegOS) Java under lejos or TinyVM NQC ("Not Quite C") pbforth (επεκτάσεις της Forth γλώσσας προγραµµατισµού) Visual Basic (µέσω του COM+ interface παρεχόµενο µε το CD) RobotC (νέα γλώσσα συµβατή µε την έκδοση NXT ) 1.4 Lego Mindstorms ΝΧΤ 1.4.1 Η ανανέωση των Ροµπότ Με τη νέα γενιά ΝΧΤ,, η Lego προχωρεί ένα βήµα πιο πέρα από την επανάσταση των «οικιακής κατασκευής» ροµπότ που η ίδια είχε ξεκινήσει πριν από οκτώ χρόνια µε τα Lego Mindstorms. Πολύ πιο εύκολα και γρήγορα στην κατασκευή τους, τα kit Mindstorms ΝΧΤ δίνουν τη δυνατότητα στους ερασιτέχνες λάτρεις της ροµποτικής κάθε ηλικίας να φτιάξουν και να προγραµµατίσουν το δικό τους µίνι ροµπότ µέσα σε µόλις 30 λεπτά της ώρας. Η αναπροσαρµογή λογισµικού για το δηµοφιλές σύστηµα εφευρέσεων ροµποτικής LEGO MINDSTORMS NXT απελευθερώνεται. Η νέα έκδοση λογισµικού LEGO MINDSTORMS NXT1.1 τώρα παρέχει την υποστήριξη για Vista και Macintosh Windows. Με τη βελτιωµένη χρήση µνήµης του λογισµικού, το LEGO MINDSTORMS NXT περιλαµβάνει µικρότερα συνταγµένα προγράµµατα και συµπιεσµένα αρχεία. Το ΝΧΤ βασίζεται στο επιτυχηµένο Robotics System Invention της εταιρείας, το οποίο έχει βελτιωθεί µε την πρόσθεση νέων τεχνολογιών και αισθητήρων αυξηµένων ικανοτήτων. Το «τουβλάκι» ΝΧΤ που αποτελεί τον εγκέφαλο του ροµπότ είναι ένας αυτόνοµος µικροεπεξεργαστής των 32 bit (σε αντίθεση µε τα 16 bit της πρώτης γενιάς), ο οποίος µπορεί να προγραµµατιστεί µέσω ηλεκτρονικού υπολογιστή PC ή - άλλη καινοτοµία - Mac. Αφού κατασκευάσει το ροµπότ του, ο χρήστης δηµιουργεί ένα δικό του πρόγραµµα χρησιµοποιώντας ένα εύχρηστο αλλά πλούσιο σε χαρακτηριστικά λογισµικό LabVIEW, το οποίο έχει σχεδιαστεί από τη National Instruments 1.4.2 Λογισµικό LABVIEW Το λογισµικό LEGO MINDSTORMS NXT τροφοδοτείται από το LabVIEW, ένα διαισθητικό γραφικό λογισµικό προγραµµατισµού που χρησιµοποιείται από τους επιστήµονες και τους µηχανικούς παγκοσµίως στα καταναλωτικά προϊόντα σχεδίου, ελέγχου και δοκιµής και τα συστήµατα όπως MP3 9
και DVD, τα κινητά τηλέφωνα, και τα συστήµατα ασφάλειας αερόσακων οχηµάτων (http://www.ni.com/labview/). 1.4.3 Απεικόνιση του ΝΧΤ Ανάλυση των µερών που το αποτελούν Το NXT είναι ο εγκέφαλος ενός ροµπότ MINDSTORMS. Είναι ένα ευφυές, ελεγχόµενο από υπολογιστή τούβλο LEGO που δίνει τη δυνατότητα σε ένα ροµπότ MINDSTORMS να ζωντανέψει και να εκτελέσει τις διαφορετικές διαδικασίες (http://www.edc.uoc.gr/~sanagn/wordpress/?tag=nxt). Εικόνα 1.3 Εγκέφαλος ενός ροµπότ NXT 1.4.4 Θύρες Μηχανών Motorports (κινητήρες) Το NXT έχει τρεις θύρες εξόδου για την ένωση των µηχανών θύρες Α, Β και C. Sensor ports (αισθητήρες) Το NXT έχει τέσσερις θύρες εισόδου για την ένωση των αισθητήρων - θύρες 1, 2, 3 και 4. USB port (θύρα USB) Συνδέστε ένα καλώδιο USB µε τη θύρα USB και µεταφορτώστε τα προγράµµατα από τον υπολογιστή σας στο NXT (ή φορτώστε τα στοιχεία από το ροµπότ στον υπολογιστή σας). Μπορείτε επίσης να χρησιµοποιήσετε την ασύρµατη σύνδεση Bluetooth για το φόρτωµα και τη µεταφόρτωση. 1.4.5 NXT κουµπιά Πορτοκαλί κουµπί:on/enter/run Γκρι Βέλη: Χρησιµοποιούνται για να κινηθεί ο χρήστης αριστερά και δεξιά στο µενού του NXT. Γκρι κουµπί: Χρησιµοποιείται για να πάει το χρήστη πίσω(clear). 10
Εικόνα 1.4 Μέρη εγκεφάλου ΝΧΤ 1.4.6 Υλικό του NXT ΑΙΣΘΗΤΗΡΑΣ ΑΦΗΣ(TOUCH SENSOR) Εικόνα 1.5 Αισθητήρας Αφής Ο αισθητήρας αφής δίνει στο ροµπότ σας την αίσθηση της αφής. Ο αισθητήρας αφής ανιχνεύει πότε πιέζεται από κάτι και πότε απελευθερώνεται πάλι. Εικόνα 1.6 Επεξήγηση µορφών πιέσεων του αισθητήρα αφής. Προτάσεις χρήσης: Μπορείτε να χρησιµοποιήσετε τον αισθητήρα αφής για να κάνετε το ροµπότ σας να κρατά πράγµατα, για παράδειγµα ένας ροµποτικός βραχίονας που εξοπλίζεται µε έναν αισθητήρα αφής ενηµερώνει το ροµπότ εάν υπάρχει ή όχι κάτι στο βραχίονά του και στη συνέχεια το αρπάζει. Επίσης, µπορείτε να χρησιµοποιήσετε έναν αισθητήρα αφής για να κάνετε το ροµπότ σαν να εκτελέσει 11
µια εντολή, παραδείγµατος χάριν, µε τη πίεση του αισθητήρα αφής µπορείτε να κάνετε το ροµπότ σας να περπατήσει, να µιλήσει, να κλείσει µια πόρτα, ή να ανοίξει τη TV σας. ΑΙΣΘΗΤΗΡΑΣ ΗΧΟΥ(SOUND SENSOR) Εικόνα 1.7 Αισθητήρας Ήχου Ο αισθητήρας ήχου µπορεί να ανιχνεύσει τόσο decibels [DB], όσο και ρυθµισµένο decibel [DBA]. Decibel είναι µια µέτρηση της συνήθους έντασης ήχου. Στην ανίχνευση ρυθµισµένων decibels, η ευαισθησία του αισθητήρα προσαρµόζεται στην ευαισθησία του ανθρώπινου αυτιού. Με άλλα λόγια, ανιχνεύει ήχους που τα αυτιά σας είναι σε θέση να ακούσουν. Ο αισθητήρας ήχου µπορεί να µετρήσει τα επίπεδα ηχητικής έντασης µέχρι 90 DB. Τα επίπεδα έντασης ήχου είναι εξαιρετικά περίπλοκα, έτσι οι αναγνώσεις αισθητήρων στο MINDSTORMS NXT επιδεικνύονται σε ποσοστό [%]. Όσο χαµηλότερα τα ποσοστά τόσο πιο ήρεµος ο χώρος µέτρησης. Για παράδειγµα: 4-5% είναι όπως ένα σιωπηλό καθιστικό 5-10% θα ήταν κάποιος που µιλά από κάποια απόσταση µακριά 10-30% είναι κανονική συνοµιλία κοντά στον αισθητήρα ή µουσική που παίζεται σε κανονικό επίπεδο 30-100% είναι όπως ακούγεται µουσική που παίζεται σε µεγάλη ένταση οκιµή για τη δυνατότητα του αισθητήρα ήχου να διαβάζει τον ήχο της φωνής. Εικόνα 1.8 οκιµή λειτουργίας αισθητήρα ήχου 12
ΑΙΣΘΗΤΗΡΑΣ ΦΩΤΟΣ(LIGHT SENSOR) Εικόνα 1.9 Αισθητήρας Φωτός Ο αισθητήρας φωτός είναι ένας από τους δύο αισθητήρες που δίνουν όραση στο ροµπότ σας [ο υπερηχητικός αισθητήρας είναι ο άλλος]. Ο αισθητήρας φωτός επιτρέπει στο ροµπότ σας να διακρίνει µεταξύ του φωτός και του σκοταδιού. Μπορεί να διαβάσει την ένταση του φωτός σε ένα δωµάτιο και να µετρήσει την φωτεινή ένταση των χρωµατισµένων επιφανειών. Εικόνα 1.10 Αναλογία όρασης ανθρώπου ροµπότ. Προτάσεις χρήσης: Μπορείτε να χρησιµοποιήσετε τον αισθητήρα φωτός για να κάνετε ένα ροµπότ συναγερµό διαρρηκτών, δηλαδή, όταν ένας εισβολέας ανοίγει το φως στο δωµάτιό σας το ροµπότ µπορεί να αντιδράσει για να υπερασπίσει την ιδιοκτησία σας. Μπορείτε επίσης να χρησιµοποιήσετε τον αισθητήρα φωτός για να κάνετε το ένα ροµπότ να ταξινοµήσει πράγµατα κατά το χρώµα. Εξετάστε τη δυνατότητα του αισθητήρα φωτός να διαβάσει το περιβαλλοντικό φως µε τη µέτρηση του επιπέδου φωτός στις διαφορετικές θέσεις του δωµατίου. Παραδείγµατος χάριν, κρατήστε αρχικά τον αισθητήρα απέναντι στο παράθυρο και κατόπιν κρατήστε τον στο πλαίσιο ενός πίνακα. Ο χρήστης µπορεί να δοκιµάσει τον αισθητήρα φωτός συνδέοντάς τον στο NXT, στη συνέχεια ανοίγοντας το ροµπότ και τοποθετώντας τον αισθητήρα πάνω από διαφορετικά χρώµατα µπορεί να δει τις αναγνώσεις που κάνει. Εικόνα 1.11 οκιµή Αισθητήρα. 13
ΑΙΣΘΗΤΗΡΑΣ ΥΠΕΡΗΧΩΝ (ULTRASONIC SENSOR) Εικόνα 1.12 Αισθητήρας Υπερήχων Ο αισθητήρας υπέρηχων είναι ένας από τους δύο αισθητήρες που δίνουν όραση στο ροµπότ σας [ο αισθητήρας φωτός είναι ο άλλος]. Ο υπερηχητικός αισθητήρας επιτρέπει στο ροµπότ σας για να δει και να ανιχνεύσει τα αντικείµενα. Μπορείτε επίσης να τον χρησιµοποιήσετε για να κάνετε το ροµπότ σας να αποφύγει εµπόδια, να έχει την αίσθησης της απόστασης, και να ανιχνεύει τη µετακίνηση. Ο υπερηχητικός αισθητήρας µετρά την απόσταση σε εκατοστόµετρα και σε ίντσες. Είναι σε θέση να µετρήσει τις αποστάσεις από 0 έως 255 εκατοστόµετρα µε ακρίβεια +/- 3 εκατ. Ο υπερηχητικός αισθητήρας µετρά την απόσταση µε τον υπολογισµό του χρόνου που παίρνει σε ένα κύµα για να χτυπήσει ένα αντικείµενο και να επιστρέψει - ακριβώς όπως µια ηχώ. Τα µεγάλου µεγέθους αντικείµενα µε τις σκληρές επιφάνειες επιστρέφουν τις καλύτερες αναγνώσεις. Τα αντικείµενα φτιαγµένα από µαλακό ύφασµα ή τα κυρτά [όπως µια σφαίρα] ή τα πολύ λεπτά ή µικρά µπορεί να είναι δύσκολα για τον αισθητήρα να ανιχνευθούν. Πρέπει να σηµειωθεί ότι δύο ή περισσότεροι Ultrasonic αισθητήρες που λειτουργούν στο ίδιο δωµάτιο µπορεί να µπερδέψουν ο ένας τις αναγνώσεις του άλλου. ΣΕΡΒΟΜΗΧΑΝΕΣ (SERVO MOTORS) Εικόνα 1.13 Σερβοµηχανή Οι τρεις σερβοµηχανές δίνουν στο ροµπότ σας τη δυνατότητα να κινηθούν. Εάν χρησιµοποιήσετε το block κίνησης στο λογισµικό LEGO MINDSTORMS NXT για να προγραµµατίσετε τις µηχανές σας, οι δύο µηχανές θα συγχρονιστούν αυτόµατα, έτσι ώστε το ροµπότ σας να κινηθεί σε µια ευθεία γραµµή. 14
ΑΙΣΘΗΤΗΡΑΣ ΠΕΡΙΣΤΡΟΦΗΣ Κάθε µηχανή έχει έναν ενσωµατωµένο αισθητήρα περιστροφής. Ο αισθητήρας περιστροφής µετρά τις περιστροφές µηχανών σε µοίρες ή πλήρεις περιστροφές [ακρίβεια +/- 1]. Μια περιστροφή είναι ίση µε 360 µοίρες, έτσι εάν θέσετε µια µηχανή να κάνει περιστροφή 180 µοιρών, ο άξονας περιστροφής του θα κάνει µισή στροφή. Ο ενσωµατωµένος αισθητήρας περιστροφής σε κάθε µηχανή σας αφήνει επίσης να θέσετε διαφορετικές ταχύτητες για τις µηχανές σας [µε τον καθορισµό των διαφορετικών παραµέτρων ταχύτητας στο λογισµικό]. 15
ΚΕΦΑΛΑΙΟ 2: ΠΑΡΟΥΣΙΑΣΗ Ι ΙΟΤΗΤΩΝ ΤΩΝ ΠΡΟΣΦΕΡΟΜΕΝΩΝ ΠΕΡΙΒΑΛΛΟΝΤΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΤΟΥ NXT 2.1 Το προγραµµατιστικό περιβάλλον Lego Mindstorms Το σύστηµα Lego ΝΧΤ προσφέρει ένα απλό γραφικό περιβάλλον προγραµµατισµού, που δίνει τη δυνατότητα δηµιουργίας προγραµµατιζόµενων «συµπεριφορών» για τις µηχανικές κατασκευές. Οι προγραµµατιζόµενες «συµπεριφορές» µεταβιβάζονται από τον Η/Υ στη µηχανική κατασκευή µέσω σύνδεσης USB ή Bluetooth µεταξύ του Η/Υ και του µικροεπεξεργαστή των µηχανικών κατασκευών. Το εκπαιδευτικό λογισµικό LEGO MINDSTORMS Education NXT βασίζεται στη χρήση εικονιδίων και είναι µια εκπαιδευτική έκδοση του επαγγελµατικού λογισµικού LabVIEW της National Instruments, λογισµικό που χρησιµοποιούν παγκοσµίως επιστήµονες και µηχανικοί, προκειµένου να σχεδιάσουν, να ελέγξουν και να δοκιµάσουν προϊόντα και συστήµατα. Το λογισµικό έχει µια διαισθητική διεπαφή σύρε και άφησε (drag and drop) και ένα γραφικό προγραµµατιστικό περιβάλλον, το οποίο καθιστά την εφαρµογή προσιτή για έναν αρχάριο, αλλά και εξίσου δυναµική για έναν εξειδικευµένο χρήστη. Οι παλέτες προγραµµατισµού προσφέρουν όλα τα blocks προγραµµατισµού που απαιτούνται για να δηµιουργηθούν τα προγράµµατα. Κάθε block προγραµµατισµού περιλαµβάνει τις οδηγίες που το NXT µπορεί να ερµηνεύσει. Ένα πρόγραµµα δηµιουργείται µε συνδυασµό διαφορετικών blocks. Εικόνα 2.1 Περιβάλλον Lego Mindstorms µε ενδεικτικά πεδία ρυθµίσεων παραµέτρων των blocks. 16
Τα διαθέσιµα εικονίδια-blocks περιλαµβάνουν µεταξύ άλλων block κίνησης (κάνουν τα ροµπότ να κινούνται), block αναµονής (κάνουν το ροµπότ να περιµένει για την ενεργοποίηση των αισθητήρων του ή για τη λήξη ενός οριζόµενου χρονικού διαστήµατος), block επανάληψης (Loop) (το ροµπότ επαναλαµβάνει την ίδια συµπεριφορά όσες φορές ορίσουµε ή µέχρι να ενεργοποιηθεί κάποιος αισθητήρας), block επιλογής (Switch block) (επιτρέπουν στο ροµπότ να παίρνει τις δικές του αποφάσεις). Η πλήρης παλέτα εικονιδίων περιλαµβάνει blocks δράσης που επιτρέπουν τον έλεγχο διάφορων εξωτερικών συσκευών (διαδραστικού κινητήρα, ήχων, λαµπτήρων κ.ά.). Τα blocks ροής επιτρέπουν τη δηµιουργία σύνθετων συµπεριφορών. Περιλαµβάνουν τον έλεγχο για την επανάληψη, την αναµονή και τις συνθήκες µεταβλητών για τη διακοπή συµπεριφοράς ή τον καθορισµό µιας λογικής σειράς σε ένα πρόγραµµα και τη λήψη αποφάσεων για τον προγραµµατισµό αντιδράσεων σε καθορισµένες τιµές των αισθητήρων. Τέλος, το πρόγραµµα προσφέρει «Τα δικά µου blocks» (My Blocks) µε τα οποία ο χρήστης µπορεί να αποθηκεύσει ένα δικό του πρόγραµµα ως ένα µοναδικό block, που µπορεί να το ξαναχρησιµοποιήσει σε άλλο πρόγραµµα (.Αλιµήσης, 2008). Το πρόγραµµα τρέχει σε περιβάλλοντα Windows και Macintosh αλλά όχι σε Linux. Απαιτήσεις συστήµατος: Windows Intel Pentium processor or compatible, 800 MHz minimum Windows XP Professional ή Home Edition µε Service Pack 2 256MB of RAM minimum Πάνω από 300MB διαθεσιµότητα σκληρού δίσκου XGA display (1024x768) 1διαθέσηµη USB θύρα CD-ROM drive Compatible Bluetooth adapter (προαιρετικά)* Macintosh PowerPC G3, G4, G5 processor, 600 MHz minimum Apple MacOS X v. 10.3.9 or 10.4 256MB of RAM minimum Πάνω από 300MB διαθεσιµότητα σκληρού δίσκου XGA display (1024x768) 1διαθέσηµη USB θύρα CD-ROM drive Compatible Bluetooth adapter (προαιρετικά)* 17
Εικόνα 2.2 Περιβάλλον Lego Mindstorms 18
2.2 ROBOTC Η RobotC σχεδιάστηκε σαν ένα εκπαιδευτικό εργαλείο ικανό για καινούριους αλλά και για ήδη εκαπιδευµένους προγραµµατιστές.περιλαµβάνει µία υψηλού επιπέδου εκπαιδευτική λειτουργία και είναι ιδιαίτερα ελκυστική για τους καθηγητές που χρησιµοποιούν ποικίλες πλατφόρµες για να διδάξουν ροµποτική. H RobotC( www.robotc.net ) επιτρέπει να προγραµµατιστεί το NXT χρησιµοποιώντας την πρότυπη γλώσσα C. Αναπτύχθηκε από την ακαδηµία Ροµποτικής στο Πανεπιστήµιο Carnegie Mellon. Όσο αναφορά το firmware τόσο στη πλατφόρµα RobotC, όσο και στη Robolab είναι Standard όπως και σε πολλά άλλα λογισµικά Lego. Εικόνα 2.3 Ιδιότητες RobotC Αναλυτικότερα, µετά το πρώτο βήµα που είναι το χτίσιµο του ροµπότ, σα 2 ο βήµα πρέπει να αποθηκεύσει ο χρήστης ένα πρόγραµµα (firmware) που λειτουργεί σαν ένα λειτουργικό σύστηµα, προκειµένου το ροµπότ να καταλάβει το πρόγραµµα RobotC.Ο χρήστης συνδέει το ροµπότ µε τον υπολογιστή µέσω USB για να αποθηκεύσουµε το πρόγραµµα. Εικόνα 2.4 Σύνδεση ΝΧΤ µε USB 19
Ακόµη, η πλατφόρµα RobotC µπορεί να εγκατασταθεί σε Windows, αλλά όχι σε Linux. Ωστόσο, γίνεται µία προσπάθεια για την εγκατάστασή τους σε MacOSX, η οποία δεν έχει επιτευχθεί ακόµα. Οι γραφικές λύσεις προγραµµατισµού προσφέρουν συνήθως δυνατότητα drag-and-drop ενός " µπλοκ κώδικα". Η ROBOTC έχει µια παρόµοια ικανότητα, µε τη διαφορά ότι έχουµε δυνατότητα "drag and drop" κειµένου. Το αριστερό παράθυρο στην εικόνα περιέχει το "λεξικό" της ROBOTC όπου ενσωµατώνονται οι δυνατότητες ελέγχου. Εικόνα 2.5 Code Template. Άλλες απαιτήσεις συστήµατος: Intel Premium επεξεργαστή 256ΜΒ RAM Πάνω από 30MB σκληρό δίσκο ιαθέσιµη θύρα USB Η ROBOTC απευθύνεται σε αρχάριους και προχωρηµένους χρήστες καθώς έχει "βασική λειτουργία" και " λειτουργία εµπειρογνωµόνων". Στην "βασική λειτουργία" για παράδειγµα πολλές δυνατότητες και τα µενού είναι κρυφά. 20
Εικόνα 2.6 Περιβάλλον RobotC Η ROBOTC διαθέτει ένα ισχυρό διαδραστικό πρόγραµµα εντοπισµού σφαλµάτων σε πραγµατικό χρόνο, που µειώνει σηµαντικά το χρόνο που απαιτείται για το debug των προγραµµάτων. O χρήστης της πλατφόρµας RobotC εξοικειώνεται µε το περιβάλλον και πλεονεκτεί στο να γράφει γρήγορα προγράµµατα, όπως και στο να µαθαίνει προχωρηµένα προγραµµατιστικά σχέδια. Αξίζει να σηµειωθεί ότι, έχουν πραγµατοποιηθεί αρκετά γεγονότα και συζητήσεις για τη συγκεκριµένη πλατφόρµα. Μέχρι σήµερα, πάνω από 2000 µαθητές έχουν διδαχθεί στην τάξη την πλατφόρµα ROBOTC. Στο τέλος του πρώτου µαθήµατος, προγραµµάτιζαν για πρώτη φορά και έτρεχαν τα προγράµµατα τους στο NXT. Στην Ακαδηµία Ροµποτικής Carnegie Mellon University αναπτύχθηκαν βίντεο βήµα-βήµα οδηγιών, που επιτρέπουν στους νέους χρήστες να γίνουν ικανοί προγραµµατιστές γρήγορα. Η πλατφόρµα ROBOTC υποστηρίζει τόσο την NXT και RCX καθώς και προϊόντα από την Innovation FIRST(Swan D.,2007). Η πλατφόρµα RobotC δίνει τη δυνατότητα να επικοινωνεί µε Bluetooth το τουβλάκι µε τον υπολογιστή, τα τουβλάκια µεταξύ τους και το τουβλάκι µε άλλη µηχανή. Είναι µία από τις λίγες πλατφόρµες που υποστηρίζουν τρισδιάστατες µηχανές (http://www.botmag.com/articles/10-31- 07_NXT.shtml). 21
2.3 NXC Η NXC (Not exactly C) είναι µία όµοια µε τη C γλώσσα προγραµµατισµού για τον εγκέφαλο NXT. Τα NXC προγράµµατα αναπτύσσονται χρησιµοποιώντας το περιβάλλον ανάπτυξης Bricx. Το Bricx αρχικά αναπτύχθηκε για το προηγούµενο προϊόν της LEGO, το RCX, και έχει ενισχυθεί για την υποστήριξη και του NXT. Η NXC χρησιµοποιεί το ίδιο firmware µε την NXT-G. Αυτό είναι πολύ βολικό για τους χρήστες που θέλουν να προγραµµατίσουν τόσο σε γραφικό όσο και σε περιβάλλον κειµένου γιατί δεν χρειάζεται να φορτώνουν και να αλλάζουν το firmware κάθε φορά που θέλουν να αλλάξουν τον τύπο του περιβάλλοντος. Μπορούν να αποθηκευτούν και τα δύο NXT-G και NXC προγράµµατα ταυτόχρονα στο ίδιο Brick. Η NXC έχει τους ίδιους περιορισµούς µε την NXT-G. Έχει ακέραιες αλλά όχι πραγµατικές µεταβλητές και δεν έχει ισχυρή µορφοποίηση κειµένου. Ακόµα διαθέτει σύστηµα φακέλων. Το NXT έχει bytecode διερµηνέα (παρέχεται από τη LEGO), που χρησιµοποιείται για την εκτέλεση των προγραµµάτων. Ο NXC µεταγλωττιστής µετατρέπει ένα πηγαίο πρόγραµµα σε NXT bytecodes, το οποίο µπορεί στη συνέχεια να εκτελεστεί. Παρόλο που ο Preprocessor και οι δοµές ελέγχου της NXC είναι παρόµοια µε τη C, η NXC δεν είναι γενικής χρήσης γλώσσα προγραµµατισµού. Υπάρχουν πολλοί περιορισµοί που απορρέουν από εµπόδια του NXT bytecode διερµηνέα. Η NXC ορίζεται ως δύο ξεχωριστά τµήµατα. Η NXC γλώσσα περιγράφει την σύνταξη που πρέπει να χρησιµοποιείται στο πρόγραµµα. Το NXC Application Programming Interface (API) περιγράφει τις συναρτήσεις συστήµατος, τις σταθερές και τις µακροεντολές που µπορούν να χρησιµοποιούνται από το προγράµµατα. Το API, ορίζεται σε ένα ειδικό αρχείο γνωστό ως "header file" το οποίο, από προεπιλογή, αυτόµατα συµπεριλαµβάνεται κατά τη σύνταξη ενός προγράµµατος. Η NXC υποστηρίζεται τόσο από περιβάλλοντα Windows και Mac OSX όσο και από Linux (John Hansen, 2007). Εικόνα 2.7 Περιβάλλον NXC 22
2.4 NBC To NBC αντικαθιστά το NeXT Byte Codes. Είναι µια απλή γλώσσα για τον προγραµµατισµό (assemply) του εγκεφάλου LEGO MINDSTORMS NXT. Όµοια µε τα NXC τα NΒC προγράµµατα αναπτύσσονται χρησιµοποιώντας το περιβάλλον ανάπτυξης Bricx. Η NΒC χρησιµοποιεί το ίδιο firmware µε την NXT-G. Έχει ακέραιες αλλά όχι πραγµατικές µεταβλητές και δεν έχει ισχυρή µορφοποίηση κειµένου. Ακόµα διαθέτει σύστηµα φακέλων. Ο NΒC µεταγλωττιστής µετατρέπει ένα πηγαίο πρόγραµµα σε NXT bytecodes, το οποίο µπορεί στη συνέχεια να εκτελεστεί. Παρόλο που ο Preprocessor και οι δοµές ελέγχου της NΒC είναι παρόµοια µε την assemly, η NBC δεν είναι γενικής χρήσης γλώσσα προγραµµατισµού. Υπάρχουν πολλοί περιορισµοί που απορρέουν από εµπόδια του NXT bytecode διερµηνέα. H NBC ορίζεται ως δύο ξεχωριστά τµήµατα. Η NBC γλώσσα περιγράφει την σύνταξη που πρέπει να χρησιµοποιείται στα προγράµµατα. Το NBC Application Programming Interface (API) περιγράφει τις συναρτήσεις συστήµατος, τις σταθερές και τις µακροεντολές που µπορούν να χρησιµοποιούνται από το προγράµµατα. Το API, ορίζεται σε ένα ειδικό αρχείο γνωστό ως "header file" το οποίο, από προεπιλογή, αυτόµατα συµπεριλαµβάνεται κατά τη σύνταξη ενός προγράµµατος. Η NXC υποστηρίζεται τόσο από περιβάλλοντα Windows και Mac OSX όσο και από Linux. Εικόνα 2.8 Περιβάλλον NBC 23
Αν µόλις ξεκινήσατε τον προγραµµατισµό, τότε τα γραφικά περιβάλλοντα όπως το Mindstorms NXT software ίσως θα ήταν καλύτερη επιλογή. ιαφορετικά, αν είστε προγραµµατιστής και προτιµάτε να πληκτρολογείτε λίγες γραµµές από το να χρησιµοποιείται τη λειτουργία drag and drop, τότε είτε η NBC ή η NXC θα ήταν ιδανική για εσάς (http://bricxcc.sourceforge.net/nbc/). 2.5 ROBOLAB Το περιβάλλον ROBOLAB έχει αναπτυχθεί από το πανεπιστήµιο Tufts για τον εγκέφαλο πρώτης γενιάς Lego Mindstorms RCX. Ήταν εκτενώς ενισχυµένο για να υποστηρίζει τόσο τον RCX όσο και τον επόµενης γενιάς εγκέφαλο NXT. To ROBOLAB είναι άλλο ένα γραφικό περιβάλλον, αν και δεν είναι τόσο διαισθητικό όπως η γλώσσα NXT-G. Αν γνωρίζετε ήδη ROBOLAB ή θα πρέπει να εισάγετε το πρόγραµµα και στους δύο RCX και NXT εγκεφάλους, το ROBOLAB είναι µια καλή επιλογή για εσάς. Αν µόλις αρχίζει και θέλετε µια γραφική γλώσσα προγραµµατισµού για το NXT, το NXT-G είναι η καλύτερη επιλογή. Εικόνα 2.9 Περιβάλλον Robolab Το ROBOLAB γράφτηκε χρησιµοποιώντας το σύστηµα LabVIEW. Το LabVIEW είναι επίσης η τεχνολογία που χρησιµοποιήθηκε για να γραφεί το NXT-G. Άλλα χρήσιµα χαρακτηριστικά του ROBOLAB συµπεριλαµβάνουν υποστήριξη για ακέραιους και πραγµατικούς υπολογισµούς. Επίσης διαθέτει µια ολοκληρωµένη λύση καταγραφής δεδοµένων. Το πρόγραµµα τρέχει σε περιβάλλοντα Windows και Macintosh αλλά όχι σε Linux. 24
Γραφικές διεπαφές όπως η NXT-G και η ROBOLAB είναι πολύ εύχρηστες αλλά µπορεί να καταντήσουν κουραστικές καθώς αποκτάτε εµπειρία στον προγραµµατισµό (http://www.botmag.com/articles/10-31-07_nxt.shtml). Πλεονεκτήµατα του Robolab Η αντιστοίχιση φυσικών οντοτήτων στο περιβάλλον διευκολύνει το µαθητή. Απεικονίζονται όχι µόνο οι φυσικές οντότητες αλλά και οι ιδιότητές τους και οι λειτουργίες τους. Στο περιβάλλον συγγραφής του κώδικα γίνεται ταυτόχρονα και συντακτικός έλεγχος, έτσι απαλλάσσεται ο προγραµµατιστής (µαθητής) από συντακτικά λάθη. Φυσικά παραµένουν τα λογικά λάθη. Όσο για τα λάθη χρόνου εκτέλεσης σπανίζουν µιας και το πρόγραµµα συνήθως κατασκευάζεται για να δίνει συµπεριφορές σε ροµποτικές συσκευές. ηλαδή ανάλογα µε τις τιµές των τριών αισθητήρων παρέχεται ισχύς στις τρεις εξόδους. Μια διαίρεση µε το µηδέν για παράδειγµα, είναι πολύ σπάνιο έως απίθανο γεγονός. Μειονεκτήµατα του Robolab Τα εικονίδια είναι πολλά και ίσως µερικά να είναι περιττά. Τα εικονίδια είναι πολλά και τίθεται θέµα διακριτότητας. Η αντιστοιχία εικονιδίων και λειτουργιών δεν είναι πάντα αυτονόητη Το πρόβληµα της αναζήτησης εικονιδίου 2.6 NXJ Μία ακόµα πλατφόρµα που µπορεί ο χρήστης να εξερευνήσει είναι η NXJ, η οποία αποτελεί µία JAVA εκτέλεση για το NXT,αλλά µε σηµαντικά µικρότερη βιβλιοθήκη. Η δεδοµένη βιβλιοθήκη είναι αρκετά µεγάλη για τη συνολική µνήµη του NXT στα 256kbytes. Τα προγράµµατα NXJ γράφονται και εκσφαλµατώνονται στον υπολογιστή, ενώ στη συνέχεια τα ήδη διορθωµένα προγράµµατα µεταφέρονται στο NXT όπου και εκτελούνται, σε αντίθεση µε την πλατφόρµα pblua στην οποία η διόρθωση των προγραµµάτων γίνεται στο NXT brick. H LeJos NXT, µία µικροσκοπική JAVA εικονική µηχανή, όπως χαρακτηρίζεται, προσφέρει επαναφορά και συγχρονισµό (http://www.botmag.com/articles/10-31-07_nxt.shtml). 25
Εικόνα 2.10 NXJ firmware Μπορεί να υποστηριχθεί από υπολογιστές οι οποίοι έχουν Windows, MacOSX ή Linux, όπως συµβαίνει και µε τις NBC και NXC. Αξίζει, επίσης, να σηµειωθεί ότι και εδώ δίνεται η δυνατότητα επικοινωνίας µε Bluetooth των NXT µεταξύ τους ή µεταξύ υπολογιστή και NXT. Το πρωτόκολλο Ι2C διευκολύνει τη λήψη και την αποστολή δεδοµένων από συσκευές, ενώ ο χρήστης µπορεί να αποθηκεύσει αρχεία ή φακέλους στο NXT τα οποία µπορεί να διαβάσει και να χρησιµοποιήσει αργότερα. Όσο αναφορά τους τύπους δεδοµένων που χρησιµοποιούνται στην πλατφόρµα NXJ περιλαµβάνει πραγµατικούς(float) και σειρές χαρακτήρων(string), όπως και στη JAVA, κάνει χρήση πολλών από των java.lang, java.util, java.io κλάσεων. Συµπερασµατικά, η LeJos NXJ θυµίζει πολύ τη γλώσσα προγραµµατισµού JAVA και είναι µία ενδιαφέρουσα πλατφόρµα για τους προγραµµατιστές αφού δίνει τη δυνατότητα εξοικείωσης στον προγραµµατιστή µε προχωρηµένα προγράµµατα (http://www.mathworks.com/matlabcentral/fx_files/13399/9/content/ecrobotnxt/environment/n xtosek/lejos_nxj/readme.html). 26
Εικόνα 2.11 NXJ Enterprise 2.7 PbLua Συνεχίζοντας τη γνωριµία µε το software των Lego µία ακόµα πλατφόρµα είναι η pblua. Είναι µία σχετικά καινούργια πλατφόρµα που βασίζεται σε κείµενο και η οποία έχει κερδίσει την προσοχή και το ενδιαφέρον των ακαδηµαϊκών. Η Lua είναι µια πραγµατικά όµορφη γλώσσα η οποία χρησιµοποιείται σε όλα τα είδη των εφαρµογών. Είναι γραµµένη σε C και µεταβάλλεται εύκολα µε ελάχιστες απαιτήσεις στο χρόνο που «τρέχει» ένα πρόγραµµα. ίνει τη δυνατότητα στο χρήστη να µπορεί να τη διαβάσει και συνθέσει εύκολα κώδικα. Εικόνα 2.12 Παράθυρο διαλόγου κατά την εγκατάσταση της εφαρµογής 27
Η πλατφόρµα pblua είναι µία απόλυτα χαρακτηριστική έκδοση Lua για το NXT. Όσο αναφορά την εκτέλεση της ακολουθεί µία συγκεκριµένη γραµµή η οποία µοιάζει αρκετά στην εκτέλεση της RobotC και της NXC, ενώ δεν απαιτείται να έχει ο χρήστης IDE για να χρησιµοποιήσει την πλατφόρµα pblua σε αντίθεση µε τις RobotC και NXC. Αν θέλει όµως µπορεί να έχει. Επίσης, το να χειρίζεται ο χρήστης την πλατφόρµα pblua είναι εύκολο µε οποιαδήποτε µηχανή η οποία έχει πρόσβαση σε µία σειρά διαδοχικών διαδικασιών που λειτουργούν σε USB ή προσοµοίωση µε Bluetooth, και αυτό σχετικά µε υπολογιστές που υποστηρίζουν Windows, MacOSX ή Linux (http://www.hempeldesigngroup.com/lego/pblua/ ). Εικόνα 2.13 PbLua Bluetooth Είναι χαρακτηριστικό ότι η πλατφόρµα που µελετάµε, δεν υποστηρίζει το standard Lego firmware, την επικοινωνία δηλαδή µε Bluetooth NXTs µεταξύ τους και δικτύου υπολογιστών µε NXT, όπως συµβαίνει στην πλατφόρµα RobotC, αφού η τελευταία δεν έχει τη δυνατότητα χειρισµού αυθαίρετων δεδοµένων από µία µηχανή µε Bluetooth, ενώ η pblua µπορεί να υποστηρίζει τη ροή δεδοµένων από τέτοιες µηχανές. Επιπλέον Πλεονεκτήµατα: Η πλατφόρµα pblua υποστηρίζεται από το πρωτόκολλο I2C, το οποίο είναι ένα πρωτόκολλο επικοινωνίας που µπορεί να χρησιµοποιηθεί πέραν από µικρές αποστάσεις. Αποτελείται από µία γραµµή ρολογιού και µία γραµµή δεδοµένων. Η τελευταία µπορεί να χρησιµοποιηθεί για να στέλνει ή να λαµβάνει δεδοµένα από τη συσκευή που είναι συνδεδεµένη σε ένα γκρουπ από ηλεκτρικά σήµατα τα οποία µπορούν να µοιράζονται ανάµεσα σε πολλές συσκευές και το πρωτόκολλο I2C είναι υπεύθυνο γι αυτό. 28
Χρησιµοποιώντας την πλατφόρµα pblua φάκελοι µπορούν να αποθηκευτούν στη µνήµη του NXT. Έτσι, ο χρήστης µπορεί να δηµιουργήσει, να γράψει και να διαβάσει τα αρχεία, αλλά ακόµα καλύτερα µπορεί και να τα «τρέξει». Έχει τη δυνατότητα να διαλέξει τα αρχεία είτε από το NXT είτε από το πρόγραµµα και να φορτώσει δεδοµένα στο ροµπότ τα οποία θα χρησιµοποιήσει αργότερα. Προγραµµατιστές οι οποίοι είναι εξοικειωµένοι µε τη Lua και άλλες γλώσσες, είναι πιθανό να συγχυστούν µε τους αριθµούς τύπου float σαν ένα ιδιαίτερο τύπο δεδοµένων στη pblua. Αναλυτικότερα, ο βασικός τύπος αριθµητικών δεδοµένων υπογράφει 32 bits ακεραίους. Χρησιµοποιεί δηλαδή η γλώσσα Lua έναν τύπο δεδοµένων float που ονοµάζεται userdata και είναι κοντά στο κλασσικό τύπο δεδοµένων. Η πλατφόρµα pblua επιτρέπει στο χρήστη να χρησιµοποιήσει ένα datalog για να συλλέξει δεδοµένα από τους αισθητήρες του ροµπότ για περαιτέρω ανάλυση και να επιλέξει µία διαδικασία φόρτωσης δεδοµένων χωρίς να συνδέσει τη κονσόλα στο NXT. Εικόνα 2.14 Περιβάλλον εφαρµογής PbLua 29
2.8 LeJos OSEK Τελειώνοντας την περιήγηση µας στο software των Lego Mindstorms αξίζει να γίνει µία αναφορά και στην πλατφόρµα LeJos OSEK. Η NXT OSEK είναι µία ανοικτού λογισµικού πλατφόρµα για τα NXT Lego Mindstorms. Η γλώσσα που χρησιµοποιείται είναι η ANSI C, ενώ ένας τρόπος για να ανεβάσουµε µία διαδικασία στο NXT είναι αποθηκεύοντας στο ροµπότ ένα πρόγραµµα (firmware) που λειτουργεί σαν ένα λειτουργικό σύστηµα προκειµένου το ροµπότ να καταλάβει τα προγράµµατα γραµµένα στη LeJos OSEK. Εικόνα 2.15 Περιβάλλον εφαρµογής LeJos OSEK Συνεχίζοντας, αυτό το προϊόν κατανέµεται από την εταιρία Sourgeforce και τρέχει σε λειτουργικά συστήµατα MS Windows, Linux και MAC OS. Λόγω της καλής γνώσης της γλώσσας προγραµµατισµού Java µεταξύ των προγραµµατιστών, πολλοί από τους χρήστες των Lego Mindstorms χρησιµοποιούν αυτή την πλατφόρµα. Όπως σηµειώνεται και στην προηγούµενη πλατφόρµα δεν απαιτείται από το χρήστη IDE ώστε να έχει πρόσβαση στην πλατφόρµα. Επίσης, δίνεται η δυνατότητα επικοινωνίας µε Bluetooth µεταξύ υπολογιστή και NXT και µεταξύ δύο NXTs, ενώ δεν έχει ακόµα παρατηρηθεί κάποια δοκιµή για την επικοινωνία NXT µε άλλη συσκευή. υποστηρίζεται από το πρωτόκολλο Ι2C γίνεται χρήση του τύπου αριθµητικών δεδοµένων float 30
δίνει τη δυνατότητα αποθήκευσης και επανάκτησης δεδοµένων από το NXT µε χρήση ενός συστήµατος αρχείου(file system). Εξερευνώντας την πλατφόρµα ο προγραµµατιστής µπορεί να µάθει να προγραµµατίζει χρησιµοποιώντας το NXT, να συνθέτει και να γράφει γρήγορα προγράµµατα και ανάλογα µε την εξοικείωση και τις ικανότητες του καθενός να τα γράφει σε λίγο χρόνο (http://lejososek.sourceforge.net). Εικόνα 2.16 LeJos OSEK firmware 31
ΚΕΦΑΛΑΙΟ 3: RobotC 32
3.1 ΕΓΚΑΤΑΣΤΑΣΗ ΚΑΙ ΑΠΕΓΚΑΤΑΣΤΑΣΗ ΤΗΣ ROBOTC Σε περίπτωση που υπάρχει στον υπολογιστή µία προηγούµενη έκδοση της RobotC, χρειάζεται να απεγκατασταθεί πριν αναβαθµιστεί στην καινούρια έκδοση της RobotC. Για να απεγκαταστήσουµε τη RobotC ακολουθούµε τα παρακάτω βήµατα: 1.Ανοίγουµε τον Πίνακα Ελέγχου από το Μενού Έναρξη. 2.Από τον Πίνακα Ελέγχου επιλέγουµε προσθαφαίρεση προγραµµάτων. 3.Πλοηγούµαστε µέσω της προσθαφαίρεσης προγραµµάτων στη λίστα,µέχρι να βρούµε τη έκδοση της RobotC που θέλουµε να απεγκαταστήσουµε. 4.Τα Windows αρχίζουν την απεγκατάσταση και όταν ολοκληρωθεί επιστρέφουµε στην προσθαφαίρεση προγραµµάτων. Έτσι,ολοκληρώνεται η απεγκατάσταση της RobotC. Στη συνέχεια ακολουθεί η εγκατάσταση της τελευταίας έκδοσης της RobotC ακολουθώντας τα παρακάτω: 1.Πάταµε διπλό κλίκ στο εικονίδιο εγκατάστασης της RobotC.Εµφανίζεται το παράθυρο InstallShield Wizard και πατάµε «Επόµενο» για να συνεχίσουµε. 2. ιαβάζουµε το End User Software License Agreement,αποδεχόµαστε τους όρους και µε το κουµπί «Επόµενο» συνεχίζουµε. 3.Επιλέγουµε που να εγκαταστήσουµε τη RobotC.Εξ ορισµού εγκαθίστανται στο φάκελο «Programme Files» και κλικάροντας την επιλογή «Επόµενο»συνεχίζουµε. 4.Το πρόγραµµα εγκατάστασης µας ρωτά να αποδεχτούµε τις ρυθµίσεις και εφόσον είναι όλα σωστά πατάµε «Εγκατάσταση». 5.Τότε,το πρόγραµµα εγκατάστασης αντιγράφει τα αρχεία στον υπολογιστή και περιµένουµε να ολοκληρωθεί. 6.Όταν η εγκατάσταση ολοκληρώνεται,εµφανίζεται ένα παράθυρο που µας ενηµερώνει και πατάµε «Τέλος». 7.Ένα εικονίδιο εµφανίζεται στην Επιφάνεια Εργασίας και πατώντας το ανακαλύπτουµε την πλατφόρµα RobotC. Εικόνα 5.1 Εγκατάσταση προγράµµατος 33
Εικόνα 5.2 RobotC for Mindstorms Activation 3.2 ΑΠΑΙΤΗΣΕΙΣ ΣΥΣΤΗΜΑΤΟΣ H RobotC για τα Mindstorms απαιτεί βασικά χαρακτηριστικά συστήµατος για να τρέξει κατάλληλα. Το περιβάλλον δεν είναι ένας εντατικός επεξεργαστής,αλλά ένας διαδραστικός debugger είναι αυτός που µπορεί να επιβραδύνει τη λειτουργία του υπολογιστή. Απαιτήσεις συστήµατος: α.intel Premium Επεξεργαστή ή κάτι αντίστοιχο,800 MHz το ελάχιστο. β.windows XP Professional ή Home Edition µε Service Pack 2 ή µεγαλύτερο. γ.256 MB RAM το ελάχιστο. δ. ιαθεσιµότητα σκληρού δίσκου πάνω από 30MB. ε.μία διαθέσιµη θύρα USB. στ.συµβατός προσαρµογέας Bluetooth(προεραιτικά). Η πλατφόρµα RobotC δε θα τρέξει σε άλλο λειτουργικό σύστηµα παρά µόνο σε Microsoft Windows.Θα χρειαστεί ακόµη να κατεβούν/εγκατασταθούν τα drivers της συσκευής NXT που βρίσκονται στο CD ή στην ιστιοσελίδα της RobotC. 34
3.3 ROBOTC for MINDSTORMS - Select Controller Η RobotC για τα Mindstorms υποστηρίζει για προγραµµατισµό τρεις διαφορετικές πλατφόρµες: Lego Mindstorms RCX Lego Mindstorms NXT FIRST Tech Challenge (NXT-Based) Πριν χρησιµοποιήσουµε τη RobotC,πρέπει να επιλέξουµε ποια πλατφόρµα θα χρησιµοποιηθεί επί του παρόντος. Αλλάζοντας τον τύπο πλατφόρµας: Επιλέγουµε από τη γραµµή µενού το «Robot» της RobotC και µετακινούµε τον κέρσορα πάνω στην επιλογή «Platform Type».Έτσι,ανοίγει ένα µενού από το οποίο επιλέγουµε την κατάλληλη πλατφόρµα. ίνεται η δυνατότητα,φυσικά,να αλλάξουµε αυτή την πλατφόρµα οποιαδήποτε στιγµή εµείς θέλουµε. Εικόνα 5.3 Platform Type 35
3.4 ROBOTC for MINDSTORMS - Sample Programmes Ο καλύτερος τρόπος, για να ξεκινήσουµε να δουλεύουµε στη RobotC και να µάθουµε να προγραµµατίζουµε, είναι να ρίξουµε µια µατιά σε προγράµµατα που έχουν ήδη αναπτυχθεί.η πλατφόρµα RobotC έχει αποθηκευµένα πάνω από 100 προγράµµατα,ώστε να βοηθήσει τον αρχάριο προγραµµατιστή να µάθει να προγραµµατίζει τα ροµπότ. Για να «εισβάλλουµε» στα απλά αυτά προγράµµατα,ανοίγουµε το φάκελο «Sample Program» πηγαίνοντας από τη γραµµή µενού File και επιλέγοντας «Open Sample Programmes». Εικόνα 5.4 Open Sample Program Μέσα στο φάκελο των προγραµµάτων,υπάρχει µία σειρά από απλά προγράµµατα τα οποία είναι οργανωµένα ανάλογα µε το θέµα που υποστηρίζουν.η RobotC λοιπόν µπορεί να ανοίξει οποιοδήποτε από αυτά τα προγράµµατα επιλέγοντάς τη. 36
Εικόνα 5.5 Περιεχόµενα του φακέλου Sample Program 3.5 ROBOTC for MINDSTORMS - Download Firmware Η RobotC απαιτεί διαφορετικό firmware από τις άλλες γλώσσες προγραµµατισµού που είναι διαθέσιµες για το NXT.Αυτό το firmware είναι αυτό που φανερώνει µια προοδευτική λειτουργικότητα όσο αναφορά τη RobotC. H RobotC έχει την ικανότητα να ανανεώνει αµέσως το firmware του NXT από την εφαρµογή της RobotC. Για να ανανεώσουµε το firmware ακολουθούµε τις παρακάτω οδηγίες: 1.Ανοίγουµε από τη γραµµή µενού το Robot και επιλέγουµε «Download Firmware». 37
Εικόνα 5.6 Download firmware 2.Από τότε που η RobotC φτιάχτηκε για το NXT,εµφανίζεται η οθόνη «NXT Brick Downloading».Από την οθόνη αυτή µπορούµε να ονοµάσουµε ξανά το NXT και να ανανεώσουµε το firmware του NXT.Ωστόσο,πρέπει να βεβαιωθούµε ότι το NXT εµφανίζεται κάτω από το «NXT Bricks Currently Connected via USB» πριν συνεχίσουµε.σε περίπτωση που το NXT δεν εµφανίζεται,πρέπει να ελέγχουµε αν το NXT είναι συνδεδεµένο µέσω του USB,ανοιχτό και εγκατεστηµένο το driver του NXT πατάµε «Refresh Lists» για να βρούµε το κατάλληλο brick. 3.Για να αρχίσει να «κατεβαίνει»το firmware κλικάρουµε στην επιλογή «F/W Download». 38
Εικόνα 5.7 Κλικ στην επιλογή F/W Download 4.Στη συνέχεια και ενώ έχουµε πατήσει το κουµπί «F/W Download»θα εµφανιστεί το παράθυρο «Select NXT firmware file».τότε,η RobotC θα ανοίξει αυτόµατα το φάκελο του και µας εµφανίζει όλα τα διαθέσιµα firmware για το NXT.Τα αρχεία µε το firmware του NXT έχει την κατάληξη «.rfw».επιλέγουµε το µεγαλύτερο αριθµηµένο φάκελο του firmware που είναι στη µορφή «NXTXXXX.rfw».Τέλος,πατώντας το κουµπί «Open»αρχίζει το firmware να κατεβαίνει στον υπολογιστή. Εικόνα 5.8 Πάντα επιλέγουµε το µεγαλύτερο σε έκδοση αριθµό που είναι διαθέσιµος µε το πρόθεµα «NXT». 39
5.Όσο το firmware ανανεώνεται,το NXT κλείνει µόνο του και ανοίγει ξανά(επανεκκίνηση).μόλις το firmware «κατέβει» επιτυχώς µπορούµε να δούµε στην οθόνη «NXT Brick Download»που εµφανίζεται κάτω από το «Message Log» το µήνυµα «Firmware Download Complete».Έτσι,µπορούµε πλέον να χρησιµοποιήσουµε το NXT µε τη πλατφόρµα RobotC επιτυχώς. Εικόνα 5.9 Παράθυρο γίνεται «Download firmware» 3.6 ROBOTC for MINDSTORMS - Compiling and Downloading Η πλατφόρµα RobotC θεωρείται ένα «Ολοκληρωµένο Περιβάλλον Ανάπτυξης»(«Integrated Development Enviroment»).Αυτό σηµαίνει ότι η RobotC έχει έναν επιµελητή κειµένου,όπου και αναπτύσσεται ο κώδικας,ο οποίος βοηθά τον προγραµµατιστή να χρωµατίσει διάφορα σηµεία του κώδικα διαφοροποιώντας τους ακεραίους,τις λέξεις κλειδιά,τις συναρτήσεις και τις παραµέτρους. 40
Εικόνα 5.10 Χρωµατισµός σηµείων του κώδικα Επίσης,η πλατφόρµα RobotC περιέχει ένα µεταγλωτιστή ο οποίος µετατρέπει την πηγαία γλώσσα(γλώσσα γραµµένη από τον προγραµµατιστή) στη γλώσσα στόχο που διαφορετικές πλατφόρµες µπορούν να καταλάβουν.για να «τρέξει»ο µεταγλωτιστής επιλέγουµε από τη γραµµή µενού «Robot» και συνέχεια «Recompile Programme». Εικόνα 5.11 Recompile program 41
Όταν ο µεταγλωτιστής τρέχει,η RobotC ελέγχει τον κώδικα του προγραµµατιστή για λάθη και προειδοποιήσεις,οι οποίες µπορούν να οδηγήσουν σε δυσλειτουργία του προγράµµατος,όπως το να µην τρέχει κατάλληλα στο ροµπότ.από το να µην εκτελείται το πρόγραµµα σωστά από το ροµπότ,η RobotC ενηµερώνει λοιπόν για αυτά τα λάθη µε κατάλληλα µηνύµατα,έτσι ώστε να διορθωθούν. Παράδειγµα: Εικόνα 5.12 Λάθη στον κώδικα -Η λέξη «motor»δεν είναι σωστά γραµµένη σαν «Motor»,και ο µεταγλωτιστής προειδοποιεί,ενηµερώνοντας τον προγραµµατστή ότι έχει δηµιουργηθεί ένα λάθος.ωστόσο,η RobotC είναι ικανή να διορθώσει το λάθος µόνη της,όταν στέλνει το πρόγραµµα στον ελεγκτή.αν και ένα πρόγραµµα µε µία προειδοποίηση θα τρέξει επιτυχώς,οι χρήστες θα πρέπει να χρησιµοποιούν σωστό κώδικα προκειµένου να αποφεύγονται οι προειδοποιήσεις.οι τελευταίες δηλώνονται στη RobotC µε ένα «κίτρινο Χ». -Στον κώδικα στη γραµµή 23 λείπει µία άνω τελεία(;),που υποδηλώνει λάθος.αυτό το λάθος θα εµποδίσει το πρόγραµµα να σταλεί στον ελεγκτή.η πλατφόρµα RobotC θα κάνει ότι καλύτερο για να βοηθήσει το χρήστη.στο συγκεκριµένο παράδειγµα,ενηµερώνει τον προγραµµατιστή ότι δεν υπάρχει µία άνω τελεία(;) και σταµατά τη µεταγλώτιση του προγράµµατος.τα λάθη δηλώνονται µε ένα «κόκκινο Χ». Μόλις το πρόγραµµα µεταγλωττιστεί επιτυχώς,µπορούµε να στείλουµε το πρόγραµµα στον ελεγκτή πατώντας από τη γραµµή µενού «Robot» και ύστερα «Download Program». 42
Εικόνα 5.13 Download program Μόλις ξεκινά το φόρτωµα στο NXT,µία «Download Progress» µπάρα θα εµφανιστεί. Μόλις τελειώσει το φόρτωµα,εµφανίζεται ένας αριθµός από παράθυρα,όπως το παράθυρο Global Variables,Devices και το Programme Debug.Μπορούµε να ξεκινήσουµε την εκτέλεση των προγραµµάτων κλικάροντας το κουµπί «Start» στο παράθυρο «Programme Debug» και το ΝΧΤ ξεκινάει να εκτελεί τις εντολές που έχουµε δώσει στον υπολογιστή. Εικόνα 5.14 Κουµπί Start για να ξεκινήσει η εκτέλεση προγραµµάτων από το NXT. 43
3.7 ROBOTC for MINDSTORMS - Interface Όπως ήδη έχει αναφερθεί,η RobotC είναι ένα Ολοκληρωµένο Περιβάλλον Ανάπτυξης(Integrated Development Environment).Αναπτύχθηκε για να παρέχει όσο το δυνατόν µεγαλύτερη υποστήριξη στις πλατφόρµες µε τις οποίες είναι συµβατή.η RobotC εκτείνεται στη γλώσσα προγραµµατισµού C µε έναν αριθµό µεταβλητών,ώστε να εξασφαλίζουν τον έλεγχο του σκληρού υλικού (hardware)του ροµπότ,όπως για παράδειγµα οι κινητήρες και οι αισθητήρες. Υπάρχουν τρία κύρια τµήµατα στη RobotC: 1. Ο συντάκτης κειµένου(editor). 2. Το πρότυπο κώδικα. 3. Το κύριο µενού/γραµµή εργαλείων. Συντάκτης κειµένου(editor) Είναι το µέρος του interface όπου ο χρήστης µπορεί να γράψει τον κώδικά του. Εικόνα 5.15 Εγγραφή κώδικα Πρότυπο κώδικα(code template) Αυτό το τµήµα του interface επιτρέπει στο χρήστη να καταλάβει όλες τις συναρτήσεις που είναι διαθέσιµες στη RobotC,και επίσης να τραβάει τµήµα κώδικα από το «Code Template»στον «Editor»(drag and drop). Εικόνα 5.16 Code Template 44
Κύριο µενού/γραµµή εργαλείων(main Menu/Toolbar) Αυτή η περιοχή επιτρέπει στο χρήστη να εκτελεί βασικές διεργασίες,όπως η αποθήκευση,αντιγραφή,επικόλληση,αναίρεση,κτλ. και επιπρόσθετα να έχει πρόσβαση σε όλες τις συναρτήσεις της RobotC που είναι διαθέσιµες µόνο από το Main Menu. Εικόνα 5.17 Γραµµή Εργαλείων 3.7.1 ROBOTC for MINDSTORMS - Code editor RobotC for Mindstorms-Writing code Το «γράψιµο» του κώδικα(writing code) είναι η κύρια εστίαση της RobotC,ένα περιβάλλον βασισµένο στη γλώσσα C.O Code editor της RobotC παρέχει οπτική βοήθεια καθώς ο προγραµµατισµός γίνεται σε αριθµηµένες γραµµές και µε χρωµατισµό του κώδικα. -Το «κανονικό» κοµµάτι του κώδικα εµφανίζεται µε µαύρα γράµµατα.χρησιµοποιείται για ονόµατα µεταβλητών και συναρτήσεων,που ορίζονται από το χρήστη και δεν αναγνωρίζονται από τον µεταγλωττιστή ως λέξεις κλειδιά. -Τα σχόλια εµφανίζονται µε πράσινα γράµµατα και δηλώνονται µε «//» ή «/*».Αξίζει να σηµειωθεί ότι τα σχόλια δεν αναγνωρίζονατι ως µέρος του κώδικα και αγνοούνται από το µεταγλωττιστή όταν το πρόγραµµα «τρέχει». -Λέξεις κλειδιά/συναρτήσεις(π.χ task main,int,motor) που έχουν ήδη οριστεί δηλώνονται µε µπλε γράµµατα. -Σταθερές και παράµετροι εµφανίζονται µε κόκκινα. -Σύµβολα(+,-,*,{,<,κτλ.)δηλώνονται µε πορτοκαλί γράµµατα. RobotC for Mindstorms-Error Display(Εµφάνιση λάθους) Ο µεταγλωττιστής RobotC έχει έναν έξυπνο ανιχνευτή λαθών,ο οποίος θα αναλύει τον κώδικα κάθε στιγµή της µεταγλώττισης για να αναγνωρίζει συντακτικά λάθη,ορθογραφικά λάθη και καθυστερήσεις στο πρόγραµµα,όπως µεταβλητές που δε χρησιµοποιούνται και περιττός κώδικας.επίσης,η RobotC έχει ένα ισχυρό βελτιστοποιητή κώδικα που µπορεί να συρρικνώσει το πρόγραµµα πάνω από 50% πριν σταλεί στην πλατφόρµα,για να διατηρήσει χώρο στη µνήµη. Η RobotC θα ενηµερώσει για τον τύπο του λάθους και τη γραµµή στην οποία βρίσκεται,παρέχοντας οπτική βοήθεια.η αρίθµηση των γραµµών δε δίνει ακριβώς τη θέση του λάθους,αλλά το δίνει προσεγγιστικά.ένα τέτοιο παράδειγµα εµφανίζεται παρακάτω,στο οποίο η RobotC θα ενηµερώσει για την έλλειψη της άνω τελείας(;). 45
Εικόνα 5.18 Εµφάνιση λάθους Η RobotC εµφανίζει τρία είδη µηνυµάτων από τον µεταγλωττιστή.λάθη,προειδοποιήσεις και πληροφορίες. a. Errors(Λάθη): Η RobotC βρίσκει αδιέξοδο καθώς το πρόγραµµα µεταγλωτίζεται.είναι συνήθως λάθη ορθογραφικά,ελλείψεις άνω τελείας και εσφαλµένη σύνταξη,τα οποία δηλώνονται µε ένα «κόκκινο Χ». b. Warnings(Προειδοποιήσεις): Η RobotC εντοπίζει ένα ασήµαντο λάθος στο πρόγραµµα αλλά ο µεταγλωττιστής µπορεί να το αγνοήσει.υπάρχουν συνήθως λανθασµένες κεφαλαιοποιήσεις στις λέξεις ή ατέρµων βρόγχοι.οι προειδοποιήσεις εµφανίζονται µε ένα «κίτρινο Χ»,όπως στην περίπτωσή µας που η λέξη κλειδί motor γράφεται µε κεφαλαίο «Μ». c. Information(Πληροφορία): Η RobotC εµφανίζει µηνύµατα όταν εντοπίζει συναρτήσεις ή µεταβλητές οι οποίες δε χρησιµοποιούµται στο πρόγραµµα.αυτά τα µηνύµατα δεν έχουν καµία επιρροή στο πρόγραµµα,αλλά απλά ενηµερώνουν για αναποτελεσµατικό προγραµµατισµό και δηλώνονται µε ένα «γκρι Χ»,π.χ η µεταβλητή variable1,η οποία δηλώνεται αλλά δε χρησιµοποιείται. RobotC for Mindstorms-Breakpoints Τα σηµεία διακοπής σε µία διαδικάσία(breakpoints)είναι ένα σηµαντικό εργαλείο για την εκσφαλµάτωση του κώδικα στη RobotC.Μπορούν να τοποθετηθούν σε οποιοδήποτε σηµείο του κώδικα,και χρησιµοποιούνται για να σταµατήσει η εκτέλεση του προγράµµατος όταν φτάσουµε σε 46
αυτή τη γραµµή.έτσι,ο προγραµµατιστής ειδοποιείται ότι στο πρόγραµµα υπάρχει ένα σηµειό διακοπής.γενικότερα,η RobotC µπορεί να υποστηρίξει πολλά σηµεία και δηλώνονται µε κόκκινο κύκλο στην γκρι περιοχή ανάµεσα στον κώδικα και τον αριθµό της γραµµής. Προσθήκη Breakpoint: Για να προσθέσουµε ένα σηµείο διακοπής επιλέγουµε µία γραµµή και πατώντας δεξί κλικ εµφανίζεται ένα µενού.επιλέγουµε «Insert Breakpoint» και αυτό τοποθετείται στη συγκεκριµένη γραµµή. Μετακίνηση Breakpoint: Πατάµε δεξί κλίκ πάνω στο κόκκινο κύκλο και στη συνέχεια επιλέγουµε «Remove Breakpoint». Εικόνα 5.19 Insert Breakpoint 47
Εικόνα 5.20 Remove Breakpoint RobotC for Mindstorms-Bookmarks Bookmark είναι χρήσιµο για πλοήγηση σε µεγαλύτερα προγράµµατα στη RobotC.Μπορείς να τα χρησιµοποιήσεις για να µετακινηθείς από τη µία γραµµή του κώδικα σε κάποια άλλη. Προσθήκη/Μετακίνηση κώδικα: Στη γραµµή που θέλουµε να προσθέσουµε/µετακινήσουµε ένα bookmark πατάµε δεξί κλίκ και από το µενού που εµφανίζεται «Toogle Bookmark». Μπορούµε να µεταφερθούµε στην αρχή µιας γραµµής του κώδικα,στην οποία υπάρχει ένα bookmark πατώντας από τη γραµµή µενού «Edit» και επιλέγοντας «Find Next Bookmark».Μπορούµε αντίστοιχα να µεταφερθούµε σε προηγούµενο Bookmark πατώντας «Find Prev Bookmark». Καθαρισµός των Bookmark: Έχουµε επίσης τη δυνατότητα, σε περίπτωση που θέλουµε να διαγράψουµε όλα τα bookmarks,επιλέγοντας από το µενού «Edit» το «Clear All Bookmarks»,εξαφανίζονται όλα από τον κώδικα. 48
Εικόνα 5.21 Toogle Bookmark Εικόνα 5.22 Αφαίρεση bookmark 49
3.7.2 ROBOTC for MINDSTORMS - Status Bar(Γραµµή κατάστασης) Η γραµµή κατάστασης µας ενηµερώνει για τον συντάκτη της RobotC και την τρέχουσα κατάσταση του κώδικα. i. Γραµµή/Στήλη: είχνει τον αριθµό της γραµµή στην οποία βρίσκεται ο κέρσορας στο κείµενο. ii. Κατάσταση Αρχείου(File Status): είχνει την κατάσταση εγγραφής/ανάγνωσης του τρέχοντος αρχείο. iii. Ένδειξη Num Lock: είχνει κατά πόσο το Num Lock είναι ενεργό ή όχι. iv. Ένδειξη Caps Lock:Πληροφορεί αν το Caps Lock είναι ανοιχτό ή όχι. v. Ένδειξη Scroll Lock:Ενηµερώνει αν το Scroll Lock είναι ανοιχτό ή όχι. 3.7.3 ROBOTC for MINDSTORMS - Code Template(πρότυπο κώδικα) Το παράθυρο µε τα πρότυπα κώδικα παρέχει τρία βασικά χαρακτηριστικά: i. Μία λίστα µε όλες τις ειδικές συναρτήσεις της πλατφόρµας που είναι διαθέσιµες από τη RobotC. ii. Μπορούµε να σύρουµε στοιχεία από το ιεραρχικό µενού στο κώδικα(drag and drop). iii. Παιρνώντας το βελάκι του ποντικιού πάνω από ένα στοιχείο θα µας δώσει µία µικρή περιγραφή της λειτουργίας του. 3.7.4 ROBOTC for MINDSTORMS - Toolbar(Γραµµή Εργαλείων) Η γραµµή εργαλείων παρέχει έναν άνετο τρόπο διαχείρισης των συχνά χρησιµοποιούµενων εντολών στη RobotC µερικές από τις οποίες είναι: i. ηµιουργία ενός κενού προγράµµατος ii. Άνοιγµα ενός υπάρχοντος αρχείου. iii. Αποθήκευση ενός νέου προγράµµατος. iv. Αντιγραφή/Επικόλληση. v. Αναίρεση. vi. Εκτύπωση. 3.7.5 ROBOTC for MINDSTORMS - Menu(Γραµµή Μενού) File Στη γραµµή µενού η επιλογή «File» µας δίνει τη δυνατότητα να ξεκινήσουµε νέα προγράµµατα(open),να ανοίξουµε ήδη υπάρχοντα(open Sample Programmes),να αποθηκεύσουµε(save/save as) και να εκτυπώσουµε(print). 50
Εικόνα 5.23 Επιλογή file από τη γραµµή Menu Edit Την επιλογή «File» ακολουθεί η «Edit», η οποία περιέχει εργαλεία που βοηθάνε στην εγγραφή του προγράµµατος,όπως αναίρεση(undo),επανάληψη(redo),αποκοπή(cut),αντιγραφή(copy),επικόλληση(paste),εύρεση επόµενου/προηγούµενου bookmark(find Next/Prev Bookmark). Εικόνα 5.24 Επιλογή Edit από τη γραµµή Menu 51
View Όσο αναφορά την επιλογή «View»,αυτή δείχνει πώς το interface της RobotC εµφανίζεται.περιέχει το «File Name»,το όνοµα δηλαδή του αρχείου το οποίο είναι ανοιχτό,το «Code Completetion»,µε το οποίο η RobotC δίνει κάποιες προτάσεις συναρτήσεων καθώς ο χρήστης αρχίζει την πληκτρολόγηση,το «Code Template»(πρότυπο κώδικα) που δείχνει αν είναι ενεργό και διαθέσιµο για χρήση και τη «Status Bar» ή «Toolbar» καθεµία από τις οποίες δηλώνει αν είναι ενεργή η γραµµή κατάστασης και η γραµµή εργαλείων αντίστοιχα. Εικόνα 5.25 Επιλογή View από τη γραµµή Menu Robot Συνεχίζοντας την εξερεύνηση στη γραµµή µενού,η επιλογή «Robot» δίνει τη δυνατότητα επικοινωνίας της πλατφόρµας και του προγάµµατος µε το ροµπότ.αναλυτικότερα,υπάρχουν επιλογές όπως «Compile and Download Programme»,µε την οποία το πρόγραµµα µεταγλωττίζεται και φορτώνεται στο NXT, η επιλογή «Recompile Programme»,η µεταγλώττιση δηλαδή του πιο πρόσφατου προγράµµατος,η «Platform Type» η οποία δηλώνει αν χρησιµοποιείται Lego Mindstorms NXT ή RCX.Επίσης,επιλέγοντας «Motors and Sensors Setup»,εµφανίζεται ένα παράθυρο µε τους αισθητήρες και τους κινητήρες,ενώ αξίζει να σηµειωθεί και η λειτουργία του «DownLoad Firmware».Μόνο φορτώνοντας το κατάλληλο firmware στο NXT µπορεί αυτό να καταλάβει το πρόγραµµα της RobotC και να το εκτελέσει. 52
Εικόνα 5.26 Motors and Sensors SetUp Εικόνα 5.27 Επιλογή Robot από τη γραµµή Menu 53
Window Τέλος,η επιλογή «Window» µας δίνει να επιλέξουµε ανάµεσα στο «Basic» ή το «Expert» µενού που θα εµφανίζεται στη RobotC. Εικόνα 5.28 Επιλογή Window από τη γραµµή Menu 3.8 NXT Brick Menu 3.8.1 ROBOTC for MINDSTORMS Preferences Στη γραµµή menu και από την επιλογή «View»,µπορούµε επίσης να επιλέξουµε τις κατάλληλες «Preferences»,προτιµήσεις δηλαδή µε τις οποίες τροποποιούµε την πλατφόρµα της RobotC.Έτσι,εµφανίζεται ένα παράθυρο το οποίο παρέχει τις παρακάτω δυνατότητες: -Επιλογή του κατάλληλου τύπου πλατφόρµας που θα χρησιµοποιήσουµε(lego Mindstorms RXC,Lego Mindstorms NXT και First Tech Challenge NXT). -Επιλογή του χρόνου που χρειάζεται ένα brick για να αποδυναµωθεί.αυτή είναι default στην επιλογή «Do not Update»,γεγονός που δηλώνει ότι παραµένει το brick που εµείς είχαµε χειροποίητα επιλεξεί στην αρχή. -Επικοινωνία της RobotC µε το brick του NXT που συνδέθηκε τελευταίο στον υπολογιστή ή µε το ακριβώς προηγούµενο ή µε οποιοδήποτε άλλο που συνδέεται µέσω USB στον υπολογιστή. 54
3.8.2 ROBOTC for MINDSTORMS - Text Message Link Η οθόνη «Text Message Link» χρησιµοποιείται για να ελέγχει πόσο γρήγορα ένα πακέτο δεδοµένων µπορεί να σταλεί στο NXT και να λάβει απάντηση από αυτό ότι έχει παραλάβει το πακέτο.η RobotC παράγει τα δεδοµένα γραφικά για όλες τις αποκρίσεις που έχουν σταλεί από την αρχή της δοκιµής.εξ ορισµού η RobotC έχει ρυθµιστεί ώστε να κάνει το NXT να παίζει έναν συγκεκριµένο ήχο(blip) όταν το τελευταίο λάβει το πακέτο.ο χρήστης έχει τη δυνατότητα να αλλάξει τον ήχο αυτό σε βουβό και να παράγει ένα µετρητή µε τον αριθµό των πακέτων που έχουν σταλεί.μπορεί,επίσης,να χρησιµοποιήσει το «NXT Message» για να στείλει µήνυµα µεγέθους ενός byte στο NXT.Γενικότερα,αξίζει να αναφερθεί ότι ο τύπος απόκρισης στο «NXT Message» είναι συµβατός τόσο µε το firmware της RobotC όσο και του NXT-G. Εικόνα 5.29 Text Message Link 55
3.9 Bluetooth και NXT 3.9.1 ROBOTC for MINDSTORMS - Bluetooth Γενικότερα,το Bluetooth (BT) είναι ένα πρωτόκολλο ασύρµατης επιοκοινωνίας και µικρής απόστασης(πάνω από 10 µέτρα) που λειτουργεί στα 2.4 GHz.Αυτό µπορεί προαιρετικά να χρησιµοποιήσει µία µεγαλύτερη δύναµη µετάδοσης,ώστε να επιτύχει απόσταση µεγαλύτερη των 100 µέτρων.to NXT, λοιπόν,χρησιµοποιεί την επιλογή των 10 µέτρων.το Bluetooth(BT) περιλαµβάνει όχι µόνο το χαµηλό επίπεδο ραδιοφωνικής µετάδοσης (στα 2.5 GHz) αλλά και πρωτόκολλα µηνυµάτων υψηλότερων επιπέδων σχεδιασµένα για διαφορετικές εφαρµογές.υπάρχουν περισσότερα από 25 διαφορετικά προφίλ Bluetooth.Μερικά από τα διασηµότερα είναι: i. SPP ii. HID iii. HSP Εικόνα 5.30 Εικονίδιο Bluetooth Για να συνδέσουµε δύο συσκευές µέσω Bluetooth,δεν αρκεί µόνο αυτές να υποστηρίζουν BT,αλλά και τον τύπο του προφίλ που θα χρησιµοποιηθεί για να γίνει η σύνδεση.για παράδειγµα,το NXT υποστηρίζει µόνο το SPP και έτσι δε µπορεί να συνδεθεί µε ένα Nintendo ή κονσόλα Sony. 56
3.9.2 ROBOTC for MINDSTORMS - Συνδέοντας δύο NXT Bricks Ένα από τα πιο προηγµένα χαρακτηριστικά για το νέο σύστηµα Mindstorms NXT είναι η ικανότητά του να ελέγχει και να επικοινωνούν µέσω της τεχνολογίας Bluetooth. Το Bluetooth σύστηµα για το NXT έχει σχεδιαστεί για να λειτουργούν σε ένα master / slave configuration. Κάθε τούβλο NXT µπορεί να συνδεθεί µε έως και τρεις άλλες συσκευές NXT.Ωστόσο, τα NXT µπορούν να επικοινωνούν µόνο µε µία πηγή σκλάβος σε µια στιγµή. Για να συνδέσουµε δύο συσκευές µέσω Bluetooth µεταξύ τους ακολουθούµε τα παρακάτω βήµατα: 1. Ο χρήστης χρησιµοποιεί το interface του NXT για να επιλέξει εντολές Bluetooth. 2. Η οθόνη LCD του NXT επιδυκνύει την κατάσταση του Bluetooth.Πάνω και αριστερά στην οθόνη το πρώτο σύµβολο είναι αυτό του Bluetooth και υποδηλώνει ότι το BT είναι ενεργό στο NXT.Το εικονίδιο δηλαδή υποδηλώνει ότι η ορατότητα Bluetooth στο NXT είναι ενεργοποιηµένη,ενώ σε αντίθετη περίπτωση δε µπορεί να ανιχνεύσει συσκευές µε ενεργό BT.Το RobotC2 είναι το όνοµα από το NXT. Εικόνα 5.31 LCD όταν το BT είναι ενεργοποιηµένο 3. Στη συνέχεια,επιλέγει «Search» και ξεκινά η ανίχνευση. 4. Στην οθόνη του NXT εµφανίζονται οι συσκευές που βρέθηκαν. 5. Επιλέγει τη συγκεκριµένη συσκευή για τη σύνδεση,πατώντας «Connect». 6. O χρήστης χρειάζεται ωστόσο να επιλέξει και την κατάλληλη σχισµή(«1»,«2»,«3»),πατώντας το πορτοκαλί κουµπί πάνω στο NXT. 7. Στην οθόνη του NXT εµφανίζεται η εγγραφή «Connecting» καθώς η σύνδεση µεταξύ των NXTs εξελίσσεται. 8. Τελικά,µετά την ολοκλήρωση της διαδικασίας,το εικονίδιο στην οθόνη LCD θα αλλάξει από < σε <>,δηλώνοντας µε το > ότι το NXT συνδέθηκε µε άλλη συσκευή. Εικόνα 5.32 Ολοκλήρωση σύνδεσης NXTs µέσω BT 3.10 Debugger Windows 3.10.1 ROBOTC for MINDSTORMS - Program Debugging H RobotC έχει µία χωρητικότητα εύρεσης λαθών που επιτρέπει πρόσβαση σε πραγµατικό χρόνο στο ροµπότ καθώς το πρόγραµµα τρέχει.υπάρχει το ενδεχόµενο να µειώσει σηµαντικά το χρόνο που 57
χρειάζεται για να βρει και να διορθώσει τα λάθη στο πρόγραµµα.με τον debbuger της RobotC ο χρήστης µπορεί: Να ξεκινήσει και να σταµατήσει την εκτέλεση του προγράµµατος από τον υπολογιστή. Να εκτελεί κάθε φορά µία γραµµή κώδικα και να εξετάζει τα αποτελέσµατα(τιµές των µεταβλητών). Να καθορίζει τα breakpoints στον κώδικα τα οποία ανβάλλουν την εκτέλεση του προγράµµατος. Να γράψει και να διαβάσει τις τιµές των µεταβλητών που ορίζονται στο πρόγραµµα. Να γράψει και να διαβάσει τις τιµές των κινητήρων και των αισθητήρων. Εικόνα 5.33 Debug Window 3.10.2 ROBOTC for MINDSTORMS - Global Variables To παράθυρο των global µεταβλητών είναι χρήσιµο για να µπορεί ο προγραµµατιστής να παρατηρεί τις τιµές της κάθε µεταβλητής που δηλώνεται στο πρόγραµµα.χρησιµοποιώντας τον debugger της RobotC,ο χρήστης βλέπει τα ονόµατα και τις τιµές των µεταβλητών και έχει τη δυνατότητα να τα αλλάζει σε πραγµατικό χρόνο. 58
Εικόνα 5.34 Variables-Values Variable: Η στήλη αυτή δίνει τα ονόµατα των µεταβλητών όπως δηλώνονται στο πρόγραµµα. Values: ίνει τις τιµές των µεταβλητών.οι τιµές των µεταβλητών που έχουν ανανεωθεί πρόσφατα φαίνονται µε κόκκινο χρώµα. Τα ονόµατα των µεταβλητών που χρησιµοποιούνται πρέπει να ακολουθούνται από τον κατάλληλο τύπο,τους οποίους η RobotC διακρίνει στις ακόλουθες κατηγορίες: i. Ακέραιοι(integer),ή αλλιώς «int» τιµές είναι αριθµοί χωρίς κλασµατικό ή δεκαδικό µέρος.όπως για παράδειγµα,οι αριθµοί 10,0,-10 είναι ακέραιοι,ενώ δεν αποτελούν ακεραίους οι 10.5,10.0. ii. Πραγµατικοί(float) αριθµοί είναι αυτοί που περιέχουν κα δεκαδικό µέρος.μπορεί να είναι θετικοί,αρνητικοί ή µηδέν και να παριστάνουν δεκαδικούς.καταλαµβάνουν µεγαλύτερο χώρο µνήµης στο ροµπότ,επιβραδύνεται η εκτέλεση πράξεων όταν περιέχουν δεκαδικούς,γι αυτό και προτιµούνται οι ακέραιοι.ως πραγµατικοί αριθµοί µπορούν να θεωρηθούν οι 3.1456,31.456,0.0,-314.56. iii. Άλλοι τύποι µεταβλητών που υπάρχουν είναι αυτοί που περιλαµβάνουν κείµενο όπως η λέξη «Hello». Αλφαριθµητικό(string).Στη RobotC,η λέξη «Hello» είναι µία συλλογή από τα γράµµατα «Η», «e», «l», «l», «o».στην πραγµατικότητα,ενώ όλες οι λέξεις είναι αλφαρηθµητικά για τη RobotC,γενικότερα το αντίστροφο δεν ισχύει και δεν αποτελούν κατ ανάγκη ένα σύνολο γραµµάτων.ένα αλφαρηθµητικό µπορεί να είναι µία σειρά από αριθµούς ή αριθµούς και γράµµατα µαζί.strings: «Hello», «my name is», «a16z». iv. Λογικές(boolean) ή αλλιώς bool τιµές µπορεί να είναι true ή false. 59
Συµπερασµατικά,λοιπόν,όταν ο χρήστης θέλει να αποθηκεύσει κάποιες τιµές,χρησιµοποιεί µεταβλητές κατάλληλου τύπου για να κρατήσει τιµές που θα ανακτηθούν αργότερα.οι µεταβλητές δηλαδή,πρέπει να υπογράφονται από τύπο και όνοµα. 3.10.3 ROBOTC for MINDSTORMS - NXT Remote Screen Αυτό το παράθυρο εκσφαλµάτωσης είναι διαθέσιµο µόνο σε πλατφόρµες NXT και FCD.Η αποµακρυσµένη οθόνη επιτρέπει στο χρήστη να ελέγχει το NXT από τον προσωπικό του υπολογιστή. Εικόνα 5.35 NXT screen Εικόνα 5.36 Κουµπιά στο NXT 60
3.11 ΛΕΙΤΟΥΡΓΙΕΣ ΤΟΥ NXT ΣΤΟ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ ROBOTC Το περιβάλλον της RobotC και συγκεκριµένα το πρότυπο κώδικα (code template) δίνει στο χρήστη και προγραµµατιστή κάποιες διαθέσιµες συναρτήσεις, τις οποίες µε τη διαδικασία «σειρε και άφησε»(drag and drop)µπορεί να µεταφέρει στον editor και να συνθέσει το δικό του πρόγραµµα.στη συνέχεια,λοιπόν,θα αναφέρουµε µερικές από αυτές και τη λειτουργία που επιτελεί η καθεµία. 3.11.1 ROBOTC for MINDSTORMS - Battery and Power Control Το firmware του ΝΧΤ κρατά τα λεπτά αδράνειας του NXT.Όταν αυτό υπερβεί ένα συγκεκριµένο όριο,τότε το NXT αυτόµατα θα κλείσει.ως αδράνεια καθορίζεται ο χρόνος χωρίς το πάτηµα ενός κουµπιού.ας σηµειωθεί ότι το NXT µπορεί να συµπεριφερθεί απρόβλεπτα σε χαµηλές τάσεις και όταν προσπαθήσει να γράψει στη µνήµη flash.έτσι,όποτε η RobotC πετύχει µία σύνδεση ανάµεσα στον υπολογιστή και στο NXT ελέγχει την τάση της µπαταρίας.αν η τάση είναι αρκετά χαµηλή για αξιόπιστη λειτουργία,η RobotC θα εγκαταλείψει τη σύνδεση. Στο πρότυπο κώδικα(code template) δίνεται στο χρήστη για δυνατότητα «drag and drop» η έκφραση: poweroff( ); :Απενεργοποιεί αµέσως τον ελεγκτή. Εικόνα 5.37 New Lithium Battery 61
3.11.2 ROBOTC for MINDSTORMS Bluetooth Όπως ήδη έχει αναφερθεί και σε προηγούµενη ενότητα (3.9 Bluetooth και NXT),το BT είναι ένα πρωτόκολλο επικοινωνίας που µπορεί να χρησιµοποιηθεί για τη σύνδεση δύο NXT Bricks.Έτσι,δίνονται στη διάθεση του χρήστη συναρτήσεις όπως: setfriendlyname(sfriendlyname):χρησιµοποιείται για να δηλώνει το «φιλικό όνοµα» από το NXT.Αυτό το όνοµα επιδεικνύεται στην κορυφή και κεντρικά της οθόνης LCD. και µεταβλητές όπως: bbtbusy:διαβάζει µόνο λογικές µεταβλητές που δηλώνουν αν το ΒΤ έχει χρησιµοποιηθεί πρόσφατα. bbthasprogresssounds:λογικές µεταβλητές που καθιστούν επιτρεπτό ή όχι την ανατροφοδότηση ήχου κατά την σύνδεση/αποσύνδεση µε Bluetooth. bbtvisble:λογική µεταβλητή που δηλώνει αν το Bluetooth είναι διαθέσιµο ή όχι.σε περίπτωση που είναι δηλώνεται µε το true,ενώ αν δεν είναι µε false. 3.11.3 ROBOTC for MINDSTORMS - Math Μία συλλογή από µαθηµατικές συναρτήσεις µπορεί ο χρήστης να χρησιµοποιήσει όταν συνθέτει προγράµµατα.η RobotC δίνει τη µεταβλητή random(range),η οποία επιστρέφει µία ακέραια τιµή µε εύρος 0-32767.Επίσης: sin(fradians) και cos(fradians) :Επιστρέφει το ηµίτονο και το συνηµίτονο της παραµέτρου εισόδου.η τιµή της εισόδου είναι ένας πραγµατικός αριθµός σε ακτίνια. sindegrees(degrees) και cosdegrees(degrees) :Επιστρέφει αντίστοιχα το ηµίτονο και το συνηµίτονο,αλλά αυτή τη φορά η τιµή της εισόδου συγκεκριµενοποιείται σε µοίρες. 3.11.4 ROBOTC for MINDSTORMS - Display Η RobotC παρέχει µία σειρά από λειτουργίες ζωγραφίζοντας σχήµατα ή παρουσιάζοντας κείµενο στην LCD οθόνη.το NXT είναι εξοπλισµένο µε ανάλυση εικόνας 64 pixels. Η κάτω αριστερή γωνία σηµειώνεται σαν (0,0) και η πάνω δεξιά της οθόνης ως (99,63). Υπάρχουν 8 αριθµηµένες γραµµές κειµένου από 0 έως 7.Η 0 είναι η πιο πάνω γραµµή στην οθόνη και η 7 η κατώτερη. Ο προγραµµατιστής προκειµένου να κάνει το NXT να εµφανίσει στην οθόνη του εικόνα ή κείµενο χρησιµοποιεί συναρτήσεις όπως: nxtdisplaystringat(xpos, ypos, sstring); Σχηµατίζει ένα αλφαρηθµιτικό στην LCD οθόνη και το επιδυκνύει σε συντεταγµένες (Χ,Υ). nxtdisplayiconfile(xpos, ypos, sfilename); 62
Εκθέτει την εικόνα ενός φακέλου στην οθόνη LCD µε συντεταγµένες (Χ,Υ). Εικόνα 5.38 NXT LCD screen 3.11.5 ROBOTC for MINDSTORMS - Messaging Το NXT έχει µία µεγάλη δυνατότητα επικοινωνίας µεταξύ δύο NXTs χρησιµοποιώντας Bluetooth.Οι λειτουργίες «Messaging» που περιγράφονται εδώ παρέχουν έναν πολύ καλό τρόπο αξιοποίησης αυτής της επικοινωνίας. Υπάρχουν δύο λειτουργίες για εύκολη αποστολή µηνυµάτων.η µία στέλνει µία τιµή 16 bits και η άλλη τρείς τιµές των 16 bits.οποιοδήποτε από τα NXTs µπορεί να στέλνει µηνύµατα οποιαδήποτε στιγµή.είναι ευθήνη του χρήστη προγράµµατος να µη στέλνει τόσο συχνά,αφού αυτά µπορεί να προκαλέσουν συµφόρηση,δηµιουργώντας ουρές στο πρόγραµµα.έτσι.όσο αναφορά την αποστολή µηνυµάτων έχουµε: sendmessage(nmessageid) :Στέλνει ένα µήνυµα που µπορεί να είναι λέξη των 16 bits.το «nmessageid» κυµαίνεται σε ένα εύρος -32767 έως +32767.Η τιµή 0 θεωρείται ασθενής και δε πρέπει να χρησιµοποιείται. sendmessagewithparm(nmessageid, nparm1, nparm2) :Το µήνυµα περιέχει τρεις τιµές των 16 bits.αυτό είναι χρήσιµο,αφού δίνεται η δυνατότητα αποστολής χωριστής πληροφορίας σε ένα µόνο µήνυµα.όπως και πριν,καλό είναι να αποφεύγεται η τιµή 0 για το «nmessageid». Στο πρότυπο κώδικα της RobotC δίνονται για χρήση και οι µεταβλητές: 63
Message:µε εύρος -32767 έως +32767.Η τιµή 0 δηλώνει ότι δεν υπάρχει µήνυµα.το firmware ελέγχει αν υπάρχουν µηνύµατα στην ουρά. messageparm[ ] :µηνύµατα µε περισσότερς από τρεις λέξεις.το messageparm[0] είναι το ίδιο µε το messageparm[1]. Εικόνα 5.39 NXT BossHelpers 3.11.6 ROBOTC for MINDSTORMS - Motors Όπως ήδη έχει αναφερθεί και σε προηγούµενη ενότητα,το NXT διαθέτει τρεις κινητήρες A,B και C.Κάθε κινητήρας είναι εξοπλισµένος µε έναν ολοκληρωµένο κωδικοποιητή ο οποίος µπορεί να χρησιµοποιηθεί για να καθορίσει την ισχύουσα θέση του κινητήρα. Ξεκινώντας λοιπόν την περιήγηση µας στο πρότυπο κώδικα µία από τις πρώτες συναρτήσεις που ο χρήστης έχει στη διάθεσή του και αφορά τους κινητήρες είναι η συνάρτηση motor().η τελευταία δηλώνει τη δύναµη ή αλλιώς το επίπεδο ταχύτητας των κινητήρων το οποίο κυµαίνεται από -100 έως 100.Οι αρνητικές τιµές δηλώνουν αντιστροφή,οι θετικές κίνηση σε ευθεία γραµµή και οι µηδενικές ακινησία.συντάσεται ως εξής:motor[ ] = speed; Αναφέρουµε χαρακτηριστικά τα παρακάτω παραδείγµατα: a. motor[motorc]=100; motor[motorb]=100; 64
Εικόνα 5.40 Κίνηση σε ευθεία γραµµή λόγω θετικών τιµών µε Β,C οι κινητήρες. b. motor[motorc]=0; motor[motorb]=0; Εικόνα 5.41 To NXT παραµένει στάσιµο. Όσο αναφορά τη συνάρτηση bmotorreflected() οι τιµές της κυµαίνονται σε Boolean τιµές(0,1).μπορούµε να κατασκευάσουµε ένα µοντέλο Lego,όπου η ευθεία και αντίστροφη διεύθυνση του κινητήρα είναι το αντίθετο από αυτό που φαίνεται λογικό.όπως για παράδειγµα η συνάρτηση bmotorreflected[ motora ]=true; η οποία αντανακλά τη λογική διεύθυνση του κινητήρα. Τέλος,ο χρήστης έχει στη διάθεσή του και τη συνάρτηση nmotorencoder() που δηλώνει την ισχύουσα αξία του κωδικοποιητή.οι τιµές κυµαίνονται σε ένα εύρος -32768 έως +32768,όπως για παράδειγµα όταν θέλουµε να περιµένουµε µέχρι ο κινητήρας να κατακτήσει µία συγκεκριµένη θέση γράφουµε: While (nmotorencoder[motor A]<1000) {.. } 65
3.11.7 ROBOTC for MINDSTORMS - Sensors Το NXT διαθέτει εκτός από τους κινητήρες και τέσσερις αισθητήρες S1,S2,S3 και S4.Υπάρχει µία ποικιλία από λειτουργίες και µεταβλητές που χρησιµοποιούνται για να σχηµατίσουν τέτοιες θύρες.το περιβάλλον της RobotC εµφανίζει στην οθόνη του υπολογιστή έναν αριθµό από παράθυρα που επιτρέπουν στο χρήστη να τοποθετεί τιµές στα παρακάτω πεδία: -Το όνοµα της µεταβλητής που εκχωρείται στον αισθητήρα.υπάρχει,ωστόσο,ένας αριθµός ήδη καταχωρηµένων µεταβλητών που περιέχουν πληροφορίες για τους αισθητήρες.η περιοχή αυτή περιλαµβάνει ονόµατα όπως S1,S2,S3 και S4,που αναφέρθηκαν και προηγουµένως,ενώ θεωρείται καλός προγραµµατισµός να εκχωρούνται στους αισθητήρες ονόµατα όπως lightsensor,sonar κτλ. -Τον τύπο του αισθητήρα.το NXT διαθέτει αρκετούς βελτιωµένους αισθητήρες όπως ο αισθητήρας αφής,ήχου,φωτός και το firmware πρέπει να γνωρίζει κάθε φορά ποιος χρησιµοποιείται. -Η «µόδα» του αισθητήρα.η αξία του αισθητήρα έχει εύρος 0 έως 100 και µετριέται σε επί τοις εκατό.άλλες µονάδες µέτρησης είναι οι «Celsius» και «Fahrenheit» οι οποίες χρησιµοποιούνται για να συγκεκριµενοποιήσουν την κλίµακα της θερµοκρασίας που έχουν οι αισθητήρες. Εικόνα 5.42 NXT functions-sensors Ο χρηστής,λοιπόν,έχει στη διάθεση του την έκφραση SensorValue[ ].Ανάλογα µε τον αισθητήρα που χρησιµοποιείται καθέ φορά συντάσσεται ως εξής: Αισθητήρας Αφής (SensorValue(touchSensor) ) :το NXT αντιδρά ανάλογα αν ο αισθητήρας αφής είναι πιεσµένος ή όχι. Ως εφαρµογή στην παραπάνω έκφραση αξίζει να σηµειωθεί και το παρακάτω παράδειγµα. 66
Εικόνα 5.43Κώδικας που το NXT προχωράει ευθεία όσο ο αισθητήρας αφής είναι ελεύθερος. Εικόνα 5.44 Αισθητήρας αφής όταν είναι πιεσµένος Αισθητήρας φωτός (SensorValue(lightSensor) ) :ανάλογα µε την τιµή, το NXT αντιδρά όταν συναντά σκοτεινή ή φωτεινή επιφάνεια. 67
Εικόνα 5.45 Αισθητήρας φωτός όταν συναντήσει φωτεινή επιφάνεια Αισθητήρας όρασης (SensorValue(sonarSensor)):το NXT ανιχνεύει εµπόδιο σε συγκεκριµένη απόσταση και συµπεριφέρεται αναλόγως. Εικόνα 5.46 Αισθητήρας ultrasonic ανιχνεύει αν υπάρχει εµπόδιο Αισθητήρας ήχου (SensorValue(soundSensor) ) :το NXT αντιδρά στην παραγωγή κάποιου ήχου. 68
Εικόνα 5.47 To ΝΧΤ αποκρίνεται στο χειροκρότηµα 3.11.8 ROBOTC for MINDSTORMS - Sound Η RobotC παρέχει παρέχει και µία σειρά από κατανοητές λειτουργίες ήχου για να ελέγχει το NXT.Το firmware της RobotC διαθέτει µία ουρά,η οποία περιέχει πάνω από δέκα µουσικά στοιχεία που µπορούν να χρησιµοποιηθούν για playback.αυτό επιτρέπει σε χρησιµοποιούµενα προγράµµατα να συνεχίσουν την εκτέλεση,χωρίς να χρειάζεται να περιµένουν ένα µουσικό στοιχείο να τελειώσει. Ο χρήστης λοιπόν έχει στη διάθεσή του συναρτήσεις όπως: ClearSounds( ),η οποία καθαρίζει όλες τις εντολές ήχου που υπάρχουν στο πρόγραµµα. PlaySound(sound),η οποία επιτρέπει στο NXT να παίξει έναν από τους ήδη καθορισµένους ήχους(βόµβος,µπιπ,κλίκ). -Σε περίπτωση που ο χρήστης επιθυµεί το NXT να παίξει ένα αρχείο ήχου από το σύστηµα αρχείων του NXT κάνει χρήση της συνάρτησης PlaySoundFile(sFileName).Έτσι,η RobotC θα καταβάσει αυτόµατα τα απιατούµενα αρχεία. PlayTone(frequency,durationIn10MsecTicks):παίζει ένα σταθερό ήχο σε συγκεκριµένη συχνότητα και µε συγκεκριµένη διάρκεια. Προς διευκόλυνση του προγραµµατιστή ανανφέρεται το ακόλουθο παράδειγµα: 69
Εικόνα 5.48 Όσο ο ήχος είναι µικρότερης τιµής από 70%,το NXT προχωρά σε ευθεία γραµµή,αλλιώς σταµατά. Όπως έχει αναφερθεί και σε προηγούµενη ενότητα,ο αισθητήρας ήχου µπορεί να ανιχνεύσει και DB και DBA,προσαρµόζοντας την ευαιασθησία του αισθητήρα σε εκείνη του ανθρώπινου αυτιού.ας δούµε όµως τώρα πώς αυτός ο αισθητήρας αντιδρά σε τόνους διαφορετικών συχνοτήτων στην πραγµατικότητα.για την εξαγωγή του παρακάτω γραφήµατος γίνεται χρήση matlab. 70
Εικόνα 5.49 Γράφηµα σε matlab Το διάγραµµα δείχνει πως ο αισθητήρας ήχου προσδιορίζει τα διαφορετικά επίπεδα φωνής για διαφορετικές συχνότητες,ενώ η φυσική φωνή του οµιλητή δεν αλλάζει.γενικότερα,η µέτρηση των επιπέδων ήχου είναι ένα πολύπλοκο πρόβληµα,γι αυτό µπορούµε να µελετήσουµε τα δεδοµένα πιο ελεύθερα,χωρίς να υπάρχει αυστηρή ακουστική( nxtasy.org,2009). 3.11.9 ROBOTC for MINDSTORMS Timing Ένα εσωτερικό ρολόι των 32 bits υποστηρίζεται από το firmware του NXT και µετράει σε ενότητες του ενός millisecond.τέσσερις µετρητές(τ1,τ2,τ3 και Τ4)χρησιµοποιούνται γι αυτό το λόγο,µπορούν ατοµικά να µηδενίζονται και να µετράν το χρόνο των γεγονότων που παρέρχεται.ακέραιοι των 16 bits είναι ο default τύπος µεταβλητής για τη RobotC στο NXT,προκειµένου να αποφεύγονται και υπερχειλίσεις χρόνου.η µεταβλητή αυτή παίρνει θετικές τιµές εύρους 0 έως 32,767 και το πρόγραµµα περιοδικά µηδενίζει τους µετρητές που χρησιµοποιούνται προς αποφυγή,όπως αναφέραµε και προηγουµένως, υπερχειλίσεων. Το πρότυπο κώδικα της RobotC δίνει στον προγραµµατιστή µία σειρά από συναρτήσεις και µε τη µέθοδο «drag and drop» µπορεί να τις χρησιµοποιήσει και να συνθέσει το δικό του πρόγραµµα.κάνοντας χρήση συναρτήσεων όπως: 71
wait1msec(nmsec) ή wait10msec(ntenmsec), η εκτέλεση του προγράµµατος περιµένει για συγκεκριµένο χρόνο της τάξης του ενός ή δέκα millisecond.ο αριθµός στις παρενθέσεις,είναι ο αριθµός των millisecond που θα περιµένει το ροµπότ µέχρι να εκτελέσει την επόµενη εντολή. Εικόνα 5.50 Ο χρόνος στη RobotC Επίσης,χρησιµοποιείται: ClearTimer(theTimer) :µεταβλητή για να µηδενίσει τη τιµή ενός µετρητή. time1[ ], time10[ ], time100[ ] :κρατούν κάθε φορά την τιµή των µετρητών.έτσι,για παράδειγµα γράφοντας την έκφραση time1[t1] σηµαίνει ότι ο µετρητής T1 µετρά σε χρόνο της τάξης του ενός millisecond και αντίστοιχα γράφοντας time100[t1] της τάξης των 100 millisecond.αξίζει όµως να σηµειωθεί ότι µηδενίζοντας το time1[t1] συνεπάγεται και το µηδενισµό των time10[t1] και time100[t1]. Τέλος,δίνονται στο χρήστη από τη RobotC η δυνατότητα για drop and drag των µεταβλητών nsystime και npgmtime.η πρώτη µηδενίζεται όταν το NXT ανοίξει και η δεύτερη όταν το πρόγραµµα ξεκινάει να τρέχει. 72
ΚΕΦΑΛΑΙΟ 4: Φύλλα Εργασίας και Σχέδια Μαθήµατος για την Πλατφόρµα RobotC Τα εισαγωγικά µαθήµατα προγραµµατισµού είναι πολλές φορές απογοητευτικά τόσο για τους µαθητές όσο και για τους καθηγητές.όπως προκύπτει από σχετική βιβλιογραφία, ένας από τους σηµαντικότερους παράγοντες στον οποίο έχει διαπιστωθεί ότι οφείλονται οι δυσκολίες κατά την εκµάθηση προγραµµατισµού είναι η παραδοσιακή προσέγγιση της διδασκαλίας των αρχών προγραµµατισµού(ξυνόγαλος,2002).σύµφωνα µε την παραδοσιακή αυτή µέθοδο,οι µαθητές διδάσκονται µία γλώσσα προγραµµατσιµού που δεν ικανοποιεί τις ανάγκες τους, δεν τους βοηθά στην κατανόηση νέων εννοιών.κατά κανόνα καλούνται να αντιµετωπίσουν προβλήµατα που αφορούν συνήθως την εµφάνιση αποτελεσµάτων.έτσι, οι σπουδαστές επικεντρώνουν την προσοχή τους περισσότερο στην εκµάθηση της ίδιας γλώσσας,παρά στην επίλυση προβληµάτων και ασχολούνται µε προβλήµατα που δεν τους φαίνονται ενδιαφέροντα. Τα τελευταία χρόνια, στη διδασκαλία του προγραµµατισµού χρησιµοποιούνται φυσικά µηχανικά µοντέλα που συνδέονται µε υπολογιστή, όπως τα προγραµµατιζόµενα µοντέλα της LEGO, που µπορούν να κινούνται, να εκτελούν έργα και γενικά να αλληλεπιδρούν πρόκειται δηλαδή για ένα είδος αυτόµατου µηχανισµού που είναι ευρέως γνωστό ως «ροµπότ». Η διαπίστωση για τη χρήση ροµπότ επιβεβαιώνεται από τα προγράµµατα σπουδών σε αρκετά εκπαιδευτικά ιδρύµατα όλων των βαθµίδων, τα οποία επανεξέτασαν τα εισαγωγικά µαθήµατα προγραµµατισµού και δηµιούργησαν νέες σειρές µαθηµάτων. Στις ενότητες που ακολουθούν εξετάζεται ο βαθµός στον οποίο συµβάλλει η νέα προσέγγιση στην εξάλειψη των αδυναµιών και των προβληµάτων της παραδοσιακής µεθόδου και επισηµαίνονται δυσκολίες ή προβλήµατα που παρατηρήθηκαν στην τάξη µε τη χρήση των φυσικών µοντέλων LEGO Mindstorms. Το περιβάλλον της RobotC,όπως ήδη έχουµε αναφέρει,προσφέρει µία σειρά από έτοιµα αναπτυγµένα προγράµµατα που θα αποτελέσουν τη βάση για τη συγγραφή άλλου κώδικα.προκειµένου,όµως,να βοηθήσουµε τους µαθητές για µια καλύτερη διδακτική προσέγγιση της RobotC και της πλατφόραµς NXT-G τους αναθέτουµε συνθετικές εργασίες,δηλαδή σχέδια εργασίας.οι συνθετικές εργασίες είναι µαθητοκεντρικές δραστηριότητες που σκοπό έχουν να βοηθήσουν τους µαθητές να συνδυάσουν γνώσεις ήδη αποκτηµένες,να ανατρέξουν σε πηγές για την οικοδόµηση νέων γνώσεων,να συνθέσουν αυτές τις γνώσεις δηµιουργικά µε το δικό τους προσωπικό τρόπο(πολίτης, 2000).Έτσι,ο εκπαιδευτικός από «πηγή γνώσης»αναλαµβάνει το ρόλο του συµβούλου,του καθοδηγητή και του εµψυχωτή της προσπάθειας των µαθητών για σύνθεση και δηµιουργία προγραµµάτων(β.κόµης,2005).η υλοποίηση τέτοιων σχεδίων εργασίας γίνεται σε οµάδες των 2 ατόµων και σκοπός τους είναι(εππσ,1997): Η ανάπτυξη συνθετικής σκέψης και ικανότητας Η καλλιέργεια πνεύµατος αναζήτησης Η ανάπτυξη της ικανότητας του µαθητή να µαθαίνει µόνος του,µάθηση µέσω πράξης Η προώθηση κλίσεων,ενδιαφερόντων και τεχνικών δεξιοτήτων 73
Ο εθισµός στην υπεύθυνη εργασία Η αναγνώριση της αξίας της συνεργατικής δουλειάς και η ανάπτυξη δραστηριοτήτων. Επιπρόσθετα,τα φύλλα εργασίας που δηµιουργούµε και προσφέρουµε στους µαθητές µπορούν να περιλαµβάνουν και(β.κόµης,2005): Ερωτήσεις «πρόβλεψης» Ο µαθητής πρώτα προβλέπει τι τιµή θα πάρει κάποια µεταβλητή που χρησιµοποιείται στο πρόγραµµα ή ποια θα είναι η έξοδος του προγράµµατος και µετά εκτελεί στην προσοµοιωµένη αναπαράσταση την εντολή,συγκρίνοντας το αποτέλεσµα µε την πρόβλεψή του. Ερωτήσεις «πιθανών παρανοήσεων» Ρωτάµε τους µαθητές κατάλληλες ερωτήσεις ώστε να σκεφθούν πάνω σε πιθανές παρανοήσεις που κάνουν οι αρχάριοι. Εικόνα 4.1 Ενασχόληση των παιδιών µε το NXT 74
4.1 ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΑΤΦΟΡΜΑ ROBOTC. 4.1.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΩΝ LEGO MINDSTORMS ΣΕ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ ROBOTC. ΗΜ/ΝΙΑ: / / Εικόνα 4.2 1.ΛΙΓΑ ΛΟΓΙΑ ΓΙΑ ΤΗΝ ΠΛΑΤΦΟΡΜΑ ROBOTC Η πλατφόρµα RobotC βασίζεται στη γλώσσα προγραµµατσιµού C. Εντολές σαν τις παρακάτω Εικόνα 4.3 Τµήµα κώδικα προς εκτέλεση αποτελούν τµήµα ενός προγράµµατος και ονοµάζεται κώδικας. Γράφουµε τον κώδικα σαν ένα κανονικό κείµενο,αλλά στην πραγµατικότητα πρέπει να προσέχουµε την κεφαλαιοποίηση,αφού η RobotC αλλιώς καταλαβαίνει τα πεζά από τα κεφαλαία και αυτό µπορεί να δηµιουργήσει πρόβληµα. ΕΞΟΙΚΕΙΩΣΗ Σε περίπτωση που γράψουµε τον ακόλουθο κώδικα: 75
Εικόνα 4.4 Σύνθεση κώδικα Συνάρτηση main( ) Η RobotC δε θα αναγνωρίσει την εντολή task main ( ). Κάθε πρόγραµµα στη RobotC διαθέτει task main ( ) µέσα στην οποία ορίζονται και ποιες εντολές θα εκτελεστούν. Η αριστερή και δεξιά αγκύλη { } ανήκουν στην main και περικλείουν τις εντολές. Η κάθε δήλωση τελειώνει µε ένα (;),ώστε η RobotC να καταλαβαίνει την αρχή και το τέλος της καθεµιάς. Εικόνα 4.5 Σύνθεση κώδικα Εντολές ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Σας δίνετε ο παρακάτω κώδικας: Εικόνα 4.6 Τµήµα κώδικα χωρίς κενά µεταξύ των εντολών 76
Το πρόγραµµα αυτό είναι ίδιο µε αυτό που απεικονίζεται στην εικόνα 4.5.Αγνοώντας τις εντολές µέσα στη main( ) ποιό πρόγραµµα θα προτιµούσατε και γιατί;............ 2. ΒΑΣΙΚΑ ΕΡΓΑΛΕΙΑ Ανοίγουµε το πρόγραµµα RobotC κάνοντας διπλό κλίκ στο αντίστοιχο εικονίδιο και συναντάµε µία εικόνα (εικόνα 4.7). Οι αριθµοί δείχνουν τη λειτουργικότητα κάθε περιοχής. Εικόνα 4.7 Περιβάλλον της RobotC Κουµπί Ονοµασία Λειτουργικότητα 1 Code template Παρέχει συναρτήσεις που είναι διαθέσιµες στη RobotC.Τραβώντας τµήµα κώδικα µε τη διαδικασία «drag and drop»,το µεταφέρει στον editor. 2 Editor Γίνεται η συγγραφή κώδικα. 3 Menu Η γραµµή µενού δίνει στο χρήστη µία σειρά µε τις λειτουργίες της RobotC. 77
4 Toolbar Παρέχει µία σειρά συχνά χρησιµοποιούµενων εντολών της RobotC,π.χ αντιγραφή ή επικόλληση. Πίνακας 4.1 Λειτουργικότητα κάθε περιοχής στη RobotC Περνώντας το ποντίκι πάνω από κάποια συνάρτηση του πρότυπου κώδικα επεξηγείται η σηµασία της(εικόνα 4.8).Μπορούµε δηλαδή µε τη διαδικασία «σύρε και άφησε» (drag and drop) να µεταφέρουµε συναρτήσεις στον συντάκτη κειµένου. Εικόνα 4.8 Σηµασία της κάθε έκφρασης στο code template ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 2 Μεταφέρετε εσείς τώρα συναρτήσεις µε τη διαδικασία «drag and drop».πως θα µπορούσε να διευκολύνει η διαδικασία αυτή τη συγγραφή κώδικα;............... 78
3. ΑΝΑΝΕΩΣΗ FIRMWARE Για να καταλάβει το NXT τα προγράµµατα που είναι γραµµµένα στη RobotC και να τα εκτελέσει απαιτείται η ανανέωση του firmware(eικόνα 4.9).Τα βήµατα που ακολουθούµε για την ανανέωση είναι: a. Έλεγξε ότι το NXT είναι συνδεδεµένο µέσω ενός USB µε τον υπολογιστή. b. Πίεσε το πορτοκαλί κουµπί στο NXT για να ανοίξει. c. Από τη γραµµή µενού επιλέγουµε Robot και Download Firmware. d. Από το παράθυρο που εµφανίζεται επιλέγουµε «F/W Download» και την µικρότερη έκδοση αρχείου firmware που υπάρχει µε κατάληξη «.rfw». e. Όταν το firmware ανανεώνεται επιτυχώς εµφανίζεται το µήνυµα «Firmware Download Complete». Εικόνα 4.9 Download Firmware ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 3 Εφαρµόστε τα παραπάνω βήµατα στον υπολογιστή σας.τι παρατηρείται να συµβαίνει στο NXT;......... 4. ROBOTC FOR LEGO MINDSTORMS-MOTOR Το NXT διαθέτει τρεις κινητήρες A,B και C.Ανοίγοντας από το πρότυπο κώδικα την ενότητα motors συναντάµε µεταβλητές που µπορούµε να χρησιµοποιήσουµε. 79
motor[ ]: ηλώνει την ταχύτητα των κινητήρων του NXΤ,κυµαίνεται από -100 έως 100 και συντάσεται ως εξής motor[ ]=speed; Εικόνα 4.10 Η έκφραση motor ( ) στο code template Ένα εσωτερικό ρολόι της RobotC µετράει σε ενότητες του ενός millisecond.συναντάµε δηλαδή εκφράσεις όπως: wait1msec(nmsec):η εκτέλεση του προγράµµατος περιµένει για συγκεκριµένο χρόνο της τάξης του ενός millisecond. Εικόνα 4.11 Εκφράσεις χρόνου στο code template Τα βήµατα ώστε ένα πρόγραµµα να τρέξει επιτυχώς είναι: a. Έλεγξε ότι το NXT είναι συνδεδεµένο µέσω ενός USB µε τον υπολογιστή. b. Πίεσε το πρτοκαλί κουµπί για να ανοίξει. c. Άνοιξε απότ ο µενού την επιλογή Robot και επέλεξε Compile και Download. 80
d. Πίεσε το κουµπί Start στο παράθυρο Program Debug. e. Εφόσον στο πρόγραµµα δεν υπάρχει λάθος εκετελείται από το NXT. ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Ακολουθώντας τις παραπάνω οδηγίες,εκτελέστε το πρόγραµµα που σας δίνετε παρακάτω: Εικόνα 4.12 Τί κίνηση κάνει το NXT;...... ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Με ποιά τιµή πρέπει να αντικαταστήσω το 100 για να παραµείνει στάσιµο το NXT;... To προς εκτέλεση πρόγραµµα εµφανίζεται παρακάτω: 81
Εικόνα 4.13 Εκτελεί το ροµπότ τη σωστή κίνηση;... Ταιριάζει η αντίδρασή του µε τη εικόνα 4.14; Εικόνα 4.14 Κίνηση NXT........ ΡΑΣΤΗΡΙΟΤΗΤΑ 6 Σε περίπτωση που η τιµή αλλάξει από 100 σε -100 τι σηµαίνει;... 82
Εικόνα 4.15 Κώδικας µε ταχύτητα κινητήρα 100 και -100 Εκτελέστε τώρα το πρόγραµµα και καταγράψτε την κίνηση του NXT....... ΡΑΣΤΗΡΙΟΤΗΤΑ 7 Αντικαθιστώντας για άλλη µια φορά την ταχύτητα του κινητήρα A µε -100,αφήνωντας αυτή του B ίδια,εκτελέστε το πρόγραµµα.τί συµβαίνει στο NXT;......... ΡΑΣΤΗΡΙΟΤΗΤΑ 8 Παρατηρήστε τον κώδικα της εικόνα 4.16. Εικόνα 4.16 83
Χωρισµένοι σε οµάδες των 2 ατόµων αναλάβετε ο ένας το ρόλο του επιστηµόνα και ο άλλος του κριτή. Γράψτε τα ονόµατά σας: Μέλος Α:Επιστήµονας... Μέλος Β:Κριτής... Ο επιστήµονας απαντά στις παρακάτω ερωτήσεις: Τί τιµές παίρνει η ταχύτητα;... Πόσο χρόνο θα εκτελεί την κίνηση το NXT;Κάνετε µία πρόβλεψη. Στη συνέχεια ο κριτής εκτελεί το πρόγραµµα. Είναι η πρόβλεψή που έγινε σωστή; Αν όχι, γιατί;... Σηµείωση:Θυµηθείτε ότι «τρέχετε» επιτυχώς ένα πρόγραµµα ακολουθώντας τα κατάλληλα βήµατα. 5. ROBOTC FOR LEGO MINDSTORMS-DISPLAY Εκτός από προγράµµατα που δηµιουργούνται µε χρήση κινητήρων,υπάρχουν και αυτά που επιδεικνύουν στην οθόνη LCD του NXT κείµενο ή εικόνα.το πρότυπο κώδικα της πλατφόρµας RobotC προσφέρει έτοιµες εκφράσεις όπως: nxtdisplaystringat(xpos, ypos, sstring); Σχηµατίζει ένα αλφαρηθµιτικό στην LCD οθόνη και το επιδυκνύει σε συντεταγµένες (Χ,Υ). nxtdisplayiconfile(xpos, ypos, sfilename); Εκθέτει την εικόνα ενός φακέλου στην οθόνη LCD µε συντεταγµένες (Χ,Υ). ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 9 Ανανεώνωντας το firmware και σε αυτήν την περίπτωση,εκτελέστε το ακόλουθο πρόγραµµα. 84
Εικόνα 4.17 Εµφάνιση κειµένου στην LCD οθόνη Τι παρατηρείτε να συµβαίνει στο NXT; Πότε τερµατίζει το πρόγραµµα;... 6. ΕΜΦΑΝΙΣΗ ΛΑΘΟΥΣ Όταν ο µεταγλωτιστής τρέχει,η RobotC ελέγχει τον κώδικα του προγραµµατιστή για λάθη και προειδοποιήσεις,οι οποίες µπορούν να οδηγήσουν σε δυσλειτουργία του προγράµµατος,όπως το να µην τρέχει κατάλληλα στο ροµπότ.η RobotC ενηµερώνει για αυτά τα λάθη µε κατάλληλα µηνύµατα. 1 Errors(Λάθη) Μπορεί να είναι ορθογραφικά ή ελλείψεις άνω τελείας. 2 Warnings(Προειδοποιήσεις) Υπάρχει λάθος στο πρόγραµµα αλλά ο µεταγλωττιστής µπορεί να το αγνοήσει.τέτοιες προειδοποιήσεις µπορεί να είναι κεφαλαιοποιήσεις στις λέξεις. 3 Information(Πληροφορία) Εντοπίζονται συναρτήσεις ή µεταβλητές οι οποίες δε χρησιµοποιούµται στο πρόγραµµα Πίνακας 4.2 Λάθη κατά τη µεταγλώττιση του κώδικα ηλώνεται µε «κόκκινο Χ». ηλώνεται µε «κίτρινο Χ» ηλώνεται µε «γκρι Χ» ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 10 Εναλλάξτε τώρα τους ρόλους του κριτή και του επιστήµονα.ο επιστήµονας εδώ θα παίζει το ρόλο του ερευνητή. Γράψτε τα ονόµατά σας: Μέλος Α:Κριτής... Μέλος Β:Ερευνητής... 85
ίνεται το πρόγραµµα και ζητείται από τον ερευνητή να προβλέψει τυχόν λάθη. Εικόνα 4.18 Ανίχνευση λαθών Γνώµη ερευνητή:......... Στη συνέχεια ας εκτελεστεί το πρόγραµµα από τον κριτή,να σχολιάσει το αποτέλεσµα και να αποδεχθεί τη θέση του επιστήµονα ή όχι. Γνώµη κριτή:......... ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ 11 Σας δίνετε ο παρακάτω κώδικας. 86
Εικόνα 4.19 Συνολική δραστηριότητα Εναλάσσοντας για µία ακόµη φορά ρόλους στην οµάδα απαντήστε το κάθε µέλος στις παρακάτω ερωτήσεις. Μέλος Α:Προγραµµατιστής... Μέλος Β:Κριτής.. Ερωτήσεις Προγραµµατιστή 1.Ποιοί κινητήρες χρησιµοποιούνται στο ΝΧΤ για να κινηθεί;... Συµφωνώ Κριτής ιαφωνώ 2.Γράψτε τη γενικότερη έκφραση που δηλώνει ότι το ΝΧΤ κινείται µε δεδοµένη ταχύτητα.... Συµφωνώ ιαφωνώ 87
3.Για πόση ώρα το NXT θα κινηθεί ευθεία µε ταχύτητα 50;... Συµφωνώ ιαφωνώ 4.Τί κίνηση εκτελεί το NXT στο τµήµα κώδικα... Συµφωνώ ιαφωνώ 5.Γράψτε την έκφραση µε την οποία κείµενο εµφανίζεται στην οθόνη LCD του ΝΧΤ.... Συµφωνώ ιαφωνώ Πίνακας 4.3 Απαντήσεις Σχολιασµός Μέλος Α:Κριτής... Μέλος Β:Προγραµµατιστής... Ερωτήσεις Προγραµµατιστή 1.Ποιά είναι η έκφραση που δηλώνει πόσες φορές θα εκτελεστεί µία κίνηση;... Συµφωνώ Κριτής ιαφωνώ 2.Αν το NXT εκτελέσει το τµήµα κώδικα θα επιστρέψει στην αρχική του θέση;αν ναι γιατί;...... Συµφωνώ ιαφωνώ 3.Για πόση ώρα θα µείνει στάσιµο το NXT;... Συµφωνώ ιαφωνώ 4.Πότε τερµατίζει το πρόγραµµα;...... Συµφωνώ ιαφωνώ Πίνακας 4.4 Απαντήσεις Σχολιασµός 88
4.1.2 ΣΧΕ ΙΟ ΜΑΘΗΜΑΤΟΣ 1.ΣΥΝΟΠΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 1.1 ΘΕΜΑ Ι ΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ «Προγραµµατισµός στη πλατφόρµα RobotC» Μία πρώτη γνωριµία µε την πλατφόρµα. 1.2 ΕΜΠΛΕΚΟΜΕΝΕΣ ΓΝΩΣΤΙΚΕΣ ΠΕΡΙΟΧΕΣ Γλώσσα Προγραµµατισµού C 1.3 ΤΑΞΗ Πληροφορική Γ Γυµνασίου 1.4 ΙΑΡΚΕΙΑ 2 ή 3 διδακτικές ώρες 1.5 ΟΡΓΑΝΩΣΗ ΤΗΣ Ι ΑΣΚΑΛΙΑΣ ΚΑΙ ΑΠΑΙΤΟΥΜΕΝΗ ΥΛΙΚΟΤΕΧΝΙΚΗ ΥΠΟ ΟΜΗ Προτείνεται η οργάνωση των µαθητών σε οµάδες 2 ατόµων.απαιτείται πέρα από το συνιθησµένο πίνακα και βιντεοπροβολέας για παρουσιάσεις και ο κατάλληλος αριθµός υπολογιστών για την εφαρµογή των προγραµµάτων.το σενάριο µπορεί να διεξαχθεί σε πρώτο στάδιο στην τάξη και ύστερα σε εργαστήριο πληροφορικής.οι µαθητές θα αναλάβουν την απάντηση των δραστηριοτήτων,αξιοποιώντας το διδακτικό υλικό που παρέχεται µε τη διακριτική καθοδήγηση του εκπαιδευτικού. Επιπλέον υλικό:nxt των Lego Mindstroms και κατάλληλοι αισθητήρες. Λογισµικό: Πλατφόρµα RobotC. 1.6 ΜΟΝΤΕΛΟ Ι ΑΣΚΑΛΙΑΣ Ως µοντέλο διδασκαλίας επιλέγεται το «εποικοδοµητικό» στα πλαίσια του οποίου κυρίαρχο ρόλο παίζουν οι ιδέες των µαθητών.θεωρεί δηλαδή το µαθητή στο κέντρο της διδακτικής διαδικασίας. 1.7 ΣΚΟΠΟΣ Να µελετήσουν οι µαθητές το περιβάλλον της RobotC,έτσι ώστε να µπορούν να διαδράσουν: µε το περιεχόµενο,δηλαδή πόσο διαδραστικό είναι το υλικό µελέτης της RobotC που έχουν στην κατοχή τους, µε το διαδάσκοντα,υποβάλλοντας ερωτήµατα για τυχόν απορίες πάνω στον κώδικα και 89
µε τους συνεκπαιδευόµενους,προσφέροντας δυνατότητες για συνεργασία και επίλυση των προβληµάτων. 1.8 Ι ΑΚΤΙΚΟΙ ΣΤΟΧΟΙ Γνώσεις Οι µαθητές: Να προσεγγίσουν το γνωστικό αντικείµενο της πλατφόρµας RobotC,επιτρέποντας τους να εξοικειωθούν µε το περιβάλλον,το πρότυπο κώδικα,το συντάκτη κειµένου και τη γραµµή εργαλείων,µαθαίνοντας έτσι τον τρόπο συγραφής ενός κώδικα ξεκινώντας από τη main( ). Να κατανοήσουν τα βήµατα ανανέωσης του firmware και εκτέλεσης ενός προγράµµατος. Να εξοικειωθούν µε την έκφραση motor[ ]. Να εξοικειωθούν µε την εµφάνιση κειµένου ή εικόνας στην LCD οθόνη του NXT. εξιότητες Να µπορούν να αναλύουν τα ζητούµενα και τις απαιτήσεις της κάθε δραστηριότητας,διατυπώνοντας και τεκµηριώνοντας την προσωπική άποψη τους. Να καταστούν ικανοί να αξιοποιούν σωστά το λογισµικό της πλατφόρµας RobotC και του NXT Lego Mindstorms. Να αναπτύξουν δεξιότητες συνεργασίας και οµαδικού πνεύµατος καθώς εργάζονται µε το συγκεκριµένο λογισµικό και δουλεύοντας σε οµάδες δύο ατόµων όπου χρειάζεται. Στάσεις Να αναπτύξουν θετική διάθεση απέναντι στον υπολογιστή ως περιβάλλον εργασίας και εργαλείο άντλησης πληροφοριών. 1.9 ΠΡΟΑΠΑΙΤΟΥΜΕΝΕΣ ΓΝΩΣΕΙΣ Οι µαθητές έχουν αναπτύξει από προηγούµενα µαθήµατα τις βασικές δεξιότητες χρήσης του υπολογιστή. 1.10 Ο ΡΟΛΟΣ ΤΟΥ ΑΣΚΑΛΟΥ Με τη χρήση φύλλων εργασίας ο ρόλος του καθηγητή στη διδακτική πράξη διαφοροποιείται.ο εκπαιδευτικός αναλαµβάνει το ρόλο του συµβούλου,του καθοδηγητή και του διευκολυντή της προσπάθειας των µαθητών για γνωριµία µε το περιβάλλον της RobotC.Ενθαρρύνει τη συνεργασία των µαθητών,ώστε να υπάρχει ευχάριστο κλίµα στην τάξη.τα λάθη και οι απορίες όσο αναφορά τις δραστηριότητες µπορεί να αποτελέσουν ευκαιρίες,ώστε να µην αντιµετωπίζονται ως αποτυχίες. 90
2. ΑΝΑΛΥΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 2.1 Α ΦΑΣΗ-ΕΞΟΙΚΕΙΩΣΗ ΜΕΤΟ ΠΕΡΙΒΑΛΛΟΝ Ξεκινώντας ο καθηγητής αναφέρει ονοµαστικά τις οχτώ πλατφόρµες των Lego Mindstorms,διευκρινίζοντας ότι θα αναλυθεί περισσότερο η πλατφόρµα RobotC.Στηριζόµενος στο φύλλο εργασίας προσδιορίζει σε θεωρητικό αρχικά πλαίσιο το περιβάλλον της πλατφόρµας.οι µαθητές µε τη βοήθεια του εκπαιδευτικού κάνοντας διπλό κλίκ στο εικονίδιο της RobotC έρχονται σε πρώτη επαφή µε το περιβάλλον.στο φύλλο εργασίας που τους έχει µοιραστεί φαίνονται τα βασικά µέρη της πλατφόρµας,τα οποία αναλύονται σε πίνακα.επίσης,ο δάσκαλος αναφερόµενος σε µερικά προγράµµατα τονίζει τη δοµή που πρέπει να έχουν οι κώδικες της RobotC ξεκινώντας από τη main( ) και δηλώνοντας εντολές στο εσωτερικό των αγκύλων. ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Ο καθηγητής για να είναι σίγουρος ότι οι µαθητές έχουν συνηδειτοποιήσει τα τµήµατα ενός προγράµµατος,τους δίνει έναν κώδικα που δεν είναι εύκολα αναγνώσιµος.θέτει λοιπόν το ερώτηµα ποιον από τους δύο κώδικες θα επέλεγαν τα παιδιά.αναµενόµενη απάντηση είναι ο πρώτος κώδικας αφού είναι πιο ευανάγνωστος και φιλικός στο ανθρώπινο µάτι. ΡΑΣΤΗΡΙΟΤΗΤΑ 2 Σα δεύτερη ερώτηση κατανόησης,ζητείται από τους µαθητές να εφαρµόσουν τη διαδικασία «drag and drop»,δηλαδή επιλέγουν από το πρότυπο κώδικα την κατάλληλη συνάρτηση και τη σύρουν στον συντάκτη κειµένου.οι µαθητές παρατηρούν ότι καθώς το ποντίκι περνάει πάνω από κάθε συνάρτηση ή µεταβλητη επεξηγείται η σηµασία της(εικόνα 4.8).Οι απόψεις τους ακούγονται µία προς µία. ΡΑΣΤΗΡΙΟΤΗΤΑ 3 Συνεχίζοντας την εξερεύνηση και την εξοικείωση µε την πλατφόρµα,τίθεται το ερώτηµα της ανανέωσης του firmware (Εικόνα 4.9).Ο εκπαιδευτικός τονίζει ότι για να καταλάβει το NXT τα προγράµµατα που είναι γραµµένα στη RobotC,πρέπει να έχει το κατάλληλο firmware,και τους παρακινεί να εκτελέσουν τα κατάλληλα βήµατα. Τίθεται λοιπόν το ερώτηµα:τί παρατηρείτε να συµβαίνει στο NXT;Αναµενόµενη απάντηση η επανεκκίνηση του ΝΧΤ,κλείνοντας µόνο του και ανοίγοντας ξανά.το συµπέρασµα των µαθητών ότι τώρα µπορεί να χρησιµοποιηθέι το ροµπότ µε τη RobotC επιτυχώς είναι σωστό. 2.2 Β ΦΑΣΗ-ΚΑΤΑΝΟΗΣΗ ΚΙΝΗΤΗΡΩΝ ΤΟΥ NXT Για να αφυπνισθεί το πραγµατικό ενδιαφέρον των παιδιών για την πλατφόρµα RobotC,ο καθηγητής ξεκινά την ανάλυση εκφράσεων όπως η motor[ ] και η wait1msec( ) και κυρίως η εκτέλεση τους στο NXT.Έτσι.µία σειρά από δραστηριότητες προσφέρονται στο φύλλο εργασίας. 91
ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Ζητείται από τους µαθητές η εκτέλεση του προγράµµατος,στηριζόµενοι στα βήµατα που αναφέρονται στο φύλλο,και ο σχολιασµός της κίνησης του NXT.Ύστερα από συλλογική συζήτηση καταλήγουν στο ότι το ροµπότ κινείται σε ευθεία γραµµή µε ταχύτητα 100 για 4 seconds. ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Συνεχίζοντας την εξοικείωση µε το NXT,αντικαθιστούν στον κώδικα της δραστηριότητας 4 το 100 µε 0 και αφού εισάγουν τα δεδοµένα και στον υπολογιστή εξάγουν συµπεράσµατα.το ροµπότ παραµένει στάσιµο όπως φανερώνει και η εικόνα. ΡΑΣΤΗΡΙΟΤΗΤΑ 6 Με ανάλογο τρόπο και στην επόµενη δραστηριότητα,οι µαθητές τρέχουν το πρόγραµµα. Πιθανές απορίες για το πότε η ταχύτητα πρέπει να είναι 100 και πότε -100 είναι αναµενόµενες.συνηδειτοποιούν µε τη βοήθεια του καθηγητή ότι το NXT κινείται αρχικά ευθεία για συγκεκριµένο χρόνο και ύστερα αντιστρέφει την πορεία του. ΡΑΣΤΗΡΙΟΤΗΤΑ 7 Αφού τα παιδιά έχουν δει τις βασικές κινήσεις του NXT,ο εκπαιδευτικός προχωράει και στην εκτέλεση δεξιόστροφης κίνησης από το ροµπότ.έτσι,τα παιδιά κατανοούν ότι σε έναν κώδικα η speed µπορεί να πάρει διαφορετικές τιµές και αντικαθιστώντας την τιµή του κινητήρα B µε -100 προκύπτει το ακόλουθο πρόγραµµα. Εικόνα 4.20 εξιόστροφη κίνηση 92
ΡΑΣΤΗΡΙΟΤΗΤΑ 8 Στη δραστηριότητα αυτή εξετάζεται µία από τις τελευταίες κινήσεις του NXT µε τους κινητήρες,η δεξιόστροφη και η αριστερόστροφη κίνηση.ο καθηγητής χωρίζει σε οµάδες των δύο ατόµων τα παιδιά και τους ζητάει να ακολουθήσουν τις οδηγίες της άσκησης.ενθαρρύνει τις σκέψεις αυτών που θα παίξουν το ρόλο του επιστήµονα απαντώντας σε ερωτήσεις,ενώ στη συνέχεια εκτελώντας το πρόγραµµα ο κριτής σχολιάζει τις προβλέψεις.η οµάδα που τα έχει δώσει τις πιο σωστές απαντήσεις επιβραβεύεται. 2.3 Γ ΦΑΣΗ-ΕΠΙ ΕΙΞΗ ΚΕΙΜΕΝΟΥ Η ΕΙΚΟΝΑΣ ΡΑΣΤΗΡΙΟΤΗΤΑ 9 Ο εκπαιδευτικός για να εντυπωσιάσει τους µαθητές τους αναθέτει να εκτελέσουν τον κώδικα της δραστηριότητας 9.Αφού εισάγουν τον κώδικα στη πλατφόρµα RobotC, το ΝΧΤ εµφανίζει στην LCD οθόνη του, το κείµενο «Hello World» στη γραµµή 4 για 5 seconds.στη συνέχεια τα παιδιά ζητούν από τον καθηγητή να παίξουν µε το πρόγραµµα,αλλάζοντας κάθε φορά το κείµενο και εκτελώντας το. 2.4 ΦΑΣΗ-ΑΝΑΛΥΣΗ Ε ΟΜΕΝΩΝ/ΑΝΤΙΜΕΤΩΠΙΣΗ ΛΑΘΩΝ ΡΑΣΤΗΡΙΟΤΗΤΑ 10 Το τελευταίο βήµα του εκπαιδευτικού είναι να µπορούν οι µαθητές να συνθέσουν κώδικα και κυρίως να αναγνωρίζουν τυχόν λάθη.όλοι πλέον γνωρίζουν ότι η συγγραφή κώδικα γίνεται στο συντάκτη κειµένου.παράµενοντας χωρισµένοι σε οµάδες,αλλάζοντας όµως αυτή τη φορά τους ρόλους του προγραµµατιστή και του κριτή,ο καθηγητής τους καλεί να απαντήσουν στη δραστηριότητα. Κατά τη διάρκεια της εργασίας των οµάδων ο εκπαιδευτικός κινείται ανάµεσά τους και τους βοηθά όταν χρειάζεται µε κάποιο σχόλιο ή υπαινιγµό.όταν ζητήσει από τις οµάδες να παρουσιάσουν τα αποτελέσµατά τους,πρέπει ο κριτής να τεκµηριώσει την αποψή του. Στην προσπάθειά του να απαντήσει στη δραστηριότητα,«τρέχει» το πρόγραµµα µε αποτέλεσµα ο ανιχνευτής λαθών να εντοπίσει λάθη και να τα εµφανίσει µε τον κατάλληλο χρωµατισµό.η εικόνα που πρέπει να αντικρίσει ο κριτής είναι: 93
Εικόνα 4.21 Λάθη κατά τη µεταγλώττιση κώδικα Αφού γίνει προσεκτικός έλεγχος,οι οµάδες παρατηρούν ότι στη γραµµή 3 η λέξη Motor γράφεται µε κεφαλαίο,ενώ στη γραµµή 6 λείπει µία άνω τελεία(;). 2.5 Ε ΦΑΣΗ-ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ Οι µαθητές καλούνται να απαντήσουν σε µία σειρά από ερωτήσεις,προκειµένου ο καθηγητής να καταλήξει αν οι µαθητές έχουν κατανοησεί βασικές έννοιες.κατά τη διάρκεια της δρστηριότητας τα παιδιά είναι χωρισµένα σε οµάδες των 2 ατόµων και οι ρόλοι τους εναλλάσσονται µε σκοπό να καλλιεργήσουν την επικοινωνία και το οµαδικό πνεύµα.οι ερωτήσεις αφορούν τον κώδικα της εικόνας 4.19.Στον πίνακα 4.5 φαίνονται οι ερωτήσεις που θα απαντήσει ο προγραµµατιστής και θα σχολιάσει ο κριτής,ενώ στον πίνακα 4.6 οι ρόλοι αντιστρέφονται. Σωστές απαντήσεις αποτελούν: Ερωτήσεις Προγραµµατιστή 1.Ποιοί κινητήρες χρησιµοποιούνται στο ΝΧΤ για να κινηθεί; Χρησιµοποιούνται οι κινητήρες Α και Β 2.Γράψτε τη γενικότερη έκφραση που δηλώνει ότι το ΝΧΤ κινείται µε δεδοµένη ταχύτητα. motor[motora]=speed; 3.Για πόση ώρα το NXT θα κινηθεί ευθεία µε ταχύτητα 50; Θα κινηθεί για 3 seconds. 4.Τί κίνηση εκτελεί το NXT στο τµήµα κώδικα Το ΝΧΤ θα στρίψει δεξιά. 5.Γράψτε την έκφραση µε την οποία κείµενο εµφανίζεται στην οθόνη LCD του ΝΧΤ. nxtdisplaytextline(4, Hello Kids ); Πίνακας 4.5 Σωστές απαντήσεις 94
Ερωτήσεις Προγραµµατιστή 1.Ποιά είναι η έκφραση που δηλώνει πόσες φορές θα εκτελεστεί µία κίνηση; wait1msec( ); 2.Αν το NXT εκτελέσει το τµήµα κώδικα θα επιστρέψει στην αρχική του θέση;αν ναι γιατί; Ναι θα επιστρέψει στην αρχική θέση.αρχικά κινείται µε ταχύτητα 50 ευθεία και ύστερα µε την ίδια ταχύτητα κινείται προς τα πίσω. 3.Για πόση ώρα θα µείνει στάσιµο το NXT; Για 2 seconds θα µείνει στάσιµο. 4.Πότε τερµατίζει το πρόγραµµα; Το πρόγραµµα θα τερµατίσει όταν το NXT εµφανίζει στην οθόνη του το κείµενο «Hello Kids» για 5 seconds. Πίνακας 4.6 Σωστές απαντήσεις ίνεται η δυνάτοτητα παρουσίασης των αποτελεσµάτων από τα µέλη των οµάδων,ενώ οι υπόλοιποι µαθητές παρακολουθούν διατυπώνοντας ερωτήσεις και σχολιάζοντας. 2.6 ΣΤ ΦΑΣΗ-ΣΥΜΠΕΡΑΣΜΑΤΑ Στο τέλος της εργασίας,όλοι οι µαθητές µπορούν να προγραµµατίσουν το ροµπότ τους να κινηθεί µε διάφορους τρόπους.είναι δηλαδή σε θέση να αναλύουν τα δεδοµένα ενός προβλήµατος,να σχεδιάζουν τον τρόπο λύσης του,να αναπτύξουν το πρόγραµµα και στη συνέχεια να το υλοποιούν βλέποντας το ροµποτάκι να εκτελεί τις επιθυµητές ενέργειες.τους δίνεται η ευκαιρία να πειραµατίζονται και να βλέπουν άµεσα το αποτέλεσµα του προγράµµατός τους. Ο εκπαιδευτικός καταλήγει ότι το φύλλο εργασίας έχει αντίκτυπο στα παιδιά,αφού ο παιγνιώδης χαρακτήρας των LEGO τους προτρέπει να είναι ακόµα πιο δηµιουργικά.ο ενθουσιασµός τους µπορεί να διαπιστωθεί και από σχόλια όπως: «Θα ήθελα να αγοράσω ένα.πώς γίνεται;» ή «Θα µπορούσαµε να το χρησιµοποιήσουµε και στο διάλειµµα;» 95
4.1.3 ΑΞΙΟΛΟΓΗΣΗ Κατά τη διάρκεια της διδασκαλίας οι µαθητές φέρνουν στην επιφάνεια προυπάρχουσες γνώσεις για το θέµα ή γνώσεις που έχουν ήδη αποκτηθεί.η αξιολόγηση µπορεί να διεξαχθεί µέσω παρατήρησης της συµµετοχής και του ενδιαφέροντος των µαθητών, µέσω των ερωτήσεων τους.(β.κόµης,2004) ΦΥΛΛΟ ΑΞΙΟΛΟΓΗΣΗΣ 1.Αριθµήστε τα επόµενα βήµατα ώστε ένα πρόγραµµα να «τρέχει» επιτυχώς.τοποθετήστε ένα «Χ»σε περίπτωση που κάποιο βήµα δε χρειάζεται: Γράψε ή άνοιξε ένα ήδη υπάρχον αρχείο. Πίεσε το γκρί κουµπί στο NXT. Πες καθαρά στο ροµπότ, «Τρέξε το πρόγραµµα». Έλεγχε ότι το NXT είναι συνδεδεµένο µε τον υπολογιστή και ανοιχτό. Πλοηγήσου στο µενού «Try me» χρησιµοποιώντας την LCD οθόνη του NXT και τα κουµπιά. Πίεσε το κουµπί Start στο παράθυρο Program Debug Άνοιξε από το µενού την επιλογή Robot και επέλεξε Compile και Download. 2. α.αφού µελετήσετε την παρακάτω εικόνα: Εικόνα 4.22 Χρήση κινητήρων Να αναφέρεται σε τί κίνηση αντιστοιχεί και στη συνέχεια να συνθέσετε τον αντίστοιχο κώδικα. β.οµοίως και µε την εικόνα: 96
Εικόνα 4.23 Χρήση κινητήρων 3.Να χαρακτηρίσετε τις παρακάτω προτάσεις µε Σ αν είναι σωστή και Λ αν είναι λάθος. Οι αισθητήρες ultrasonic και light αποτελούν τους αισθητήρες όρασης. Σ Λ Στο παράθυρο που εµφανίζεται,κατά την ανανέωση του firmware επιλέγουµε το µικρότρο σε έκδοση αριθµό που είναι διαθέσιµος µε το πρόθεµα NXT και έχει τη µορφή «NXTXX.rfw» Σ Λ 4.Στο παρακάτω πρόγραµµα ποιά γραµµή ή γραµµές ελέγχουν το χρόνο που θα κινηθεί το NXT; 1 task main( ) 2 { 3 motor[motorc]=100; 4 motor[motorb]=100; 5 wait1msec(2000); 6} 97
4.2 ΜΕΤΑΒΛΗΤΗ 4.2.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΩΝ LEGO MINDSTORMS ΣΕ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ ROBOTC.Η ΕΝΝΟΙΑ ΤΗΣ ΜΕΤΑΒΛΗΤΗΣ. ΗΜ/ΝΙΑ: / / 1.ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΗΣ Οι µεταβλητές είναι θέσεις µνήµης για αποθήκευση τιµών για µετέπειτα χρήση ή για υπολογισµούς. Χρησιµοποιώντας µία µεταβλητή προσέχουµε(β.κόµης,2005): Το όνοµα της και το σύνολο των ιδιοτήτων που αποτελούν τη δήλωσή της. Την τιµή της που την αναθέτει ο χρήστης. Εκχωρούµε δηλαδή στη µεταβλητή µία τιµή, έχοντας τη µορφή Μεταβλητή=Έκφραση. o Σηµείωση:Το σύµβολο = σηµαίνει εκχώρηση,ενώ το == ισοδυναµία. Αποτελεί την είσοδο για µία αποθηκευµένη τιµή. ΕΞΟΙΚΕΙΩΣΗ Το ακόλουθο πρόγραµµα αποτελεί εφαρµογή στην έννοια της µεταβλητής. Η µεταβλητή speed αναπαριστά την ταχύτητα µε την οποία κινείται το ΝΧΤ και µπορεί να πάρει τιµές από -100 έως 100. 98
Εικόνα 4.24 Πρώτη εξοικείωση µε την έννοια της µεταβλητής Στον κώδικα η µεταβλητή speed χρησιµοποιείται για την αποθήκευση µιας τιµής η οποία δίνεται από τον προγραµµατιστή. ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Ένας προγραµµατιστής αλλάζει την ταχύτητα του NXT από 75 σε 50. Παρατηρήστε τον κώδικα της εικόνας 4.24 και τον κώδικα της εικόνας 4.25. Εικόνα 4.25 Ταχύτητα του NXT 50 99
Συγκρίνετε τους δύο κώδικες και εκτελέστε τους.ποιές διαφορές παρατηρείτε;......... Σε περίπτωση που θέλουµε να αλλάξουµε τη µεταβλητή speed,την ταχύτητα µε την οποία κινείται το NXT,ποιός κώδικας θα αλλάξει πιο εύκολα;...... 2. ΤΥΠΟΙ ΜΕΤΑΒΛΗΤΩΝ Τα ονόµατα των µεταβλητών πρέπει να ακολουθούνται από τον κατάλληλο τύπο τους ο οποίος µπορεί να είναι: a. Ακέραιοι:αριθµοί χωρίς κλασµατικό ή δεκαδικό µέρος (int). Ακέραιοι Όχι-ακέραιοι 10, 0, -10 10.5, 50.5 b. Πραγµατικοί:δεκαδικοί θετικοί ή αρνητικοί και µηδέν (float). Πραγµατικοί 31.456,-50.5 c. Αλφαριθµητικό: Μία σειρά από αριθµούς ή χαρακτήρες (string). Strings my name is, Hello d. Λογικές:Μπορεί να είναι true ή false (bool). Λογικές True, false ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 2 Σκεφτείτε και χαρακτηρίστε τις παρακάτω τιµές ανάλογα µε τον τύπο τους.... 100
............ 3.ΑΡΙΘΜΗΤΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ Οι αριθµητικές µεταβλητές περιέχουν µόνο αριθµούς.μπορεί να περιέχουν ακέραιους(20,50) ή αριθµούς κινητής υποδιαστολής(45.5,13.8).πολλές φορές δεν αρκεί να εκχωρήσουµε στη µεταβλητή µόνο µία τιµή,αλλά να εκχωρήσουµε τιµή µετά από υπολογισµό. ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 3 Εκτελέστε τον κώδικα. Εικόνα 4.26 Εφαρµογή στις αριθµητικές µεταβλητές 101
Τί κίνηση κάνει το NXT;...... Τί τιµές µπορεί να πάρει η µεταβλητή speed;... Τί συµπέρασµα βγάζετε σχετικά µε την ταχύτητά του;...... 4.Η ταχύτητα του NXT δηλώνεται µέσα στη main( ) Μία µεταβλητή υφίσταται µόνο µέσα στη συνάρτηση στην οποία δηλώνεται.αν προσπαθήσουµε να χρησιµοποιήσουµε µία µεταβλητή που δεν έχει δηλωθεί,η RobotC θα εντοπίσει λάθος,καθώς η µεταβλητή δεν υφίσταται και δε µπορεί να τη δει. ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Ως ενδογενής µεταβλητή µπορεί να θεωρηθεί η µεταβλητή speed στον κώδικα της εικόνας 4.24.Η µεταβλητή speed δηλώνεται µέσα στη main ( ) και δεν έχει νόηµα έξω από αυτήν. Αφού έχετε εκτελέσει τον κώδικα της εικόνας 4.26,συζητήστε και καταλήξτε αν είναι η µεταβλητή speed είναι εσωτερική;αν ναι γιατί;...... 5.H ταχύτητα του NXT δηλώνεται εξωτερικά της main( ) Μία εξωτερική µεταβλητή δηλώνεται έξω από τις συναρτήσεις και συνήθως εµφανίζεται στην αρχή του κώδικα.όλες οι συναρτήσιες µπορούν να δουν αυτές τις µεταβλητές και η τιµή τους δε χάνεται ακόµα και µετά το τέλος µιας συνάρτησης.ωστόσο,µία εξωτερική µεταβλητή µπορεί να χρησιµοποιηθεί και να αλλάξει µέσα σε µία συνάρτηση. ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Στον κώδικα της εικόνας 4.24 το NXT κινείται ευθεία µε ταχύτητα 75 για 2 seconds. Ποιά είναι η αρχική τιµή της speed;...... 102
Τροποποιoύµε τον κώδικα αυτό,ώστε η µεταβλητή speed να δηλώνεται έξω από την κύρια συνάρτηση main( ).Εκτελώντας τον κώδικα,αντικρίζουµε την παρακάτω εικόνα. Εικόνα 4.27 εν αρχικοποιείται η µεταβλητή speed Είναι ο κώδικας σωστός;τί παρατηρείται;......... Ποιά είναι η αρχική τιµή της speed;... Έχοντας ως υπόδειξη τον κώδικα της εικόνας 4.24,τί αλλαγή πρέπει να γίνει για να «τρέχει»το πρόγραµµα;...... ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ 6 ίνεται ο κώδικας. 103
Εικόνα 4.28 Συνολική δραστηριότητα Χωρισµένοι σε οµάδες των δύο ατόµων αναλάβετε ρόλους. Γράψτε τα ονόµατά σας: Μέλος Α:Επιστήµονας... Μέλος Β:Κριτής. Ο επιστήµονας θα απαντάει στις ερωτήσεις και ο κριτής θα συµφωνεί ή όχι κάθε φορά. Ερωτήσεις Επιστήµονα Κριτής 1.Τί τιµές µπορεί να πάρει η µεταβλητή speed;... Συµφωνώ ιαφωνώ 2.Τί κίνηση εκτελεί το NXT για 2 seconds;...... Συµφωνώ ιαφωνώ 3.Σε περίπτωση που διαγράψω τη δήλωση της µεταβλητής speed θα υπάρξει λάθος;εκτελέστε το πρόγραµµα.τί παρατηρείτε;...... Συµφωνώ ιαφωνώ Πίνακας 4.7 Απαντήσεις-Σχολιασµός 104
Μέλος Α:Κριτής.. Μέλος Β:Επιστήµονας... Ερωτήσεις Επιστήµονα 1.Η µεταβλητή speed είναι εσωτερική ή εξωτερική;... Συµφωνώ Κριτής ιαφωνώ 2.Με τί ταχύτητα κινείται το NXT για 4 seconds και γιατί;...... Συµφωνώ ιαφωνώ 3.Τί κίνηση εκτελεί για το διάστηµα των 4 seconds;... Συµφωνώ ιαφωνώ 4.Τί θα συµβεί αν διαγράψω την εντολή speed=- 50;Εκτελέστε το πρόγραµµα.τί παρατηρείτε;...... Συµφωνώ ιαφωνώ Πίνακας 4.8 Απαντήσεις-Σχολιασµός 105
4.2.2 ΣΧΕ ΙΟ ΜΑΘΗΜΑΤΟΣ 1.ΣΥΝΟΠΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 1.1 ΘΕΜΑ Ι ΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ «Προγραµµατισµός στη πλατφόρµα RobotC» Η έννοια της µεταβλητής. 1.2 ΕΜΠΛΕΚΟΜΕΝΕΣ ΓΝΩΣΤΙΚΕΣ ΠΕΡΙΟΧΕΣ Γλώσσα Προγραµµατισµού C,Μαθηµατικά 1.3 ΤΑΞΗ Πληροφορική Γ Γυµνασίου 1.4 ΙΑΡΚΕΙΑ 2 διδακτικές ώρες 1.5 ΟΡΓΑΝΩΣΗ ΤΗΣ Ι ΑΣΚΑΛΙΑΣ ΚΑΙ ΑΠΑΙΤΟΥΜΕΝΗ ΥΛΙΚΟΤΕΧΝΙΚΗ ΥΠΟ ΟΜΗ Προτείνεται η οργάνωση των µαθητών σε οµάδες 2 ή 3 ατόµων ανάλογα µε τον αριθµό των διαθέσιµων υπολογιστών.απαιτείται πέρα από το συνιθησµένο πίνακα και βιντεοπροβολέας για παρουσιάσεις και ο κατάλληλος αριθµός υπολογιστών για την εφαρµογή των προγραµµάτων.το σενάριο µπορεί να διεξαχθεί σε πρώτο στάδιο στην τάξη και ύστερα σε εργαστήριο πληροφορικής.οι µαθητές θα αναλάβουν την απάντηση των δραστηριοτήτων,αξιοποιώντας το διδακτικό υλικό που παρέχεται µε τη διακριτική καθοδήγηση του εκπαιδευτικού. Επιπλέον υλικό:nxt των Lego Mindstroms και κατάλληλοι αισθητήρες. Λογισµικό: Πλατφόρµα RobotC. 1.6 Ι ΑΚΤΙΚΟΙ ΣΤΟΧΟΙ Γνώσεις Οι µαθητές: Να µπορούν να χρησιµοποιούν το σωστό όνοµα της µεταβλητής και να ορίζουν σωστά τον τύπο της,ανάλογα µε τις τιµές που θα µπορεί να παίρνει. Να µπορούν να διακρίνουν τους τύπους int,float,string,bool. Να διακρίνουν µία εσωτερική από µία εξωτερική µεταβλητή και την ισχύ που έχει αυτή. εξιότητες Να µπορούν να αναλύουν τα ζητούµενα και τις απαιτήσεις της κάθε δραστηριότητας,διατυπώνοντας και τεκµηριώνοντας την προσωπική άποψη τους. 106
Να µάθουν να εργάζονται σαν οµάδα,αφού κάποια από τα παιδιά έχουν ιδιαίτερη ικανότητα να οργανώνουν τις εργασίες που πρέπει να ολοκληρωθούν ενώ άλλα θα έχουν κατανοήσει σε µεγαλύτερο βαθµό το πρώτο φύλλο εργασίας και θα ενισχύσουν την οµάδα. Στάσεις Να αναπτύξουν θετική διάθεση τόσο απέναντι στον υπολογιστή και το νέο λογισµικό. 1.7 ΠΡΟΑΠΑΙΤΟΥΜΕΝΕΣ ΓΝΩΣΕΙΣ Οι µαθητές έχουν αναπτύξει από προηγούµενα µαθήµατα τις βασικές δεξιότητες χρήσης του υπολογιστή,γνώσεις πάνω στην εκτέλεση αριθµητικών πράξεων. 2. ΑΝΑΛΥΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 2.1 Α ΦΑΣΗ-Η ΕΝΝΟΙΑ ΤΗΣ ΜΕΤΑΒΛΗΤΗΣ/ΟΡΙΣΜΟΣ Ο καθηγητής µοιράζει στους µαθητές ένα έντυπο υλικό µε σκοπό την εξοικείωση µε την έννοια της µεταβλητής. ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Ο εκπαιδευτικός ξεκινά αναφέροντας τα κύρια συστατικά µέρη της µεταβλητής(όνοµα,σύνολο ιδιοτήτων,αναφορά,τιµή) αντιστοιχίζοντας τα µε τον κώδικα της εικόνας 4.24. ίπλα από τον κώδικα υπάρχουν σχόλια για να κατανοήσουν τα παιδιά καλύτερα τον ορισµό της.εδώ ο καθηγητής µπορεί να θέσει και το ερώτηµα:τί κίνηση εκτελεί το NXT;Έτσι,καταφεύγει σε µία µικρή επανάληψη προηγούµενων µαθηµάτων.αναφέρει ότι η κατανόηση της µεταβλητής είναι ιδιαίτερα σηµαντική και δύσκολη και µόνο όταν κάποιος καταλάβει που χρησιµοποιούνται οι µεταβλητές,έχει καταλάβει και την ουσία του προγραµµατισµού.συνεχίζοντας,ο εκπαιδευτικός δίνει στους µαθητές και τον κώδικα 4.24 ζητώντας τους να τους παρατηρήσουν και να βρουν διαφορές,πιθανές απαντήσεις είναι: i. Στον κώδικα 4.24 γίνεται δήλωση µίας µεταβλητής,ενώ στον κώδικα 4.25 όχι. ii. Στον κώδικα 4.24 εκχωρείται στην µεταβλητή speed η τιµή 75,ενώ στον 4.25 δεν υπάρχει κάτι τέτοιο. iii. Στον κώδικα 4.24 δίνουµε µία φορά τιµή στην ταχύτητα,ενώ στον κώδικα 4.25,δύο φορές. Οι προτάσεις τους µπορούν να καταγραφούν σε πίνακα και µετά από συλλογική συζήτηση να οδηγηθούν σε τελικές απαντήσεις µε τη βοήθεια του καθηγητή.βασισµένοι λοιπόν στις διαφορές που παρουσιάζουν οι δύο κώδικες,οι µαθητές είναι σε θέση να απαντήσουν και στην επόµενη ερώτηση της δραστηριότητας 1. Ωστόσο,ένα από τα διδακτικά προβλήµατα που µπορούν να δηµιουργηθούν στην ενότητα αυτή είναι η ανάθεση τιµής.πολλά είναι τα παιδιά που συγχέουν το σύµβολο της εκχώρησης = µε το µαθηµατικό σύµβολο της ισότητας ==.Ιδιαίτερη προσοχή συνίσταται από τον καθηγητή στο σηµείο αυτό. 107
2.2 Β ΦΑΣΗ-ΤΥΠΟΙ ΜΕΤΑΒΛΗΤΩΝ ΡΑΣΤΗΡΙΟΤΗΤΑ 2 Στην προσπάθεια τους να απαντήσουν οι µαθητές στη δραστηριότητα 2,ο καθηγητής τους αναφέρει τους βασικούς τύπους µεταβλητών.τονίζει ότι ο τύπος προσδιορίζει το είδος των πληροφοριών που αναπαρίστανται από τη µεταβλητή.έτσι,για κάθε τύπο δίνει και συγκεκριµένο παράδειγµα.απαντήσεις στη δραστηριότητα αποτελούν: int float string float bool ΡΑΣΤΗΡΙΟΤΗΤΑ 3 Ο εκπαιδευτικός συνιστά την προσοχή των παιδιών όταν προσεγγίζεται διαδακτικά η έννοια του τύπου της µεταβλητής.είναι γεγονός,ότι οι µαθητές χειρίζονται εύκολα τις αριθµητικές µεταβλητές,αλλά συναντούν προβλήµατα στα δεδοµένα λογικού τύπου και ιδιαίτερα οι αρχάριοι. Για να εξοικειωθούν τα παιδιά µε τους τύπους αυτούς τους δίνεται ο κώδικας.αυτό που τους ζητείται είναι να προβλέψουν την κίνηση που κάνει το NXT.Το µόνο που πρέπει να σκεφτούν είναι να εκτελέσουν την παράσταση της οποίας η τιµή εκχωρείται στην µεταβλητή speed.η ταχύτητα δηλαδή µε την οποία κινείται το NXT είναι αυτή.μετά το τέλος της δραστηριότητας,ο εκπαιδευτικός τονίζει ότι η εκχώρηση τιµής µετά από υπολογισµό δεν εµφανίζει διδακτικά προβλήµατα στους µαθητές. 2.3 Γ ΦΑΣΗ-ΕΣΩΤΕΡΙΚΕΣ/ΕΞΩΤΕΡΙΚΕΣ ΜΕΤΑΒΛΗΤΕΣ Ένα ακόµα διδακτικό πρόβληµα, που αντιµετωπίζουν τα παιδιά κατά την κατανόηση της µεταβλητής,είναι το ποτέ µία µεταβλητή χαρακτηρίζεται ως εσωτερική και πότε ως εξωτερική. 108
ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Ο καθηγητής παροτρύνει τα παιδιά να προσέξουν τον κώδικα.σε αυτόν η µεταβλητή speed δηλώνεται εσωτερικά,έχει νόηµα µόνο µέσα στη main( ) και τους προτρέπει να τον εκτελέσουν για ακόµη µία φορά.ενθαρρύνονται επίσης οι µαθητές να εκφράσουν τις απόψεις τους και για τον κώδικα,στον οποίο πάλι η speed δηλώνεται µέσα στην main( ),µε τη διαφορά ότι εδώ η ταχύτητα προκύπτει µετά από υπολογισµό µιας παράστασης. ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Έχοντας κατανοήσει της έννοια της εσωτερικής µεταβλητής,ο εκπαιδευτικός προχωράει στην κατανόηση της µεταβλητής που δηλώνεται έξω από τη main( ).Ο κώδικας, που παρουσιάζεται στους µαθητές,προκύπτει µετασχηµατίζοντας τον κώδικα της εικόνας 4.24.Ωστόσο,παρατηρείται κάποιο λάθος και ζητείται από τους µαθητές να το διορθώσουν.ο εκπαιδευτικός τους αφήνει λίγο χρόνο να προετοιµαστούν,µέχρι που επιλέγει κάποιον για να δώσει την απάντηση. Το λάθος εµφανίζεται διότι η µεταβλητή speed δηλώνεται έξω από τη main( ) και µέσα χρησιµοποιείται χωρίς να της έχει δοθεί αρχική τιµή.ο σωστός κώδικας είναι. Εικόνα 4.29 Αρχικοποίηση της µεταβλητής speed Αυτό είναι και ένα ακόµα διδακτικό πρόβληµα που παρατηρείται,η ανάθεση τιµής.στον κώδικα της εικόνας 4.24 η αρχική τιµή που εκχωρείται στη µεταβλητή speed είναι 75.Πολλοί είναι εκείνοι οι µαθητές που ορίζουν την µεταβλητή,αλλά ξεχνούν να ορίσουν κατάλληλες αρχικές τιµές,µε αποτέλεσµα αυτή να είναι απροσδιόριστη. 2.4 ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ Στην τελευταία δραστηριότητα τα παιδιά καλούνται να δώσουν απάντηση σε µία σειρά από ερωτήσεις,ώστε ο εκπαιδευτικός να καταλήξει αν έχουν κατανοήσει την έννοια της µεταβλητής.οι µαθητές είναι χωρισµένοι σε οµάδες των δύο ατόµων,αναλαµβάνοντας ο ένας του ρόλου του επιστήµονα και ο άλλος του κριτή.στους πίνακες 4.9 και 4.10 φαίνονται οι ερωτήσεις που θα 109
απαντήσουν τα παιδιά,εναλλάσσοντας στο δεύτερο µέρος της δραστηριότητας τους ρόλους της οµάδας.αναµενόµενες απαντήσεις είναι: Ερωτήσεις Επιστήµονα 1.Τί τιµές µπορεί να πάρει η µεταβλητή speed; Μπορεί να πάρει ακέραιες αριθµητικές τιµές που κυµαίνονται από -100 έως 100. 2.Τί κίνηση εκτελεί το NXT για 2 seconds; Κινείται ευθεία µε ταχύτητα 50. 3.Σε περίπτωση που διαγράψω τη δήλωση της µεταβλητής speed θα υπάρξει λάθος;εκτελέστε το πρόγραµµα. Θα εµφανιστεί λάθος,αφού η µεταβλητή speed δε δηλώνεται ούτε µέσα στη main( ),ούτε έξω(κώδικας εικόνας 4.30). Πίνακας 4.9 Σωστές Απαντήσεις Ερωτήσεις Επιστήµονα 1.Η µεταβλητή speed είναι ενδογενής ή εξωγενής; ηλώνεται έξω από τη main( ),οπότε είναι εξωγενής. 2.Με τί ταχύτητα κινείται το NXT για 4 seconds και γιατί; Μέσα στη main( ) η speed παίρνει την τιµή -50. 3.Τί κίνηση εκτελεί για το διάστηµα των 4 seconds; Το ΝΧΤ ακολουθεί αντίστροφη πορεία µε ταχύτητα 50. 4.Τί θα συµβεί αν διαγράψω την εντολή speed=-50;εκτελέστε το πρόγραµµα. Η RobotC θα προειδοποιήσει το χρήστη ότι στη µεταβλητή speed δε δίνεται αρχική τιµή(κώδικας εικόνας 4.31). Πίνακας 4.10 Σωστές Απαντήσεις Εικόνα 4.30 ε δηλώνεται η µεταβλητή speed 110
Εικόνα 4.31 εν αρχικοποιείται η µεταβλητή speed 2.5 Ε ΦΑΣΗ-ΣΥΜΠΕΡΑΣΜΑΤΑ Το φύλλο εργασίας προσφέρει στους µαθητές βασικές πληροφορίες για την έννοια της µεταβλητής.ο εκπαιδευτικός προσπαθεί να δώσει νόηµα και ενδιαφέρον στη διαδικασία µε τη διασύνδεση των εννοιών µε τον καθηµερινό κόσµο.προσπαθεί να ενεργοποιήσει το µαθητή µε την οµαδική εργασία,προσέχοντας όµως να µην δηµιουργηθεί ανταγωνισµός µεταξύ τους.για την ακόµη καλύτερη κατανόηση ο καθηγητής χρησιµοποιεί ερωτήσεις πρόβλεψης ή πιθανής παρανόησης,βάζοντας τους µαθητές να σκεφτούν πάνω σε σκέψεις που κάνουν οι συµµαθητές τους. 111
4.2.3 ΑΞΙΟΛΟΓΗΣΗ Η αξιολόγηση περιλαµβάνει: a) Την αξιολόγηση στην αρχή της διδασκαλίας, b) την αξιολόγηση που διεξάγεται κατά τη διάρκεια της διδασκαλίας µέσω της παρατήρησησς και της συµµετοχής των παιδιών, c) την τελική αξιολόγηση στο τέλος της διδασκαλίας µε το κατάλληλο φύλλο εργασίας.ενδεικτικά µπορεί να δοθεί και το επόµενο φύλλο αξιολόγησης. ΦΥΛΛΟ ΑΞΙΟΛΟΓΗΣΗΣ 1. ώστε παραδείγµατα τιµών που µπορούν να πάρουν οι παρακάτω τιµές µεταβλητών: int float.... string.. 2.Τί σηµαίνουν οι παρακάτω εκφράσεις; speed=75.. touchsensor==0... 3.Χαρακτηρίστε τις παρακάτω προτάσεις ως true ή false. Υποθέτουµε ότι η τιµή lightsensor είναι 60 kai του touchsensor είναι 0. a. (lightsensor)>45 && (touchsensor)==1... b. (lightsensor)<45 II (touchsensor)==1... 4.Τί πληροφορία εµφανίζεται όταν µεταγλωττίσουµε το παρακάτω πρόγραµµα: 112
Εικόνα 4.32 Κατανόηση της έννοιας µεταβλητής......... 113
4.3 ΟΜΗ ΕΠΑΝΑΛΗΨΗΣ 4.3.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΜΑΘΗΜΑ:ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΩΝ LEGO MINDSTORMS ΣΕ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ ROBOTC.TO NXT ΕΚΤΕΛΕΙ ΤΗΝ Ι ΙΑ ΚΙΝΗΣΗ ΕΠΑΝΕΙΛΗΜΜΕΝΑ. ΗΜ/ΝΙΑ: / / 1.ΕΠΑΝΑΛΗΨΗ ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Ας παρακολουθήσουµε έναν χτίστη τη στιγµή που κατασκευάζει έναν τοίχο και ας προσπαθήσουµε να περιγράψουµε την εργασία του σε βήµατα: 1. Παίρνει λάσπη από µία παλέτα. 2. Τοποθετεί τη λάσπη και την απλώνει. 3. Παίρνει ένα τούβλο και το τοποθετεί πάνω στη λάσπη. 4. Χτυπά το τούβλο,ώστε να κάτσει πάνω στη λάσπη. 5. Παίρνει λάσπη από µία παλέτα. 6. Τοποθετεί τη λάσπη και την απλώνει. 7. Παίρνει ένα τούβλο και το τοποθετεί πάνω στη λάσπη. 8. Χτυπά το τούβλο,ώστε να κάτσει πάνω στη λάσπη.... 114
Τί παρατηρείται να συµβαίνει µετά από κάποια βήµατα;...... Πόσες φορές ο χτίστης θα εκτελέσει τα βήµατα;είναι ο αριθµός των βηµάτων συγκεκριµένος ή αόριστος;...... Πότε θα σταµατήσει να χτίζει;......... 2.ΒΡΟΧΟΣ FOR Ο βρόχος for επιτρέπει την επάναληψη µιας οµάδας εντολών για κάποιες φορές.ο αριθµός αυτός των επαναλήψεων µπορεί να είναι προκαθορισµένος. ΡΑΣΤΗΡΙΟΤΗΤΑ 2 Εικόνα 4.33 Εξοικείωση µε το βρόχο for Στον κώδικα,ο βρόχος for χαρακτηρίζεται από τριών παραµέτρων έκφραση,που διαχωρίζονται µεταξύ τους µε (;). Η i είναι µεταβλητή στην οποία εκχωρείται αρχική τιµή. 115
Η έκφραση i<5,αξιολογείται στην αρχή κάθε επανάληψης και καθορίζει πότε τερµατίζει το πρόγραµµα. Ο µετρητής i++ που αυξάνεται στο τέλος κάθε επανάληψης. (Όταν ένας µετρητής έχει τη µορφή i--,σηµαίνει ότι µειώνεται κατά 1). Εκτελέστε τώρα τον κώδικα.τί κίνηση κάνει το NXT;......... Επίσης σκεφτείτε και απαντήστε στις: a. Η µεταβλητή i αρχικοποιείται;... b. Πόσες φορές επαναλαµβάνεται η κίνηση;... c. Με τη βήµα αυξάνεται ο µετρητής;... d. Τί συµβαίνει όταν το i πάρει την τιµή 4;Ποιό τµήµα κώδικα εκτελείται;είναι η πρόταση αληθής ή ψευδής(ισχύει ή όχι);...... Σηµείωση:Όταν µία ανισότητα ισχύει µπορεί να χαρακτηριστεί ως true,ενώ όταν δεν ισχύει ως false. e. Τί συµβαίνει όταν το i πάρει την τιµή 5; Είναι η πρόταση αληθής ή ψευδής;...... f. Σε περίπτωση που αντικαταστήσουµε το i<5 µε i<6 πόσες φορές επαναλαµβάνεται η κίνηση;...... g. Τί αλλαγή πρέπει να κάνουµε στον κώδικα για να κινηθεί το ροµπότ ευθεία τρείς φορές;εκτελέστε τον κώδικα....... 116
3.ΒΡΟΧΟΣ WHILE Εκτός από το βρόχο for και ο βρόχος while επιτρέπει την επαναληπτική εκτέλεση εντολών. ΡΑΣΤΗΡΙΟΤΗΤΑ 3 ίνεται ο κώδικας στον οποίο χρησιµοποιείται ο βρόχος while. Εικόνα 4.34 Κώδικας για εξοικείωση µε το βρόχο while Στον κώδικα,περιγράφεται η λειτουργία της δοµής επανάληψης. Η i είναι µεταβλητή στην οποία εκχωρείται αρχική τιµή. Κάθε φορά ελέγχεται η συνθήκη i<4 και εκτελείται το τµήµα κώδικα µέσα στο while. Ο µετρητής αυξάνει κατά 1 στο τέλος κάθε επανάληψης. Εκτελέστε τώρα τον κώδικα. Τί κίνηση κάνει το NXT;......... Ακόµα συζητήστε και δώστε µία τελική απάντηση: a. Σε ποιό σηµείο του κώδικα γίνεται αρχικοποίηση;... 117
b. Πόσες φορές εκτελείται η κίνηση;... c. Τί συµβαίνει όταν το i πάρει την τιµή 3;Είναι η συνθήκη αληθής ή ψευδής;...... d. Τί συµβαίνει όταν πάρει την τιµή 4;Είναι τότε αληθής ή ψευδής;...... e. Εκτελέστε τον κώδικα για i<8. Πόσες φορές εκτελείται τώρα η κίνηση. Ποιά είναι η εντολή που καθορίζει πόσες φορές θα εκτελεστεί η κίνηση;......... f. Τί αλλαγή πρέπει να γίνει για να εκτελεστεί η κίνηση 9 φορές; ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Σας δίνετε ο κώδικας. Εικόνα 4.35 Τετραγωνική κίνηση Πρίν την εκτέλεση του κώδικα απαντήστε στις εξής ερωτήσεις: 118
a. Αναφέρετε το βρόχο for.... b. Γίνεται αρχικοποίηση;με τη βήµα αυξάνεται ο µετρητής;...... c. Τί κίνηση εκτελεί το NXT για 4 seconds;.... d. Για 0.75 seconds;. Αφού εκτελέσετε τώρα το πρόγραµµα, γράψτε τί κίνηση κάνει το NXT....... a. b. c. d. Πρόβλεψη Παρατήρηση Συµπέρασµα Πίνακας 4.11 Πρόβλεψη Παρατήρηση Συµπέρασµα Σε περίπτωση που αντικαταστήσω τη συνθήκη i<20 µε i<16,εκτελέστε τον κώδικα.τι παρατηρείτε;...... ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Μετασχηµατίζουµε τον κώδικα της εικόνας 4.35 χρησιµοποιώντας αυτή τη φορά το βρόχο while και προκύπτει ο κώδικας της εικόνας 4.36. 119
Εικόνα 4.36 Τετραγωνική κίνηση Εκτελέστε τον κώδικα της εικόνας 4.36.Τί παρατηρείτε για την κίνηση του ΝΧΤ;Συγκρίνετέ τη µε αυτή του κώδικα της δραστηριότητας 4.......... 4. ROBOTC FOR LEGO MINDSTORMS-SENSORS Τα ροµπότ χρειάζεται να γνωρίζουν ξεκάθαρα ποιά ενέργεια να εκτελέσουν κάτω από συγκεκριµένες συνθήκες.οι αποφάσεις τους βασίζονται σε ερωτήσεις των οποίων οι απαντήσεις µπορεί να είναι:ναι ή όχι,αληθές ή ψευδές.τέτοιες καταστάσεις οι οποίες µπορεί να είναι αληθείς ή ψευδείς ονοµάζονται λογικές. Ένα τέτοιο παράδειγµα από την καθηµερινότητα µπορεί να είναι: Ο ουρανός είναι γαλάζιος. Αληθής πρόταση:ο ουρανός είναι γαλάζιος. Ψευδής πρόταση:ο ουρανός δεν είναι γαλάζιος. Έτσι,οι αποφάσεις των ροµπότ για το ποιό τµήµα κώδικα θα εκτελεστεί εξαρτάται από συνθήκες,οι οποίες αποτελούν λογικές καταστάσεις. 120
Το ΝΧΤ διαθέτει εκτός από τους κινητήρες και τέσσερις αισθητήρες S1,S2,S3 και S4. Ανοίγοντας από το πρότυπο κώδικα της πλατφόρµας την ενότητα Sensors έχουµε στη διάθεσή µας την έκφραση SensorValue( ),η οποία ανάλογα µε τον αισθητήρα που χρησιµοποιείται κάθε φορά παίρνει και κατάλληλες τιµές. Αντικρίζουµε δηλαδή την ακόλουθη εικόνα. Εικόνα 4.37 Ανοίγοντας το code template 5.ROBOTC FOR LEGO MINDSTORMS-TOUCH Ο αισθητήρας αφής δίνει στο NXT την αίσθηση της αφής.όταν αυτός είναι πιεσµένος µπορεί να κάνει το ροµπότ να αντιδράσει στο ερέθισµα,κάνοντας το να περπατήσει ή ακοµά και να µιλήσει.για να λειτουργήσει σωστά ο αισθητήρας αφής απαιτείται η έκφραση (SensorValue(touchSensor)).Όταν ο αισθητήρας αφής δεν είναι πιεσµένος παίρνει την τιµή 0 ενώ όταν είναι, την τιµή 1. ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 6 Πηγαίνοντας από τη γραµµή µενού στο Open->Sample Programmes->Touch διακρίνουµε µία σειρά από προγράµµατα. 121
Εικόνα 4.38 Sample Programmes Αφού ακολουθήσετε πάλι τις οδηγίες για την ανανέωση του firmware και τον τρόπο µεταγλώττισης του προγράµµατος,εκτελέστε των κώδικα. Εικόνα 4.39 οµή επανάληψης µε χρήση αισθητήρα αφής 122
Σηµείωση:Η γραµµή στην κορυφή του προγράµµατος δηλώνει στη RobotC ότι χρησιµοποιείται ένα αισθητήρας αφής στην είσοδο 1 που έχει το όνοµα touchsensor. Τι παρατηρείτε για την κίνηση του NXT;...... Συµπληρώστε τον παρακάτω πίνακα µε true ή false. Συνθήκη Ερώτηση Κατάσταση 1==1 Είναι το 1 ισοδύναµο µε το 1? 0==1 Είναι το 0 ισοδύναµο µε το 1? Πίνακας 4.12 Λογικές Μεταβλητές ΡΑΣΤΗΡΙΟΤΗΤΑ 7 Επίσης,συζητήστε και απαντήστε στις ακόλουθες ερωτήσεις: a. Ποιός βρόχος δοµής επανάληψης χρησιµοποιείται;.. b. Ποιό τµήµα κώδικα αποτελεί τη συνθήκη που ελέγχεται κάθε φορά;.. c. Όταν ο αισθητήρας αφής δεν είναι πιεσµένος έχει την τιµή 0.Τότε η συνθήκη έχει τη µορφή 0==0.Θα χαρακτηρίζαµε το προηγούµενο ως true ή false.τί κίνηση εκτελεί τότε το NXT;...... d. Αν πιέσουµε τον αισθητήρα αφής,τί µορφή θα έχει η συνθήκη;ισχύει η ισότητα;τί κίνηση εκτελεί τότε το NXT;......... e. Πώς θα µπορούσαµε να χαρακτηρίσουµε τη συνθήκη,από την οποία εξαρτάται η κίνηση του NXT;... Στη συνέχεια,αντικαθηστούµε στον κώδικα της εικόνας 4.38,το 0 µε 1. 123
a. Πότε η συνθήκη είναι τώρα αληθής;τί ισχύει σε αυτήν την περίπτωση;τί κίνηση εκτελεί το NΧΤ;......... b. Για να προχωρήσει το ροµπότ προς τα πίσω µε ταχύτητα 75,τί µορφή έχει η συνθήκη;...... 6.ROBOTC FOR LEGO MINDSTORMS-SONAR Ο αισθητήρας όρασης είναι ένας από τους δύο αισθητήρες που δίνουν όραση στο ροµπότ σας [ο αισθητήρας φωτός είναι άλλος]. Επιτρέπει δηλαδή στο NXT να βλέπει και να ανιχνεύει αντικείµενα σε αποστάσεις από 0 έως 255 εκατοστά.συνδέεται µε την έκφραση SensorValue(sonarSensor). ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 8 ίνεται ο παρακάτω κώδικας.εδώ,η συνθήκη µέσα στο while αντικαθίστανται από την έκφραση (SensorValue(sonarSenosr)>20). Εικόνα 4.40 οµή επανάληψης µε χρήση αισθητήρα όρασης 124
Εκτελέστε τον κώδικα.τί κίνηση εκτελεί το NXT χρησιµοποιώντας τον αισθητήρα υπερήχων;......... Ενώ το NXT κινείται ευθεία,τοποθετείστε σε απόσταση µικρότερη των 20 εκατοστών ένα βιβλίο.τί συµβαίνει στο NXT;......... ΡΑΣΤΗΡΙΟΤΗΤΑ 9 Μετασχηµατίζουµε τον κώδικα της εικόνας 4.40,ώστε η έκφραση SensorValue(sonarSensor) να είναι µικρότερη του 20. Χωριστείτε τώρα σε οµάδες αναλαµβάνοντας ο ένας το ρόλο του προγραµµατιστή και ο άλλος του κριτή. Γράψτε τα ονόµατά σας εδώ: Μέλος Α:Προγραµµατιστής... Μέλος Β:Κριτής... Ο προγραµµατιστής καλείται να απαντήσει στα παρακάτω πρίν την εκτέλεση του κώδικα. a. Ποιά συνθήκη ελέγχεται κάθε φορά για το αν το πρόγραµµα θα τερµατιτεί ή όχι;... b. Αν τοποθετήσω ένα βιβλίο σε απόσταση 10 εκατοστών από τον αισθητήρα υπερήχων,θα ισχύει 10<20.Είναι η έκφραση true ή false;τί κίνηση θα εκτελέσει το ροµπότ;...... c. Σε τί απόσταση πρέπει να βάλω ένα εµπόδιο ώστε να τερµατίσει το πρόγραµµα;...... Αφού ο επιστήµονας ολοκληρώσει,ο κριτής καλείται να εκτελέσει τον κώδικα και να συµφωνήσει ή όχι µε τις προβλέψεις. 125
Εικόνα 4.41 Αισθητήρας υπερήχων... Αν διαφωνείτε,συζητήστε από κοινού και δώστε µία τελική απάντηση. Πρόβλεψη Προγραµµατιστή Παρατήρηση Κριτή Συµπέρασµα Πίνακας 4.13 Πρόβλεψη Συµπέρασµα 7.ROBOTC FOR LEGO MINDSTORMS-LIGHT Ο αισθητήρας φωτός δίνει, οµοίως µε αυτόν των υπερήχων, όραση στο ροµπότ.μπορεί δηλαδή το NXT να διακρίνει µεταξύ φωτός και σκοταδιού.για να µπορέσει έτσι το NXT να «τρέξει» ένα πρόγραµµα πρέπει αυτό να διαθέτει τον κατάλληλο αισθητήρα () και ο κώδικας την έκφραση (SensorValue(lightSensor)). ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 10 ίνεται ο κώδικας. 126
Εικόνα 4.42 οµή επανάληψης µε χρήση αισθητήρα φωτός Εκτελέστε τώρα το πρόγραµµα.τί κίνηση κάνει το NXT;......... Ενώ το NXT κινείται ευθεία µε ταχύτητα 100,τοποθετήστε ένα µαύρο χαρτί ή µία πιο σκούρα επιφάνεια(<45) κάτω από τον αισθητήρα φωτός,ώστε το NXT να µπορεί να την ανιχνεύσει.ας υποθέσουµε δηλαδή ότι η lightsensor έχει την τιµή 30.Τί συµβαίνει τότε;η συνθήκη είναι αληθής ή ψευδής(true ή false);......... Αντικαθηστούµε το σύµβολο > µε < ;Τί τιµή πρέπει να έχει τώρα η light Sensor ώστε να ισχύει η συνθήκη;......... 127
Πως θα µπορούσαµε να χαρακτηρίσουµε την έκφραση LIghtSensor <45;... 8.ROBOTC FOR LEGO MINDSTORMS-SOUND Ο αισθητήρας ήχου δίνει τη δυνατότητα στο ροµπότ να ανιχνεύσει ήχους και να ατιδρά ανάλογα.για να αντιδράσει το ΝΧΤ σε κάποιον ήχο πρέπει να το εξοπλίσουµε µε τον αισθητήρα ήχου και να χρησιµοποιήσοθµε στον κώδικα την έκφραση (SensorValue(soundSensor)). ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 11 Ας παίξουµε ένα παιχνίδι τώρα.το πρόγραµµα που θα εκτελέσουµε είναι το παρακάτω.ενώ το NXT κινείται σε ευθεία µε ταχύτητα 75,ζητείται από εσάς να προβείτε σε ένα δυνατό χειροκρότηµα. Εικόνα 4.43 οµή επανάληψης µε χρήση αισθητήρα φωτός Παραµένοντας χωρισµένοι σε οµάδες,εναλλάξτε αυτή τη φορά τους ρόλους των µελών. Μέλος Α:Κριτής.. Μέλος Β:Προγραµµατσιτής... 128
Ο προγραµµατιστής οφείλει να προβλέψει την αντίδραση του NXT πριν την εκτέλεση του κώδικα.τί κίνηση εκτελεί το NXT όταν η συνθήκη είναι αληθής;...... Στη συνέχεια ο κριτής εκτελεί τον κώδικα της εικόνας 4.43.Συµφωνεί η πρόβλεψή µε την κίνηση του NXT;...... Ενώ ο κριτής εκτελεί το πρόγραµµα, ζητά από τον προγραµµατιστή να προβεί σε ένα δυνατό χειροκρότηµα.ποιά είναι τώρα η αντίδραση του NXT;...... 9.ΣΥΝ ΥΑΣΜΟΣ ΑΙΣΘΗΤΗΡΩΝ ΡΑΣΤΗΡΙΟΤΗΤΑ 12 Εκτός από τα απλά προγράµµατα στα οποία χρησιµοποιείται ένας µόνος αισθητήρας για την κίνηση του NXT,υπάρχουν και πιο σύνθετα προγράµµατα που χρησιµοποιούν συνδυασνό αισθητήρων. Σας δίνετε ο κώδικας. Εικόνα 4.44 οµή επανάληψης µε συνδυασµό αισθητήρων 129
Πότε η τιµή SensorValue(lightSensor) είναι µεγαλύτερη του 45;Τοποθετήστε οποιαδήποτε τιµή εσείς επιθυµείτε µεγαλύτερη του 45 ή µικρότερη. Έτσι,η κατάσταση «Η τιµή του lightsensor είναι µεγαλύτερη του 45»θα είναι αληθής ή ψευδής. Συνθήκη Ερώτηση Κατάσταση SensorValue(lightSensor)>45 Είναι η τιµή του lightsensor µεγαλύτερη από 45? Πίνακας 4.14 Λογικές Μεταβλητές Αληθής,αν η τιµή είναι µεγαλύτερη(π.χ αν είναι 50). Ψευδής,αν είναι µικρότερη η τιµή(π.χ αν είναι 30).......... ΡΑΣΤΗΡΙΟΤΗΤΑ 13 Σκεφτείτε και απαντήστε στις παρακάτω ερωτήσεις: Όταν το ροµπότ ανιχνεύει φωτεινή επιφάνεια και συγχρόνως ο αισθητήρας αφής δεν είναι πιεσµένος,εκτελέστε το πρόγραµµα.τί συµβαίνει στο NXT;... Υποθέστε ότι η τιµή του light Sensor είναι 50 και του touchsensor είναι 0. Γράψτε βήµα προς βήµα αν η συνθήκη είναι true ή false. (lightsensor)>45 && (touchsensor)==0... Εκτελέστε τώρα τον κώδικα έχοντας όµως πιεσµένο τον αισθητήρα αφής.τί παρατηρείτε;τι κίνηση εκτελεί το NXΤ;Είναι η συνθήκη αληθής ή ψευδής; Γράψτε βήµα προς βήµα τη συνθήκη. 130
(lightsensor)>45 && (touchsensor)==0..... Ενώ το NXT κινείται ευθεία µε ταχύτητα 50,τοποθετήστε κάτω από τον αισθητήρα φωτός µία πιο σκοτεινή επιφάνεια.τί παρατηρείτε σχετικά µε την κίνηση του NXT;... Τι συµπέρασµα βγάζετε για το σύµβολο &&;.... Επίσης,δώστε απάντηση στα: Τροποποιούµε τον κώδικα της εικόνας 4.44,αντικαθιστώντας το σύµβολο && µε το. Εικόνα 4.45 οµή επανάληψης µε συνδυασµό αισθητήρων Εκτελέστε το πρόγραµµα.τί κίνηση εκτελεί το NXT;Εκτελείτε η οµάδα εντολών;... 131
Εκτελέστε πάλι τον κώδικα ενώ ο αισθητήρας αφής είναι πιεσµένος.τί παρατηρείτε; Υποθέτουµε ότι η τιµή του lightsensor είναι 50 και του touchsensor 1.Γράψτε βήµα προς βήµα αν η συνθήκη είναι true ή false; (lightsensor)>45 (touchsensor)==0... Ενώ το NXT κινείται µε ταχύτητα 50,τοποθετήστε µία σκοτεινή επιφάνεια(τιµή του lightsensor 30) και συγχρόνως πιέστε τον αισθητήρα αφής.ποιά η αντίδραση του ροµπότ; Γράψτε βήµα προς βήµα αν η συνθήκη είναι αληθής ή ψευδής. (lightsensor)>45 (touchsensor)==0... Τι συµπέρασµα βγάζετε για το σύµβολο ;... ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ 14 Σας δίντεαι ο κώδικας. 132
Εικόνα 4.46 Συνολική δραστηριότητα Χωριστείτε σε οµάδες των δύο ατόµων και αναλάβετε ρόλους. Γραψτε τα ονόµατά σας παρακάτω: Μέλος Α:Προγραµµατιστής... Μέλος Β:Κριτής.. Ο προγραµµατιστής οφείλει να απνατήσει στις ερωτήσεις και ο κριτής να συµφωνήσει ή να διαφωνήσει.σε περίπτωση διαφωνίας καταλήξτε ένα συµπέρασµα. Ερωτήσεις Προγραµµατιστή Κριτής Συµπέρασµα 1.Ποιοί αισθητήρες χρησιµοποιούνται στο Συµφωνώ ιαφωνώ πρόγραµµα;...... 2.Ποιά εντολή επανάληψης χρησιµοποιείται; Συµφωνώ ιαφωνώ... 3.Ποιό τµήµα κώδικα αποτελεί την οµάδα εντολών;... Συµφωνώ ιαφωνώ 133
4.Πότε η συνθήκη γίνεται ψευδής;... Συµφωνώ ιαφωνώ Πίνακας 4.15 Απαντήσεις - Σχολιασµός Εναλλάξτε τώρα τους ρόλους της οµάδας. Γράψτε τα ονόµατά σας: Μέλος Α:Κριτής... Μέλος Β:Προγραµµατιστής... (Ο προγραµµατιστής οφείλει να απαντήσει στις ερωτήσεις και ο κριτής να συµφωνήσει ή να διαφωνήσει.σε περίπτωση διαφωνίας καταλήξτε ένα συµπέρασµα.) Ερωτήσεις Προγραµµατιστή Κριτής Συµπέρασµα 1.Σε ποιές εισόδους τοποθετούνται οι αισθητήρες και πώς ονοµάζονται;...... Συµφωνώ ιαφωνώ 2.Πως θα χαρακτηρίζατε τις µεταβλητές lightsensor και touchsensor;... Συµφωνώ ιαφωνώ 3.Πότε η συνθήκη είναι αληθής;τί συµβαίνει τότε;...... Συµφωνώ ιαφωνώ 4.Πότε τερµατίζει το πρόγραµµα;...... Συµφωνώ ιαφωνώ Πίνακας 4.16 Απαντήσεις Σχολιασµός 134
4.3.2 ΣΧΕ ΙΟ ΜΑΘΗΜΑΤΟΣ 1.ΣΥΝΟΠΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 1.1 ΘΕΜΑ Ι ΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ «Προγραµµατισµός στη πλατφόρµα RobotC» Η έννοια της δοµής επανάληψης-οικοδόµηση της δοµής επανάληψης 1.2 ΕΜΠΛΕΚΟΜΕΝΕΣ ΓΝΩΣΤΙΚΕΣ ΠΕΡΙΟΧΕΣ Γλώσσα Προγραµµατισµού C 1.3 ΤΑΞΗ Πληροφορική Γ Γυµνασίου 1.4 ΙΑΡΚΕΙΑ 2 ή 3 διδακτικές ώρες 1.5 Ι ΑΚΤΙΚΟΙ ΣΤΟΧΟΙ Γνώσεις Οι µαθητές: Να κατανοήσουν τα είδη αισθητήρων που χρησιµοποιούνται και τις συναρτήσεις που αντιστοιχούν σ αυτούς. Να γνωρίζουν και να εφαρµόζουν τη δοµή επανάληψης(for,while) Βασισµένοι στις συναρτήσεις να µπορούν να συνθέσουν κώδικα έχοντας ως σκοπό τους την κίνηση του NXT. Να µπορούν να χαρακτηρίζουν µία λογική µεταβλητή ως true ή false. εξιότητες Να αναπτύξουν δεξιότητες χρήσης των αισθητήρων του NXT,αλλάζοντας τη µορφή του. Να αναπτύξουν δεξιότητες συνεργασίας και επικοινωνίας,καθώς εργάζονται χωρισµένοι σε οµάδες όπου χρειάζεται. Στάσεις Να αναπτύξουν θετική διάθεση τόσο απέναντι στον υπολογιστή και το νέο λογισµικό,αλλά και στο NXT. 135
1.6 ΠΡΟΑΠΑΙΤΟΥΜΕΝΕΣ ΓΝΩΣΕΙΣ Οι µαθητές έχουν αναπτύξει από προηγούµενα µαθήµατα τις βασικές δεξιότητες χρήσης του υπολογιστή και της πλατφόρµας RobotC. 2.ΑΝΑΛΥΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 2.1 Α ΦΑΣΗ-ΕΝΝΟΙΑ ΤΗΣ ΟΜΗΣ ΕΠΑΝΑΛΗΨΗΣ Για την κατανόηση του προγραµµατισµού σε περιβάλλον της RobotC,θεωρείται χρήσιµο ο µαθητής να µπορεί να προγραµµατίσει µε προγραµµατιστικές δοµές,όπως η δοµή επανάληψης,που θεωρείται η πιο παραγωγική δοµή προγραµµατισµού. Πριν ξενικήσει ο καθηγητής την οικοδόµηση της δοµής επανάληψης,αναφέρει στα παιδιά παραδείγµατα από την καθηµερινή ζωή. ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Στη δραστηριότητα αυτή παρουσιάζονται στα παιδιά τα βήµατα που ακολουθεί ένας χτίστης για να κατασκευάσει ένα τοίχο.μετά την ολοκλήρωση των βηµάτων ο λόγος δίνεται στους µαθητές.πολλοί είναι αυτοί που παρατηρούν ότι από το βήµα 5 και µετά ο χτίστης επαναλαµβάνει κάποια βήµατα.τίθεται λοιπόν το ερώτηµα:πόσες φορές ο χτίστης θα εκτελέσει τα βήµατα και πότε θα σταµατήσει.ο εκπαιδευτικός ενθαρρύνει τα παιδιά να καταθέσουν τις σκέψεις τους.πιθανή πρόταση των παιδιών για το πότε θα τελειώσει ο χτίστης είναι όταν τελειώσει ο τοίχος.φυσικά,είναι απαραίτητο στο σηµείο αυτό ο καθηγητής να είναι πιο ακριβής και να επισηµανθεί ότι ο λόγος διακοπής θα είναι ή ότι ο χτίστης έχει χτίσει όλο τον τοίχο ή ότι δεν έχει άλλα υλικά ή ότι έχει κουραστεί ή ότι έχει τελειώσει το ωράριό του.η πιο σωστή,λοιπόν,περιγραφή θα είναι: 1. Όσο υπάρχουν υλικά και δεν έχει τελειώσει ο τόιχος... 2. Πάρε λάσπη από την παλέτα. 3. Τοποθέτησε τη λάσπη και άπλωσέ τη. 4. Πάρε ένα τούβλο και τοποθέτησε το πάνω στη λάσπη. 5. Χτύπα το τούβλο για να σταθεροποιηθεί πάνω στη λάσπη. 6. Επανέλαβε το βήµα 1. Αναµενόµενη πιθανή απορία των µαθητών είναι γιατί οι εντολές 2 έως 5 γράφονται πιο µέσα από τις 6 και 1.Τότε,ο καθηγητής τονίζει ότι γίνεται για να είναι πιο εµφανές το τµήµα που επαναλαµβάνεται.κάνοντας παρόµοιες σκέψεις και για άλλα επαγγέλµατα,οι µαθητές βλέπουν ότι όλες οι εργασίες περιλαµβάνουν µια µικρή ή µεγάλη επανάληψη βηµάτων.παρατηρούν το έντυπο υλικό που τους έχει δοθεί,διακρίνοντας δύο είδη βρόχων,το for και το while και ξεκινούν την υλοποίηση των δραστηριοτήτων. 136
ΡΑΣΤΗΡΙΟΤΗΤΑ 2 ίνεται στους µαθητές ο κώδικας στον οποίο υπάρχουν σχόλια για το βρόχο for ώστε να διευκολύνονται κατά την ανάγνωση του.τονίζεται και από τον καθηγητή ότι ο βρόχος for είναι µία έκφραση τριών παραµέτρων,επισηµαίνοντας τον όρο του µετρητή αφού είναι κάτι καινούριο γι αυτούς.με τη βοήθεια του καθηγητή καταλήγουν στο ότι η εντολή i-- µειώνει το µετρητή κατά 1,ενώ η i++ τον αυξάνει.ζητείται από τα παιδιά να εκτελέσουν τον κώδικα,ώστε να δουν και τη λειτουργία της επανάληψης.το NXT κινείται σε ευθεία µε ταχύτητα 75 για 4 seconds,ενώ η κίνηση επαναλαµβάνεται 5 φορές.όταν το i πάρει την τιµή 4 θα ισχύει 4<5, η έκφραση είναι αληθής και εκτελείται η οµάδα εντολών(από τα Μαθηµατικά οι µαθητές έχουν αναπτύξει γνώσεις πάνω στη σύγκριση δύο αριθµών).αντίθετα,όταν το i πάρει την τιµή 5,η έκφραση 5<5 είναι ψευδής.για να είναι σίγουρος ο καθηγητής ότι τα παιδιά έχουν µία πρώτη εντύπωση για το βρόχο while,τους ζητά να αντικαταστήσουν το 5 µε 6 και να απαντήσουν σε παρόµοια ερωτήµατα.ολοκληρώνοντας τη δραστηριότητα 2,ζητά από τα παιδιά να προβλέψουν τη συνθήκη,ώστε το NXT να κινηθεί 3 φορές.μόνο για i<3 ή i<=2 το ροµπότ εκτελεί τη σωστή κίνηση. ΠΙΘΑΝΑ Ι ΑΚΤΙΚΑ ΠΡΟΒΛΗΜΑΤΑ Απορίες ή ερωτήµατα σε σχέση µε την κατανόηση της for µπορεί να αποτελέσουν τα ακόλουθα: Ποιός είναι ο τύπος των τιµών που παίρνει η µεταβλητή; Πότε ελέγχεται η µεταβλητή; Ποιά είναι η τιµή της µετά τον τερµατισµό εκτέλεσης του βρόχου; Μία ακόµη δυσκολία που µπορεί να αντιµετωπίσουν οι µαθητές είναι στον καθορισµό του βήµατος,αφού συχνά τείνει να χρησιµοποιήσουν µία επιπλέον µεταβλητή. ΡΑΣΤΗΡΙΟΤΗΤΑ 3 Με τη δραστηριότητα 2,τα παιδιά έχουν µία πρώτη επαφή µε τη δοµή επανάληψης for.στη δραστηριότητα 3 τους δίνεται ένας ακόµη κώδικας,ο οποίος περιέχει το βρόχο while αυτή τη φορά.στον κώδικα δίνονται επίσης οδηγίες για τις εντολές που χρησιµοποιούνται.ζητείται λοιπόν από τα παιδιά να εκτελέσουν τον κώδικα,ενώ είναι εύκολο να διαπιστώσει κανείς ότι το NXT κινείται ευθεία για 4 seconds µε ταχύτητα 100 και ύστερα για τον ίδιο χρόνο και µε την ίδια ταχύτητα αντιστρέφει την πορεία του.η κίνηση αυτή επαναλαµβάνεται για 4 φορές.με παρόµοιες ερωτήσεις,όπως και στη δραστηριότητα 2,συνεχίζει την εξοικείωση των µαθητών µε το βρόχο while. Όταν το i πάρει την τιµή 3,ισχύει 3<4 και η οµάδα εντολών εκτελείται.εδώ χρησιµοποιείται και ο πίνακας της τάξης για την αναλυτική παρουσίαση της απάντησης. Οµοίως,όταν 4<4 η έκφραση είναι false και το πρόγραµµα τερµατίζει. Όταν αντικαθιστούµε τη συνθήκη µε i<8,η κίνηση εκτελείται για 8 φορές,εφόσον αρxική τιµή του i είναι 0.Για να εκτελεστεί 9 φορές πρέπει i<9 ή i<=8. Ο εκπαιδευτικός ενθαρρύνει τους µαθητές να καταθέσουν τις σκέψεις τους.πολλοί είναι αυτοί που δίνουν σωστή απάντηση,αλλά και αρκετοί που έχουν απορίες. 137
ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Τους ζητείται να εκτελέσουν το πρόγραµµα που τους δίνεται και µε τη βοήθεια της θεωρίας να απαντήσουν σε ερωτήσεις.ενθαρύνεται η κατάθεση των σκέψεων των µαθητών και καταγράφονται οι προτάσεις τους στον πίνακα.σωστές απαντήσεις αποτελούν οι: a. for(i=0;i<20;i++) b. Στη µεταβλητή i εκχωρείται η τιµή 0,ενώ ο µετρητής αυξάνεται κατά 1. c. Το ΝΧΤ κινείται ευθεία µε ταχύτητα 75 για 4 seconds d. Εκτελεί δεξιόστροφη κίνηση για 0.75 seconds. Τα παιδιά καταλήγουν στις παραπάνω απαντήσεις και µε τη βοήθεια του καθηγητή.εκτελώντας τον κώδικα έχουν οπτικό αποτέλεσµα για την αντίδραση του NXT.Η κίνηση του είναι τετραγωνική και επαναλαµβάνεται 5 φορές.στη συνέχεια αντικαταστούµε τη συνθήκη i<20 µε i<16.ο εκπαιδευτικός για να τους βοηθήσει,τους βάζει να εκτελέσουν τον κώδικα καταγράφοντας το αποτέλεσµα.αφού γίνει προσεκτική εκτέλεση,απάντηση όπως το NXT εκτελεί ξανά τετραγωνική κίνηση µε επανάληψη 4 φορών είναι απολύτως σωστή. ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Το φύλλο εργασίας συνεχίζει µε την παρουσίαση της δοµής επανάληψης while.μετασχηµατίζεται ο κώδικας της δραστηριότητας 4 που γίνεται χρήση της for στον κώδικα µε τον βρόχο while.ο εκπαιδευτικός δίνει τον απαιτούµενο χρόνο για προετοιµασία,ενώ όταν χρειάζεται βοηθά τους µαθητές έναν προς έναν.ο ρόλος του δηλαδή είναι διευκολυντικός και συµβουλευτικός.τα παιδιά εκτελώντας το πρόγραµµα συνειδητοποιούν ότι το NXT εκτελεί κίνηση σε τετράγωνο 5 φορές.όταν η συνθήκη είναι αληθής το ροµπότ κινείται µπροστά και στη συνέχεια στρίβει δεξιά,ενώ ο κώδικας τερµατίζει όταν η µεταβλητή i πάρει τιµή µεγαλύτερη του 20 ή ακόµα και 20.Πολλοί είναι οι µαθητές που τονίζουν ότι η κίνηση αυτή του NXT έιναι ίδια µε εκείνη όταν εκτελείται ο κώδικας της δραστηριότητας 4 και ταυτόχρονα δέχονται την επιβράβευση του εκπαιδευτικού για την παρατήρηση τους. Για να είναι σίγουρος ότι έχει γίνει κατανοητή η οικοδόµηση της δοµής επανάληψης,τους ζητά να γράψουν στο χαρτί ο καθένας µόνος του την ισοδυναµία for-while. Συνίσταται η παρουσίαση και τεκµηρίωση των απαντήσεων από έναν µαθητή(είναι στην κρίση του καθηγητή να επιλέξει)για προκαθορισµένο και γνωστό εκ των προτέρων χρονικό διάστηµα(π.χ 5 λεπτά),ενώ οι υπόλοιποι διατυπωνουν απορίες.μία απάντηση σαν την παρακάτω είναι σωστή. Ισοδυναµία for-while Γενικότερα ένας βρόχος for µπορεί να µετατραπεί σε βρόχο while και το αντίστροφο. Έτσι,η for(i=0;i<10;i++) { /*οµάδα εντολών*/ } 138
Μετατρέπεται σε int i=0; while(i<10) { /*οµάδα εντολών*/ i++; } 2.2 Β ΦΑΣΗ-ΚΑΤΑΝΟΗΣΗ ΑΙΣΘΗΤΗΡΩΝ ΤΟΥ NXT Έχοντας γίνει η πρώτη επαφή των µαθητών µε την πλατφόρµα της RobotC,ένας από τους διδακτικούς στόχους του εκπαιδευτικού είναι η κατανόηση των αισθητήρων και οι εκφράσεις που αντιστοιχούν σε αυτούς.ο καθηγητής καθοδηγεί τα παιδιά να ανοίξουν την ενότητα sensors από το πρότυπο κώδικα και οι απαραίτητες µεταβλητές που θα χρησιµοποιηθούν εµφανίζονται µπροστά τους.για την καλύτερη κατανόηση της λογικής µεταβλητής ένα παράδειγµα από την ακθηµερινότητα θα τους βοηθήσει. ΡΑΣΤΗΡΙΟΤΗΤΑ 6 Στους µαθητές παρατίθεται το πρόγραµµα της δραστηριότητας 6.Αφού ανατρέξουν στη θεωρία σχετικά µε τον αισθτήρα αφής και εκτελέσουν τον κώδικα µε το γνωστό τρόπο, ύστερα από δοκιµές κατανοούν ότι όταν ο αισθητήρας αφής είναι πιεσµένος το NXT κινείται µπροστά,ενώ όταν δεν είναι ακολουθή αντίθετη πορεία µε ταχύτητα 75.Μέσα από συζήτηση αναδεικνύεται η αναγκαιότητα των µαθητών να εκτελείται το πρόγραµµα και στο NXT ώστε να παρατηρούν τη συµπεριφορά του και στην πραγµατικότητα.στη συνέχεια,ο εκπαιδευτικός ζητά από τα παιδιά να συµπληρώσουν τον πίνακα.εφόσον γνωρίζουν ότι το σύµβολο == σηµαίνει ισοδυναµία δε παρουσιάζεται κανένα πρόβληµα. ΡΑΣΤΗΡΙΟΤΗΤΑ 7 Σχετικά µε τον κώδικα,τίθεται στα παιδιά µια σειρά από ερωτήσεις, αλλά αυτή τη φορά απαντούν χωρίς να εκτελούν τον κώδικα.αναµενόµενες απαντήσεις είναι: a. Ο βρόχος while. b. H έκφραση SensorValue(touchSrnsor)==0 c. Η έκφραση είναι true και θα εκτελεστεί η οµάδα εντολών.το NXT κινείται ευθεία µε ταχύτητα 100. d. 1==0 και η ισότητα δεν ισχύει.το NXT κινείται αντίστροφα µε ταχύτητα 75. e. Λογική έκφραση. Οµοίως,αν αντικαταστήσουµε το 0 µε 1(ο αισθητήρας πιεσµένος): a. Όταν 1==1,η συνθήκη είναι true και εκτελείται η οµάδα εντολών. b. Να είναι false,δηλαδή 0==1. 139
ΡΑΣΤΗΡΙΟΤΗΤΑ 8 Συνεχίζοντας την παρουσίαση των αισθητήρων από τον καθηγητή,ο τελευταίος τους παρουσιάζει τον αισθητήρα υπερήχων.ο κώδικας εκτελείται και το NXT κινείται ευθεία µε ταχύτητα 75. Όσο αυτό κινείται ο εκαπιδευτικός ζητά από τα παιδιά να τοποθετήσουν ένα βιβλίο κοντά σε αυτό(σε απόσταση µικρότερη των 2 ο εκατοστών).τότε το ΝΧΤ σταµατά την κίνηση του και τα παιδιά εντυπωσιάζονται.εκφράσεις των παιδιών όπως: «Το ροµπότ κατάλαβε ότι υπάρχει εµπόδιο» δείχνει την ικανοποίηση τους. ΡΑΣΤΗΡΙΟΤΗΤΑ 9 Στον κώδικα της δραστηριότητας 8 το σύµβολο > αντικαθίσταται από το <.Οι µαθητές οργανωµένοι σε µικρές οµάδες των 2 ατόµων προσπαθούν να απαντήσουν στην 9 η δραστηριότητα.ο εκπαιδευτικός αναθέτει ρόλους στα άτοµα που τις αποτελούν,ενώ παράλληλα δίνει χρόνο σε κάθε οµάδα για να προετοιµάσει την απάντησή της.έτσι,δίνει στον ένα µαθητή το ρόλο του προγραµµατιστή και στον άλλο του κριτή.ο προγραµµατιστής οφείλει να δώσει σωστές απαντήσεις όπως: -Η SensorValue(sonarSensor)<20. -10<20->false,το πρόγραµµα θα τερµατίσει. -Σε απόσταση µεγαλύτερη των 20 εκατοστών και προσοχή όχι ίση µε 20. Αφού ο προγραµµατιστής ολοκληρώσει,ζητείται από τον κριτή να συµφωνήσει ή όχι µε τις προβέψεις του,επιβραβεύοντας την οµάδα που έχει δώσει τις πιο σωστές απαντήσεις. ΡΑΣΤΗΡΙΟΤΗΤΑ 10 Ένας ακόµη αισθητήρας που δίνει στο ροµπότ όραση και το κάνει να αντιδρά είναι ο αισθητήρας φωτός.τα παιδιά αναλύουν τα δεδόµενα και αποφασίζουν ότι η συνάρτηση που χρησιµοποιείται είναι η (SensorValue(lightSenosr)).Ωστόσο,αναρωτιούνται για τις τιµές που µπορεί να πάρει,ζητώντας τη βοήθεια του εκπαιδευτικού.εκείνος τονίζει ότι οι τιµές µεγαλύτερες ή µικρότερες του 45 είναι αναµενόµενες,ανάλογα µε την επιφάνεια που συναντά.τα παιδιά εκτελούν το πρόγραµµα και βλέπουν ότι το NXT κινείται ευθεία µε ταχύτητα 100,ενώ όταν τους ζητείται να τοποθετήσουν ένα µαύρο φύλλο χαρτιού(30<45) µπροστά στον αισθητήρα,το ροµπότ αντιδρά σταµατώντας την πορεία του και το πρόγραµµα τερµατίζει.στη συνέχεια ο καθηγητής ζητά από τους µαθητές να αντικαταστήσουν στον κώδικα της δραστηριότητας το σύµβολο > µε <. Γράφει στον πίνακα τις απόψεις των µαθητών,ενώ µέσω του προσωπικού του υπολογιστή και του βιντεοπροβολέα δείχνει τον τελικό κώδικα.αναµενόµενη απάντηση είναι ότι το ΝΧΤ θα εκτελέσει την ίδια κίνηση µε προηγουµένως µε τη διαφορά ότι τώρα θα αντιδράσει συναντώντας πιο φωτεινή επιφάνεια. ΡΑΣΤΗΡΙΟΤΗΤΑ 11 Το σενάριο ολοκληρώνεται µε την παρουσίαση του τελευταίου αισθητήρα,του αισθητήρα ήχου.ο εκπαιδευτικός τονίζει ότι, όπως δηλώνει και το ονοµά του,κάνει το NXT να αντιδρά σε διαφορετικούς 140
ήχους.οι ρόλοι εναλλάσσονται και αυτή τη φορά ο προγραµµατιστής πρέπει να προβλέψει ότι το NXT θα προχωρήσει ευθεία µε ταχύτητα 75,ενώ όταν ακούσει κάποιο δυνατό ήχο θα αντιδράσει σταµατώντας την κίνηση του.ο εκπαιδευτικός έχει συµβουλέψει τα παιδιά ο ήχος αυτός να είναι ένα δυνατό χειροκρότηµα.αφού ο προγραµµατιστής ολοκληρώσει,έρχεται η σειρά του κριτή να εκτελέσει τον κώδικα,επιβεβαιώνοντας τις απαντήσεις του άλλου µέλους της οµάδας.η οµάδα που νοµίζει ότι έχει απαντήσει σωστά στη δραστηριότητα προβάλει τις απαντήσεις της στην υπόλοιπη τάξη. 2.3 Γ ΦΑΣΗ-ΑΝΑΛΥΣΗ ΠΡΟΓΡΑΜΜΑΤΩΝ ΣΥΝ ΥΑΖΟΝΤΑΣ ΥΟ ΙΑΦΟΡΕΤΙΚΟΥΣ ΑΙΣΘΗΤΗΡΕΣ ΡΑΣΤΗΡΙΟΤΗΤΑ 12 ίνεται στα παιδιά ο πίνακας της δραστηριότητας 12.Είναι στην κρίση του εκπαιδευτικού να επιλέξει συγκεκριµένους αριθµούς για να γίνει η σύγκριση µε το 45.Όποιος µαθητής είναι σίγουρος για την απάντηση του σηκώνει το χέρι και δίνει την απάντηση του. ΡΑΣΤΗΡΙΟΤΗΤΑ 13 Όσο αναφορά τον κώδικα οφείλουν να απαντήσουν σε βασικές ερωτήσεις για µεγαλύτερη εξοικέιωση µε τις λογικές µεταβλητές και τους λογικούς τελεστές. Εκτελώντας το πρόγραµµα και εφόσον ο αισθητήρας αφής δεν είναι πιεσµένος το NXT κινείται µπροστά µε ταχύτητα 50. Ενώ lightsensor είναι 50 και touchsensor==0 έχουµε: (lightsensor)>45 && (touchsensor)==0 50>45 && 0==0 true && true Συνεχίζουν οι µαθητές την εκτέλεση του κώδικα 9,αλλά αυτή τη φορά ο αισθητήρας αφής είναι πιεσµένος.έχουµε: (lightsensor)>45 && (touchsensor)==1 50>45 && 0==1 true && false Εκτελώντας τα παιδιά και τον κώδικα παρατηρούν ότι το NXT δε κινείται ευθεία, όπως θα έπρεπε, οπότε η έκφραση είναι ψευδής.ύστερα από συλλογική συζήτηση και καταγραφή των απόψεων τους καταλήγουν στον παρακάτω πίνακα. Σύµβολο Κατάσταση Αποτέλεσµα && true && true true && true && false false Πίνακας 4.17 Για το σύµβολο && 141
O εκπαιδευτικός έχοντας ως στόχο να κάνει γνωστό στους µαθητές και τον λογικό τελεστή δίνει προς απάντηση µία σειρά από ερωτήσεις που αφορούν τον κώδικα της δραστηριότητας 13. Εκτελώντας τον κώδικα,το ΝΧΤ κινείται ευθεία όπως και στον σε αυτόν της δραστηριότητας 12. Ακόµα,όσο το ροµπότ ανιχνεύει φωτεινή επιφάνεια και ο αισθητήρας φωτός είναι πιεσµένος το NXT εξακολουθεί να κινείται ευθεία.η αναλυτική παρουσίαση της έκφρασης είναι: (lightsensor)>45 ΙΙ (touchsensor)==1 50>45 ΙΙ 1==0 true II false Σε περίπτωση που το NXT κινείται και συνατήσει φωτεινή επιφάνεια και ο αισθητήρας αφής πιέζεται το NXT σταµατά.το πρόγραµµα δηλαδή τερµατίζει.πολλοί είναι οι µαθητές που εξακολουθούν να ζητάνε την αναλυτική παρουσίαση της έκφρασης στον πίνακα. (lightsensor)>45 (touchsensor)==0 30>45 1==0 false false Ένας πίνακας σαν τον παρακάτω δείχνει τη λειτουργία του τελεστή. Σύµβολο Κατάσταση Αποτέλεσµα true false true false false false Πίνακας 4.18 Για το σύµβολο 2.4 ΦΑΣΗ-ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ 14 Προκειµένου ο καθηγητής να βγάλει κάποιο συµπέρασµα για το αν οι µαθητές µπορούν να οικοδοµούν την έννοια της µεταβλητής,ολοκληρώνει το φύλλο εργασίας µε µία συνολική δραστηριότητα.ο εκπαιδευτικός χωρίζει τους µαθητές σε οµάδες και τους δίνει ρόλους.ο προγραµµατιστής οφείλει να απαντήσει σε µία σειρά από ερωτήσεις και ο κριτής να σχολιάσει το αποτέλεσµα.στο δεύτερο µέρος της εργασίας οι ρόλοι εναλλάσσονται.οι απαντήσεις καταγράφονται στους παρακάτω πίνακες. Ερωτήσεις Προγραµµατιστή 1.Ποιοί αισθητήρες χρησιµοποιούνται στο πρόγραµµα; Ο αισθητήρας φωτός και ο αισθητήρας αφής. 2.Ποιά εντολή επανάληψης χρησιµοποιείται; Χρησιµοποιείται ο βρόχος while. 3.Ποιό τµήµα κώδικα αποτελεί την οµάδα εντολών; Όταν το NXT κινείται ευθεία µε ταχύτητα 100. 142
4.Πότε η συνθήκη γίνεται ψευδής; Όταν true && false=false false &&false=false Πίνακας 4.19 Σωστές Απαντήσεις Ερωτήσεις Προγραµµατιστή 1.Σε ποιές εισόδους τοποθετούνται οι αισθητήρες και πώς ονοµάζονται; O αισθητήρας φωτός στην είσοδο 1 και ονοµάζεται lightssensor O αισθητήρας φωτός στην είσοδο 2 και ονοµάζεται touchsenosr 2.Πως θα χαρακτηρίζατε τις µεταβλητές lightsensor και touchsensor; Λογικές µεταβλητές 3.Πότε η συνθήκη είναι αληθής;τί συµβαίνει τότε; Η συνθήκη είναι αληθής όταν true && true=true.τότε εκτελείται η οµάδα εντολών. 4.Πότε τερµατίζει το πρόγραµµα; Όταν η συνθήκη γίνει ψευδής.το NXT ακολουθεί αντίστροφη πορεία µε ταχύτητα 100. Πίνακας 4.20 Σωστές Απαντήσεις 2.5 Ε ΦΑΣΗ-ΣΥΜΠΕΡΑΣΜΑΤΑ Στο τέλος της εργασίας όλοι οι µαθητές µπορούν να αναλύσουν το πρόβληµα και να υλοποιούν το πρόγραµµα,βλέποντας το ροµποτάκι να εκτελεί τις λειτουργίες που αυτοί επιθυµούν.οι µαθητές έρχονται σε επαφή και κατανοούν, έστω και εισαγωγικά, βασικές προγραµµατιστικές δοµές,όπως η δοµή επανάληψης.τα παιδιά κατανοούν πιο εύκολα προγραµµατιστικές έννοιες(όπως αυτή του µετρητή) που κατά τη διδασκαλία στο µάθηµα της Πληροφορικής είναι δύσκολο να τις αντιληφθούν και να τις εφαρµόσουν. Χαρακτηριστικές δηλώσεις µαθητών όπως οι παρακάτω το υποδεικνύουν: «Καταλαβαίνω καλύτερα µία δοµή επανάληψης,όταν είναι να κάνω το ροµπότ να κινηθεί ευθεί µε ταχύτητα 100, 4 φορές». 143
4.3.3 ΑΞΙΟΛΟΓΗΣΗ Η αξιολόγηση µπορεί να περιλαµβάνει: a) Την αξιολόγηση που θα διεξαχθεί κατά τη διάρκεια της διδασκαλίας µέσω της συµµετοχής και του ενδιαφέροντος του παιδιού,µέσω των ερωτήσεων τους ή της εργασίας τους σε οµάδες. b) την αφιολόγηση στο τέλος της διαδασκαλίας µε το κατάλληλο φύλλο αξιολόγησης.τέτοιο φύλλο µπορεί να αποτελέσει το παρακάτω: ΦΥΛΛΟ ΑΞΙΟΛΟΓΗΣΗΣ 1.Προσπαθήστε να αντιστοιχίσετε µε µία γραµµή την κάθε έκφραση µε τον κατάλληλο αισθητήρα. Αισθητήρας αφής motor[ ]=speed; Αισθητήρας ήχου SensorValue(lightsensor) Αισθητήρας φωτός SensorValue(touchsensor) Αισθητήρας υπερήχων SensorValue(soundsensor) Κινητήρας SensorValue(sonarsensor) 144
2.Κατά την εκτέλεση του βρόχου while εκτελούνται τα παρακάτω βήµατα.συµπληρώστε τα κενά. Ελέγχεται η και αν είναι εκτελείται η. η εκτέλεση όσο ισχύει η συνθήκη. Όταν η συνθήκη γίνει,η επανάληψη σταµατά και το πρόγραµµα. 3.Στον παρακάτω κώδικα γράψτε τα µέρη του βρόχου while. Εικόνα 4.47 Τµήµα κώδικα µε χρήση του βρόχου while 145
4.4 ΟΜΗ ΕΠΙΛΟΓΗΣ 4.4.1 ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΜΑΘΗΜΑ:ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΩΝ LEGO MINDSTORMS ΣΕ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ ROBOTC.ΤΟ ΝΧΤ ΕΠΙΛΕΓΕΙ ΜΕΤΑΞΥ ΥΟ ΚΙΝΗΣΕΩΝ. ΗΜ/ΝΙΑ: / / 1. ΟΜΗ ΕΠΙΛΟΓΗΣ Πολλές φορές ανάλογα µε τα δεδοµένα του προβλήµατος καλούµαστε να πάρουµε αποφάσεις,εκτελώντας κάποια συγκεκριµένα βήµατα και αγνοώντας κάποια άλλα.η δοµή επιλογής χρησιµοποιείται για τη λήψη απόφασης µεταξύ δύο διαφορετικών καταστάσεων,από τις οποίες η µία είναι αληθής και η άλλη ψευδής. ΕΞΟΙΚΕΙΩΣΗ Παραδείγµατα από την καθηµερινότητα που χρησιµοποιούµε τη δοµή επιλογής µπορεί να είναι: Αν το φανάρι είναι πράσινο πέρασε το δρόµο,αλλιώς περίµενε. Αν βρέξει θα πάρω οµπρέλα,αλλιώς θα την αφήσω σπίτι. Αν µε πάρεις τηλέφωνο θα βγούµε για καφέ,αλλιώς θα µείνω σπίτι. ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Το επόµενο πρόγραµµα περιλαµβάνει τη δοµή επιλογής if else. 146
Εικόνα 4.48 Κώδικας επεξήγησης δοµής επιλογής Η αλλαγή στη ροή εκτέλεσης ενός κώδικα οφείλεται στην τιµή µιας λογικής πρότασης που ονοµάζουµε «συνθήκη».στον κώδικα τη συνθήκη αποτελεί η έκφραση SensorValue(sonarSensor)>25. Ανάλογα µε την τιµή της συνθήκης εκτελούνται και οι αντίστοιχες οµάδες εντολών. Όταν ένα αντικείµενο απέχει από το NXT απόσταση µεγαλύτερη των 25 εκατοστών(για παράδειγµα όταν τοποθετούµε ένα εµποδιο σε απόσταση 40 εκατοστών),εκτελείται η οµάδα εντολών στο if.τότε για τη συνθήκη ισχύει 40>25. Ποιά η κίνηση του NXT;... Αν ο αισθητήρας υπερήχων ανιχνεύσει αντικέιµενο σε απόσταση µικρότερη των 25 εκατοστών(στα 10 εκατοστά),εκτελείται η οµάδα εντολών µέσα στο else.τότε η συνθήκη έχει τη µορφή 10>25 που κάτι τέτοιο δεν είναι αληθές. Ποια η αντίδραση του NXT τότε;.. Με αυτόν τον τρόπο προκύπτει λοιπόν η έννοια της επιλογής και έχει τη µορφή: if(συνθήκη) {/*οµάδα εντολών*/} else {/*οµάδα εντολών*/ } 147
ΡΑΣΤΗΡΙΟΤΗΤΑ 2 Σας δίνετε ο κώδικας της εικόνας. Εικόνα 4.49 οµή επιλογής µε χρήση αισθητήρα αφής Συνδέουµε τον αισθητήρα αφής στοην είσοδο 1 του NXT. Συζητείστε τις παρακάτω ερωτήσεις µεταξύ σας και δώστε µία τελική απάντηση. a. Εκτελέστε τον κώδικα.ποιά η κίνηση του ΝΧΤ όταν ο αισθητήρας αφής δεν είναι πιεσµένος... b. Όσο το ροµπότ κινείται ευθεία και πιέσουµε τον αισθητήρα αφής,ποια η αντίδραση του ροµπότ;ποια οµάδα εντολών του κώδικα εκτελείται;... c. Για να είναι η συνθήκη αληθής και να κινηθεί το ροµπότ µπροστά µε ταχύτητα 100, τι τιµή πρέπει να έχει ο touchsensor;.. 148
ΡΑΣΤΗΡΙΟΤΗΤΑ 3 Εικόνα 4.50 Κώδικας δοµής επιλογής µε χρήση αισθητήρα όρασης Συνδέουµε τον αισθητήρα υπερήχων στην είσοδο 1 του NXT. Χωρισµένοι σε οµάδες των 2 ατόµων,αναλάβετε ο ένας το ρόλο του προγραµµατιστή και ο άλλος του κριτή. Γράψτε τα ονόµατά σας: Μέλος Α:Επιστήµονας Μέλος Β:Κριτής.. Ο ρόλος του προγραµµατιστή είναι να προβλέψει: a. Υποθέτουµε ότι η τιµή του sonarsensor είναι 50(ένα εµπόδιο δηλαδή τοποθετείτε σε απόσταση 50 εκατοστών από το ΝΧΤ). Γράψτε βήµα προς βήµα πώς θα χαρακτηρίζατε τη συνθήκη ως true ή false;.. b. Αν τοποθετήσω το ροµπότ σε απόσταση µικρότερη των 25 εκατοστών(10 εκατοστά),πώς νοµίζετε ότι θα αντιδράσει το ροµπότ;.. 149
Στη συνέχεια,ο κριτής εκτελεί το πρόγραµµα και ανάλογα µε την κίνηση του NXT να αποδεχθεί ή όχι τις προβλέψεις του προγραµµατιστή. a.. b.. Συγκρίνετε τις απαντήσεις σας. Πρόβλεψη Παρατήρηση Σύγκριση Πίνακας 4.21 Πρόβλεψη Σχολιασµός ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Εικόνα 4.51 Κώδικας δοµής επιλογής µε χρήση αισθητήρα φωτός 150
Στον κώδικα χρησιµοποιούµε τον αισθητήρα φωτός,ο οποίος τοποθετείται στη είσοδο 1. a. Εκτελέστε τον κώδικα.τί κίνηση εκτελεί το ΝΧΤ όταν συναντά σκοτεινή επιφάνεια;... b. Σε περίπτωση που τοποθετήσουµε µία πιο φωτεινή επιφάνεια(λευκό χαρτί),ώστε να την ανιχνεύσει το ροµπότ,πώς αντιδρά; c. Τι συµβαίνει σε περίπτωση που αντικαταστήσω το σύµβολο < µε το > ; Εκτελέστε το πρόγραµµα και παρατηρήστε τώρα την κίνηση του. ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Ας προχωρήσουµε σε µία άσκηση µε συνδυασµό αισθητήρων και χρήση της δοµής επιλογής if..else. Εικόνα 4.52 Κώδικας δοµής επιλογής µε συνδυασµό αισθητήρων 151
Στον κώδικα της εικόνας χρησιµοποιείται ο αισθητήρας φωτός,ο οποίος συνδέεται στην είσοδο 1 και ο αισθητήρας αφής, ο οποίος συνδέεται στην είσοδο 2 του NXT.Το ροµπότ ανάλογα µε τις αποφάσεις που παίρνει εκτελεί κάποια βήµατα, ενώ αγνοεί άλλα. Εναλλάξτε τώρα τους ρόλους της οµάδας. Γράψτε τα ονόµατά σας: Μέλος Α:Κριτής.. Μέλος Β:Επιστήµονας. Ο επιστήµονας θα απαντά σε ερωτήσεις και ο κριτής θα σχολιάζει τις απαντήσεις. a. Εκτελέστε τον κώδικα,όσο ο αισθητήρας αφής δεν είναι πιεσµένος και το ροµπότ δεν ανιχνεύει κάποιο εµπόδιο σε απόσταση µικρότερη των 20 εκατοστών.τί κίνηση εκτελεί το NXT;...... Συµφωνείτε;Αν γιατι; b. Ενώ το ροµπότ κινείται,πιέζουµε τον αισθητήρα αφής(η touchsensor έχει την τιµή 1) ενώ το NXT εξακολουθεί να µην ανιχνεύει αντικείµενο(απόσταση µεγαλύτερη των 20 εκατοστών),τι κίνηση θα εκτελέσει;.. Συµφωνείτε;Γράψτε βήµα προς βήµα αν η συνθήκη είναι true ή false......... c. Τοποθετούµε ένα εµπόδιο σε απόσταση µικρότερη των 20 εκατοστών(στα 10 εκατοστά) και πιέζουµε τον αισθητήρα αφής(τιµή της touchsensor είανι 1),ποια η αντίδραση του ροµπότ;..... Συµφωνείτε;Αν ναι γιατί;γράψτε βήµα προς βήµα την τιµή της συνθήκης... Καταλήξτε σε συµπεράσµατα. 152
Παρατήρηση Κρίση Συµπέρασµα Πίνακας 4.22 Παρατήρηση Συµπέρασµα 2.ΕΚΤΕΛΕΣΗ ΠΡΟΓΡΑΜΜΑΤΩΝ ΓΙΑ ΤΥΧΑΙΟ ΧΡΟΝΟ Πολλές φορές σε έναν κώδικα που κάνει το NXT να κινείται χρησιµοποιούµε αντί για την έκφραση wait1msec( ) την εντολή random(maxnumber).έτσι,κάθε φορά που «τρέχει» η συγκεκριµένη γραµµή κώδικα,το NXT εκτελεί κίνηση για έναν τυχαίο αριθµό από 0 έως maxnumber. ΕΞΟΙΚΕΙΩΣΗ- ΡΑΣΤΗΡΙΟΤΗΤΑ 6 Παρατηρήστε τον κώδικα της δραστηριότητας. Εικόνα 4.53 Τµήµα κώδικα για τυχαίο χρόνο Τι δηλώνει η έκφραση wait1msec(random(5000));.. Εκτελέστε το πρόγραµµα.τί παρατηρείτε;.. ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ 7 Παρακάτω παρουσιάζεται ο κώδικας : 153
Εικόνα 4.54 Συνολική ραστηριότητα Ο κώδικας δεν περιλαµβάνει συνδυασµό δύο διαφορετικών αισθητήρων αλλά δύο ίδιους αισθητήρες αφής. Χωρισµένοι σε µάδες αναλάβετε ο ένας τον ρόλο του Προγραµµατιστή και ο άλλος του αναλυτή. Κατανοµή ρόλων: Μέλος Α:Προγραµµατιστής Μέλος Β:Αναλυτής.. Ο προγραµµατιστής απαντά σε ερωτήσεις που αφορούν τον κώδικα και ο αναλυτής σχολιάζει. Σε περίπτωση που διαφωνήσετε, συζητήστε από κοινού και καταλήξτε σε µία απάντηση 154
Προγραµµατιστής Αναλυτής Συµπέρασµα 1.Σε ποιες εισόδους του NXT τοποθετούνται οι αισθτήρες αφής;...... Συµφωνώ ιαφωνώ 2.Τί κίνηση εκτελεί το ροµπότ όταν κανένας αισθητήρας δεν είναι πιεσµένος;...... 3.Πότε το NXT θα εκτελέσει δεξιόστροφη κίνηση;για πόσο χρόνο θα εκτελεστεί η κίνηση;...... 4.Τί συµβαίνει όταν πιέζουµε τον αισθητήρα αφής στην είσοδο 2;...... Συµφωνώ ιαφωνώ Συµφωνώ ιαφωνώ Συµφωνώ ιαφωνώ Πίνακας 4.23 Απαντήσεις προγραµµατιστή Αναλυτής Εναλλάξτε τώρα τους ρόλους της οµάδας και απαντήστε στις ερωτήσεις. Κατανοµή ρόλων: Μέλος Α:Αναλυτής. Μέλος Β:Προγραµµατιστής (Ο προγραµµατιστής απαντά σε ερωτήσεις που αφορούν τον κώδικα της εικόνας 4.54 και ο αναλυτής σχολιάζει. Σε περίπτωση που διαφωνήσετε, συζητήστε από κοινού και καταλήξτε σε µία απάντηση. Προγραµµατιστής Αναλυτής Συµπέρασµα 1.Ποιά δοµή χρησιµοποιείται; Συµφωνώ ιαφωνώ 2.Πιέζουµε τον αισθητήρα αφής που είναι συνδεδεµένος στην είσοδο Τί συµβαίνει; Συµφωνώ ιαφωνώ 3.Πότε το NXT θα εκτελέσει αριστερόστροφη κίνηση; Συµφωνώ ιαφωνώ 155
4.Τί τιµή εκχωρούµε στη µεταβλητή randtime;... Συµφωνώ ιαφωνώ Πίνακας 4.24 Απαντήσεις προγραµµατιστή - Αναλυτής 4.4.2 ΣΧΕ ΙΟ ΜΑΘΗΜΑΤΟΣ 1.ΣΥΝΟΠΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 1.1 ΘΕΜΑ Ι ΑΚΤΙΚΟΥ ΣΕΝΑΡΙΟΥ «Προγραµµατισµός στη πλατφόρµα RobotC» Η έννοια της δοµής επιλογής-οικοδόµηση της δοµής επιλογής. 1.2 ΕΜΠΛΕΚΟΜΕΝΕΣ ΓΝΩΣΤΙΚΕΣ ΠΕΡΙΟΧΕΣ Γλώσσα Προγραµµατισµού C 1.3 ΤΑΞΗ Πληροφορική Γ Γυµνασίου 1.4 ΙΑΡΚΕΙΑ 2 διδακτικές ώρες 1.5 ΟΡΓΑΝΩΣΗ ΤΗΣ Ι ΑΣΚΑΛΙΑΣ ΚΑΙ ΑΠΑΙΤΟΥΜΕΝΗ ΥΛΙΚΟΤΕΧΝΙΚΗ ΥΠΟ ΟΜΗ Προτείνεται η οργάνωση των µαθητών σε οµάδες 2 ή 3 ατόµων ανάλογα µε τον αριθµό των διαθέσιµων υπολογιστών.απαιτείται πέρα από το συνιθησµένο πίνακα και βιντεοπροβολέας για παρουσιάσεις και ο κατάλληλος αριθµός υπολογιστών για την εφαρµογή των προγραµµάτων.το σενάριο µπορεί να διεξαχθεί σε πρώτο στάδιο στην τάξη και ύστερα σε εργαστήριο πληροφορικής.οι µαθητές θα αναλάβουν την απάντηση των δραστηριοτήτων,αξιοποιώντας το διδακτικό υλικό που παρέχεται µε τη διακριτική καθοδήγηση του εκπαιδευτικού. Επιπλέον υλικό:nxt των Lego Mindstroms και κατάλληλοι αισθητήρες. Λογισµικό: Πλατφόρµα RobotC 156
1.6 Ι ΑΚΤΙΚΟΙ ΣΤΟΧΟΙ Γνώσεις Οι µαθητές: Να αναγνωρίζουν τη δοµή επιλογής(if,else). Να αναγνωρίζουν ποιο τµήµα κώδικα εκτελείται όταν η συνθήκη είναι αληθής και ποιο όταν είναι ψευδής. Να κατανοήσουν την εντολή random(maxnumber) και να τη µεταφράζουν. εξιότητες Να αναπτύξουν δεξιότητες συνεργασίας,καθώς εργάζονται χωρισµένοι σε οµάδες όπου χρειάζεται και επικοινωνίας,ώστε να καταλήγουν σε ένα συµπέρασµα ύστερα από συζήτηση. Να µπορούν να αναλύουν τα δεδοµένα της κάθε δραστηριότητας και να εκφράζουν την προσωπική τους άποψη. Στάσεις Να αναπτύξουν θετική διάθεση τόσο απέναντι στον υπολογιστή και το νέο λογισµικό,αλλά και στο NXT. 1.7 ΠΡΟΑΠΑΙΤΟΥΜΕΝΕΣ ΓΝΩΣΕΙΣ Οι µαθητές έχουν αναπτύξει από προηγούµενα µαθήµατα τις βασικές δεξιότητες χρήσης του υπολογιστή και της πλατφόρµας RobotC.Επίσης,από τα Μαθηµατικά έχουν αποκτήσει βασικές γνώσεις για την εκτέλεση αριθµητικών πράξεων και σύγκρισης αριθµών. 2. ΑΝΑΛΥΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΤΟΥ ΣΕΝΑΡΙΟΥ 2.1 Α ΦΑΣΗ-ΕΝΝΟΙΑ ΤΗΣ ΟΜΗΣ ΕΠΙΛΟΓΗΣ Για την κατανόηση του προγραµµατισµού σε περιβάλλον της RobotC,θεωρείται χρήσιµο ο προγραµµατιστής να µπορεί να προγραµµατίζει χρησιµοποιώντας τη δοµή επιλογής.ο καθηγητής, για να εξοιειωθούν τα παιδιά σε αυτή τη δοµή, τους αναφέρει παραδείγµατα από την καθηµερινότητα.αν η συνθήκη που τους παρουσιάζει είναι αληθής,εκτελούν την µία επιλογή ή την άλλη. Συνεχίζοντας ο εκπαιδευτικός, µε τη βοήθεια του πίνακα της τάξης, αναλύει τη δοµή επιλογής.η εντολή χρησιµοποιεί τις δεσµευµένες λέξεις if και else.τονίζει ότι η δοµή αυτή επιτρέπει στον µαθητή να καθορίσει µία ενέργεια που θα εκτελεστεί όταν η συνθήκη είναι αληθής και µία διαφορετική που θα εκτελεστεί όταν η συνθήκη είναι ψευδής. ΡΑΣΤΗΡΙΟΤΗΤΑ 1 Οι µαθητές παρατηρούν το έντυπο υλικό που τους έχει δοθεί,διακρίνοντας µία σειρά από δραστηριότητες µε τη δοµή επιλογής if else. ίνεται στα παιδιά ο κώδικας της δραστηριότητας 1 για µία πρώτη επαφή µε τη δοµή επιλογής.κάθε γραµµή του κώδικα αναλύεται από τον εκπαιδευτικό.το NXT κινείται ευθεία µε ταχύτητα 100 όταν δεν ανιχνεύει αντικείµενο σε απόσταση µεγαλύτερη των 25 157
εκατοστών,ενώ όταν ανιχνεύει αντικείµενο σε απόσταση µικρότερη τότε το ροµπότ σταµατά την κίνηση του.πολλοί είναι οι µαθητές που έχουν απορίες όπως «Τι γίνεται όταν τοποθετήσουµε ένα βιβλίο σε απόσταση 25 εκατοστά»;τότε ο καθηγητής ζητά από τους υπόλοιπους αν υπάρχει απάντηση και µετά από συλλογική συζήτηση καταλήγουν στο ακόλουθο: 25<25,από τα µαθηµατικά γνωρίζουµε ότι κάτι τέτοιο δεν ισχύει και εκτελείται η οµάδα εντολών µέσα στο else. Επίσης,ο εκπαιδευτικός,για να βοηθήσει ακόµα περισσότερο τα παιδιά,παρουσιάζει µε τον βιντεοπροβολέα το παρακάτω σχήµα,το οποίο θα έχουν στη διάθεση τους κατά την υλοποίηση των δραστηριοτήτων. Εικόνα 4.55 ιάγραµµα οµής Επιλογής ΡΑΣΤΗΡΙΟΤΗΤΑ 2 Με τη δραστηριότητα 1 οι µαθητές έχουν µία πρώτη εικόνα για τη δοµή επιλογής.στη συνέχεια,δίνεται στα παιδιά ο κατάλληλος κώδικας,ζητώντας τους να καταλήξουν, µετά από συζήτηση και εκτέλεση του προγράµµατος, σε οριστικές απαντήσεις όπως: a. Όταν ο αισθητήρας αφής δεν είναι πιεσµένος το ΝΧΤ κινείται ευθεία µε ταχύτητα 100. b. Όταν πιέζουµε τον αισθητήρα το ΝΧΤ σταµατά την κίνηση του.εκτελείται η οµάδα εντολών µέσα στο else. c. Για να είναι αληθής,να ισχύει δηλαδή η συνθήκη,πρέπει ο αισθητήρας να µην είναι πιεσµένος. ηλαδή να είναι 0==0. Η φόρτωση των προγραµµάτων στο NXT και η εκτέλεση τους βοηθά ακόµα περισσότερο τα παιδιά στην κατανόηση της δοµής που µελετάµε. ΡΑΣΤΗΡΙΟΤΗΤΑ 3 Συνεχίζοντας την εξοικείωση µε τη δοµή επιλογής,δίνεται στα παιδιά το πρόγραµµα που πρέπει να εκτελέσουν,αλλά αυτή τη φορά τους ζητείται να χωριστούν σε οµάδες.είναι στην κρίση του καθηγητή να πως θα χωριστούν τα παιδιά.το ένα µέλος αναλαµβάνει το ρόλο του επιστήµονα,απαντώντας σε µία σειρά από ερωτήσεις,ενώ το δεύτερο µέλος το ρόλο του κριτή σχολιάζοντας τις προβλέψεις και καταλήγοντας σε συµπεράσµατα.αναµενόµενες απαντήσεις είναι: a. 50>25,η ανισότητα ισχύει και εκτελείται η οµάδα εντολών µέσα στο if(κίνηση ευθεία µε ταχύτητα 100). b. 10>25,δεν ισχύει,οπότε εκτελείται το τµήµα κώδικα στο else,το ΝΧΤ σταµατά. 158
ΡΑΣΤΗΡΙΟΤΗΤΑ 4 Ο καθηγητής καλεί τους µαθητές να τοποθετήσουν στο ΝΧΤ τον αισθητήρα φωτός,αφού αυτός θα χρησιµοποιηθεί στη δραστηριότητα 4.Τα παιδιά εκτελούν τον κώδικα βήµα προς βήµα. a. Όταν το ΝΧΤ ανιχνεύει σκοτεινή επιφάνεια στρίβει αριστερά. b. Όταν τοποθετούµε ένα λευκό χαρτί στρίβει δεξιά. Στη συνέχεια τους ζητάει να αντικατασήσουν το σύµβολο < µε το > και εκτελώντας τον κώδικα είναι εύκολο να διαπιστώσουν ότι το ΝΧΤ εκτελεί την αντίστροφη κίνηση.ο εκπαιδευτικός επιβραβεύει τις σωστές απαντήσεις. ΡΑΣΤΗΡΙΟΤΗΤΑ 5 Το φύλλο εργασίας συνεχίζει µε µία πιο σύνθετη δραστηριότητα.εδώ οι ρόλοι των οµάδων εναλλάσσονται.σε κάθε απάντηση που δίνει ο επιστήµονας,ο κριτής συµφωνεί ή όχι και τεκµηριώνει την άποψη του.ο εκπαιδευτικός δίνει σε κάθε ζευγάρι τον απαιτούµενο χρόνο για να προετοιµάσει την παρουσίαση του,ενώ ο ίδιος κινείται µεταξύ των παιδιών και τους βοηθά.απαντήσεις όπως οι επόµενες δέχονται την επιβράβευση του καθηγητή. a. Το ΝΧΤ κινείται προς τα πίσω µε ταχύτητα 75. b. 1==0 50>20.Από προηγούµενο φύλλο εργασίας κάτι τέτοιο είανι true οπότε το ΝΧΤ συνεχίζει να κινείται προς τα πίσω. c. 1==0 10>20->false.Έτσι,το ροµπότ σταµατά την κίνηση του. 2.2 Β ΦΑΣΗ-ΚΙΝΗΣΗ ΝΧΤ ΓΙΑ ΤΥΧΑΙΟ ΧΡΟΝΟ ΡΑΣΤΗΡΙΟΤΗΤΑ 6 Στη δραστηριότητα 6 παρουσιάζεται στα παιδιά ο κώδικας της εικόνας 4.53.Αφού έχει προηγηθεί κάποια ανάλυση για την εντολή random(maxnumber),τους ζητείται να σχολιάσουν την έκφραση που χρησιµοπιείται στο πρόγραµµα.μετά από συλλογική συζήτηση και τη βοήθεια του καθηγητή το ΝΧΤ εκτελεί κίνηση για ένα τυχαίο αριθµό µεταξύ 0 και 5000 milliseconds. 2.3 Γ ΦΑΣΗ-ΣΥΝΟΛΙΚΗ ΡΑΣΤΗΡΙΟΤΗΤΑ Προκειµένου ο καθηγητής να βγάλει κάποιο συµπέρασµα για το αν οι µαθητές µπορούν να οικοδοµούν την έννοια της επιλογής,ολοκληρώνει το φύλλο εργασίας µε µία συνολική δραστηριότητα. Ο εκπαιδευτικός χωρίζει τους µαθητές σε οµάδες και τους δίνει ρόλους.ο προγραµµατιστής οφείλει να απαντήσει σε µία σειρά από ερωτήσεις και ο κριτής να σχολιάσει το αποτέλεσµα.στο δεύτερο µέρος της εργασίας οι ρόλοι εναλλάσσονται.οι απαντήσεις καταγράφονται στους πίνακες 4.25 και 4.26. 159
Προγραµµατιστής 1.Σε ποιες εισόδους του NXT τοποθετούνται οι αισθτήρες αφής; Ο ένας αισθητήρας στην είσοδο 1 και ο άλλος στην είσοδο 2. 2.Τί κίνηση εκτελεί το ροµπότ όταν κανένας αισθητήρας δεν είναι πιεσµένος; Κινείται ευθεία µε ταχύτητα 75. 3.Πότε το NXT θα εκτελέσει δεξιόστροφη κίνηση;για πόσο χρόνο θα εκτελεστεί η κίνηση; Όταν ο αισθητήρας αφής 1 είναι πιεσµένος και κινείται για ένα τυχαίο χρόνο µεταξύ 0 και 2000 milliseconds 4.Τί συµβαίνει όταν πιέζουµε τον αισθητήρα αφής στην είσοδο 2; To NXT κινείται προς τα πίσω µε ταχύτητα 75 και στη συνέχεια εκτελεί αριστερόστροφη κίνηση για τυχαίο χρόνο. Πίνακας 4.25 Σωστές Αναντήσεις Προγραµµατιστής 1.Ποιά δοµή χρησιµοποιείται; Η δοµή επιλογής (if else) 2.Πιέζουµε τον αισθητήρα αφής που είναι συνδεδεµένος στην είσοδο 1.Τί συµβαίνει; To NXT κινείται προς τα πίσω µε ταχύτητα 75 και στη συνέχεια εκτελεί δεξιόστροφη κίνηση για τυχαίο χρόνο. 3.Πότε το NXT θα εκτελέσει αριστερόστροφη κίνηση; Όταν πιέσουµε τον αισθητήρα αφής στην είσοδο 2. 4.Τί τιµή εκχωρούµε στη µεταβλητή randtime; Έναν τυχαίο αριθµό από 0 έως 2000. Πίνακας 4.26 Σωστές Αναντήσεις 2.3 ΣΤ ΦΑΣΗ-ΣΥΜΠΕΡΑΣΜΑΤΑ Στο τέλος της εργασίας,όλοι οι µαθητές µπορούν να προγραµµατίσουν µε χρήση της δοµής επιλογής.είναι δηλαδή σε θέση να αναλύουν τα δεδοµένα ενός προβλήµατος,να απαντούν στα ζητήµατα ενός προβλήµατος και να βλέπουν τις επιθυµητές ενέργειες εκτελεσµένες από το ροµπότ.ο εκπαιδευτικός καταλήγει ότι το φύλλο εργασίας ενδιαφέρει τα παιδιά,γεγονός που µπορεί να διαπιστωθεί και από σχόλια όπως: «Ας εκτελέσουµε περισσότερα προγράµµατα στο ΝΧΤ µε χρήση της δοµής επιλογής για να δούµε την κίνηση του». 160
4.4.3 ΑΞΙΟΛΟΓΗΣΗ Κατά τη διάρκεια της διδασκαλίας οι µαθητές φέρνουν στην επιφάνεια προυπάρχουσες γνώσεις για το θέµα ή γνώσεις που έχουν ήδη αποκτηθεί.η αξιολόγηση µπορεί να διεξαχθεί µέσω παρατήρησης της συµµετοχής και του ενδιαφέροντος των µαθητών, µέσω των ερωτήσεων τους. ΦΥΛΛΟ ΑΞΙΟΛΟΓΗΣΗΣ 1.Παρακάτω εµφανίζονται τα βήµατα που ακολουθούνται για την εκτέλεση µιας δοµής επιλογής.συµπληρώστε τα κενά µε τις κατάλληλες λέξεις. Ελέγχεται η συνθήκη αν είναι ή. Εκτελείται η οµάδα εντολών στο if αν η συνθήκη είναι. Αλλιώς αν η συνθήκη είναι ψευδής εκτελείται στο. 2.Τα βήµατα της άσκησης 1 φαίνονται στο παρακάτω ψευδοκώδικα.γράψτε τα µέρη της δοµής επιλογής. Εικόνα 4.56 Τµήµα δοµής επιλογής 161
4.5 ΥΣΚΟΛΙΕΣ ΚΑΤΑ ΤΗΝ ΕΚΜΑΘΗΣΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΕ ΧΡΗΣΗ ΤΩΝ LEGO MINDSTORMS Οι αντικειµενικοί στόχοι που τίθενται συνήθως, σύµφωνα µε το Πρόγραµµα Σπουδών, για, την εισαγωγή στον προγραµµατισµό περιλαµβάνουν την απόκτηση γνώσεων και δεξιοτήτων. Οι γνώσεις σχετίζονται µε την κατανόηση προβλήµατος, το σχεδιασµό αλγορίθµων, είδη τεχνικές περιβάλλοντα προγραµµατισµού, δοµές δεδοµένων, δοµές αλγορίθµων και οι δεξιότητες µε την υλοποίηση έλεγχο εκσφαλµάτωση τεκµηρίωση αξιολόγηση προγράµµατος(καγκάνη Κ., αγδιλέλης Β., Σαρατζέµη Μ., Ευαγγελίδης Γ., 2005). Τα σηµαντικότερα προβλήµατα που αντιµετωπίζουν οι αρχάριοι είναι τα εξής (Du Boulay 1989,Brusilovsky et al.,1999): Οι γλώσσες γενικού σκοπού διαθέτουν ένα µεγάλο ρεπερτόριο εντολών και είναι πολύπλοκες. Η προσοχή των µαθητών επικεντρώνεται στην εκµάθηση της ίδιας της γλώσσας και όχι στην ανάπτυξη ικανοτήτων επίλυσης προβληµάτων. Το προγραµµατιστικό περιβάλλον συνήθως δεν παρέχει δυνατότητες οπτικοποίησης. Οι εµπορικοί µεταγλωττιστές δεν ικανοποιούν τις ανάγκες των αρχαρίων προγραµµατιστών. Η επίλυση ενδιαφερόντων προβληµάτων απαιτεί την εκµάθηση ενός µεγάλου υποσυνόλου της γλώσσας και την ανάπτυξη µεγάλων προγραµµάτων. Η διανοητική πολυπλοκότητα που απαιτεί η εκφορά ενός αλγορίθµου σε µια γλώσσα προγραµµατισµού είναι µεγάλη. 162
ΚΕΦΑΛΑΙΟ 5: ΣΥΜΠΕΡΑΣΜΑΤΑ 5.1 Μαθήµατα Ροµποτικής Στην εργασία αυτή έγινε στις πρώτες ενότητες µια σύντοµη παρουσίαση των ιδιοτήτων και της εξέλιξης του ροµπότ Lego, καθώς και των προσφερόµενων λογισµικών για τον προγραµµατισµό του. Στις επόµενες ενότητες έγινε αναλυτική παρουσίαση του λογισµικού RobotC και όλων των δυνατοτήτων του και δηµιουργήθηκαν φύλλα εργασίας και σχέδια µαθήµατος για τον τρόπο που µπορεί να αξιοποιηθεί το λογισµικό αυτό σε µία τάξη µε στόχο την εξοικείωση των µαθητών µε τον προγραµµατισµό. Η εργασία ολοκληρώνεται µε την εφαρµογή αυτή τη φορά φύλλων εργασίας της πλατφόρµας NXT software σε µαθητές, ώστε να διαπιστωθεί η αποτελεσµατικότητά τους και η στάση των µαθητών στα θέµατα που παρουσιάζονται. Αρχικά, επιλέχθηκαν για τα υπάρχοντα φύλλα εργασίας τα σηµαντικότερα θέµατα και οι αντιπροσωπευτικότερες ασκήσεις για τον σχηµατισµό ενός τελικού φύλλου. Το τελικό αυτό φύλλο είναι χωρισµένο σε τέσσερεις ενότητες αντίστοιχες µε τα θέµατα των φύλλων εργασίας, για την εξοικείωση µε το περιβάλλον του λογισµικού, την έννοια της µεταβλητής, της επανάληψης και της επιλογής. Ακολουθεί και το τελικό φύλλο εργασίας την ίδια τακτική για το χωρισµό των παιδιών σε οµάδες και την απόδοση ρόλων σε κάθε µέλος της οµάδας. Για την ολοκλήρωση των µαθηµάτων ροµποτικής χρειάστηκαν 3 συναντήσεις µε τους µαθητές. Στην πρώτη συνάντηση ολοκληρώθηκε η εξοικείωση µε το περιβάλλον του λογισµικού και τα πρώτα βασικά Blocks που χρησιµοποιούνται στην ανάπτυξη ενός προγράµµατος. Στη δεύτερη συνάντηση αναλύθηκαν οι έννοιες της µεταβλητής και της επανάληψης και τέλος στην τελευταία συνάντηση έγινε η εξοικείωση µε την έννοια της επιλογής. Η κάθε συνάντηση διήρκησε µιάµιση µε δύο ώρες. 5.2 Αναλυτική παρουσίαση των µαθηµάτων Πρώτο µάθηµα: Το πρώτο µάθηµα όπως προαναφέρθηκε είχε στόχο την εξοικείωση των µαθητών µε το περιβάλλον του λογισµικού. Στο δεύτερο µάθηµα τα παιδιά γνώρισαν τις έννοιες της µεταβλητής και της επανάληψης στον προγραµµατισµό και στο τρίτο και τελευταίο µάθηµα έγινε η εξοικείωση µε την έννοια της επιλογής. Αρχικά, από το πρώτο µάθηµα, µοιράστηκε στα παιδιά το τελικό φύλλο εργασίας το οποίο παρουσιάζεται παρακάτω: 163
ραστηριότητα Εξοικείωσης µε το Περιβάλλον NXT Software Μαθαίνουµε να παίζουµε µε το ροµπότ της Lego Για την επίλυση των παρακάτω δραστηριοτήτων πρέπει να δηµιουργηθεί µία οµάδα δύο ατόµων. Στην οµάδα θα υπάρχουν δύο ρόλοι, ο ρόλος του προγραµµατιστή και ο ρόλος του αναλυτή. Στο βήµα της εξοικείωσης ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται. Ο προγραµµατιστής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή για να ολοκληρωθεί η ενότητα. Στο βήµα των ασκήσεων ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, τόσο µε τις ενέργειες του προγραµµατιστή για την επίλυση της άσκησης όσο και µε τις απαντήσεις του στα ερωτήµατα. Οι ρόλοι πολλές φορές θα εναλλάσσονται, δηλαδή ο αναλυτής θα παίρνει το ρόλο του προγραµµατιστή και ο προγραµµατιστής του αναλυτή, ανάλογα µε τις υποδείξεις της κάθε δραστηριότητας. Παρακάτω γράψτε τα ονόµατα σας: Μέλος Α: Μέλος Β: 164
Α. Τα πρώτα βήµατα της εξοικείωσης-μαθαίνουµε τα βασικά Blocks 1. Μαθαίνοντας στο ροµπότ να περπατά µε το Move Block Ανοίγουµε την εφαρµογή σύµφωνα µε τις υποδείξεις του καθηγητή και συνεχίζουµε µε τα πρώτα βήµατα του ροµπότ µας. 1.1 Τι είναι το Move Block; Ξεκινάµε µε την εξοικείωση µε το move block. Το block αυτό το χρησιµοποιούµε για να κινήσουµε το ροµπότ. 1.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Έστω για παράδειγµα ότι θέλουµε το ροµπότ µας να µετακινηθεί µπροστά, σε ευθεία για 5 δευτερόλεπτα. Για να το πετύχουµε αυτό πρέπει να: Εισάγουµε µε τη λειτουργία drag and drop, στην επιφάνεια δηµιουργίας του προγράµµατος ένα move block από την παλέτα Common. Στην περιοχή παραµέτρων του move block κάνουµε τις εξής ρυθµίσεις: Port: Επιλέγουµε τις θύρες που έχουµε συνδέσει τους κινητήρες στο ροµπότ. Direction: Το ροµπότ µας θέλουµε να κινηθεί µπροστά, εποµένως επιλέγουµε το πρώτο βελάκι. Το δεύτερο προκαλεί κίνηση προς πίσω, ενώ το τρίτο σταµατά την κίνηση του ροµπότ. Steering: Θέλουµε η κίνηση να είναι ευθεία, εποµένως δεν αλλάζουµε την προεπιλεγµένη τιµή. Αν θα θέλαµε το ροµπότ να στρίβει, θα τοποθετούσαµε στην επιθυµητή τιµή το δείκτη. 165
Power: ίνουµε την τιµή 20 στην ταχύτητα της κίνησης του ροµπότ. Duration: Θέλουµε το ροµπότ να κινηθεί για 5 δευτερόλεπτα, εποµένως στο δεύτερο µενού επιλέγουµε το Seconds και στο πρώτο πεδίο δίνουµε την τιµή 5. Αφού συνδέσουµε το ροµπότ στον υπολογιστή µας πατάµε το πλήκτρο Download and Run που βρίσκεται κάτω δεξιά στο παράθυρο δηµιουργίας του προγράµµατος. Ακολουθώντας τα παραπάνω βήµατα εκτελέστε τη δραστηριότητα και καταγράψτε τα συµπεράσµατα και την άποψη σας για τα ακόλουθα θέµατα: Συζητήστε µαζί: 1.Κινήθηκε πράγµατι το ροµπότ σε ευθεία για 5 δευτερόλεπτα; 2.Αν στο πεδίο Port ένας συµµαθητής σας δεν έδινε τις σωστές επιλογές, τι πιστεύετε ότι θα γινόταν; 1 2 Ερώτηση: 3.Αν επιθυµούσαµε το ροµπότ να κινηθεί γρηγορότερα, σε ποιο πεδίο θα έπρεπε να αλλάξουµε τιµή και ποια θα ήταν η νέα τιµή που θα δίναµε; Απάντηση Αναλυτή: 166
Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί: Συµπέρασµα οµάδας στην διαφωνία: 1.3 Άσκηση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Β. Αναλυτής: Μέλος Α. (Ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο.) Ας εκτελέσουµε τώρα µία µεγαλύτερη άσκηση. Στο µενού File επιλέξτε το New και στο νέο παράθυρο δηµιουργήστε το παρακάτω πρόγραµµα µε παράθεση move blocks το ένα µετά το άλλο. Έστω ότι θέλουµε το ροµπότ µας να πραγµατοποιήσει την παρακάτω κίνηση: Να προχωρήσει µπροστά για 5 δευτερόλεπτα, στη συνέχεια να στρίψει αριστερά, να προχωρήσει άλλα 5 δευτερόλεπτα, να στρίψει αριστερά αλλά σε µικρότερο βαθµό από την προηγούµενη στροφή και τέλος να προχωρήσει άλλα δύο δευτερόλεπτα. 167
Ερώτηση: Περιγράψτε πόσα move block θα πρέπει να χρησιµοποιήσουµε και τι παραµέτρους να ορίσουµε σε αυτά. Απάντηση Προγραµµατιστή: Απάντηση Αναλυτή: Συµφωνώ ιαφωνώ Γιατί: Συµπέρασµα οµάδας στην διαφωνία: Στη συνέχεια φορτώστε την άσκηση στο ροµπότ και ελέγξτε αν πραγµατοποιείται η επιθυµητή κίνηση. 168
2.Πως το ροµπότ αποστηθίζει κινήσεις µε το Record/Play Block Αποθηκεύστε τα προγράµµατα που έχετε δηµιουργήσει επιλέγοντας το save στο µενού File και δώστε τα ονόµατα ΑΣΚΗΣΗ1 και ΑΣΚΗΣΗ1α στο πρώτο και στο δεύτερο αντίστοιχα. Κλείστε τις καρτέλες αυτών των ασκήσεων πατώντας στο µενού File το Close και στη συνέχεια ανοίξτε µία νέα καρτέλα για την δηµιουργία των επόµενων ασκήσεων. ώστε στη νέα καρτέλα το όνοµα ΑΣΚΗΣΗ2. 2.1 Τι κάνει ένα Record/Play Block; Με το block Record/Play µπορούµε να καταγράψουµε κάποιες κινήσεις του ροµπότ και στη συνέχεια αφού τις αποθηκεύσουµε να τις αναπαράγουµε. Στην ουσία αποµνηµονεύεται πόσες φορές έχει κινηθεί ο κάθε κινητήρας και κατά την αναπαραγωγή επαναλαµβάνεται ο αριθµός των κινήσεων. 2.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Β. Αναλυτής: Μέλος Α. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Ας δούµε τώρα πως λειτουργεί το Record/Play Block. Αρχικά εισάγουµε ένα Record/Play block στο πρόγραµµα µας. Στη συνέχεια στην περιοχή παραµέτρων του Record/Play block κάνουµε τις παρακάτω ρυθµίσεις: Action: Αρχικά θέλουµε να καταγράψουµε την τετραγωνική κίνηση, άρα επιλέγουµε το Record. Name: ίνουµε ένα όνοµα στην καταγραφή µας. Εδώ καταγράφουµε µία τετραγωνική κίνηση οπότε µπορούµε να την ονοµάσουµε tetragwno. Recording: Εδώ θα πρέπει να τσεκάρουµε τις θύρες στις οποίες έχουµε συνδέσει τους κινητήρες. 169
Time: Εισάγουµε τη διάρκεια της καταγραφής σε δευτερόλεπτα. ίνουµε την τιµή 5. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και καταγράψτε την τετραγωνική κίνηση. Στη συνέχεια σε µία νέα καρτέλα εισάγετε και πάλι ένα Record/Play block και αυτή τη φορά επιλέξτε στις παραµέτρους το Play και δώστε το όνοµα tetragwno. Εδώ στην ουσία ζητάµε να εκτελεστεί η καταγραφή µας. Φορτώστε το πρόγραµµα στο ροµπότ και εκτελέστε το. Συζητήστε µαζί: 1.Πραγµατοποιείται η τετραγωνική κίνηση που είχατε καταγράψει στο πρώτο Record/Play Block; Ερωτήσεις: 2.Αν επιθυµούσαµε να καταγράψουµε µία µεγαλύτερη κίνηση, ποια παράµετρο θα έπρεπε να αλλάξουµε και τι τιµή να της δώσουµε; Απάντηση Αναλυτή: Απάντηση Προγραµµατιστή: 170
Συµφωνώ ιαφωνώ στην απάντηση Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: 2.3 Άσκηση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. (Ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο.) Έστω ότι επιθυµούµε το ροµπότ να εκτελέσει µία τετραγωνική κίνηση καθώς προχωρά, αλλά την κίνηση αυτή, να την έχουµε καταγράψει ώστε να καθορίσουµε ακριβώς τον τρόπο που επιθυµούµε να πραγµατοποιηθεί. 171
Ερώτηση: 1.Πως θα µπορούσαµε να συνδυάσουµε τις ενέργειες της εξοικείωσης σε ένα πρόγραµµα ώστε να καταγράφουµε την κίνηση και το ροµπότ µας να την εκτελέσει καθώς προχωρά; Απάντηση Προγραµµατιστή: Απάντηση Αναλυτή: Συµφωνώ ιαφωνώ Γιατί: Συµπέρασµα οµάδας στην διαφωνία: Εκτελέστε την άσκηση στο ροµπότ και ελέγξτε αν πραγµατοποιείται η τετραγωνική κίνηση, όπως την καταγράψατε στην αρχή του προγράµµατος. 172
3. Το ροµπότ µιλάει και δείχνει µηνύµατα µε τα Sound Block και Display Block 3.1 Τι είναι τα Sound και Display Blocks; Αν θέλουµε να αναπαράγουµε κάποιον ήχο χρησιµοποιούµε το Sound block. Αν θέλουµε να εµφανίσουµε στην οθόνη του ροµπότ µια εικόνα χρησιµοποιούµε το Display Block. 3.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Από το µενού File ανοίγουµε µε το Open το πρόγραµµα ΑΣΚΗΣΗ1, που έχουµε ήδη δηµιουργήσει. Μετά το move block, εισάγουµε ένα Sound Block. Στην περιοχή παραµέτρων του κάνουµε τις παρακάτω ρυθµίσεις: Action: Επιλέγουµε το Sound File. Control: Θέλουµε να ακούσουµε έναν ήχο, άρα επιλέγουµε το Play. Volume: Ρυθµίζουµε την ένταση του ήχου που θα ακουστεί. File: Επιλέγουµε την αναπαραγωγή του ήχου Forward. Ερώτηση: 1.Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και καταγράψτε τις λειτουργίες που εκτελούνται. 173
Απάντηση Αναλυτή: Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί: Συµπέρασµα οµάδας στην διαφωνία: Στο προηγούµενο παράδειγµα, πριν το Move Block τοποθετούµε ένα Display Block. 174
Κάνουµε τις παρακάτω ρυθµίσεις στην περιοχή παραµέτρων του: Action: Επιλέγουµε το Image. File: Επιλέγουµε το Forward. Ερώτηση: 1.Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και καταγράψτε τις λειτουργίες που εκτελούνται. Απάντηση Αναλυτή: Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί: 175
Συµπέρασµα οµάδας στην διαφωνία: 3.3 Άσκηση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Β. Αναλυτής: Μέλος Α. (Ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο.) Έστω τώρα ότι θέλουµε στο παράδειγµα ΑΣΚΗΣΗ1α στην πρώτη στροφή να ακούγεται η κατεύθυνση στην οποία στρίβει το ροµπότ µας(δηλαδή left), ενώ στη δεύτερη να εµφανίζεται στην οθόνη η ένδειξη της αριστερής στροφής. Ερώτηση: 1.Ποια block πρέπει να προσθέσουµε στο παράδειγµά µας και σε ποια σηµεία; Απάντηση Προγραµµατιστή: 176
Απάντηση Αναλυτή: Συµφωνώ ιαφωνώ Γιατί: Συµπέρασµα οµάδας στην διαφωνία: Εκτελέστε την άσκηση στο ροµπότ και ελέγξτε αν ακούγονται και εµφανίζονται τα κατάλληλα µηνύµατα στα σωστά σηµεία του προγράµµατος. 4. Το ροµπότ ελέγχει το περιβάλλον µε το Wait Block 4.1 Ποια είναι η λειτουργία του Wait Block; To Wait block επιτρέπει στο ροµπότ να διαισθανθεί/ελέγξει µία συγκεκριµένη συνθήκη του περιβάλλοντος του πριν συνεχίσει τις ενέργειές του. Επιτρέπει να ορίσουµε κάποιες τιµές σε µεταβλητές των αισθητήρων τις οποίες το ροµπότ θα ελέγχει και ανάλογα θα συνεχίζει ή θα σταµατά την εκτέλεση του προγράµµατος µε βάση τις προϋποθέσεις που έχουµε θέσει. Πριν συνεχίσετε στις ασκήσεις εξοικείωσης, συζητήστε στην τάξη για τους αισθητήρες που διαθέτει το ροµπότ και δοκιµάστε να αποδώσετε τα χαρακτηριστικά του κάθε αισθητήρα µε τη βοήθεια του καθηγητή σας. 177
4.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Β. Αναλυτής: Μέλος Α. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Ανοίγουµε µία νέα καρτέλα και εισάγουµε δύο move blocks στα οποία δίνουµε την ιδιότητα να κινούνται για πάντα το πρώτο, επιλέγοντας στο πεδίο Duration το Unlimited και για δύο δευτερόλεπτα το δεύτερο. Το πρώτο move block επιλέγουµε να κινείται προς εµπρός, ενώ το δεύτερο προς πίσω. Στη συνέχεια, ανάµεσα στα δύο move blocks τοποθετούµε ένα wait block για έναν αισθητήρα αφής. Στο πεδίο παραµέτρων κάνουµε τις παρακάτω ρυθµίσεις: Port: Επιλέγουµε την θύρα στην οποία έχουµε συνδέσει τον αισθητήρα. Action: Επιλέγουµε το Pressed. 178
Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και καταγράψτε: Ερώτηση: 3.Τι θα γίνει αν δεν πιέσουµε ποτέ τον αισθητήρα αφής; Απάντηση Αναλυτή: Απάντηση Προγραµµατιστή: Συζητήστε µαζί: 1.Τι γίνεται όταν πιέζουµε τον αισθητήρα αφής; 2.Ένας µαθητής επέλεξε λάθος θύρα εισόδου στο πεδίο port. Ποιο νοµίζετε ότι θα είναι το αποτέλεσµα; 1 2 Συµφωνώ ιαφωνώ στην απάντηση Γιατί: 179
Συµπέρασµα οµάδας στην διαφωνία: 4.3 Άσκηση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. (Ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο.) Το ροµπότ κατά τη διάρκεια της κίνησης του συναντά πολλές φορές εµπόδια, όπως αντικείµενα ή τοίχους. Ποια τακτική θα µπορούσαµε να χρησιµοποιήσουµε για την αποφυγή αυτών των εµποδίων; Ερώτηση: 1.Περιγράψτε ένα σύντοµο πρόγραµµα µε το οποίο το ροµπότ θα µπορεί να αποφύγει κάποιο εµπόδιο και να συνεχίσει την κίνηση του. Απάντηση Προγραµµατιστή: 180
Απάντηση Αναλυτή: Συµφωνώ ιαφωνώ Γιατί: Συµπέρασµα οµάδας στην διαφωνία: Εκτελέστε την άσκηση στο ροµπότ και ελέγξτε αν πράγµατι συναντώντας εµπόδιο το ροµπότ αλλάζει πορεία κίνησης και το αποφεύγει. 5 Επαναλήψεις κινήσεων µε το Loop Block 5.1 Πότε χρησιµοποιούµε ένα Loop Block; To Loop block χρησιµοποιείται για να επαναλάβουµε τµήµατα κώδικα. Μπορούµε να επιλέξουµε τη συνθήκη που θα τερµατίζει το βρόγχο ανάλογα µε το χρόνο, τον αριθµό επαναλήψεων, µία λογική τιµή ή µε βάση τις τιµές εισόδου από έναν αισθητήρα. Επίσης µπορούµε να ορίσουµε να επαναλαµβάνεται ο βρόγχος για πάντα. 181
5.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Ανοίγουµε το προηγούµενο παράδειγµα ΑΣΚΗΣΗ1α, στο οποίο έχουµε πλέον εισάγει και τα sound και display blocks. Εισάγουµε επίσης στο πρόγραµµα µας ένα Loop block, µέσα στο οποίο τοποθετούµε το πρόγραµµα µας. Η µεταφορά του προγράµµατος µέσα στο block γίνεται επιλέγοντας όλα τα blocks του προγράµµατος και µεταφέροντας τα µε drag and drop µέσα στο loop block. Στη συνέχεια, στην περιοχή παραµέτρων του Loop Block κάνουµε τις παρακάτω ρυθµίσεις. Control: Επιλέγουµε το count, ώστε η επανάληψη να γίνει σε κάποιο ορισµένο αριθµό. Until: ίνουµε την τιµή 5, που σηµαίνει ότι ο βρόγχος µας θα εκτελεστεί 5 φορές. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε αν πράγµατι η επανάληψη θα εκτελεστεί 5 φορές. Ερωτήσεις: 1.Τι θα γίνει αν στο πεδίο Count δώσουµε την τιµή 2; 2.Τι πρέπει να κάνουµε για να επαναληφθεί το πρόγραµµα για 30 δευτερόλεπτα; Απάντηση Αναλυτή: 182
1... 2 Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ µε την απάντηση Γιατί: Συµπέρασµα οµάδας στην διαφωνία: 183
5.3 Άσκηση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Β. Αναλυτής: Μέλος Α. (Ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο.) Θέλουµε το ροµπότ να εκτελέσει µία τριγωνική κίνηση διανύοντας µετά από κάθε στροφή την ίδια απόσταση. Πώς θα µπορούσαµε να χρησιµοποιήσουµε το Loop Block σε µία τέτοια περίπτωση; Μπορείτε να σκεφτείτε έναν άλλο τρόπο να εκτελεστεί αυτή ή κίνηση; Συγκρίνετε τις δύο µεθόδους και διαπιστώστε: Ερωτήσεις: 1.Σε ποια περίπτωση χρησιµοποιούµε περισσότερα blocks; 2.Ποια περίπτωση θεωρείτε πιο πρακτική; Απάντηση Προγραµµατιστή: 1 2 Απάντηση Αναλυτή: 184
Συµφωνώ ιαφωνώ στην απάντηση. Γιατί:.. Συµπέρασµα οµάδας στην διαφωνία: Εκτελέστε την άσκηση στο ροµπότ και ελέγξτε αν εκτελείτε στις δύο περιπτώσεις η τριγωνική κίνηση και διαπιστώστε πότε καταβάλατε µεγαλύτερη προσπάθεια κατά την υλοποίηση του κώδικα. 6. Πως διαλέγει το ροµπότ τις ενέργειες του µε το Switch Block 6.1 Τι είναι το Switch Block; Χρησιµοποιούµε το Switch Block για να επιλέξουµε να εκτελεστεί ένα από δύο τµήµατα κώδικα. 6.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Β. Αναλυτής: Μέλος Α. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Σε µία νέα καρτέλα εισάγουµε ένα switch block. 185
Στην περιοχή των παραµέτρων του κάνουµε τις ρυθµίσεις: Control: Επιλέγουµε Sensor γιατί θέλουµε ο έλεγχος της επανάληψης να γίνεται µε έναν αισθητήρα. Sensor: ιαλέγουµε έναν Touch Sensor. Port: Επιλέγουµε τη θύρα που έχουµε συνδέσει τον Touch Sensor. Action: Επιλέγουµε το Pressed. Στη συνέχεια, στο πάνω σκέλος του Switch Block εισάγουµε ένα move block για κίνηση µπροστά και ευθεία για 5 δευτερόλεπτα. Στο κάτω σκέλος εισάγουµε ένα move block για κίνηση πίσω και ευθεία για 5 δευτερόλεπτα. Με αυτές τις ενέργειες αυτό που πετυχαίνουµε είναι, να κινηθεί το ροµπότ µπροστά για 5 δευτερόλεπτα αν ο αισθητήρας αφής είναι πιεσµένος, ενώ αν είναι ελεύθερος, θα κινηθεί για 5 δευτερόλεπτα µε κατεύθυνση προς πίσω. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε τα παρακάτω: Συζητήστε µαζί: 1.Τι γίνεται όταν πατάµε τον αισθητήρα αφής; 2.Εκτελούνται οι σωστές ενέργειες στους κινητήρες ανάλογα µε την περίπτωση; 1 2 186
Ερωτήσεις: 3.Τι θα γίνει αν επιλέξουµε λάθος θύρα εισόδου στο Switch Block; 4.Πως µπορούµε να χρησιµοποιήσουµε άλλο αισθητήρα; Απάντηση Αναλυτή: 3 4 Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί:... Συµπέρασµα οµάδας στην διαφωνία: 187
Β. Εξοικείωση µε την έννοια της µεταβλητής.- Μαθαίνουµε να εκχωρούµε και να χρησιµοποιούµε τιµές. 1.Εξοικείωση µε την έννοια της µεταβλητής. Μια µεταβλητή είναι ένα όνοµα για µία θέση µνήµης στο υπολογιστικό σύστηµα. Για παράδειγµα η θέση µνήµης που συµβολίζεται µε το τετραγωνάκι παίρνει την τιµή 10. Θέση µνήµης 10 Στην παρακάτω θέση µνήµης δώστε την τιµή 5. Θέση µνήµης. Στο NXT Software η µεταβλητές παρουσιάζονται σαν ένα block στο οποίο δίνουµε µία τιµή. Την τιµή αυτή µπορούν να τη χρησιµοποιήσουν και άλλα blocks ενός προγράµµατος µέσω καλωδίων που µεταφέρουν δεδοµένα από και προς τη µεταβλητή. Έστω η παρακάτω µεταβλητή δίνει την ταχύτητα σε ένα move block. 50 Ταχύτητα= <-----------------------> 50 Καλώδιο Variable block Move block Αν η παρακάτω µεταβλητή δίνει την ένταση σε ένα Sound block, συµπληρώστε την τιµή της έντασης. Ένταση= 20 Variable block <-----------------------> καλώδιο.. Sound block 188
Όταν χρησιµοποιούµε µεταβλητές σε προγράµµατα είναι καλό να τους δίνουµε ονόµατα που ανταποκρίνονται στην ιδιότητά τους, ώστε να είναι εύκολο να κατανοήσουµε το ρόλο τους διαβάζοντας το πρόγραµµα. Για παράδειγµα την παραπάνω µεταβλητή θα µπορούσαµε να την ονοµάσουµε «Ταχύτητα» ταχύτητα Ταχύτητα= 50 Variable block <-----------------------> καλώδιο 50 Move block Τι όνοµα θα δίνατε στην παρακάτω µεταβλητή:. 20 <-----------------------> Ένταση= 20. Καλώδιο Variable block Sound block Στις µεταβλητές εκτός από τιµή και από όνοµα θα πρέπει να δίνουµε και µία ιδιότητα η οποία θα εκφράζει αν η τιµή που κουβαλά η µεταβλητή είναι αριθµός, κείµενο ή λογική τιµή. Τι ιδιότητα πιστεύετε ότι θα έπρεπε να δώσουµε στις µεταβλητές ταχύτητα και ένταση; Στις µεταβλητές πρέπει πάντα να δίνεται αρχική τιµή. Λογικές προτάσεις Μια πρόταση λέγεται λογική όταν µπορεί να χαρακτηριστεί αληθής ή ψευδής. Ένας τέτοιος χαρακτηρισµός µιας πρότασης λέγεται τιµή αλήθειας ή απλά τιµή της πρότασης. 189
1. Variable Block, το Block που θυµάται τιµές. 1.1 Πως λειτουργεί το Variable Block Σκεφτείτε το Variable Block σαν ένα χώρο που αποθηκεύονται τιµές στη µνήµη του ΝΧΤ. Άλλα block του προγράµµατος µπορούν να διαβάσουν τις τιµές αυτές, ή ακόµα και να τις αλλάξουν. Για να δηµιουργήσουµε µία µεταβλητή αρχικά επιλέγουµε από το µενού Edit το Define Variables. Κάνοντας την επιλογή αυτή εµφανίζεται το παρακάτω παράθυρο διαλόγου. Πατήστε το πλήκτρο Create, δώστε στο πεδίο Name το όνοµα της µεταβλητής και στο πεδίο Datatype επιλέξτε το Number γιατί θέλουµε η µεταβλητή µας να δέχεται αριθµό. 1.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Θέλουµε να δηµιουργήσουµε µία µεταβλητή και να αποθηκεύσουµε σε αυτήν τον αριθµό των επαναλήψεων που έκανε το ροµπότ µας στο παράδειγµα µε το τρίγωνο του προηγούµενου φύλλου εργασίας. Αφού ανοίξουµε το παράδειγµα µε το τρίγωνο στην εφαρµογή µας τσεκάρουµε στην περιοχή των παραµέτρων του loop block την επιλογή counter, για να χρησιµοποιήσουµε τον αριθµό των επαναλήψεων. Στη συνέχεια εισάγετε από την κατηγορία Data της παλέτας Complete το variable block. 190
Στην περιοχή παραµέτρων του block κάνουµε τις παρακάτω ρυθµίσεις: List: Επιλέγουµε τη µεταβλητή που έχουµε δηµιουργήσει µε το όνοµα epanalipseis. Action: Επιλέγουµε το Write ώστε να µπορούµε να δώσουµε µια τιµή στη µεταβλητή. Τώρα αυτό που µένει είναι να ενώσουµε την έξοδο από το loop block στη είσοδο της µεταβλητής µας. Έτσι αποθηκεύεται ο αριθµός των επαναλήψεων και µπορούµε να τον χρησιµοποιήσουµε αργότερα µέσω της µεταβλητής µας. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και καταγράψτε: Συζητήστε µαζί: 1.Τι τιµή έχει πάρει το Variable Block; 2.Ήταν εύστοχη η ονοµασία του; 1 2 Ερώτηση: 3.Γιατι στον τύπο της µεταβλητής επιλέξαµε το Number; Απάντηση Αναλυτή: 191
Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: 2. Μαθηµατικέ πράξεις µε το Math Block 2.1 Τι κάνει ένα Math Block; Το Math block εκτελεί απλές αριθµητικές πράξεις όπως πρόσθεση, αφαίρεση, πολλαπλασιασµό και διαίρεση. Το δεδοµένα εισόδου, δηλαδή οι αριθµοί που θα χρειαστούν για τις πράξεις, µπορούν είτε να πληκτρολογηθούν στα αντίστοιχα πεδία που βρίσκονται στο πάνελ που εµφανίζεται όταν εισάγετε το block στο πρόγραµµα, είτε να εισαχθούν στο block δυναµικά µε καλώδια δεδοµένων. 2.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Β. Βοηθός: Μέλος Α. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) 192
Θέλουµε να προσθέσουµε δύο τιµές και να καταχωρήσουµε το αποτέλεσµα σε µία µεταβλητή. Στη συνέχεια, το άθροισµα θα εµφανίζεται στην οθόνη του ροµπότ καθώς αυτό κινείται. Εισάγουµε στο πρόγραµµα ένα Math Block. Στην περιοχή παραµέτρων κάνουµε τις παρακάτω ρυθµίσεις: Operation: Επιλέγουµε την τιµή Addition. A: Θέτουµε ίσο µε τον αριθµό 2. Β: Θέτουµε ίσο µε τον αριθµό 1. ηµιουργούµε κατάλληλη µεταβλητή σε ένα Variable Block και του προσδίδουµε την τιµή συνδέοντας την έξοδο του Math µε την είσοδο του Compare block. Συνεχίζουµε εισάγοντας ένα Number To Text Block από την κατηγορία Advanced της Complete παλέτας. Το Block αυτό µετατρέπει τον αριθµό που φέρει το Variable Block σε κείµενο, το οποίο θα µπορεί να εµφανιστεί στην οθόνη του NXT µέσω ενός Display block. Συνδέουµε την έξοδο του variable block µε την είσοδό του Number To Text Block και την έξοδο του Number To Text Block µε ένα Display Block. Εδώ θα πρέπει να προσέξουµε τον τύπο της εισόδου στο Display Block. Αφού είναι κείµενο άρα είναι τύπου Text και εποµένων θα πρέπει να το συνδέσουµε µε την είσοδο για κείµενα του Display block όπως φαίνεται παρακάτω. Τέλος προσθέτουµε ένα Move Block που θα προκαλεί την κίνηση. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε: 193
Συζητήστε µαζί: 1.Είναι σωστός ο ισχυρισµός ότι η µεταβλητή είναι τύπου Number; 2.Το όνοµα athroisma είναι σαφές για την συγκεκριµένη µεταβλητή; 1 2 Ερώτηση: 3.Ποια είναι η τελική τιµή της; Απάντηση Αναλυτή: Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: 194
3. Τυχαίες τιµές µε το Random Block 3.1 Τι κάνει ένα Random Block; Το Random Block δηµιουργεί τυχαίους αριθµούς. Μπορείτε να χρησιµοποιήσετε αυτούς τους τυχαίους αριθµούς για να προκαλέσετε συµπεριφορές του ροµπότ που δεν θα έχουν προβλεφθεί. Για παράδειγµα, αν χρησιµοποιήσετε ένα καλώδιο δεδοµένων για να συνδέσετε ένα Random Block µε τη θύρα εισόδου για τη διάρκεια της κίνησης ενός Move Block, το ροµπότ µπορεί να κινηθεί 5 δευτερόλεπτα την πρώτη φορά που θα εκτελέσετε το πρόγραµµα και 10 την επόµενη. 3.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Βοηθός: Μέλος Β. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Θα δηµιουργήσουµε ένα πρόγραµµα όµοιο µε της προηγούµενης ενότητας µε τη διαφορά ότι αυτή τη φορά στην µεταβλητή θα δώσουµε µία τυχαία τιµή µέσα από ένα πεδίο τιµών που επιλέγουµε εµείς. Εισάγουµε σε µία νέα καρτέλα ένα Random Block. Στην περιοχή παραµέτρων κάνουµε τις παρακάτω ρυθµίσεις: 195
A: Θέτουµε ίσο µε τον αριθµό 0. Β: Θέτουµε ίσο µε τον αριθµό 10. Συνεχίζουµε προσθέτοντας ένα Variable Block µε τον κατάλληλο τύπο και συνδέοντας την έξοδο του Random block µε την είσοδο του. Η έξοδος του όµοια µε την προηγούµενη άσκηση συνδέεται µε ένα Number To Text Block και εν συνεχεία µε ένα Display Block. Τέλος ακολουθεί το Move Block για την πρόκληση της κίνησης. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και διαπιστώστε: Συζητήστε µαζί: 1.Οι ενδείξεις στην οθόνη είναι µέσα σε αυτό το πεδίο τιµών; 2.Πως θα µπορούσαµε να αλλάξουµε το πεδίο τιµών; 1 2. Ερωτήσεις: 3.Ποιος τύπος µεταβλητής είναι ο σωστός; 4.Από πιο πεδίο τιµών θα πάρει τιµή η µεταβλητή µας; Απάντηση Αναλυτή: 3.. 4 196
Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί: Συµπέρασµα οµάδας στην διαφωνία:.. Γ. Εξοικείωση µε την έννοια της επανάληψης.- Μαθαίνουµε στο ροµπότ να επαναλαµβάνει ενέργειες. 1. Η έννοια της επανάληψης Πολλές φορές, για να λύσουµε ένα πρόβληµα, χρειάζεται να επαναλάβουµε αρκετές φορές µια ακολουθία βηµάτων. Μάλιστα, σε ορισµένες περιπτώσεις δεν είναι εκ των προτέρων γνωστό για πόσες φορές θα χρειαστεί να επαναλάβουµε αυτά τα βήµατα. Για παράδειγµα, όταν προσπαθούµε να µάθουµε το µάθηµα της ιστορίας, χρειάζεται να το διαβάσουµε περισσότερες από µία φορές µέχρι να είµαστε σίγουροι ότι το έχουµε µάθει. Τις περισσότερες φορές, προκειµένου να συνεχίσουµε την επανάληψη των εντολών, ελέγχουµε µια κατάσταση και ενεργούµε ανάλογα. Η δοµή επανάληψης σε έναν αλγόριθµο µας επιτρέπει να εκτελέσουµε µια οµάδα εντολών πολλές φορές και η επανάληψη σταµατά, όταν πάψει να ισχύει µια συνθήκη. 197
Είναι φανερό ότι η οµάδα εντολών προς επανάληψη µπορεί να εκτελεστεί από καµία µέχρι άπειρες φορές. Η δεύτερη περίπτωση συνήθως δεν είναι επιθυµητή και, αν συµβεί, λέµε ότι το πρόγραµµα «πέφτει σε ατέρµονα βρόχο». Για το λόγο αυτό, στη δηµιουργία µιας δοµής επανάληψης πρέπει να εξασφαλίζουµε ότι η συνθήκη ελέγχου της επανάληψης θα πάψει κάποια στιγµή να ισχύει, ώστε να σταµατήσει η επανάληψη. Ας θυµηθούµε τώρα λίγο το παράδειγµα µε το Loop Block από το πρώτο φύλλο εργασίας. Εκεί είχαµε πει ότι θέλουµε το ροµπότ να εκτελέσει µία τριγωνική κίνηση διανύοντας µετά από κάθε στροφή την ίδια απόσταση. Πώς θα µπορούσαµε να χρησιµοποιήσουµε το Loop Block σε µία τέτοια περίπτωση; Και είχαµε καταλήξει στο παρακάτω πρόγραµµα: Βλέπουµε εδώ τα δύο move block επαναλαµβάνονται τρεις φορές, για να πραγµατοποιηθεί η κίνηση που θέλουµε. Εποµένως έχουµε το σώµα της επανάληψης που είναι τα δύο move block και την συνθήκη επανάληψης που είναι η µέτρηση µέχρι τον αριθµό τρία. Ας προχωρήσουµε τώρα ανακαλύπτοντας και άλλες συνθήκες επανάληψης που µας προσφέρει το Loop block. 1.1 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Είδαµε πως µπορούµε να εκπαιδεύσουµε το ροµπότ µας να αποφεύγει ένα εµπόδιο. Ας δούµε τώρα έναν καινούριο τρόπο αποφυγής όχι µόνο ενός αλλά και περισσότερων εµποδίων. Από το πρώτο φύλλο εργασίας, ανοίγουµε το παράδειγµα µε το εµπόδιο. Αυτό το πρόγραµµα όπως είδαµε επιτρέπει στο ροµπότ να αλλάξει κατεύθυνση όταν φτάσει σε ένα αδιέξοδο. 198
Τι γίνεται όµως αν το ροµπότ καθώς κινείται πέσει και σε άλλο αδιέξοδο; Εδώ η λύση δίνεται µε τη χρήση ενός Loop Block. Εισάγουµε λοιπόν στο πρόγραµµά µας ένα Loop Block και µε τη λειτουργία Drag and Drop Τοποθετούµε µέσα του όλο το πρόγραµµα. Στη συνέχεια στην περιοχή παραµέτρων του Loop Block κάνουµε τις παρακάτω ρυθµίσεις: Control: Επιλέγουµε το Forever, ώστε να επαναλαµβάνεται άπειρες φορές αφού θέλουµε να αποφεύγουµε άπειρα εµπόδια. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε τα παρακάτω: Συζητήστε µαζί: 1.Πραγµατοποιείται πράγµατι το πρόγραµµα όσες φορές χρειάζεται;.. Ερώτηση: 2. Ποια είναι εδώ η συνθήκη επανάληψης; 3.Ποιο είναι το σώµα της επανάληψης; Απάντηση Αναλυτή: 2 199
3 Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: 1.2 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος B. Αναλυτής: Μέλος A. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Θα δούµε τώρα ένα απλό παράδειγµα για το πώς λειτουργούν οι αισθητήρες σε ένα Loop Block. Θέλουµε για παράδειγµα το ροµπότ µας να κινείται απεριόριστα, µέχρι να ακουµπήσει ένα αντικείµενο και να σταµατήσει. Η απεριόριστη κίνηση επιτυγχάνεται µε ένα Move Block, ρυθµίζοντάς το να κινείται Unlimited. 200
Τώρα βάζουµε και ένα Loop Block στο πρόγραµµα και τοποθετούµε µέσα σε αυτό το move block. Στη συνέχεια, στην περιοχή παραµέτρων του Loop Block κάνουµε τις παρακάτω ρυθµίσεις: Control: Επιλέγουµε το Sensor. Sensor: Επιλέγουµε το Touch Sensor. Port: Τσεκάρουµε τη θύρα στην οποία τοποθετήσαµε τον αισθητήρα αφής. Action: Επιλέγουµε Pressed. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε τα παρακάτω: Συζητήστε µαζί: 1.Ποια είναι η συνθήκη επανάληψης σε αυτή την περίπτωση; 2. Ποιο είναι το σώµα της επανάληψης; 1 2 Ερώτηση: 3.Τι θα γίνει αν πιέσουµε τον αισθητήρα; 201
Απάντηση Αναλυτή: 3 Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: 1.3 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος A. Αναλυτής: Μέλος B. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Ας µάθουµε τώρα πως λειτουργεί ένα Loop Block µε χρονόµετρο. Αρχικά µε τέσσερα Record/Play Block, καταγράφουµε µία κυκλική, µία τετραγωνική, µία τριγωνική και µία κίνηση σε παραλληλόγραµµο. Όλες τις κινήσεις τις καταγράφουµε µέσα σε 5 δευτερόλεπτα, δηλαδή στο πεδίο Time των Record/Play Blocks βάζουµε την τιµή 5. Αποθηκεύουµε τις ενέργειές µας. 202
Στη συνέχεια ανοίγουµε µία νέα καρτέλα και εισάγουµε ένα Loop Block. Στην περιοχή παραµέτρων του Loop Block κάνουµε τις παρακάτω ρυθµίσεις: Control: Επιλέγουµε το Time. Seconds: Εισάγουµε την τιµή 40. Στη συνέχεια µέσα στο Loop Block εισάγουµε τέσσερα Record/Play blocks επιλέγοντας να εκτελέσουν µε τη σειρά τις παρακάτω ενέργειες: το πρώτο να κάνει κύκλο το δεύτερο να κάνει τετράγωνο το τρίτο να κάνει τρίγωνο και το τέταρτο τα κάνει παραλληλόγραµµο. Πραγµατοποιήστε τις ενέργειες αυτές και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε τα παρακάτω: Συζητήστε µαζί: 1.Ποια είναι η συνθήκη της επανάληψης; 2.Ποιο είναι το σώµα της επανάληψης; 3.Πόσες φορές θα εκτελεστεί η επανάληψη; 1 2 3 203
Ερωτήσεις: 4.Αν στο πεδίο Until του Loop Block βάλουµε την τιµή 60 πόσες φορές θα εκτελεστεί η επανάληψη; 5.Ποιες κινήσεις εκτελούνται τελικά αν στο πεδίο Until βάλουµε την τιµή 10; 6.Αν θέλουµε η επανάληψη να εκτελεστεί µόνο µία φορά, ποια τιµή πρέπει να βάλουµε στο Until; Απάντηση Αναλυτή: 4 5 6 Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση... Γιατί:.. Συµπέρασµα οµάδας στην διαφωνία: 204
. Εξοικείωση µε την έννοια της επιλογής.- Το ροµπότ διαλέγει ενέργειες. Όλα τα προβλήµατα δε λύνονται µόνο µε τη διαδοχική εκτέλεση κάποιων συγκεκριµένων εντολών. Πολλές φορές πρέπει να ελεγχθεί µια κατάσταση και ανάλογα να αποφασίσουµε αν θα συνεχίσουµε προς τη µία ή την άλλη κατεύθυνση τις ενέργειες µας. Για παράδειγµα, όταν θέλουµε να περάσουµε από µία διάβαση πρέπει πρώτα να ελέγξουµε το φανάρι για τους πεζούς. Αν το φανάρι είναι πράσινο, µπορούµε να περάσουµε τη διάβαση, διαφορετικά, αν το φανάρι είναι κόκκινο πρέπει να σταµατήσουµε και να περιµένουµε. Εδώ η κατάσταση που πρέπει να ελεγχθεί είναι το χρώµα του φαναριού και οι δύο δυνατές ενέργειες είναι να περάσουµε ή να περιµένουµε. 1. Το ροµπότ διαλέγει ανάµεσα σε δύο καταστάσεις. ( οµή επιλογής) Η δοµή επιλογής χρησιµοποιείται, όταν κατά την εκτέλεση του προγράµµατος θα πρέπει να ελέγξουµε µια κατάσταση και ανάλογα να εκτελέσουµε ή όχι κάποιες εντολές. Για παράδειγµα, θέλουµε να πιούµε ένα ποτήρι γάλα. Ελέγχουµε αν υπάρχει γάλα στο ψυγείο. Αν υπάρχει µπορούµε να συνεχίσουµε την ενέργεια µας και να γεµίσουµε ένα ποτήρι. Αν δεν υπάρχει, θα πρέπει να ακολουθήσουµε µία διαφορετική διαδικασία, θα πρέπει να πάµε να αγοράσουµε ένα µπουκάλι γάλα ώστε στη συνέχεια να µπορέσουµε να γεµίσουµε το ποτήρι µας. Στο NXT Software, η εντολή επιλογής εµφανίζεται µε το Switch Block. ιατυπώνεται µία συνθήκη στην αρχή του Block και ανάλογα µε την απάντηση ακολουθείται η κατάλληλη διαδροµή. Πρέπει να είµαστε προσεκτικοί στη διατύπωση του προγράµµατος, ώστε να είναι φανερό ποιες εντολές πρέπει να εκτελεστούν µόνο εφόσον ισχύει η συνθήκη 1.1 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος Α. Αναλυτής: Μέλος Β. 205
(Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Ας µάθουµε τώρα στο ροµπότ µας να ελέγχει αν έχει φτάσει σε αδιέξοδο και να ενεργεί ανάλογα. Αυτό που θα κάνουµε θα είναι να επιτρέψουµε στο ροµπότ να κινηθεί για κάποιο χρονικό διάστηµα. Στη συνέχεια θα ελέγχει αν ένας αισθητήρας αφής είναι πιεσµένος, που θα σηµαίνει ότι έχει φτάσει σε κάποιο αδιέξοδο και ακουµπά σε έναν τοίχο. Αν πράγµατι είναι πιεσµένος, θα πρέπει να κινηθεί προς την αντίθετη κατεύθυνση και να στρίψει για να αποφύγει το αδιέξοδο. ιαφορετικά, θα συνεχίσει την ευθεία του κίνηση. Σε µία νέα καρτέλα εισάγουµε ένα move Block και θέτουµε νε κινείται για 5 δευτερόλεπτα ευθεία. Στη συνέχεια εισάγουµε ένα Switch Block και µετά από αυτό άλλο ένα move block που να κινείται για κάποιο χρονικό διάστηµα ευθεία. Στην περιοχή παραµέτρων του Switch Block κάνουµε τις παρακάτω ρυθµίσεις: Control: Επιλέγουµε Sensor γιατί θέλουµε ο έλεγχος της επανάληψης να γίνεται µε έναν αισθητήρα. Sensor: ιαλέγουµε έναν Touch Sensor. Port: Επιλέγουµε τη θύρα που έχουµε συνδέσει τον Touch Sensor. Action: Επιλέγουµε το Pressed. Μέσα στο Switch Block εισάγουµε ένα move Block το οποίο θέτουµε νε κινείται προς πίσω για 5 δευτερόλεπτα και µετά από αυτό άλλο ένα που θα στρίβει για 2 δευτερόλεπτα. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε τα παρακάτω: Ερώτηση: 1.Αναφέρετε ποιες εντολές εκτελούνται ανάλογα µε την τιµή της συνθήκης. 2.Ποια είναι η συνθήκη που ελέγχεται σε αυτή την περίπτωση; Απάντηση Αναλυτή: 206
1. 2 Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί: Συµπέρασµα οµάδας στην διαφωνία: Υπάρχει και µία άλλη µορφή της δοµής επιλογής, όπου ελέγχουµε µια κατάσταση και, αν ισχύει µια συνθήκη, εκτελούµε ένα σύνολο εντολών, ενώ αν δεν ισχύει η συνθήκη, εκτελούµε ένα διαφορετικό σύνολο εντολών. Πρέπει να είµαστε πολύ προσεκτικοί στη διατύπωση του προγράµµατος, ώστε να είναι φανερό ποιες εντολές πρέπει να εκτελεστούν ανάλογα µε το αν ισχύει ή όχι η συνθήκη. 207
Για παράδειγµα, θέλουµε να παίξουµε µε ένα φίλο µας. Κοιτάµε από το παράθυρο τον καιρό. Αν δεν βρέχει αποφασίζουµε να παίξουµε στην αυλή µε τη µπάλα. Αν βρέχει αποφασίζουµε να µείνουµε µέσα στο σπίτι και να παίξουµε επιτραπέζιο. Η κατάσταση που ελέγχεται εδώ είναι ο καιρός. Οι δύο δυνατές ενέργειες είναι να παίξουµε έξω µπάλα ή µέσα επιτραπέζιο. 1.2 Άσκηση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος A. Αναλυτής: Μέλος B. (Ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο.) Ας δούµε τώρα πως θα µπορούσαµε να προκαλέσουµε µία αντίδραση του ροµπότ σε δυνατούς ήχους. Τώρα θα πρέπει να χρησιµοποιήσουµε το Sound Sensor. Θα επιλέξουµε λοιπόν το Sound Sensor στο Switch Block και αφού επιλέξουµε την θύρα που το έχουµε συνδέσει θα ρυθµίσουµε την ένταση του ήχου (έστω 50) πάνω από τον οποίο θα εκτελεσθεί το πάνω σκέλος και κάτω από το οποίο το κάτω σκέλος της επιλογής. Περιγράψτε λοιπόν ένα πρόγραµµα µε το οποίο, αν το ροµπότ ακούσει ένα δυνατό ήχο, όπως για παράδειγµα τη φωνή σας, θα τον λαµβάνει ως πρόσκληση και θα έρχεται ευθεία προς εσάς. Σε αντίθετη περίπτωση δεν θα οπισθοχωρεί και θα εµφανίζεται το µήνυµα «Περιµένω Πρόσκληση» στην οθόνη του. Ερωτήσεις: 1.Ποια είναι η κατάσταση που ελέγχεται από το πρόγραµµα; 2.Ποιες είναι οι δύο πιθανές ενέργειες; 3.Τι γίνεται όταν το ροµπότ ακούει τη φωνή σας; 4.Τι γίνεται όταν δεν ακούει τίποτα; 5.Πόσα Blocks έχετε χρησιµοποιήσει; Απάντηση Προγραµµατιστή: 1 208
2 3 4 5 Απάντηση Αναλυτή: Συµφωνώ ιαφωνώ Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: Στη συνέχεια φορτώστε την άσκηση στο ροµπότ και ελέγξτε αν πραγµατοποιούνται οι επιθυµητές ενέργειες. 209
2.Το ροµπότ διαλέγει ανάµεσα σε πολλές καταστάσεις. ( οµή πολλαπλής επιλογής) Η δοµή πολλαπλής επιλογής είναι µια παραλλαγή της δοµής επιλογής, όπου υπάρχουν περισσότερες από δύο πιθανές ενέργειες που πρέπει να εκτελεστούν. Στην περίπτωση αυτή ελέγχουµε µία συνθήκη η οποία µπορεί να βρεθεί σε περισσότερες από δύο καταστάσεις και ορίζουµε ένα διαφορετικό σύνολο ενεργειών για κάθε διαφορετική πιθανή κατάσταση. Για παράδειγµα, έχουµε ένα ζάρι και ανάλογα µε το τι θα φέρει κάθε φορά που το ρίχνουµε, κάνουµε αντίστοιχα τόσα βήµατα µπροστά σε ένα παιχνίδι, µέχρι να φτάσουµε στο τέρµα. 2.1 Εξοικείωση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος B. Αναλυτής: Μέλος A. (Ο προγραµµατιστής θα εκτελεί τα βήµατα της εξοικείωσης και θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο, µε τις απαντήσεις του αναλυτή. Ο αναλυτής θα απαντά τις ερωτήσεις που θέτονται.) Ας προσπαθήσουµε να φτιάξουµε στο ροµπότ το παιχνίδι µε το ζάρι. Θα παράγεται ένας αριθµός από το ένα µέχρι το έξι και το ροµπότ θα εκτελεί τόσες περιστροφές στους κινητήρες του, όσες και ο αριθµός που θα παράγεται. Αρχικά πρέπει να εισάγουµε σε µία νέα καρτέλα ένα Random Block, το οποίο να παράγει αριθµούς από το 1 έως το 6,που θα αντιπροσωπεύουν τους αριθµούς που θα µπορούσε να φέρει το ζάρι. Στη συνέχεια εισάγουµε ένα Switch Block και κάνουµε τις παρακάτω ρυθµίσεις στην περιοχή των παραµέτρων του: Control: Επιλέγουµε το Value. Type: Επιλέγουµε το Number, γιατί ο έλεγχος θα γίνεται µε βάση αριθµούς. Display: Απεπιλέγουµε το Flat view ώστε να µπορούµε να δώσουµε περισσότερες των δύο επιλογές. Conditions: Πατώντας το + προσθέτουµε καταστάσεις µέχρι να φτάσουµε τις 7, 6 για τις επιλογές µας και µία που θα τη χρησιµοποιούµε για να δηλώσουµε ότι έχει γίνει λάθος. 210
Επιλέγουµε την πρώτη κατάσταση, για παράδειγµα, ως default πατώντας πάνω της το πλήκτρο *. Στη συνέχεια, σε κάθε κατάσταση του Switch Block προσθέτουµε ένα move block και ένα Display Block. Στο Move block επιλέγουµε στο Rotation τον αριθµό που αντιστοιχεί στην κάθε περίπτωση. Για παράδειγµα στην περίπτωση 1 βάζουµε τον αριθµό 1 στο rotation του move block και στο display block δίνουµε µέσω κειµένου να εµφανίζεται το 1, ώστε να φαίνεται στην οθόνη η αντίστοιχη περίπτωση. Θα πρέπει εδώ να προσέξουµε την επιπλέον default περίπτωση, που τη χρησιµοποιεί πάντα το Switch Block. Στη δική µας περίπτωση θα βάλουµε το move block να µην κινείται και το display να δείχνει µήνυµα λάθους. Τέλος δεν πρέπει να ξεχάσουµε να συνδέσουµε την έξοδο από το Random Block και την είσοδο από το Switch Block. Πραγµατοποιήστε τις παραπάνω ενέργειες και αφού φορτώσετε το πρόγραµµα στο ροµπότ, εκτελέστε το και ελέγξτε τα παρακάτω: Συζητήστε µαζί: 1.Ποια είναι η κατάσταση που πρέπει να ελέγξουµε κάθε φορά; 2.Ποιες είναι οι πιθανές ενέργειες; 1 2 211
Ερώτηση: 3.Τι γίνεται αν το Random Block δώσει τιµή 3. Απάντηση Αναλυτή: Απάντηση Προγραµµατιστή: Συµφωνώ ιαφωνώ στην απάντηση Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: 2.2 Άσκηση Κατανοµή ρόλων: Προγραµµατιστής: Μέλος A. Αναλυτής: Μέλος B. (Ο προγραµµατιστής θα επιλύει την άσκηση και ο αναλυτής θα συµβάλει στην ολοκλήρωσή της µε ιδέες και παρεµβάσεις. Στο τέλος ο αναλυτής θα πρέπει να συµφωνεί ή να διαφωνεί, αιτιολογώντας το λόγο.) 212
ηµιουργήστε ένα πρόγραµµα στο οποίο θα παράγεται ένας αριθµός από το 1 έως το 3 από ένα Random Block. Ο αριθµός αυτός θα περνάει σε ένα Switch Block. Αν περνάει ο αριθµός 1 το ροµπότ θα εκτελεί κίνηση πάνω σε τροχιά κύκλου. Αν περνάει ο αριθµός 2 το ροµπότ θα εκτελεί κίνηση πάνω σε τροχιά τρίγωνου και τέλος αν περνά ο αριθµός 3 θα εκτελεί κίνηση σε τροχιά τετράγωνου. Κάθε κίνηση θα πρέπει να αναγράφεται και στην οθόνη του ροµπότ. Υπόδειξη: Για τις κινήσεις να χρησιµοποιήσετε Record/Play Blocks. Ερωτήσεις: 1.Ποια είναι η συνθήκη ελέγχου; 2.Ποιές είναι οι δυνατές ενέργειες; 3.Αν το ροµπότ κάνει κύκλο, ποια τιµή έχει πάρει το switch block από το random; 4.Πόσες καταστάσεις θα δώσουµε στο Switch Block; Απάντηση Προγραµµατιστή: 1 2 3 4 Απάντηση Αναλυτή: Συµφωνώ ιαφωνώ 213
Γιατί:. Συµπέρασµα οµάδας στην διαφωνία: Στη συνέχεια φορτώστε την άσκηση στο ροµπότ και ελέγξτε αν πραγµατοποιούνται οι επιθυµητές ενέργειες. 214
Εδώ θα πρέπει να αναφερθεί ότι τα παιδία δεν είχαν καµία προηγούµενη εµπειρία µε το λογισµικό ή το ροµπότ, εποµένως πριν ξεκινήσουµε το πρώτο µάθηµα προηγήθηκε µια αναλυτική παρουσίαση του υλικού του ροµπότ. Παρουσιάσθηκαν στους µαθητές τα τµήµατα του hardware, οι θύρες εισόδου και εξόδου του NXT καθώς και οι αισθητήρες. Στη συνέχεια, ανοίξαµε το λογισµικό για να εξηγήσουµε στα παιδία πώς επικοινωνεί το ροµπότ µε τους προγραµµατιστές µέσω του υπολογιστή. Ακολούθησε µια σύντοµη περιήγηση στις δυνατότητες του λογισµικού NXT Software και επεξήγηση του τι είναι τα blocks. Αφού πλέον οι µαθητές κατανόησαν τα πρώτα βασικά στοιχεία περάσαµε στο φύλλο εργασίας. Σύµφωνα µε τις υποδείξεις του φύλλου εργασίας τα παιδιά έγιναν µία οµάδα στην οποία ο κάθε ένας είχε το ρόλο του. Το επόµενο βήµα ήταν η αρχή της διεξαγωγής των δραστηριοτήτων και της επίλυσης των ασκήσεων. Οι µαθητές έδειξαν να κατανοούν αµέσως τις λειτουργίες των Blocks της βασικής παλέτας και έδειχναν προθυµία στο να ορίσουν τις παραµέτρους των Blocks. Πολλές φορές συζητούσαν µεταξύ τους για θέµατα όπως την ταχύτητα που θα µπορούσαν να βάλουν σε ένα Move Block ή την διάρκεια της κίνησης. Επίσης, κατά τη διάρκεια των ασκήσεων, έπαιζαν κάνοντας παραλλαγές σε κάθε άσκηση, όπως για παράδειγµα σε µηνύµατα που εµφανίζονταν στην οθόνη του ΝΧΤ ή στην διάρκεια κινήσεων, γεγονός που οδηγούσε σε καλύτερη εµπέδωση των δυνατοτήτων των Blocks. Κατά την παρουσίαση του Wait Block ένας µαθητής είχε την απορία για το πώς θα µπορούσαν να χρησιµοποιηθούν άλλοι αισθητήρες και έτσι επαναλάβαµε την άσκηση µε διαφορετικό αισθητήρα ώστε να γίνει κατανοητή τη λειτουργία του Block. Όµοιες ενέργειες έγιναν και στο Switch Block για καλύτερη κατανόηση των αισθητήρων. εύτερο µάθηµα: Στο δεύτερο µάθηµα συνεχίσαµε τις ασκήσεις του φύλλου εργασίας, αφού πρώτα έγινε µια γρήγορη επανάληψη των Blocks της παλέτας Common. Αυτή τη φορά ως θέµα είχαµε την έννοια της µεταβλητής και της επανάληψης στον προγραµµατισµό. Οι µαθητές γνώριζαν την µεταβλητή µέσα από τα µαθηµατικά αλλά δεν ήξεραν πως µπορεί αυτή να χρησιµοποιηθεί σε έναν υπολογιστή. Αφού αναλύσαµε το θεωρητικό κοµµάτι της µεταβλητής τα παιδιά εξέφρασαν την απορία γιατί εµείς τη χρειαζόµαστε. Έτσι περάσαµε στις δραστηριότητες ώστε να γίνει φανερός ο ρόλος της σε ένα πρόγραµµα. Μέσα από την πρώτη δραστηριότητα παρουσιάστηκε ο τρόπος που δηµιουργούµε µία µεταβλητή στο συγκεκριµένο λογισµικό και αναλύθηκαν οι τρεις διαφορετικοί τύποι που µπορεί να έχει αυτή. Επίσης, παρουσιάστηκε η λειτουργία των καλωδίων δεδοµένων για το πέρασµα τιµών από και προς τις µεταβλητές σε άλλα Blocks, όπως και οι θύρες εισόδου και εξόδου των Block, έννοιες πολύ χρήσιµες και στις επόµενες δραστηριότητες. Στη συνέχεια, περάσαµε στη δραστηριότητα µε το Math Block. Οι µαθητές χωρίς δυσκολία δηµιούργησαν µία κατάλληλη µεταβλητή, όρισαν τις παραµέτρους του Math Block και του Move Block και χρησιµοποίησαν τα καλώδια δεδοµένων. Σε αυτό το σηµείο έπρεπε να γίνει η παρουσίαση του Number To Text Block, το οποίο µετατρέπει έναν αριθµό σε κείµενο για την εµφάνισή του στην 215
οθόνη του NXT. Τα παιδιά ρώτησαν αν τελικά στην οθόνη θα φαίνεται ο αριθµός 3 ή θα παρουσιάζεται γραπτώς (δηλαδή ως Τρία) και όταν άκουσαν ότι στην οθόνη θα φαίνεται ο χαρακτήρας «3» είχαν την απορία ποια αλλαγή κάνει τελικά το Number To Text. Έτσι χρησιµοποιήσαµε το παράδειγµα των αριθµών όταν βρίσκονται σε ένα τηλεφωνικό νούµερο, όπου παρουσιάζονται ως χαρακτήρες και όταν εκφράζουν µία ποσότητα, όπως για παράδειγµα 3 ευρώ, όπου πρόκειται για αριθµό-ποσότητα. ιευκρινίσαµε ότι ο αριθµός που δίνει η µεταβλητή είναι ποσότητα και το Number To Text τον µετατρέπει σε χαρακτήρα γιατί στην οθόνη του NΧΤ εµφανίζονται µόνο χαρακτήρες. Ένα λάθος που έκαναν τα παιδία σε αυτή τη δραστηριότητα ήταν να µην αλλάξουν τη ρύθµιση του Display Block ώστε να δείχνει κείµενο. Βλέποντας την θύρα εισόδου του Display (Θύρα για κείµενο) στην οποία στείλαµε την έξοδο του Number To Text κατάλαβαν τι αλλαγή έπρεπε να γίνει. Αφού εκτελέσαµε όλη τη δραστηριότητα τα παιδία είχαν την απορία, αν µπορούµε να χρησιµοποιήσουµε την τιµή της µεταβλητής για να ορίσουµε την ταχύτητα του Move Block. Αµέσως δείξαµε τον τρόπο που γίνεται η σύνδεση στις θύρες εισόδου του Move Block για να περάσει η τιµή της µεταβλητής όχι µόνο στην ταχύτητα, αλλά αν το επιθυµούµε και στη διάρκεια της κίνησης. Προσέξαµε στο σηµείο αυτό η θύρα εξόδου από την οποία πήραµε την τιµή της µεταβλητής, να δίνει αριθµό σε µορφή ποσότητας και όχι χαρακτήρα. Εκτελέσαµε την ίδια δραστηριότητα αρκετές φορές ακόµα, αλλάζοντας τις τιµές του Math Block και τις πράξεις που αυτό εκτελούσε και κάθε φορά βλέπαµε την αλλαγή στην ταχύτητα ή στη διάρκεια της κίνησης. Με την επανάληψη αυτών των ασκήσεων θέλαµε να γίνει απόλυτα σαφής στους µαθητές ο βασικός αυτός ρόλος της µεταβλητής, δηλαδή η απόδοση τιµήν από και προς αυτήν. Στην επόµενη δραστηριότητα αφού παρουσιάστηκε το Random Block, οι µαθητές υλοποίησαν µόνοι τους τα βήµατα, που ήταν όµοια µε την προηγούµενη δραστηριότητα ώστε να προσεχθούν τα ίδια σηµεία και να γίνει απόλυτα κατανοητή η διαδικασία. Όπως την δραστηριότητα µε το Math Block, έτσι κι αυτή, την επαναλάβαµε 2-3 φορές αλλάζοντας κάθε φορά τα όρια του Random Block και στέλνοντας την τιµή της µεταβλητής εκτός από την οθόνη στην ταχύτητα και τη διάρκεια της κίνησης του Move Block. Αφού ολοκληρώσαµε µε τις µεταβλητές, περάσαµε στην έννοια της επανάληψης. Για να κατανοήσουν τα παιδία τη χρησιµότητα της επανάληψης αναφέραµε παραδείγµατα από την καθηµερινή ζωή και ζητήσαµε και από αυτά να βρουν µερικά. Τα παραδείγµατα των παιδιών είχαν να κάνουν µε την επανάληψη της ντρίπλας στο µπάσκετ για να φτάσουν στο καλάθι και να σουτάρουν. Στη συνέχεια, περάσαµε στην υπενθύµιση της άσκησης από το πρώτο µάθηµα που έγινε µια πρώτη γνωριµία µε το Loop Block ώστε να γίνει και εισαγωγή των εννοιών της συνθήκης επανάληψης και του σώµατος της επανάληψης. Οι µαθητές βλέποντας πάλι το πεδίο ρυθµίσεων του Loop Block είχαν την απορία για την χρήση του πεδίου count. Η απορία λύθηκε αµέσως µε την υπενθύµιση της µεταβλητής και του τρόπου που έπαιρνε αυτή τιµή από το Loop Block όταν είχαν τσεκάρει το count. Κατά τη διάρκεια της δεύτερης άσκησης ένα από τα παιδία είχε την απορία τι γίνεται αν στο Move Block επιλέξουµε και τις τρεις θύρες εξόδου. Του ζητήσαµε να δοκιµάσει για να δει το αποτέλεσµα και διαπίστωσε ότι αυτό δεν έχει νόηµα από τη στιγµή που δεν υπάρχει τρίτος κινητήρας. Εξηγήσαµε ότι 216
για τον έλεγχο και της τρίτης θύρας, αν υπήρχε κι άλλος κινητήρας πρέπει να χρησιµοποιηθεί ξεχωριστά ένα Motor Block. Επίσης, στη δεύτερη άσκηση κάναµε και πάλι παραλλαγές µε τους αισθητήρες και επανάληψη της εκτέλεσής της ζητώντας από τους µαθητές να αναφέρουν που θα ήταν χρήσιµος ο κάθε αισθητήρας. Στην Τρίτη και τελευταία άσκηση της ενότητας της επανάληψης, ξεκινήσαµε µε τα βήµατα που παρουσιάζονται και έγινε καταγραφή των κινήσεων. Όταν φτάσαµε στο σηµείο της αναπαραγωγής των κινήσεων οι µαθητές είχαν στο µυαλό τους να ελέγξουν τις θύρες των αισθητήρων. Αναφέρθηκε όµως και πάλι η λειτουργία του Record/Play Block, το οποίο εκτελεί την κίνηση ακριβώς όπως την κατέγραψε. Σε αυτή την ενότητα τα παιδιά δεν έδειξαν ιδιαίτερη δυσκολία στο να βρίσκουν κάθε φορά ποια ήταν η συνθήκη επανάληψης και το σώµα της επανάληψης. Τρίτο µάθηµα: Στο τρίτο και τελευταίο µάθηµα, αναπτύχθηκε η έννοια της επιλογής. Όπως και στις άλλες ενότητες ξεκινήσαµε δίνοντας παραδείγµατα από την καθηµερινή ζωή για την χρησιµότητα της επιλογής. Αφού διαπιστώσαµε ότι οι µαθητές κατανόησαν τα θεωρητικό κοµµάτι της επιλογής περάσαµε στις ασκήσεις. Οι µαθητές έχοντας πλέον αποκτήσει εξοικείωση µε τα Blocks και τα πάνελ ρυθµίσεών τους ολοκληρώνουν µε τη βοήθεια των υποδείξεων αρκετά εύκολα και σε σύντοµο χρόνο τις ασκήσεις της τελευταίας αυτής ενότητας. Στις πρώτες δύο ασκήσεις, χρειάστηκε µόνο λίγη προσοχή στο αν θα χρησιµοποιήσουν το ένα ή και τα δύο σκέλη του Switch Block. Σε αυτές τις ασκήσεις έγιναν και πάλι αναφορές στους άλλους αισθητήρες. Στις δύο τελευταίες ασκήσεις, µε την πολλαπλή επιλογή, οι µαθητές έµαθαν τη νέα µορφή του Switch Block (χωρίς να είναι επιλεγµένο το Flat View) και κατανόησαν πώς να χρησιµοποιούν την επιλογή µε βάση µία τιµή και όχι την ένδειξη ενός αισθητήρα. Αυτό που δυσκόλεψε τα παιδιά ήταν η αναγκαία εισαγωγή µίας Default περίπτωσης που ζητείται πάντα από το Switch Block όταν αυτό δέχεται τιµές. Τέλος, κάναµε µία παραλλαγή στην Τρίτη άσκηση συνδυάζοντας το Switch µε το Loop Block ώστε να δείξουµε πώς τοποθετώντας όλο το πρόγραµµα µέσα σε ένα Loop αυτό επαναλαµβάνεται για όσο επιθυµούµε και το Random Block παράγει συνεχόµενα τιµές τις οποίες δίνει στο Switch Block. Ένα λάθος που έγινε εδώ από τους µαθητές ήταν ότι αρχικά τοποθέτησαν µέσα στο Loop Block µόνο το Random Block, γεγονός που οδήγησε στην τελική εκτέλεση του προγράµµατος µόνο µία φορά και όχι 4 όπως είχαν ορίσει. Γρήγορα κατάλαβαν το λάθος τους και το διόρθωσαν και έτσι τελικά το πρόγραµµα επαναλήφθηκε στον επιθυµητό αριθµό. 217
5.3 Τελική ραστηριότητα Τελειώνοντας τα µαθήµατα, για να διαπιστώσουµε αν οι µαθητές κατανόησαν τα βασικά θέµατα και για µπορέσουν και οι ίδιοι να εξασκηθούν χωρίς τις αναλυτικές υποδείξεις του φύλλου εργασίας δηµιουργήσαµε µία τελική δραστηριότητα. Στη δραστηριότητα αυτή, δίνεται η εκφώνηση τεσσάρων ασκήσεων και λίγες βοηθητικές υποδείξεις για κάθε µία. Ο βαθµός δυσκολίας αυξάνεται καθώς περνούν οι ασκήσεις. Οι ασκήσεις αναφέρονται σε βασικά σηµεία του λογισµικού και καλύπτουν όλες τις ενότητες του φύλλου εργασίας. Επίσης, χρησιµοποιούνται στοιχεία, όπως ήχοι, που θα προκαλέσουν ενδιαφέρον και ευχαρίστηση στους µαθητές, ώστε να έχει πάντα η δραστηριότητα τη µορφή παιχνιδιού. Η πρώτη άσκηση ζητά να γίνει ένας απλός συνδυασµός του Move και του Sound Block. Η δεύτερη άσκηση ζητά να γίνεται µέτρηση της απόστασης από αντικείµενα, ώστε να χρησιµοποιηθεί ο αισθητήρας υπερήχων και να γίνει η εφαρµογή του κόλπου που έµαθαν τα παιδιά για την εµφάνιση µιας τιµής στην οθόνη. Η άσκηση αυτή επίσης, περιλαµβάνει και τη δοµή της επανάληψης για να γίνονται συνεχώς οι µετρήσεις. Η επόµενη άσκηση ζητά να γίνεται αποφυγή εµποδίων κάνοντας έλεγχο µιας απόστασης και το ροµπότ να ενεργεί ανάλογα µε την τιµή της ένδειξης του αισθητήρα. Αυτή η άσκηση έχει ως στόχο να διαπιστώσουµε αν οι µαθητές θεωρούν πιο εύκολη την χρήση του Wait ή του Switch Block για την ολοκλήρωσή της. Θα πρέπει επίσης να σκεφτούν να χρησιµοποιήσουν και ένα Loop για συνεχείς ελέγχους. Ακόµα, ζητά να αναφερθεί σε ποιες περιπτώσεις θα ήταν χρήσιµοι οι υπόλοιποι αισθητήρες. Η τελευταία άσκηση ζητά από τους µαθητές να δηµιουργήσουν έναν αθροιστή, δίνοντας κάποιες υποδείξεις και αναλύοντας περί τίνος πρόκειται ώστε να κάνουν χρήση µεταβλητών και του Variable Block. Στη συνέχεια όµοια µε το φύλλο εργασίας καλούνται να εµφανίζουν κάθε φορά την νέα τιµή στην οθόνη του ροµπότ και να την περνούν στην ταχύτητα ενός Move Block για να γίνεται και κινητικά ορατό το αποτέλεσµα. Οι ασκήσεις, που δόθηκαν στους µαθητές παρουσιάζονται αναλυτικά στην παρακάτω συµπερασµατική δραστηριότητα: 218
Τελική ραστηριότητα εξοικείωσης µε το NXT Software ραστηριότητα 1: Κίνηση µε ήχο. Σε αυτή την πρώτη δραστηριότητα θα δηµιουργήσουµε ένα πρόγραµµα, µε το οποίο: Το ροµπότ θα αναπαράγει τον ήχο ενός κινητήρα όση ώρα κινείται. Όταν θα σταµατά η κίνηση, θα πρέπει να σταµατά και ο ήχος. Βοήθεια: 1.Καταγράψτε µία µία τις ενέργειες που εκτελούνται και επιλέξτε τα ανάλογα Blocks που θα σας βοηθήσουν να ολοκληρώσετε το πρόγραµµα. Ενέργεια 1 Block 1 Ενέργεια 2 Block 2. Ενέργεια 3 Block 3... 2.Σκεφτείτε ποια ρύθµιση πρέπει να γίνει στο πεδίο ρυθµίσεων του ανάλογου block, ώστε ένας ήχος να επαναλαµβάνεται. 3. ώστε τις ρυθµίσεις που επιθυµείτε στο block που θα προκαλέσει την κίνηση, ως προς τη διάρκεια και την ταχύτητα. 4. Σκεφτείτε ποια ρύθµιση πρέπει να γίνει στο πεδίο ρυθµίσεων του ανάλογου block, ώστε ένας ήχος να σταµατήσει. Υποδείξεις 1. Επιλέξτε τον ήχο!motor Run. 2. Στο τέλος του προγράµµατος µπορείτε να βάλετε µία καθυστέρηση, µε ένα Wait Block, ώστε να γίνεται φανερό ότι ο ήχος σταµατά µαζί µε την κίνηση. ραστηριότητα 2: Μέτρηση απόστασης. Τώρα θα πρέπει να δηµιουργήσετε ένα πρόγραµµα που: Θα µετρά την απόσταση του ροµπότ από ένα αντικείµενο που βρίσκεται µπροστά του και θα εµφανίζει την απόσταση αυτή στην οθόνη. Βοήθεια: 1.Σκεφτείτε ποιός αισθητήρας µπορεί να εντοπίσει αντικείµενα που βρίσκονται σε απόσταση και ποιο block τον ελέγχει. 2.Με ποιο Block µπορούµε να εµφανίσουµε κάτι στην οθόνη; 3.Σκεφτείτε σε τι µορφή πρέπει να µετατρέψουµε την ένδειξη του αισθητήρα για να φανεί στην οθόνη και πως µπορούµε να κάνουµε την µετατροπή. 4.Ποιο Block πρέπει να προσθέσουµε για να εκτελείτε η ενέργεια για πάντα; 219
Υποδείξεις 1.Μετά το Block που θα εµφανίζει την ένδειξη στην οθόνη προσθέστε µια καθυστέρηση µε ένα Wait Block. ραστηριότητα 3: Αποφυγή εµποδίων ηµιουργήστε ένα πρόγραµµα µε το οποίο: Το ροµπότ θα κινείται απεριόριστα ευθεία, µέχρι να εντοπίσει σε απόσταση µικρότερη των 10 ιντσών ένα εµπόδιο. Αν εντοπίσει το εµπόδιο θα πρέπει να ακουστεί ο ήχος Woops, να προχωρήσει προς πίσω για δύο δευτερόλεπτα και να στρίψει για άλλα δύο δευτερόλεπτα. Βοήθεια: 1.Σκεφτείτε ποιος αισθητήρας µπορεί να εντοπίσει αντικείµενα που βρίσκονται σε απόσταση. 2.Με ποια Block το ροµπότ κινείται και παράγει ήχους; 3.Τι Block πρέπει να προσθέσουµε ώστε ο έλεγχος να γίνεται για πάντα και σε πιο σηµείο του προγράµµατος; Ερωτήσεις: 1.Τι θα έπρεπε να αλλάξουµε στο πρόγραµµά µας για να έχει την δυνατότητα το ροµπότ να κινείται πάνω στο γραφείο χωρίς να πέσει κάτω από αυτό; 2.Τι θα έπρεπε να αλλάξουµε στο πρόγραµµά µας για να αλλάζει πορεία το ροµπότ όταν ακούει κάποιον ήχο; 3.Τι θα έπρεπε να αλλάξουµε στο πρόγραµµά µας για να αποφεύγει τυχόν εµπόδια µόλις τα ακουµπά; ραστηριότητα 4: Σταδιακή αύξηση της ταχύτητας µε χρήση αθροιστή ηµιουργήστε ένα πρόγραµµα µε το οποίο: Το ροµπότ θα κινηθεί επί 50sec και κάθε 5sec θα αυξάνει την ταχύτητα του κατά 10. Παράλληλα να εµφανίζει την τιµή της ταχύτητας στην οθόνη. 220
Υποδείξεις για τη δηµιουργία του αθροιστή: Ο αθροιστής είναι µια διαδικασία, µε την οποία προσθέτουµε µία συγκεκριµένη τιµή σε µία µεταβλητή όσες φορές θέλουµε, µέσω µιας επανάληψης. ηλαδή: Αρχικά δηµιουργούµε µια µεταβλητή και της δίνουµε την τιµή 0. Στη συνέχεια, µέσα σε µια επανάληψη προσθέτουµε την τιµή που θέλουµε στη µεταβλητή και στη συνέχεια εκχωρούµε τη νέα της τιµή Σχηµατικά: Μεταβλητή = 0 Μεταβλητή +Τιµή (Πρόσθεση) Μεταβλητή + Τιµή Επανάληψη όσες φορές θέλουµε Προσπαθήστε να δηµιουργήσετε την παραπάνω µορφή µε block µεταβλητών και Math Block ορίστε στην µεταβλητή να προστίθεται ο αριθµός 10 και τέλος η επανάληψη να γίνει 10 φορές. Επίσης, σε κάθε επανάληψη, να εµφανίζεται η τιµή της µεταβλητής στην οθόνη και η τιµή αυτή να δίνεται στην ταχύτητα ενός Move Block. Βοήθεια: 1.Σκεφτείτε σε τι µορφή πρέπει να µετατρέψουµε την τιµή της µεταβλητής για να φανεί στην οθόνη και πως µπορούµε να κάνουµε την µετατροπή. 2.Σε ποιο σηµείο του προγράµµατος θα µπουν τα επιπλέον blocks (µέσα ή έξω από την επανάληψη); Τέλος Τελικής ραστηριότητας. 221
Οι σωστές λύσεις των ασκήσεων είναι οι παρακάτω: ραστηριότητα 1: Κίνηση µε ήχο. ραστηριότητα 2:Μέτρηση απόστασης. ραστηριότητα 3: Αποφυγή εµποδίων Απαντήσεις σε επιπλέον ερωτήσεις: 1.Θα έπρεπε στη θέση του αισθητήρα Ultrasonic να βάλουµε Light Sensor. 2. Θα έπρεπε στη θέση του αισθητήρα Ultrasonic να βάλουµε Sound Sensor. 3 Θα έπρεπε στη θέση του αισθητήρα Ultrasonic να βάλουµε Touch Sensor. ραστηριότητα 4: Σταδιακή αύξηση της ταχύτητας µε χρήση αθροιστή 222