Σκοπός Εξαμηνιαία Εργασία 2013 Προγραμματίζοντας τον Arduino στη C Μέρος Α : Υλικά Μικροελεγκτές Πλακέτα Arduino Προσομοίωση Μικροελεγκτών Προγραμματισμός Μικροελεγκτών στη C.
7.1 ΕΠΙΔΙΩΞΗ ΤΗΣ ΕΡΓΑΣΙΑΣ Σκοπός της εξαμηνιαίας εργασίας είναι η εφαρμογή των εννοιών, των τεχνικών και των μεθόδων που έχουμε εξετάσει στο εργαστήριο, σε μία πραγματική εφαρμογή. Αυτό το εξάμηνο, στην εξαμηνιαία εργασία, επιχειρούμε να προγραμματίσουμε ένα μικροελεγκτή. Μία από τις πιο σημαντικές σύγχρονες εφαρμογές του προγραμματισμού είναι ο προγραμματισμός μικροελεγκτών. Οι λειτουργίες / εφαρμογές των μικροελεγκτών είναι πάρα πολλές, από πολύ απλές, όπως να προγραμματίσουμε ένα μικροελεγκτή για να αναβοσβήνει μία λυχνία ή να μετράει τη θερμοκρασία του γύρω χώρου, μέχρι πολύ σύνθετες, όπως ο έλεγχος τη κίνησης ενός ρομπότ. Ανάμεσα στις πολύ απλές και τις πολύ σύνθετα λειτουργίες, περιλαμβάνονται πολλές πρακτικές εφαρμογές: ο προγραμματισμός ενός μικροελεγκτή για να ανοίγει / κλείνει τα φώτα ή τις οικιακές συσκευές σ ένα σπίτι, κ.ά. Στο διαδίκτυο, εμφανίζονται διαρκώς καινούργιες και πρωτότυπες εφαρμογές των μικροελεγκτών που περιλαμβάνουν το προγραμματισμό ρομπότ, ένα μικρό μετεωρολογικό σταθμό (Εικόνα 1), σκουλαρίκια με LEDs και μικροελεγκτή (Εικόνα 2). Οι μικροελεγκτές που χρησιμοποιούνται ή που μπορεί να χρησιμοποιηθούν είναι πολλοί, ο ARM, o AVR, o PIC και αρκετοί άλλοι ακόμα. Οι γλώσσες που μπορούμε να προγραμματίσουμε έναν μικροελεγκτή είναι και αυτές πολλές, κυρίως όμως χρησιμοποιούνται οι γλώσσες υψηλού επιπέδου, όπως η C, C++, C#, η LabVIEW. Αυτή η δυνατότητα και το πολύ χαμηλό κόστος των μικροελεγκτών μπορούμε να αγοράσουμε έναν μικροελεγκτή με 20 30 είναι οι λόγοι που έχει εξαπλωθεί ο προγραμματισμός και η χρήση των μικροελεγκτών. Όμως, αν και η διαδικασία του προγραμματισμού ενός μικροελεγκτή έχει απλουστευθεί, ακόμα περιπλέκεται από τεχνικούς όρους, όπως περιβάλλον ανάπτυξης, αναπτυξιακή πλακέτα, προγραμματίστρια και αρκετοί άλλοι. Έτσι, σκοπός της εξαμηνιαίας εργασίας είναι να εξετάσουμε αναλυτικά όλα τα βήματα της διαδικασίας που ακολουθούμε για προγραμματίσουμε ένα μικροελεγκτή, προγραμματίζοντας απλές λειτουργίες, όπως το αναβόσβημα μίας λυχνίας. Η γλώσσα που θα χρησιμοποιήσουμε είναι φυσικά η C. Ο μικροελεγκτής που θα χρησιμοποιήσουμε είναι ο AVR, όμως στην αναπτυξιακή πλακέτα του Arduino. Αυτό γιατί o Arduino είναι ένα πολύ σύγχρονος μικροελεγκτής, στοιχίζει / κοστίζει πολύ λίγα χρήματα 15 30 και είναι πολύ εύκολο να προγραμματιστεί. Έτσι, η χρήση του έχει διευρυνθεί και διαρκώς διευρύνεται, τόσο σε πανεπιστήμια, όσο και στην αγορά. Στις επόμενες ενότητες, εξετάζουμε τη διαδικασία του προγραμματισμού του. 7.2 ΓΙΑΤΙ ΠΡΟΓΡΑΜΜΑΖΟΥΜΕ ΜΙΚΡΟΕΛΕΓΚΤΕΣ? Ενσωματωμένα Συστήματα (Embedded Systems). Ο όρος «ενσωματωμένα συστήματα» είναι από τους πιο διαδεδομένους, στη σύγχρονη ορολογία των συστημάτων ελέγχου. Η ιδέα στα ενσωματωμένα συστήματα είναι να προγραμματίσουμε ένα μικροελεγκτή για να εκτελεί μία επιμέρους λειτουργία ενός σύνθετου μηχανικού συστήματος. Μετά, ο μικροελεγκτής ενσωματώνεται δηλαδή συνδέεται στο σύστημα που μία επιμέρους λειτουργία του έχει προγραμματιστεί να εκτελεί, σαν υποσύστημα αυτού του συνθετότερου συστήματος. 2
Χαρακτηριστικά και γνωστά παραδείγματα ενσωματωμένων συστημάτων είναι το σύστημα επιλογής προγραμμάτων σε πλυντήρια ρούχων και πιάτων, σε φούρνους και φούρνους μικροκυμάτων, το σύστημα ανάγνωσης των κωδικών προϊόντων στα ταμεία των supermarkets, το σύστημα ελέγχου φρένων (anti-lock brake) σε αυτοκίνητα, κ. ά. Σε κάθε ένα από τα σύγχρονα αυτοκίνητα μπορεί να υ- πάρχουν περισσότεροι από 50 μικροεπεξεργαστές που εκτός από τα φρένα, ελέγχουν σχεδόν κάθε άλλη λειτουργία στο αυτοκίνητο, δηλαδή τη λειτουργία της μηχανής, την αλλαγή ταχύτητας, τους αερόσακους, τα παράθυρα, το κλιματισμό, το σύστημα συναγερμού στο αυτοκίνητο [Steve Heath, 2003 ]. Συλλογή & Επεξεργασία Μετρήσεων (DAQ), Έλεγχος των Οργάνων Μέτρησης, Λειτουργία Κινητήρων. Μπορούμε να προγραμματίσουμε έναν μικροελεγκτή για να λαμβάνει δεδομένα και μετρήσεις, απευθείας από αισθητήρες (Data logging) ή όργανα μέτρησης και να ελέγχει / ρυθμίζει τα όργανα μέτρησης. Ακόμα, μπορούμε να προγραμματίσουμε έναν μικροελεγκτή για να λειτουργεί τους κινητήρες που κινούν τους τροχούς ενός ρομπότ και να οδηγεί / ελέγχει αυτό το ρομπότ, για να εκτελεί διάφορες λειτουργίες στο χώρο. Όπως υποδεικνύεται από τα δύο αυτά παραδείγματα, ο προγραμματισμός μικροελεγκτών επιτρέπει στο πρόγραμμα να επιδρά στο εξωτερικό περιβάλλον. Εικόνα 1: Χαρακτηριστικές εφαρμογές της πλακέτας Arduino περιλαμβάνουν το προγραμματισμό ρομπότ, εμπνευσμένου από το Mars Rover της NASA (επάνω) και τη λειτουργία ενός μικρού μετεωρολογικού σταθμού (κάτω). Όλα τα προγράμματα που έχουμε γράψει ή έχουμε εξετάσει μέχρι τώρα, είχαν μία ε- σωστρέφεια. Μπορούσαν δηλαδή να διαβάζουν δεδομένα από την οθόνη του υπολογιστή ή από αρχεία στο σκληρό δίσκο, να επεξεργάζονται αυτά τα δεδομένα και να εμφανίζουν τα αποτελέσματα στην οθόνη του υπολογιστή ή σε αρχεία. Όμως, όλη η λειτουργία τους περιορίζονταν στο περιβάλλον του υπολογιστή. Έλειπε από αυτά τα προγράμματα η δυνατότητα να επιδρούν στο εξωτερικό περιβάλλον, μέσα από τη λειτουργία και των έλεγχο συσκευών, οργάνων και κινητήρων. Αυτή τη δυνατότητα επιτρέπει ο προγραμματισμός των μικροελεγκτών. Τα προγράμματα που θα γράψουμε για αυτή την εξαμηνιαία εργασία, υποδηλώνουν δράση τους στο εξωτερικό περιβάλλον, αναβοσβήνοντας λυχνίες! Ακόμα και αυτή η απλή λειτουργία μπορεί να έχει πρακτικές εφαρμογές. Ένα απλό και σύγχρονο παρά- 3
δειγμα είναι τα σκουλαρίκια από ένα ολοκληρωμένο κύκλωμα με λυχνίες που η λειτουργία τους ο τρόπος που αναβοσβήνουν καθορίζεται από το πρόγραμμα στο μικροελεγκτή του κυκλώματος (Εικόνα 2). Ένα άλλο παράδειγμα είναι τα Χριστουγεννιάτικα φωτάκια που μπορεί να αναβοσβήνουν με διάφορους τρόπους, ανάλογα με το πρόγραμμα που επιλέγουμε στον μικροελεγκτή του κυκλώματος ή οι λυχνίες σ ένα πίνακα που μπορεί να αναβοσβήνουν, εμφανίζοντας διάφορα μηνύματα στο πίνακα, στη βάση του προγράμματος που εκτελείται στο μικροελεγκτή που ελέγχει τη λειτουργία του πίνακα. Μπορεί τα προγράμματα που θα γράψουμε για αυτή την εργασία να αναβοσβήνουν λυχνίες. Όμως, αυτή η λειτουργία υποδηλώνει τη δυνατότητα της ευρύτερης και γενικότερης δράσης του προγράμματος στο εξωτερικό περιβάλλον. Γιατί, όπως το πρόγραμμα αναβοσβήνει μία λυχνία, έτσι θα μπορούσε να στρέφει έναν κινητήρα για να κινεί ένα ρομπότ στο χώρο, να στρέφει τους διακόπτες σ ένα όργανο μέτρησης, αλλάζοντας τις ρυθμίσεις σ αυτό το όργανο, να λειτουργεί μία μηχανή. Έτσι, το πρόγραμμα, μέσα από ένα μικροελεγκτή, μπορεί να εκτελεί κάθε μία από τις λειτουργίες που εμείς εκτελούμε, όταν πατάμε ή στρέφουμε ένα διακόπτη ή όταν χειριζόμαστε μία μηχανή. Εικόνα 2: Σκουλαρίκια με LEDs που αναβοσβήνουν, σύμφωνα με το πρόγραμμα που εκτελείται στο μικροελεγκτή της πλακέτας σκουλαρίκι. Μέρος Ι: Εργαλεία για το Προγραμματισμό Μικροελεγκτών Για να προγραμματίσουμε ένα μικροελεγκτή, χρειαζόμαστε τόσο hardware τη πλακέτα του μικροελεγκτή όσο και software, για να γράψουμε το πρόγραμμα. Στις παρακάτω ενότητες, εξετάζουμε τα υλικά και τα εργαλεία που χρειαζόμαστε για να προγραμματίσουμε έναν μικροελεγκτή. 7.3 Hardware Για να προγραμματίσουμε ένα μικροελεγκτή, χρειαζόμαστε φυσικά το μικροελεγκτή. Ο μικροελεγκτής που θα προγραμματίσουμε για την εξαμηνιαία εργασία είναι ο AVR. Όμως, όταν προγραμματίζουμε μία λειτουργία σ ένα μικροελεγκτή, αυτός ο μικροε- 4
Εικόνα 3: Η πλακέτα Arduino που περιλαμβάνει έναν ATmega 328 μικροελεγκτή της Atmel, είναι η αναπτυξιακή πλακέτα που θα προγραμματίσουμε σ αυτή την άσκηση. λεγκτής είναι εγκατεστημένος σε μία πλακέτα, όπως αυτή στην Εικόνα 3. Η πλακέτα πάνω στη οποία είναι τοποθετημένος ο μικροελεγκτής που θα προγραμματίσουμε (Εικόνα 3), εκτός από το μικροελεγκτή, περιλαμβάνει όλα τα εξαρτήματα που χρειάζεται ο μικροελεγκτής, για να επικοινωνεί ή να επιδρά στο εξωτερικό περιβάλλον, δηλαδή: Θύρες εισόδου, όπου θα συνδέονται αισθητήρες. Θύρες εξόδου, όπου θα συνδέονται λυχνίες, ηχεία και κινητήρες. Μία θύρα USB που χρησιμεύει τόσο σαν πηγή τροφοδοσίας, όσο και για να ε- πιτρέπει στο μικροελεγκτή να συνδέεται σ έναν υπολογιστή. Μέσα από αυτή τη σύνδεση, μπορούμε προγράμματα που γράφουμε στον υπολογιστή να τα φορτώνουμε και να τα εκτελούμε στο μικροελεγκτή. Μνήμη, όπου αποθηκεύεται κάθε πρόγραμμα που εκτελείται στο μικροελεγκτή. Η πλακέτα μικροελεγκτή που θα προγραμματίσουμε για την εξαμηνιαία εργασία είναι η πλακέτα Arduino που παριστάνεται στην Εικόνα 3. Η επιλογή αυτής της πλακέτας είναι γιατί μπορεί εύκολα να προγραμματιστεί στη C. Αυτός είναι ο λόγος που ο Arduino χρησιμοποιείται όλο και περισσότερο, τόσο σε πανεπιστήμια, όσο και στην αγορά. Εάν δεν έχουμε τη πλακέτα, μπορούμε / έχουμε τη δυνατότητα να προσομοιώσουμε στον υπολογιστή μας, την εκτέλεση ενός προγράμματος από το μικροελεγκτή αυτής 5
της πλακέτας. Όμως, εάν επιχειρήσουμε να προσομοιώσουμε την εκτέλεση ενός προγράμματος από το μικροελεγκτή της πλακέτας, αντί να χρησιμοποιήσουμε τη πραγματική πλακέτα, θα χρειαστούμε ένα προσομοιωτή, δηλαδή ένα πρόγραμμα που προσομοιώνει το μικροελεγκτή σε μία πλακέτα Arduino. Στις επόμενες ενότητες, εξετάζουμε το software και το προσομοιωτή(ες) που χρειαζόμαστε, για να προγραμματίσουμε μία πλακέτα Arduino και πως μπορούμε να εγκαταστήσουμε αυτό το software στον υπολογιστή μας. 7.4 Software Το Περιβάλλον Ανάπτυξης Προγραμμάτων (IDE) για τον Arduino Λέγεται πως ένας μικροελεγκτής χωρίς software είναι σαν ένα ποδήλατο χωρίς τιμόνι. Όπως κάθε επεξεργαστής / μικροεπεξεργαστής, ο μικροελεγκτής βασίζεται στις εντολές ενός προγράμματος, για να εκτελέσει οποιαδήποτε λειτουργία. Για να γράψουμε το πρόγραμμα που θα οδηγεί τον μικροελεγκτή να εκτελέσει μία λειτουργία, χρειαζόμαστε το περιβάλλον ανάπτυξης που θα χρησιμοποιήσουμε για να γράψουμε το πρόγραμμα. Ο Arduino παρέχει το περιβάλλον ανάπτυξης που χρησιμοποιούμε για να γράφουμε προγράμματα για αυτό το μικροελεγκτή, σαν ελεύθερο λογισμικό που μπορούμε να κατεβάσουμε από την ιστοσελίδα του Arduino. Για να κατεβάσουμε και να εγκαταστήσουμε το περιβάλλον ανάπτυξης προγραμμάτων για τον Arduino, πληκτρολογούμε στο Google, τη παρακάτω διεύθυνση: http://arduino.cc/en/main/software Εκεί θα βρούμε εκδόσεις του περιβάλλοντος ανάπτυξης, για Windows, Mac OS X και Linux. Επιλέγουμε την έκδοση, για το λειτουργικό σύστημα στον υπολογιστή μας και κατεβάζουμε το αντίστοιχο συμπιεσμένο αρχείο. Η διαδικασία που ακολουθούμε για να εγκαταστήσουμε το περιβάλλον ανάπτυξης είναι η τυπική διαδικασία για την εγκατάστασης ενός προγράμματος: 1 Δημιουργούμε πρώτα ένα καινούργιο κατάλογο στο σκληρό δίσκο C, έστω με το όνομα Arduino 1.0.3 2 Αποσυμπιέζουμε το συμπιεσμένο αρχείο που κατεβάσαμε, για παράδειγμα το συμπιεσμένο αρχείο arduino-1.0.3-windows.zip, εάν έχουμε επιλέξει την έκδοση για Windows, σto κατάλογο που έχουμε προηγούμενα δημιουργήσει στο σκληρό δίσκο C. 3 Ανοίγουμε τον αποσυμπιεσμένο φάκελο και αναζητούμε το εκτελέσιμο αρχείο arduino.exe. Κάνουμε διπλό κλικ σ αυτό το αρχείο, για να ξεκινήσει η εγκατάσταση του προγράμματος στον υπολογιστή μας. Όταν ολοκληρωθεί, η εγκατάσταση του περιβάλλοντος, μπορούμε να ξεκινήσουμε να γράφουμε προγράμματα σ αυτό. Πριν όμως ξεκινήσουμε να γράφουμε δικά μας 6
Εικόνα 4: Για να εγκαταστήσουμε το ολοκληρωμένο περιβάλλον ανάπτυξης για τον Arduino, στον υπολογιστή μας, αποσυμπιέζουμε το αρχείο που κατεβάζουμε από το site του Arduino, στο σκληρό δίσκο C. προγράμματα, μπορούμε πρώτα να ανοίξουμε ένα από τα παραδείγματα που υπάρχουν / περιλαμβάνονται στο περιβάλλον ανάπτυξης, το πρόγραμμα που αναβοσβήνει μία λυχνία (Blink). Κάθε βιβλίο για τον Arduino έχει ένα πρόγραμμα που αναβοσβήνει μία λυχνία. Γι αυτό και το περιβάλλον ανάπτυξης του Arduino περιέχει / περιλαμβάνει αυτό το πρόγραμμα. Μπορούμε να το βρούμε, εάν ανοίξουμε το περιβάλλον ανάπτυξης και ακολουθήσουμε τη διαδρομή: Αρχείο\παραδείγματα\Βασικά\Blink Όταν ανοίξουμε το πρόγραμμα, θα δούμε ότι έχει τη μορφή που παριστάνεται στην Εικόνα 5. Πριν εξετάσουμε πιο αναλυτικά το πρόγραμμα, χρειάζεται να εγκαταστήσουμε κάποια ακόμα προγράμματα. Εάν είχαμε / διαθέταμε τη πραγματική πλακέτα του Arduino, θα μπορούσαμε να προχωρήσουμε απευθείας στην εκτέλεση του προγράμματος της Εικόνας 5, από τον Arduino. Επειδή όμως, δεν έχουμε τη πραγματική πλακέτα του Arduino, θα πρέπει να προσομοιώσουμε τη λειτουργία του. Έτσι, θα χρειαστεί να εγκαταστήσουμε δύο ακόμα 7
Εικόνα 5: Το πρόγραμμα Blink που αναβοσβήνει μία λυχνία, στο ολοκληρωμένο περιβάλλον ανάπτυξης του Arduino. προγράμματα, το Virtual BreadBoard και το Simduino, για να προσομοιώσουμε την εκτέλεση προγραμμάτων στον Arduino. 7.5 Simulator for Arduino (Simduino) Εάν είχαμε τη πλακέτα του Arduino, δεν θα χρειαζόμασταν προσομοιωτή. Θα συνδέαμε απλά τη πλακέτα στη θύρα USB του υπολογιστή μας, θα φορτώναμε το πρόγραμμα της Εικόνας 3 στη μνήμη FLASH του Arduino και θα εκτελούσαμε το πρόγραμμα στον μικροεπεξεργαστή, οπότε θα βλέπαμε την λυχνία που υπάρχει πάνω στη πλακέτα, να αναβοσβήνει. Επειδή όμως, δεν έχουμε τη πραγματική πλακέτα του Arduino, μπορούμε μόνον να προσομοιώσουμε την εκτέλεση του προγράμματος της Εικόνας 3, σ ένα προσομοιωτή, όπως στο εργαστήριο μικροεπεξεργαστών. Ένας σχεδόν ελεύθερος προσομοιωτής του Arduino που μπορούμε να 8
Εικόνα 6: Η διαδικασία για να κατεβάσουμε και να εγκαταστήσουμε στον υπολογιστή μας, έναν προσομοιωτή για τον Arduino. χρησιμοποιήσουμε για να προσομοιώσουμε τα προγράμματα αυτής της άσκησης είναι ο Simduino που μπορούμε να κατεβάσουμε από τη διεύθυνση: http://www.arduino.com.au/simulator-for-arduino.html Αφού εγκαταστήσουμε στον υπολογιστή μας το προσομοιωτή για τον Arduino, μπορούμε να τον χρησιμοποιήσουμε για να προσομοιώσουμε την εκτέλεση του προγράμματος της Εικόνας 5, αλλά και γενικότερα οποιουδήποτε προγράμματος που θα μπορούσε να εκτελεστεί από την αναπτυξιακή πλακέτα του Arduino. Το περιβάλλον του προσομοιωτή παριστάνεται στην Εικόνα 7. Για να προσομοιώσουμε ένα πρόγραμμα για τον Arduino στο προσομοιωτή, πρώτα γράφουμε το πρόγραμμα στο περιβάλλον ανάπτυξης προγράμματος του Arduino, όπως δηλαδή το πρόγραμμα στην Εικόνα 5 και το αποθηκεύουμε. Μετά ανοίγουμε το προσομοιωτή (Εικόνα 7), πατάμε το κουμπί Load (Φόρτωση), για να φορτώσουμε ένα πρόγραμμα που έχουμε προηγούμενα γράψει στο περιβάλλον ανάπτυξης του Arduino και μετά πατάμε το Run στη γραμμή εντολών για να προσομοιώσουμε την εκτέλεση του προγράμματος. Η διαδικασία παριστάνεται στις Εικόνες 7 8 και με αυτό τον τρόπο μπορούμε να προσομοιώσουμε το πρόγραμμα της Εικόνας 5. 9
Εικόνα 7: Το περιβάλλον προσομοίωσης του Arduino. Για να προσομοιώσουμε ένα πρόγραμμα στο προσομοιωτή, πρώτα επιλέγουμε τo τύπο της πλακέτα Arduino που θα προσομοιώσουμε. Μετά φορτώνουμε το πρόγραμμα που την εκτέλεσή του στη συγκεκριμένη πλακέτα, θα προσομοιώσουμε. 10
Εικόνα 8: Η προσομοίωση του προγράμματος Blink που αναβοσβήνει μία λυχνία. 11
7.6 Virtual BreadBoard Ένα διαφορετικό και πολύ πιο αναπτυγμένο, όμως όχι δωρεάν, περιβάλλον προσομοίωσης του Arduino είναι το Virtual Breadboard. Μπορούμε να κατεβάσουμε αυτό το πρόγραμμα από τη διεύθυνση: http://www.virtualbreadboard.com 7.7 Αναβοσβήνοντας μία Λυχνία Ανάλυση του Προγράμματος Έχοντας εγκαταστήσει το software, δηλαδή το περιβάλλον ανάπτυξης και το προσομοιωτή που χρειαζόμαστε για να γράφουμε και είτε να εκτελούμε ή να προσομοιώνουμε τη εκτέλεση προγραμμάτων στη πλακέτα Arduino, μπορούμε τώρα να ξεκινήσουμε να γράφουμε και να εκτελούμε προγράμματα σ αυτή τη πλακέτα. Εικόνα 9: Η διαδικασία προσομοίωσης του Arduino στο Virtual BreadBoard. 12
Πρόγραμμα E.1 Το πρώτο πρόγραμμα που εξετάζουμε είναι το Blink, το πρόγραμμα που αναβοσβήνει μία λυχνία. Όλο το πρόγραμμα παριστάνεται στην Εικόνα 10. Επειδή αυτό το πρόγραμμα είναι ένα από τα παραδείγματα στο περιβάλλον ανάπτυξης του Arduino, δεν χρειάζεται να το ξαναγράψουμε. Απλά ανοίγουμε το πρόγραμμα στο περιβάλλον α- νάπτυξης του Arduino μπορούμε να το ανοίξουμε, εκτελώντας την εντολή: Αρχείο\παραδείγματα\Βασικά\Blink Αποθηκεύουμε το πρόγραμμα σ ένα φάκελο, στον υπολογιστή μας, έστω στα έγγραφα. Ανοίγουμε το προσομοιωτή, φορτώνουμε το πρόγραμμα από το φάκελο όπου το έχουμε αποθηκεύσει και πατάμε την εντολή Run, για να το εκτελέσουμε στο περιβάλλον του προσομοιωτή. Η προσομοίωση του προγράμματος παριστάνεται στην Εικόνα 8. Πρόγραμμα Ε.1 Προγραμματίζοντας τον Arduino να αναβοσβήνει μία λυχνία /* Blink Ανάβει μία λυχνία για ένα δευτερόλεπτο (κατάσταση ON), μετά τη κλείνει (κατάσταση OFF) για ένα δευτερόλεπτο και αυτή η λειτουργία επαναλαμβάνεται διαρκώς. */ /* Στις περισσότερες πλακέτες Arduino, η θύρα 13 έχει μία λυχνία (LED) συνδεμένη σ αυτή (Εικόνα 3). Δηλώνουμε τη μεταβλητή led και δίνουμε σ αυτή τη μεταβλητή τη τιμή 13, για να αναφερόμαστε στη θύρα 13 του Arduino, χρησιμοποιώντας τη μεταβλητή led. */ int led = 13; // Η συνάρτηση setup() εκτελείται μία φορά, όταν ξεκινάει η εκτέλεση // του προγράμματος. void setup() { // Ορίζουμε τη θύρα 13 ως θύρα εξόδου. pinmode(led, OUTPUT); } 13
Πρόγραμμα Ε.1 συνέχεια // Η συνάρτηση loop() παρακάτω, ανάβει τη λυχνία για 1 sec και μετά // τη κλείνει την για 1 sec, σε μία διαρκή επανάληψη. void loop() { digitalwrite(led, HIGH); // Ανάβει τη λυχνία, δημιουργώντας τάση 5V στη θύρα 13 του // Arduino delay(1000); // Καθυστερεί 1 sec, δηλαδή καθυστερεί την εκτέλεση της επόμενης // εντολής του προγράμματος, για 1 sec. digitalwrite(led, LOW); // Κλείνει τη λυχνία, δημιουργώντας τάση 0V στη θύρα 13 του // Ardino delay(1000); // Καθυστερεί 1 sec, δηλαδή καθυστερεί την εκτέλεση της επόμενης // εντολής του προγράμματος, για 1 sec. } Εικόνα 10: Ο κώδικας του προγράμματος Blink. Μία προφανής επέκταση του προγράμματος Blink, είναι να προγραμματίσουμε τον Arduino να αναβοσβήνει δύο LEDs, αντί μιας. Παρακάτω, είναι η περιγραφή και η ανάλυση του προγράμματος. Πρόγραμμα E.2 Προγραμματίζοντας τον Arduino να αναβοσβήνει δύο LEDs. Μία τροποποίηση του προγράμματος Blink είναι να προγραμματίσουμε τη πλακέτα Arduino να ανάβει μία από δύο λυχνίες (Εικόνα 11). Το τροποποιημένο πρόγραμμα θα πρέπει να δημιουργεί 14
διαρκώς τυχαίους αριθμούς σε μία διαρκή επανάληψη και ανάλογα με το αν κάθε ένας από αυτούς τους αριθμούς είναι μονός ή ζυγός, να ανάβει τη μία ή την άλλη από δύο λυχνίες (Εικόνα 11) Ανάλυση / Ανάπτυξη του Προγράμματος Συνδέουμε μία ακόμα λυχνία, στη θύρα 12 του Arduino, όπως παριστάνεται στην Εικόνα 11. Ένα πρόγραμμα που ελέγχει δύο ή περισσότερες ακόμα λυχνίες, μπορεί να ανοίγει και να κλείνει κάθε μία από αυτές, όπως το πρόγραμμα Blink, παραπάνω, ε- λέγχει τη λυχνία στη θύρα 13. Ορίζουμε / δηλώνουμε μία ακόμα μεταβλητή, τη μεταβλητή led12, για να αναφερόμαστε στη λυχνία που είναι συνδεμένη στη θύρα 12 του Arduino. Εικόνα 11: Η προφανής τροποποίηση του προγράμματος Blink είναι να προγραμματίσουμε τον Arduino να ανάβει μία από δύο λυχνίες, ανάλογα με μία συνθήκη. 15
Πρόγραμμα Ε.2 Προγραμματίζοντας τον Arduino να ανάβει μία από δύο λυχνίες /* Το πρόγραμμα ανάβει μία από δύο λυχνίες ανάλογα με το αν ένας τυχαίος αριθμός είναι μονός ή ζυγός */ // Καθορίζουμε και δηλώνουμε τις θύρες Εισόδου/Εξόδου. int head = 13; int tail = 12; long randomnumber = 0; // Η συνάρτηση setup() εκτελείται μία φορά, όταν ξεκινάει η // εκτέλεση του προγράμματος. void setup () { /* Ορίζουμε κάθε μία από τις θύρες που χρησιμοποιεί το πρόγραμμα, ως θύρα εξόδου */ pinmode(head, OUTPUT); pinmode(tail, OUTPUT); randomseed(analogread(0)); // Αυτή η συνάρτηση λειτουργεί ώστε το πρόγραμμα να // δημιουργεί ένα διαφορετικό τυχαίο αριθμό κάθε φορά // που εκτελείται } 16
Πρόγραμμα Ε.2 συνέχεια // Διαρκής Επανάληψη void loop() { randomnumber = random(0,100); /* Εξετάζουμε εάν ο τυχαίος αριθμός που δημιουργείται σε κάθε επανάληψη είναι μονός ή ζυγός, ώστε το πρόγραμμα να ανάψει τη μία ή την άλλη λυχνία */ } Εικόνα 12: Η γενική μορφή του προγράμματος Με τη προσομοίωση του προγράμματος της Εικόνας 12, ολοκληρώνεται το πρώτο μέρος τη; εργασίας. Σ αυτό το μέρος, εξετάσαμε πώς να εγκαταστήσουμε το software που χρειαζόμαστε για να προγραμματίζουμε τη πλακέτα Arduino και δοκιμάσαμε το περιβάλλον ανάπτυξης και το προσομοιωτή, εκτελώντας ένα απλό και χαρακτηριστικό παράδειγμα προγραμματισμού του Arduino, το Blink. Στο επόμενο μέρος, επιχειρούμε να γράψουμε πιο σύνθετα προγράμματα και να προγραμματίσουμε πιο σύνθετες λειτουργίες στον Arduino. 17