ΕΚΠΑΙΔΕΥΤΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΑΤΦΟΡΜΑ ΑΝΟΙΚΤΟΥ ΥΛΙΚΟΥ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΕΚΠΑΙΔΕΥΤΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΑΤΦΟΡΜΑ ΑΝΟΙΚΤΟΥ ΥΛΙΚΟΥ"

Transcript

1 ΕΚΠΑΙΔΕΥΤΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΑΤΦΟΡΜΑ ΑΝΟΙΚΤΟΥ ΥΛΙΚΟΥ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΑΝΝΑ ΧΑΝΤΖΟΠΛΑΚΗ ΑΜ:83/08 Επιβλέπων Καθηγητής: Κωνσταντίνος Μαργαρίτης Τμήμα Εφαρμοσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Θεσσαλονίκη Ιούνιος 2012

2 Η έγκριση της πτυχιακής εργασίας από το Τμήμα Εφαρμοσμένης Πληροφορικής του Πανεπιστημίου Μακεδονίας δεν υποδηλώνει απαραιτήτως και αποδοχή των απόψεων του συγγραφέα εκ μέρους του Τμήματος. 1

3 ΕΥΧΑΡΙΣΤΙΕΣ Πρώτα απ όλα, θα ήθελα να ευχαριστήσω τον επιβλέποντα της πτυχιακής μου εργασίας κ. Κωνσταντίνο Μαργαρίτη για την καθοδήγησή του και τη στήριξή του στην πορεία της εργασίας μου. Επίσης, οφείλω ένα μεγάλο ευχαριστώ στον Παναγιώτη Γεωργιόπουλο, μέλος της ομάδας του PDP lab του Πανεπιστημίου Μακεδονίας, που μου έλυνε κάθε μου απορία όποτε τον χρειαζόμουν. Τέλος, θα ήθελα να ευχαριστήσω τον αδερφό μου Δημήτρη για την ιδέα του να ασχοληθώ με τον Arduino αλλά και για τον εξοπλισμό που μου έδωσε, όπως επίσης, τους φίλους μου και τους γονείς μου για την ηθική υποστήριξη όλο αυτό το διάστημα. 2

4 3

5 ΠΕΡΙΛΗΨΗ Σκοπός της εργασίας αυτής είναι η δημιουργία ενός εκπαιδευτικού υλικού για την πλατφόρμα ανοιχτού υλικού του Arduino. Στο πρώτο κεφάλαιο παρατίθεται ο ορισμός και η δήλωση αρχών του ανοιχτού υλικού. Στο δεύτερο κεφάλαιο παρουσιάζεται αναλυτικά η πλατφόρμα του Arduino, τόσο από πλευράς υλικού όσο και από πλευράς λογισμικού. Στην συνέχεια, στο τρίτο κεφάλαιο αναφέρονται κάποιες βασικές έννοιες της φυσικής και των ηλεκτρονικών κυκλωμάτων, όπως επίσης και τα εξαρτήματα που χρησιμοποιήθηκαν σε αυτή την εργασία. Στα επόμενα κεφάλαια, παρουσιάζονται εφαρμογές του Arduino και δίνεται αναλυτικά η θεωρία τους, ο κώδικάς τους και η συνδεσμολογία του κάθε κυκλώματος. Τέλος, στο δέκατο έκτο κεφάλαιο γίνεται σύνδεση του Arduino με επιχειρηματικές δραστηριότητες και αναφέρεται πώς μπορεί κάποιος να επωφεληθεί οικονομικά από την κατασκευή εφαρμογών με κεντρικό άξονα την πλακέτα. 4

6 ABSTRACT The purpose of this thesis is the creation of a tutorial for the open hardware Arduino platform. In the first chapter is cited the definition and statement of principles of the open hardware. In the second chapter is presented the platform of Arduino, both software and hardware. Furthermore, in the third chapter is cited a detailed reference in some basic concepts of physics and electronics circuits, as well as the parts that have been used in the projects. In the next chapters, are cited some applications with Arduino platform and the relevant theory, code and circuit connection of each application. Finally, in the sixteenth chapter is presented a connection of Arduino with business activities and how anyone can benefit financially from building applications with main axis the board of Arduino. 5

7 Πίνακας περιεχομένων 1. ΑΝΟΙΧΤΟ ΥΛΙΚΟ Ανοιχτό Υλικό Δήλωση Αρχών Ορισμός 1.0 για το Ανοιχτό Υλικό ΤΙ ΕΙΝΑΙ Ο ARDUINO? Πλεονεκτήματα του Arduino Τι είναι το Physical Computing Η πλατφόρμα του Arduino Το υλικό Το λογισμικό ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ Τι είναι ο ηλεκτρισμός; Ηλεκτρικά στοιχεία και έννοιες που χρειαζόμαστε ΕΙΣΑΓΩΓΗ ΣΤΟΝ ARDUINO Blinking LED Blink χωρίς καθυστερήσεις Traffic Lights ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ : ΕΙΣΑΓΩΓΗ ΣΤΑ PUSHBUTTONS Ανάβουμε ένα LED κρατώντας το κουμπί πατημένο Ανάβουμε ένα LED πατώντας ένα κουμπί και παραμένει αναμμένο ΣΕΙΡΙΑΚΗ ΕΠΙΚΟΙΝΩΝΙΑ Πώς να στέλνουμε δεδομένα στον υπολογιστή Hello World Πώς να στέλνουμε μορφοποιημένα κείμενα και αριθμητικά δεδομένα από τον Arduino στην οθόνη μας Πώς να λαμβάνουμε σειριακά δεδομένα από τον υπολογιστή ΑΝΑΛΟΓΙΚΗ ΕΙΣΟΔΟΣ : ΧΡΗΣΗ ΑΝΑΛΟΓΙΚΩΝ ΑΙΣΘΗΤΗΡΩΝ Σταδιακό άναμμα και σβήσιμο ενός LED Καθορισμός φωτεινότητας ενός LED βάσει της αναλογικής εισόδου : χρήση 6

8 φωτοαντίστασης Αυτοματισμός έξυπνου σπιτιού που ελέγχει τα φώτα Μέτρηση θερμοκρασίας : χρήση αισθητήρα θερμοκρασίας ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΣΕΡΒΟΚΙΝΗΤΗΡΕΣ Περιστροφή σερβοκινητήρα με σταθερό βήμα από τη μέγιστη στην ελάχιστη γωνία περιστροφής Περιστροφή με χρήση ποτενσιόμετρου Εφαρμογή έξυπνου σπιτιού : έλεγχος περσίδων με τη χρήση servo ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΒΗΜΑΤΙΚΟΥΣ ΚΙΝΗΤΗΡΕΣ Περιστροφή του κινητήρα εμπρός και πίσω Περιστροφή χωρίς τη χρήση της βιβλιοθήκης του Arduino ΠΙΕΖΟΗΛΕΚΤΡΙΚΟ ΣΤΟΙΧΕΙΟ ΠΑΡΑΓΩΓΗΣ ΗΧΟΥ Αναπαραγωγή ακολουθίας από νότες Fire Alarm! ΡΕΛΕ Εναλλάξ flashing μεταξύ 2 LED LIQUID CRYSTAL DISPLAY - LCD LCD Hello World! Εμφάνιση στην οθόνη ειδικών χαρακτήρων συμβόλων Blink Αποστολή σειριακών δεδομένων στην LCD Αποστολή αναλογικών μετρήσεων στην LCD IR REMOTE CONTROL Λήψη εντολών από τηλεχειριστήριο και εμφάνισή τους σειριακά Blink με ένα τηλεχειριστήριο SEGMENT Counter Counter 0-9 με χρήση αποκωδικοποιητή

9 15. ΚΑΤΑΣΚΕΥΑΖΟΥΜΕ ΤΟΝ ΔΙΚΟ ΜΑΣ ARDUINO Βήμα βήμα κατασκευή του κυκλώματος του Arduino Burning the boot loader Πώς φορτώνουμε sketches στον μικροεπεξεργαστή ARDUINO ΚΑΙ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΤΗΤΑ ΒΙΒΛΙΟΓΡΑΦΙΑ

10 1. Ανοιχτοό Υλικοό Ο όρος Ανοικτό Υλικό, παρόμοια με το Ανοικτό Λογισμικό, σημαίνει τον ελεύθερο διαμοιρασμό ηλεκτρονικών, ηλεκτρικών, μηχανικών κλπ αντικειμένων, χωρίς περιορισμούς copyright. Το δικαίωμα χρήσης, τροποποίησης, αναδιανομής και κατασκευής, για εμπορικό ή μη κερδοσκοπικό όφελος παρέχεται σε όλους χωρίς πνευματικά δικαιώματα ή αμοιβές. Έτσι, οι σχεδιαστές του ανοιχτού υλικού ελπίζουν να εμπλουτίσουν την κοινωνία αναπτύσσοντας μία βιβλιοθήκη από σχέδια για χρήσιμα αντικείμενα που μπορεί ο καθένας να κατασκευάσει, να χρησιμοποιήσει και να βελτιώσει. 1.1 Ανοιχτό Υλικό Δήλωση Αρχών 1.0 Το ανοικτό υλικό είναι υλικό του οποίου ο σχεδιασμός είναι δημοσίως διαθέσιμος έτσι ώστε ο καθένας να μπορεί να μελετήσει, μετατρέψει, διανείμει, κατασκευάσει και πουλήσει το σχεδιασμό ή το υλικό με βάση αυτόν τον σχεδιασμό. Το πηγαίο του υλικού, ο σχεδιασμός με τον οποίο δημιουργήθηκε, είναι διαθέσιμος σε προτιμώμενη μορφή για να γίνονται μετατροπές σε αυτό. Ιδανικά, το ανοικτό υλικό χρησιμοποιεί προσιτά εξαρτήματα και υλικά, τυποποιημένες διαδικασίες, ανοικτές υποδομές, χωρίς περιορισμούς στο περιεχόμενο και ανοικτού κώδικα εργαλεία σχεδιασμού για να μεγιστοποιήσει την ικανότητα του καθενός για να δημιουργούν και να κάνουν χρήση του υλικού. Το ανοικτό υλικό δίνει στους ανθρώπους την ελευθερία να ελέγχουν την τεχνολογία τους διαμοιράζοντας ταυτόχρονα γνώση και ενθαρρύνοντας το εμπόριο δια μέσου της ανοικτής ανταλλαγής των σχεδιασμών. 1.2 Ορισμός 1.0 για το Ανοικτό Υλικό Με τον όρο Ανοικτό Υλικό αναφερόμαστε στα απτά αντικείμενα - μηχανές, συσκευές, ή οτιδήποτε φυσικά αντικείμενα των οποίων ο σχεδιασμός έχει απελευθερωθεί στο κοινό με τέτοιον τρόπο ώστε, οποιοσδήποτε να μπορεί δημιουργήσει, μετατρέψει, διανείμει και να κάνει χρήση αυτών. Αυτός ο ορισμός προορίζεται να βοηθήσει στην παροχή οδηγιών για την ανάπτυξη και την εκτίμηση των αδειών για το Ανοικτό Υλικό. Το Υλικό είναι διαφορετικό από το Λογισμικό στο σημείο όπου οι φυσικοί πόροι πρέπει πάντα να δεσμεύονται για τη δημιουργία φυσικών αγαθών. Αντίστοιχα, φυσικά πρόσωπα ή εταιρείες που παράγουν αντικείμενα («προϊόντα») υπό την άδεια του Ανοιχτού Υλικού, δεσμεύονται να καταστήσουν σαφές πως τέτοια προϊόντα δεν κατασκευάζονται, πωλούνται, 9

11 εγγυώνται ή καθ οποιονδήποτε άλλο τρόπο κυρώνονται από τον αρχικό σχεδιαστή κι επίσης ότι δεν κάνουν χρήση κανενός εμπορικού σήματος που είναι ιδιοκτησία του αρχικού σχεδιαστή. Οι όροι του Ανοικτού Υλικού πρέπει συμμορφώνονται με τα ακόλουθα κριτήρια: 1.Τεκμηρίωση Το Υλικό πρέπει να εκδίδεται με τεκμηρίωση που περιλαμβάνει τα αρχεία σχεδιασμού και θα πρέπει να επιτρέπεται η μετατροπή και διανομή τους. Όπου η τεκμηρίωση δεν περιλαμβάνεται μαζί με το φυσικό προϊόν, θα πρέπει να δημοσιεύονται ευρέως οι τρόποι με τους οποίους μπορεί να αποκτηθεί αυτή η τεκμηρίωση με εύλογο κόστος κι όχι μεγαλύτερο από αυτό της αναπαραγωγής (πχ εκτύπωσης), κατά προτίμηση η μεταφόρτωσή τους μέσω Διαδικτύου χωρίς χρέωση. Η τεκμηρίωση πρέπει να περιλαμβάνει τα αρχεία σχεδιασμού σε μορφή που ευνοεί τις αλλαγές, για παράδειγμα την εγγενή μορφή αρχείου ενός προγράμματος CAD. Σκοπίμως ασαφή αρχεία σχεδίου δεν επιτρέπονται. Ενδιάμεσες φόρμες ανάλογες με τον εκτελέσιμο κώδικα υπολογιστή - όπως έτοιμα, εκτυπωμένα έργα τέχνης από ένα πρόγραμμα CAD - δεν επιτρέπονται ως υποκατάστατα. Η άδεια μπορεί να απαιτεί ότι τα αρχεία σχεδιασμού παρέχονται σε πλήρως-τεκμηριωμένη, ανοικτή μορφή. 2.Σκοπός Η τεκμηρίωση για το υλικό πρέπει σαφώς να περιγράφει τι μέρος του σχεδίου, αν όχι όλο, εκδίδεται υπό αυτή την άδεια. 3.Απαραίτητο Λογισμικό Αν το αδειοδοτημένο σχέδιο απαιτεί λογισμικό, ενσωματωμένο ή άλλο, για να λειτουργήσει κατάλληλα και να εκπληρώσει τις ουσιαστικές του λειτουργίες, τότε το η άδεια μπορεί να απαιτεί μια από τις παρακάτω συνθήκες : α) Οι διεπαφές είναι ικανοποιητικά τεκμηριωμένες έτσι ώστε μπορεί, σε λογικά πλαίσια, να θεωρηθούν απλές στο να γράψεις λογισμικό ανοικτού κώδικα που επιτρέπει στη συσκευή να λειτουργεί κανονικά και να πληροί τις βασικές της λειτουργίες. Για παράδειγμα, αυτό μπορεί να εμπεριέχει τη χρήση λεπτομερών σχεδίων σημάτων συγχρονισμού ή ψευδοκώδικα για να παρουσιάσει ευκρινώς τη διεπαφή σε λειτουργία. β) Το απαραίτητο λογισμικό εκδίδεται υπό της Πρωτοβουλίας Ανοικτού Κώδικα (OSI) εγκεκριμένης, ανοικτού κώδικα άδεια. 4.Παράγωγα έργα Η άδεια θα επιτρέπει μετατροπές και παράγωγα έργα και θα τα επιτρέπει να διανέμονται υπό τους ίδιους όρους της άδειας του αρχικού έργου. Η άδεια θα επιτρέπει την κατασκευή, πώληση, διανομή και χρήση των προϊόντων που δημιουργήθηκαν από τα αρχεία σχεδιασμού, τα ίδια τα αρχεία και τα παράγωγά αυτών. 5.Ελεύθερη αναδιανομή 10

12 Η άδεια δε θα απαγορεύει οποιοδήποτε φορέα από το να πωλεί ή να δίδει ελεύθερα την τεκμηρίωση του έργου. Η άδεια δεν απαιτεί δικαιώματα ή άλλη αμοιβή για τέτοια πώληση. Η άδεια δεν απαιτεί κάποιο δικαίωμα η αμοιβή σχετικά με την πώληση παράγωγων έργων. 6.Απόδοση μνείας Η άδεια μπορεί να απαιτεί παράγωγα τεκμηρίωσης και πνευματικά δικαιώματα σχετιζόμενα με τις συσκευές, για να αποδίδουν μνεία στους αδειοδότες όταν διανέμουν αρχεία σχεδιασμού, ολοκληρωμένα προϊόντα ή/και παράγωγά αυτών. Η άδεια μπορεί να απαιτεί ότι αυτή η πληροφορία να είναι προσβάσιμη στον τελικό χρήστη, που κάνει χρήση της συσκευής κανονικά, αλλά δε θα ορίζει μια προκαθορισμένη μορφή προβολής της. Η άδεια μπορεί να απαιτεί τα παράγωγα έργα να φέρουν διαφορετικό όνομα ή νούμερο έκδοση από το αρχικό σχέδιο. 7.Καμία διάκριση εις βάρος φυσικών προσώπων ή ομάδες φυσικών προσώπων Η άδεια δεν πρέπει να διακρίνει εις βάρος οποιουδήποτε φυσικού προσώπου ή ομάδας φυσικών προσώπων. 8.Καμία διάκριση εις βάρος πεδίων έρευνας Η άδεια δεν πρέπει να απαγορεύει κάποιον από το να κάνει χρήση του έργου (συμπεριλαμβανομένου κατασκευασμένου υλικού) σε ένα συγκεκριμένο πεδίο έρευνας. Για παράδειγμα, δεν πρέπει να απαγορεύει το υλικό από το να χρησιμοποιείται σε μια επιχείρηση, ή από το να χρησιμοποιείται σε πυρηνική έρευνα. 9.Διανομή της άδειας Τα δικαιώματα που εκχωρούνται από την άδεια πρέπει να εφαρμόζονται σε όλους εκείνους των οποίων τα έργα αναδιανέμονται χωρίς την ανάγκη εκτέλεσης μιας επιπλέον άδειας από αυτούς. 10.Η άδεια δεν πρέπει να είναι συγκεκριμένη σε ένα προϊόν Τα δικαιώματα που εκχωρούνται από την άδεια δεν πρέπει να εξαρτώνται από το αδειοδοτημένο έργο όντας μέρος ενός συγκεκριμένου προϊόντος. Αν ένα μέρος αφαιρεθεί από ένα έργο και χρησιμοποιείται ή διανέμεται στο πλαίσιο των όρων της άδειας, όλα τα μέρη των οποίων το έργο αναδιανέμεται, θα πρέπει να έχει τα ίδια δικαιώματα με αυτά που εκχωρήθηκαν στο αρχικό έργο. 11.Η άδεια δεν πρέπει να απαγορεύει άλλο υλικό ή λογισμικό Η άδεια δεν πρέπει να θέτει περιορισμούς σε άλλα αντικείμενα τα οποία περιλαμβάνονται στην άδεια αλλά δεν παράγονται από αυτήν. Για παράδειγμα, η άδεια δεν πρέπει να επιμείνει ότι όλο το άλλο υλικό που πωλείται με το αδειοδοτημένο αντικείμενο να είναι ανοικτού κώδικα, ούτε ότι μόνο ανοικτού κώδικα λογισμικό να χρησιμοποιείται εξωτερικά στη συσκευή. 12.Η άδεια πρέπει να είναι τεχνολογικά ουδέτερη Καμία πρόβλεψη της άδειας μπορεί να στηρίζεται σε κάθε μεμονωμένη τεχνολογία, συγκεκριμένο ανταλλακτικό ή εξάρτημα, υλικό ή στυλ διεπαφής ή χρήσης αυτών. 11

13 Πηγή : Το Arduino είναι αδιαμφισβήτητα το πιο δημοφιλές έργο ανοιχτού υλικού. Παρακάτω θα μελετήσουμε την πλατφόρμα του Arduino τόσο από πλευράς υλικού όσο και λογισμικού και θα μάθουμε πώς να κατασκευάζουμε και να προγραμματίζουμε μία διαδραστική συσκευή με τη χρήση αισθητήρων και κινητήρων. 12

14 2. Τι ειίναι ο Arduino? Ο Arduino είναι ένα εργαλείο για την κατασκευή υπολογιστών που μπορούν να αισθάνονται και να ελέγχουν το φυσικό κόσμο σε αντίθεση με τον κοινό Ηλεκτρονικό Υπολογιστή. Είναι μία πλατφόρμα ανοιχτού κώδικα φυσικής πληροφορικής (physical computing) και βασίζεται σε μια αναπτυξιακή πλακέτα που ενσωματώνει επάνω έναν μικροελεγκτή και συνδέεται με τον Η/Υ για να τον προγραμματίσουμε μέσα από ένα απλό περιβάλλον ανάπτυξης. Ο Arduino μπορεί να χρησιμοποιηθεί για την ανάπτυξη διαδραστικών αντικειμένων, λαμβάνοντας εισόδους από πληθώρα αισθητηρίων οργάνων ή διακοπτών και μπορεί να επηρεάσει το χώρο με τον έλεγχο των φώτων, των κινητήρων και άλλων συσκευών εξόδου του φυσικού κόσμου. Τα έργα του Arduino μπορούν να σταθούν ανεξάρτητα (σε επίπεδο υλικού) ή να επικοινωνήσουν με άλλα προγράμματα που τρέχουν στον υπολογιστή μας (Flash, Processing, MaxMSP, κ.α.). Η πλακέτα μπορεί να συναρμολογηθεί χειρονακτικά ή να αγοραστεί προ-συναρμολογημένη. Το περιβάλλον ανάπτυξης του λογισμικού βασίζεται στην γλώσσα προγραμματισμού Processing και την γλώσσα προγραμματισμού Wiring, οι οποίες είναι ανοιχτού κώδικα (open source) και μπορεί κάποιος να τις "μεταφορτώσει δωρεάν". Η Γλώσσα προγραμματισμού του Arduino αποτελεί μια εφαρμογή σε επίπεδο λογισμικού της Wiring, παρόμοια με τη C/C++ με κάποιες μικρές απλοποιήσεις και παραλλαγές. Εξομοιώνει θα λέγαμε απόλυτα το φυσικό περιβάλλον του μικροελεγκτή. Πηγή : Πλεονεκτήματα του Arduino Υπάρχουν πολλοί ακόμη μικροεπεξεργαστές και πλατφόρμες μικροεπεξεργαστών διαθέσιμοι για τη φυσική πληροφορική. Ο Arduino διαφέρει γιατί απλοποιεί τη διαδικασία του να δουλεύουμε με μικροεπεξεργαστές και παρέχει κάποια πλεονεκτήματα όπως : Είναι μία πλακέτα που μπορεί να συνεργαστεί με διαφορετικά λειτουργικά : τρέχει σε Windows, Macintosh και Linux. Είναι βασισμένο στο προγραμματιστικό περιβάλλον ανάπτυξης της Processing, ένα εύκολο σε χρήση προγραμματιστικό περιβάλλον που χρησιμοποιείται από καλλιτέχνες και σχεδιαστές. Το προγραμματίζουμε μέσω ενός καλωδίου USB, και όχι μιας σειριακής θύρας. Αυτό το χαρακτηριστικό είναι χρήσιμο γιατί πολλοί μοντέρνοι υπολογιστές δεν έχουν σειριακές θύρες. Τόσο το υλικό όσο και το λογισμικό είναι ανοιχτού κώδικα. Μπορούμε να κατεβάσουμε το διάγραμμα του κυκλώματος, να αγοράσουμε όλα τα εξαρτήματα, και να κάνουμε τη δική μας κατασκευή χωρίς να πληρώσουμε τίποτα στους δημιουργούς του Arduino. Το υλικό είναι φθηνό. Η πλακέτα με τη θύρα USB κοστίζει περίπου 20 και η αντικατάσταση ενός καμένου chip είναι εύκολη και δεν κοστίζει πάνω από 5. Έτσι μπορούμε να κάνουμε λάθη. Υπάρχει μία ενεργή κοινότητα χρηστών που μπορούν να βοηθήσουν. 13

15 Το Project Arduino αναπτύχθηκε σε ένα εκπαιδευτικό περιβάλλον και είναι έτσι ιδανικό για αρχάριους. 2.2 Τι είναι η φυσική πληροφορική (Physical Computing)? Η φυσική πληροφορική χρησιμοποιεί την ηλεκτρονική για να πρωτοτυποποιήσει νέα υλικά για σχεδιαστές και καλλιτέχνες. Εμπεριέχει τη σχεδίαση διαδραστικών αντικειμένων που μπορούν να επικοινωνήσουν με ανθρώπους χρησιμοποιώντας αισθητήρες και κινητήρες ελεγχόμενα από μία συμπεριφορά εφαρμοσμένη ως λογισμικό μέσα σε ένα μικροεπεξεργαστή. Στο παρελθόν, τα εργαλεία που χρησιμοποιούνταν στην ηλεκτρονική προορίζονταν για μηχανικούς και απαιτούσαν εκτεταμένες γνώσεις. Πλέον, οι μικροεπεξεργαστές είναι φθηνότεροι και ευκολότεροι στη χρήση, επιτρέποντας έτσι τη δημιουργία καλύτερων εργαλείων. Με τον Arduino, ένας σχεδιαστής ή ένας καλλιτέχνης μπορούν να γνωρίσουν τα βασικά της ηλεκτρονικής και των αισθητήρων πολύ γρήγορα και να ξεκινήσουν να χτίζουν πρωτότυπα με μικρό κόστος. Πηγή : Getting started with Arduino 14

16 2.3 Η πλατφόρμα του Arduino Ο Arduino αποτελείται από δύο βασικά τμήματα : την πλακέτα Arduino, που είναι το κομμάτι υλικού που εργαζόμαστε όταν κατασκευάζουμε τα έργα, και το Arduino IDE, το κομμάτι του λογισμικού που εκτελούμε στον υπολογιστή. Χρησιμοποιούμε το IDE για να δημιουργήσουμε ένα sketch (ένα μικρό πρόγραμμα) που φορτώνουμε στην πλακέτα Arduino. Το sketch λέει στην πλακέτα τι να κάνει Το υλικό του Arduino Η πλακέτα Arduino είναι μία μικρή πλακέτα μικροεπεξεργαστή, η οποία είναι ένα μικρό κύκλωμα που περιέχει ένα ολόκληρο υπολογιστή σε ένα μικρό chip(τον μικροεπεξεργαστή). Υπάρχουν πολλά μοντέλα πλακετών. Στην παρούσα εργασία θα χρησιμοποιήσουμε το Arduino Duemilanove. Arduino Duemilanove Αν κοιτάξετε την πλακέτα θα δείτε ένα μαύρο chip με 28 «πόδια» - αυτό το chip είναι το ATmega128 ή το ATmega328, που αποτελεί την καρδιά του Arduino. Έχει 14 ψηφιακές εισόδους και εξόδους (εκ των οποίων οι 6 μπορούν να χρησιμοποιηθούν ως αποτέλεσμα PWM- pulse width modulation), 6 αναλογικές εισόδους, έναν ταλαντωτή κρυστάλλου 16MHZ, μία σύνδεση USB, μία είσοδο παροχής ενέργειας, ένα διασυνδετικό αγωγό ICSP, και ένα κουμπί αναστοιχειοθέτησης (reset). Περιέχει όλα όσα απαιτούνται για να υποστηρίξουν τη λειτουργία του μικροεπεξεργαστή. Μπορεί να συνδεθεί με έναν υπολογιστή διαμέσου ενός καλωδίου USB ή να τροφοδοτηθεί με έναν προσαρμογέα ρεύματος εναλλασσόμενου σε συνεχές ή με μία μπαταρία. 15

17 Σύνοψη Μικροεπεξεργαστής ATmega168 ή ATmega328 Τάση λειτουργίας 5V Εξωτερική τάση (συνίσταται) 7-12V Εξωτερική τάση (όρια) 6-20V Ψηφιακά pin I/O 14 (6 από τα οποία παρέχουν έξοδο PWM) Αναλογικά pin εισόδου 6 Συνεχές ρεύμα ανά I/O pin 40mA Συνεχές ρεύμα για το pin 3.3V 50mA Μνήμη Flash 16KB (ATmega168) και 32KB (ATmega328) εκ των οποίων τα 2KB χρησιμοποιούνται από το πρόγραμμα εκκίνησης SRAM 1 KB (ATmega168) και 2 KB (ATmega328) EEPROM 512 bytes (ATmega168) και 1 KB (ATmega328) Ταχύτητα ρολογιού 16 MHz Πιο συγκεκριμένα: Μικροεπεξεργαστής Ο Arduino χρησιμοποιεί τους 8-bit μικροεπεξεργαστές ATmega328 ή ATmega168 της Atmel. Οι ATmega168PA/328P είναι μικροεπεξεργαστές χαμηλής κατανάλωσης βασισμένοι σε μία αρχιτεκτονική AVR RISC. Η AVR είναι μια τροποποιημένη αρχιτεκτονική Harvard RISC των 8-bit που αναπτύχθηκε από την εταιρεία Atmel το Η AVR είναι μία από τις πρώτες οικογένειες μικροεπεξεργαστών που χρησιμοποίησαν σε τσιπ μνήμη flash για την αποθήκευση των προγραμμάτων. Οι μικροεπεξεργαστές ATmega168PA/328P, εκτελώντας ισχυρές εντολές σε ένα μόνο κύκλο ρολογιού, πετυχαίνουν εξόδους που προσεγγίζουν το 1 MIPS ανά MHz επιτρέποντας στους σχεδιαστές του συστήματος να βελτιστοποιούν την κατανάλωση ενέργειας σε σχέση με την ταχύτητα επεξεργασίας. Παρακάτω απεικονίζεται το σχηματικό διάγραμμα του μικροεπεξεργαστή. 16

18 Ο πυρήνας AVR συνδυάζει ένα πλούσιο σύνολο εντολών με 32 καταχωρητές γενικού σκοπού. Και οι 32 καταχωρητές συνδέονται απευθείας στην Αριθμητική και Λογική Μονάδα (ALU), επιτρέποντας σε δύο ανεξάρτητους καταχωρητές να προσπελαστούν σε μία μοναδική εντολή που εκτελείται σε έναν κύκλο εργασίας. Η προκύπτουσα αρχιτεκτονική είναι πιο αποδοτική ως προς τον κώδικα ενώ επιτυγχάνει εξόδους μέχρι και δέκα φορές γρηγορότερα από τις συμβατικές αρχιτεκτονικές CISC των μικροεπεξεργαστών. Οι μικροεπεξεργαστές ATmega168PA/328P έχουν τα ακόλουθα χαρακτηριστικά : 4K/8K bytes εσωτερική flash μνήμη με ιδιότητες Read-While-Write, 256/512/512/1K bytes EEPROM, 512/1K/1K/2K bytes SRAM, 23 γενικού σκοπού γραμμές εισόδου/εξόδου, 32 γενικού σκοπού καταχωρητές, τρία ευέλικτα Χρονόμετρα/Μετρητές με καταστάσεις σύγκρισης, εσωτερικές και εξωτερικές διακοπές, σειριακή επικοινωνία USART, μία σειριακή διασύνδεση 17

19 προσανατολισμένη από ένα byte με δύο καλώδια, μία σειριακή θύρα SPI, 6 κανάλια των 10-bit ADC( Analog to Digital Converter), έναν προς προγραμματισμό μετρητή που επιβλέπει με εσωτερικό ταλαντωτή, και 5 διαθέσιμες καταστάσεις λογισμικού εξοικονόμησης ενέργειας. Η κατάσταση αδράνειας σταματά τη CPU ενώ επιτρέπει στα παρακάτω : SRAM, Timer/Counters, USART, 2-wire Σειριακή Διασύνδεση, θύρα SPI, και στις διακοπές του συστήματος να συνεχίσουν να λειτουργούν. Η κατάσταση απενεργοποίησης αποθηκεύει τα περιεχόμενα του καταχωρητή, αλλά παγώνει τον ταλαντωτή, απενεργοποιώντας επίσης, και όλες τις άλλες λειτουργίες του τσιπ μέχρι την επόμενη διακοπή ή επανεκκίνηση του υλικού. Στη κατάσταση εξοικονόμησης ενέργειας, το ασύγχρονο χρονόμετρο συνεχίζει να τρέχει, επιτρέποντας στον χρήστη να διατηρήσει μία χρονική βάση ενώ η υπόλοιπη συσκευή κοιμάται. Η κατάσταση μείωσης θορύβου ADC σταματά τη CPU και όλες τις υπομονάδες εισόδου/εξόδου εκτός από το ασύγχρονο χρονόμετρο και τον ADC, ώστε να ελαχιστοποιήσει τους θορύβους κατά τη διάρκεια της μετατροπής ADC. Στην κατάσταση αναμονής, ο κρυσταλλικός ταλαντωτής τρέχει ενώ κοιμάται η υπόλοιπη συσκευή. Αυτό επιτρέπει πολύ γρήγορες εκκινήσεις με χαμηλή κατανάλωση συστήματος. Η συσκευή αυτή κατασκευάστηκε χρησιμοποιώντας την υψηλής πυκνότητας μηασταθή τεχνολογία μνήμης της Atmel. Η μνήμη ISP Flash πάνω στο τσιπ επιτρέπει στη μνήμη του προγράμματος να επαναπρογραμματιστεί μέσω της σειριακής διασύνδεσης SPI, από έναν συμβατικό μη-ασταθή προγραμματιστή μνήμης, ή από ένα πρόγραμμα εκκίνησης που τρέχει στον πυρήνα AVR. Το πρόγραμμα εκκίνησης (boot loader) μπορεί να χρησιμοποιήσει οποιαδήποτε διασύνδεση για να κατεβάσει το πρόγραμμα εφαρμογής στην εφαρμογή της μνήμης flash. Το λογισμικό στον τομέα εκκίνησης της flash θα συνεχίσει να τρέχει ενώ ο τομέας της εφαρμογής της flash ενημερώνεται, παρέχοντας πραγματική λειτουργία Read-While-Write. Συνδυάζοντας την 8-bit RISC CPU με μία εσωτερική αυτό-προγραμματιζόμενη Flash μνήμη σε ένα μονολιθικό τσιπ, οι μικροεπεξεργαστές ATmega168PA/328P της Atmel είναι πανίσχυροι, αφού παρέχουν μία εξαιρετικά ευέλικτη και αποδοτική από πλευράς κόστους λύση σε πολλές ενσωματωμένες εφαρμογές. Οι μικροεπεξεργαστές ATmega168PA/328P AVR υποστηρίζονται με μία πλήρη σουίτα προγράμματος και εργαλεία ανάπτυξης συστήματος που περιλαμβάνουν : μεταγλωττιστές C, Macro Assemblers, προγράμματα αποσφαλμάτωσης/ εξομοίωσης, εξομοιωτές μέσα στο κύκλωμα και εργαλεία αξιολόγησης. Τέλος, στην παρακάτω εικόνα φαίνεται η συνδεσμολογία των pins του μικροεπεξεργαστή. 18

20 Τροφοδοσία Το Arduino Duemilanove μπορεί να τροφοδοτηθεί μέσω σύνδεσης USB ή με μία εξωτερική παροχή ηλεκτρικού ρεύματος. Η πηγή ενέργειας επιλέγεται αυτόματα. Η εξωτερική παροχή (εκτός του USB) μπορεί να προέλθει είτε από έναν προσαρμογέα ρεύματος εναλλασσόμενου σε συνεχές είτε από μία μπαταρία. Ο προσαρμογέας μπορεί να συνδεθεί με ένα βύσμα των 2.1mm στο βύσμα της πλακέτας. Τα καλώδια από μία μπαταρία μπορούν να συνδεθούν στις εισόδους Gnd και Vin των εισόδων τροφοδότησης. Η πλακέτα μπορεί να λειτουργήσει και με μία εξωτερική παροχή από 6 έως 20 volts. Αν παρέχεται τάση μικρότερη των 7V, ωστόσο, η είσοδος των 5V μπορεί να προμηθεύει μικρότερη τάση των 5V και η πλακέτα να είναι ασταθής. Αν παρέχεται τάση μεγαλύτερη των 12V, ο ρυθμιστής τάσης μπορεί να υπερθερμανθεί και να βλάψει την πλακέτα. Το προτεινόμενο φάσμα τροφοδότησης είναι 7 με 12 volts. Οι είσοδοι τροφοδότησης είναι οι ακόλουθες: VIN. Η τάση εισαγωγής στην πλακέτα Arduino όταν χρησιμοποιεί μια εξωτερική πηγή. Είναι δυνατό να παρέχεται τάση μέσω αυτής της εισόδου ή αν παρέχεται τάση μέσω του βύσματος, να έχουμε πρόσβαση σε αυτή μέσω αυτής της εισόδου. 5V. Η ρυθμισμένη παροχή ηλεκτρικού ρεύματος χρησιμοποιείται για να τροφοδοτήσει τον μικροεπεξεργαστή και άλλα εξαρτήματα στην πλακέτα. Αυτό μπορεί να προέλθει είτε από το VIN μέσω ενός ρυθμιστή επάνω στην πλακέτα, είτε να παρέχεται από USB ή έναν άλλο ρυθμιστή τάσης των 5V. 3V3. Μια παροχή των 3.3 volt παράγεται από το FTDI chip της πλακέτας. Το μέγιστο ρεύμα που μπορεί να μεταδοθεί είναι 50mA. GND. Είσοδοι γείωσης. 19

21 Μνήμη Ο μικροεπεξεργαστής ATmega328 είναι πλήρως συμβατός με τον ATmega128 αλλά έχει τη διπλάσια μνήμη. Αυτός περιλαμβάνει flash μνήμη για να αποθηκεύονται τα sketches (32KB αντί των 16KB), μνήμη RAM για να αποθηκεύονται οι μεταβλητές (2KB αντί του 1KB) και μνήμη EEPROM για να αποθηκεύει δεδομένα όταν σβήνουμε την πλακέτα (1KB αντί των 512 bytes). Επίσης αυξήθηκε η ταχύτητα του bootloader για να φορτώνουμε νέα sketches από 19200baud σε 57600baud. Είσοδοι και Έξοδοι Κάθε ένα από τα 14 ψηφιακά pins στον Duemilanove μπορούν να χρησιμοποιηθούν είτε ως είσοδοι είτε ως έξοδοι, χρησιμοποιώντας τις συναρτήσεις pinmode(), digitalwrite() και digitalread() στο sketch του προγράμματος. Λειτουργούν στα 5V. Κάθε pin μπορεί να παρέχει ή να λαμβάνει ένα μέγιστο των 40mA και έχει μία εσωτερική αντίσταση (προεπιλεγμένα αποσυνδεμένη) των 20-50kOhms. Επιπροσθέτως, κάποια pin έχουν πιο ειδικές λειτουργίες: Σειριακές: 0 (RW) και 1 (TW). Χρησιμοποιούνται για την παραλαβή (RW) και τη διαβίβαση (TW) των σειριακών στοιχείων TTL. Αυτές οι είσοδοι συνδέονται με τις αντίστοιχες εισόδους του τμηματικού τσιπ FTDI USB-to-TTL. Εξωτερικοί διακόπτες: 2 και 3. Αυτά τα pins μπορούν να διαμορφωθούν για να προκαλέσουν διακοπή σε μια χαμηλή τιμή, μία αυξημένη ή μία πτωτική τιμή, ή μία αλλαγή στην τιμή. PWM: 3, 5, 6, 9, 10 και 11. Παρέχουν 8-bit PWM έξοδο μέσω της συνάρτησης analogwrite(). PWM ή Pulse Width Modulation. Η διαμόρφωση πλάτους είναι μία τεχνική για να παίρνουμε αναλογικά αποτελέσματα με τη χρήση ψηφιακών μέσων. Ο ψηφιακός έλεγχος χρησιμοποιείται για να δημιουργήσει ένα τετραγωνικό κύμα, δηλαδή ένα σήμα που εναλλάσσεται άνω και κάτω. SPI: 10(SS), 11(MOSI), 12(MISO), 13(SCK). Αυτά τα pins υποστηρίζουν επικοινωνία SPI κάνοντας χρήση της βιβλιοθήκης SPI. LED: 13. Υπάρχει ένα ενσωματωμένο LED συνδεδεμένο στο ψηφιακό pin 13. Όταν το pin ορίζεται ως HIGH, το LED ανάβει, όταν το pin ορίζεται ως LOW το LED σβήνει. Το Duemilanove έχει 6 αναλογικές εισόδους, οι οποίες παίρνουν τις αναλογικές τιμές και τις μετατρέπουν σε έναν αριθμό από 0 έως Επιπροσθέτως κάποια pins έχουν ειδικές λειτουργίες: I 2 C: αναλογικές είσοδοι Α4(SDA) και A5(SCL). Υποστηρίζουν την επικοινωνία I 2 C (TWI) με χρήση της βιβλιοθήκης Wire. Υπάρχουν επίσης ακόμη 2 pins στην πλακέτα: AREF: Αναφορά τάσης για τις αναλογικές εισόδους χρησιμοποιώντας την εντολή analogreference(). 20

22 Reset: Η επαναφορά της γραμμής αυτής σε LOW τιμή, επαναρυθμίζει το μικροεπεξεργαστή. Συνήθως χρησιμοποιείται για να προσθέσουμε ένα reset κουμπί στις ασπίδες που μπλοκάρουν αυτό της πλατφόρμας. Επικοινωνία Ο Arduino Duemilanove έχει διάφορες εγκαταστάσεις για την επικοινωνία με έναν υπολογιστή, έναν άλλο Arduino, ή άλλους μικροεπεξεργαστές. Οι ATmega168 και ATmega328 μικροεπεξεργαστές παρέχουν UART TLL (5V) σειριακή επικοινωνία, η οποία είναι διαθέσιμη στις ψηφιακές εισόδους 0 (RX) και 1 (ΤΧ). Το UART (Universal Asynchronous Receiver/Transmitter), ή Παγκόσμιος Ασύγχρονος Δέκτης/Πομπός, είναι ένα κομμάτι υλικού που μεταφράζει δεδομένα μεταξύ παράλληλης και σειριακής μορφής. Το UART χρησιμοποιείται συνήθως σε συνδυασμό με τα πρότυπα επικοινωνίας EIA, RS-232, RS-422 ή RS-485. Ένα UART είναι συνήθως ένα μεμονωμένο ολοκληρωμένο κύκλωμα που χρησιμοποιείται για σειριακή επικοινωνία σε έναν υπολογιστή ή σε μία σειριακή θύρα κάποιας περιφερειακής συσκευής. Ένα FTDI FT232RL στα κανάλια της πλατφόρμας, αυτή η σειριακή επικοινωνία με USB και οδηγούς FTDI (οι οποίοι συμπεριλαμβάνονται με την έκδοση των Windows στο λογισμικό του Arduino) παρέχουν μία εικονική είσοδο COM του λογισμικού στον υπολογιστή. Το λογισμικό Arduino περιλαμβάνει μία σειριακή οθόνη, που επιτρέπει στα απλά δεδομένα κειμένου να αποσταλούν προς και από την πλατφόρμα Arduino. Τα LEDs RX και TX θα αναβοσβήσουν όταν μεταδίδονται δεδομένα μέσω του chip FTDI και της σύνδεσης USB και του υπολογιστή (αλλά όχι για τη σειριακή επικοινωνία στους ακροδέκτες 0 και 1). Η βιβλιοθήκη Software Serial επιτρέπει τη σειριακή επικοινωνία με οποιαδήποτε ψηφιακή είσοδο του Duemilanove. Επίσης, οι μικροεπεξεργαστές ATmega168 και ATmega328 υποστηρίζουν τις επικοινωνίες I2C και SPI. Το λογισμικό Arduino περιλαμβάνει μια βιβλιοθήκη Wire για να απλοποιήσει τη χρήση της I2C επικοινωνίας. Προστασία από υπερένταση στο USB Το Arduino Duemilanove έχει μία επαναρυθμιζόμενη ασφάλεια πολυμερούς που προστατεύει τις θύρες USB του υπολογιστή από χαμηλή και υψηλή τάση. Αν και οι περισσότεροι υπολογιστές παρέχουν τη δική τους εσωτερική προστασία, η ασφάλεια παρέχει ένα πρόσθετο επίπεδο ασφάλειας. Εάν εφαρμοστούν περισσότερα από 500mA στη θύρα USB, η ασφάλεια θα διακόψει αυτόματα την επικοινωνία μέχρι να διορθωθεί το πρόβλημα υψηλής ή χαμηλής τάσης. Προγραμματισμός μικροεπεξεργαστή Οι μικροεπεξεργαστές ATmega168 και ATmega328 στην πλατφόρμα του Arduino είναι ήδη προγραμματισμένοι με ένα πρόγραμμα εκκίνησης (boot loader), που επιτρέπει τη μεταφόρτωση νέου κώδικα σε αυτό χωρίς τη χρήση ενός εξωτερικού προγραμματιστή υλικού. Επικοινωνεί κάνοντας χρήση του αρχικού πρωτοκόλλου STK500. Μπορεί,επίσης, να παρακαμφθεί ο boot loader και να προγραμματιστεί ο μικροεπεξεργαστής του ICSP. 21

23 2.3.2 Το λογισμικό του Arduino Το περιβάλλον ανοιχτού κώδικα του Arduino απλοποιεί τη διαδικασία συγγραφής κώδικα και φόρτωσής του στην πλακέτα. Εκτελείται σε Windows, Mac OS X, και Linux. Το περιβάλλον είναι γραμμένο σε Java και βασίζεται στην Processing, στο avr- gcc, και σε άλλα ανοιχτού κώδικα λογισμικά. Το Ολοκληρωμένο Περιβάλλον Ανάπτυξης (IDE) είναι ένα ειδικό πρόγραμμα που εκτελείται στον υπολογιστή μας που μας επιτρέπει να γράφουμε sketches (μικρά προγράμματα) για τον Arduino. Όταν φορτώνουμε το πρόγραμμα στην πλακέτα, ο κώδικας μεταφράζεται σε γλώσσα C, και περνάει στον avr-gcc compiler, που είναι ένα σημαντικό κομμάτι ανοιχτού λογισμικού που κάνει την τελική μετάφραση σε γλώσσα κατανοητή από τον μικροεπεξεργαστή. Οδηγίες Εγκατάστασης Arduino στον υπολογιστή Για να προγραμματίσουμε την πλακέτα του Arduino πρέπει πρώτα να κατεβάσουμε το αναπτυξιακό περιβάλλον (IDE) από την εξής διεύθυνση : Επιλέγουμε τη σωστή έκδοση για το λειτουργικό σύστημα που χρησιμοποιούμε. Όταν τελειώσει το κατέβασμα, αποσυμπιέζουμε το φάκελο. Αυτό θα δημιουργήσει ένα φάκελο με ονομασία arduino-[version], όπως arduino Πρέπει να κρατήσουμε τη δομή του φακέλου. Και μετακινούμε το φάκελο οπουδήποτε θέλουμε στον υπολογιστή. Αν ανοίξουμε το φάκελο παρατηρούμε ότι υπάρχουν μερικοί υπόφάκελοι μέσα. Τώρα θα πρέπει να εγκαταστήσουμε τους οδηγούς που επιτρέπουν στον υπολογιστή να επικοινωνήσει με την πλακέτα μέσω της θύρας USB. Εγκατάσταση οδηγών : Windows Οι πλακέτες Arduino Duemilanove, Uno, Mega και Nano αντλούν ρεύμα αυτόματα είτε από τη σύνδεση USB με τον υπολογιστή, είτε από κάποια εξωτερική παροχή. Αν χρησιμοποιείτε το Arduino Diecimila, θα πρέπει να βεβαιωθείτε ότι η πλακέτα αντλεί ρεύμα από τη σύνδεση του USB. Η πηγή του ρεύματος επιλέγεται με ένα jumper, ένα μικρό κομμάτι πλαστικού που ταιριάζει στα δύο από τα τρία pins μεταξύ του USB και της πηγής της τροφοδοσίας. Ελέγξτε ότι βρίσκεται στα δύο πιο κοντινά pins με τη θύρα USB. Εγκατάσταση οδηγών για τον Arduino Duemilanove στα Windows 7 : Συνδέουμε την πλακέτα του Arduino στον υπολογιστή μέσω του καλωδίου USB. Το πράσινο LED ρεύματος (PWR) θα πρέπει να ανάψει. Τα Windows ξεκινούν τη διαδικασία εγκατάστασης οδηγών για τη συσκευή. Σύντομα εμφανίζουν μήνυμα που λέει πως η διαδικασία απέτυχε. 22

24 Επιλέγουμε από την Έναρξη-> Πίνακας Ελέγχου -> Σύστημα και Ασφάλεια -> Σύστημα. Από εκεί επιλέγουμε τη Διαχείριση Συσκευών. Κάτω από τις Άλλες Συσκευές εμφανίζεται μία θύρα με όνομα FT232R USB UART. Πατάμε δεξί κλικ σε αυτή τη θύρα και επιλέγουμε Ενημέρωση προγράμματος οδήγησης. Μετά, επιλέγουμε Αναζήτηση λογισμικού προγράμματος οδήγησης στον υπολογιστή μου. Τέλος, αναζητούμε στον υπολογιστή το φάκελο με τον οδηγό εγκατάστασης του Arduino. Βρίσκεται στον φάκελο arduino -> drivers -> FTDI USB Drivers, όπως φαίνεται στην εικόνα παρακάτω. Πατάμε επόμενο και κλείσιμο. Μπορούμε να ελέγξουμε ότι οι οδηγοί έχουν εγκατασταθεί πηγαίνοντας ξανά στη Διαχείριση Συσκευών. Κάτω από τις Θύρες(COM & LPT) εμφανίζεται μια σειριακή θύρα COM3. Αυτή είναι η θύρα του Arduino. 23

25 Μετά την εγκατάσταση του οδηγού ανοίγουμε το Arduino IDE. Πριν τρέξουμε οποιοδήποτε πρόγραμμα ελέγχουμε πρώτα αν έχει τη σωστή σειριακή θύρα. Πατάμε Tools -> Serial Port και επιλέγουμε τη θύρα COM3. 24

26 Τέλος, πατάμε Tools -> Board επιλέγουμε την πλακέτα που ανταποκρίνεται στον Arduino μας. Εγκατάσταση οδηγών : Linux Η εγκατάσταση στα Linux ποικίλει ανάλογα με τη διανομή που χρησιμοποιούμε. Για περισσότερες πληροφορίες δείτε εδώ : Εγκατάσταση οδηγών για τον Arduino Duemilanove στα Linux Ubuntu : Μπορείτε να επιβεβαιώσετε την έκδοση του πυρήνα τρέχοντας την εντολή uname-a στο τερματικό (αυτή η έκδοση πυρήνα είναι η ). 25

27 Κάποιες φορές η διανομή των Linux εγκαθιστά το brltty (συσκευή Μπράιγ), το οποίο συγκρούεται με τον Arduino. Πρέπει να απεγκαταστήσετε το brltty! Αυτό γίνεται πληκτρολογώντας : sudo apt-get remove brltty Αν στο τερματικό εμφανίζεται ότι δεν έχει εγκατασταθεί τότε είναι εντάξει. Συνδέστε τον Arduino, επιβεβαιώστε ότι το πράσινο LED είναι αναμμένο, και πληκτρολογήστε στο τερματικό : ls /dev/ttyusb* Θα πρέπει να βλέπετε ένα αρχείο συσκευής με όνομα ttyusb0. Ανάλογα με τη διανομή που χρησιμοποιείτε, μπορεί να είναι /dev/tty/usb0 ή /dev/tty.usb. Αν φαίνεται ότι δεν μπορεί να τη βρει πληκτρολογήστε την εντολή : dmesg tail αμέσως μετά την σύνδεση του Arduino στον υπολογιστή και ψάξτε για νύξεις στο που μπορεί να είναι το αρχείο συσκευής. Για παράδειγμα παρακάτω παίρνουμε : Serial Device converter now attached to ttyusb0 26

28 Αν σας εμφανίζεται κάτι από τα παρακάτω : [ ] ftdi_sio 2-10:1.0: FTDI USB Serial Device converter detected [ ] drivers/usb/serial/ftdi_sio.c: Detected FT232BM [ ] usb 2-10: FTDI USB Serial Device converter now attached to ttyusb0 [ ] usb 2-10: usbfs: interface 0 claimed by ftdi_sio while 'brltty' sets config #1 [ ] ftdi_sio ttyusb0: FTDI USB Serial Device converter now disconnected from ttyusb0 [ ] ftdi_sio 2-10:1.0: device disconnected Σημαίνει ότι δεν έχετε απεγκαταστήσει το brltty και πρέπει να προσπαθήσετε ξανά. Μετά την εγκατάσταση του οδηγού, κάντε cd ~/arduino-xx στο φάκελο του Arduino και τρέξτε το script arduino πληκτρολογώντας :./arduino Μόλις άνοιξε το παράθυρα του Arduino IDE. Επιλέξτε τη σειριακή θύρα και το σωστό board που ανταποκρίνεται στο δικό σας. Πηγή : Τώρα, η πλακέτα του Arduino μπορεί να επικοινωνεί με το πρόγραμμα και είμαστε πραγματικά έτοιμοι να ξεκινήσουμε να παίζουμε και να μαθαίνουμε με τον Arduino! 27

29 Fritzing Σε αυτή την εργασία εκτός από την πλακέτα του Arduino και το Arduino IDE χρησιμοποιήθηκε και το πρόγραμμα Fritzing, που βοήθησε στην αποτύπωση της συνδεσμολογίας κάθε κυκλώματος στις παρακάτω ασκήσεις. Το Fritzing είναι ουσιαστικά ένα λογισμικό σχεδίασης ηλεκτρονικών αυτοματισμών, κατάλληλο για τις ανάγκες σχεδιαστών και καλλιτεχνών. Χρησιμοποιεί μια εικονική πλάκα κατασκευής κυκλωμάτων και κάνει εύκολη τη μεταφορά του sketch από το υλικό στο λογισμικό. Από εκεί είναι δυνατό να δημιουργήσουμε μια τυπωμένη πλακέτα κυκλώματος (PCB), ώστε να μετατραπεί σε ένα στέρεο PCB από εμάς τους ίδιους ή από ένα κατασκευαστή. Αυτή είναι η βάση μιας μόνιμης εγκατάστασης, για παράδειγμα επάνω στον Arduino, ή ακόμη και παραγωγή της παρτίδας του προϊόντος μας. Μπορείτε να κατεβάσετε το fritzing από εδώ : Επιλέξτε την κατάλληλη έκδοση για το λειτουργικό σας σύστημα. Πηγή : Παρακάτω, λοιπόν, με τη βοήθεια του Fritzing αποτυπώνεται η συνδεσμολογία κάθε κυκλώματος. 28

30 3. Βασικεές Έννοιες Ηλεκτρονικωώ ν Κυκλωμαά των 3.1 Τι είναι ο ηλεκτρισμός; Για να κατανοήσετε πως λειτουργεί ο ηλεκτρισμός και ένα ηλεκτρικό κύκλωμα, ο καλύτερος τρόπος είναι να χρησιμοποιήσουμε κάτι που λέγεται «αναλογία νερού». Ένα ηλεκτρικό κύκλωμα μοιάζει με ένα κύκλωμα νερού από πολλές απόψεις. Στην εικόνα 1, μπορείτε να δείτε ένα κύκλωμα νερού δεξιά και ένα ηλεκτρικό κύκλωμα αριστερά. Ας δούμε καλύτερα τα πιο σημαντικά χαρακτηριστικά τους. Ένα κύκλωμα νερού διαρρέεται από νερό, ενώ ένα ηλεκτρικό κύκλωμα από ηλεκτρόνια. Η τάση του ηλεκτρισμού είναι ισοδύναμο της πίεσης του νερού και μετριέται σε volts (V). Η τάση είναι η αιτία της ροής του ρεύματος, και όσο πιο μεγάλη είναι, τόσο πιο γρήγορα ρέει το ρεύμα. Στα ηλεκτρονικά κυκλώματα, το ρεύμα είναι η ποσότητα του ηλεκτρισμού που διαρρέει μια ηλεκτρική γραμμή. Είναι το αντίστοιχο της ροής του νερού σε ένα κύκλωμα νερού. Ενώ μετράμε τη ροή του νερού σε λίτρα ανά λεπτό, το ρεύμα το μετράμε σε ampere. Ένα ampere σημαίνει ότι περίπου 6.24x10 18 ηλεκτρόνια διαρρέουν το κύκλωμα ανά δευτερόλεπτο. Αναλογίες: Πιεστικό: Καταναλώνει ενέργεια για να προσδώσει πίεση στη ροή του νερού (παράγει νερό με ψηλή πίεση και καταναλώνει νερό με χαμηλή πίεση). Τροφοδοτικό: Καταναλώνει ενέργεια για να προσδώσει διαφορά δυναμικού (παράγει ηλεκτρόνια και καταναλώνει πρωτόνια). Σωλήνας: Μεταφέρει το νερό. Η διάμετρός του, σε συνδυασμό με την πίεση του πιεστικού, καθορίζει την ένταση της ροής του νερού. Καλώδιο: Μεταφέρει το ρεύμα (τα ηλεκτρόνια). Η αγωγιμότητά του (υλικό και διάμετρος), σε συνδυασμό με τη διαφορά δυναμικού του τροφοδοτικού, καθορίζει την ένταση του ρεύματος. 29

31 Υδρόμυλος / Τριβή : Παράγει έργο (και θερμότητα) καταναλώνοντας την ενέργεια που μεταφέρει το νερό μέσω της ροής του. Αν η ροή του νερού είναι πολύ ασθενής ο μύλος δεν μπορεί να γυρίσει. Αν η ροή είναι επαρκής τότε ο υδρόμυλος μειώνει την πίεση (ροή) του διερχόμενου νερού. Κινητήρας / Αντίσταση: Με παρόμοιο τρόπο η αντίσταση στο ηλεκτρικό κύκλωμα αντιστέκεται στη ροή του ηλεκτρισμού και δημιουργεί μια πτώση τάσης από το ένα άκρο στο άλλο. Η ενέργεια χάνεται στην αντίσταση και εμφανίζεται ως θερμότητα. Δεξαμενή : Η δεξαμενή αποθηκεύει νερό που της παρέχεται από το πιεστικό. Ανάλογα με τη χωρητικότητά της παίρνει κάποιο χρόνο για να γεμίσει πλήρως, και να αδειάσει, αντίστοιχα. Παρέχει νερό στο κύκλωμα, και κρατάει την πίεση στο σωλήνα στην ίδια πίεση με της δεξαμενής. Πυκνωτής: Αντίστοιχα, ο πυκνωτής αποθηκεύει ενέργεια όταν φορτίζεται. Όταν φορτιστεί πλήρως, είναι σα μία γεμάτη δεξαμενή και δε ρέει περεταίρω ρεύμα. Ανάλογα με τη χωρητικότητά του απαιτεί κάποιο χρόνο για να φορτιστεί πλήρως και να αποφορτιστεί. Όταν μειώνεται το ρεύμα, παρέχει ηλεκτρόνια στο κύκλωμα, και όταν αυξάνεται αποθηκεύει ηλεκτρόνια εξασφαλίζοντας την εξομάλυνση της τάσης στο κύκλωμα. Κάθε στοιχείο σε ένα κύκλωμα, είτε νερού είτε ηλεκτρισμού, αντέχει σε κάποια ποσότητα ροής. Σε ένα κύκλωμα νερού είναι οι σωλήνες στους οποίους ρέει το νερού ή ένας υδρόμυλος. Σε ένα ηλεκτρικό κύκλωμα, είναι το καλώδια ή ένας λαμπτήρας. Η αντίσταση είναι ένα σημαντικό φυσικό φαινόμενο που σχετίζεται στενά με το ρεύμα και την τάση. Τη μετράμε σε Ohms και τη συμβολίζουμε με το Ω. Ο Γερμονός φυσικός Georg Ohm ανακάλυψε ότι το ρεύμα εξαρτάται από την τάση και την αντίσταση. Διατύπωσε την πρότασή του στον παρακάτω τύπο που αποκαλούμε Νόμο του Ohm : I (current) = V (voltage) / R (resistance) Αυτό είναι ισοδύναμο με τα παρακάτω: R = V / I V = R * I Έτσι, για δύο δοθήσες τιμές, μπορούμε να υπολογίσουμε την Τρίτη. Αυτός είναι ο μαναδικός κανόνας που πρέπει να θυμόμαστε και να μάθουμε να χρησιμοποιούμε. Όταν εργαζόμαστε με LEDs, για παράδειγμα, μας βοηθάει να υπολογίσουμε το μέγεθος της αντίστασης που χρειαζόμαστε. Αν κοιτάξουμε το φύλλο δεδομένων(data sheet) ενός LED, συνήθως βλέπουμε δύο τιμές : της τάσης και του ρεύματος. Η τιμής της τάσης είναι συνήθως μεταξύ των 1.8V και 3.6V, και το μέγιστο ρεύμα είναι συχνά στα 20mA (milliamperes). Ας υποθέσουμε ότι έχουμε ένα LED με μέγιστη τάση στα 2.5V και ένα ασφαλές ρεύμα των 20mA. Υποθέτουμε επίσης ότι έχουμε μία παροχή τάσης των 5V (όπως η παροχή του Arduino). Ποια είναι η σωστή τιμή της αντίστασης που πρέπει να προσθέσουμε μπροστά από το LED; Πρέπει να λάβουμε υπόψην μας ότι η αντίσταση κρατάει = 2.5V από το κύκλωμα, οπότε μένουν μόνο 2.5V για το LED. Αυτή η τιμή ονομάζεται πτώση 30

32 τάσης. Επίσης, χρειαζόμαστε μέγιστο ρεύμα των 20 ma για να διαρρέει το LED. Αυτό υπαννοεί ότι και ένα μέγιστο των 20mA (0.02A) θα διαρρέει και την αντίσταση. Τώρα που γνωρίζουμε ότι από το LED θα παιρνούν 2.5V και 0.02A, μπορούμε να χρησιμοποιήσουμε το νόμο του Ohm για να υπολογ ισουμε την τιμή της αντίστασης: R = V / I Στη δική μας περίπτωση, έχουμε το ακόλουθο: R = 2.5V / 0.02A = 125 Ω Αυτό σημαινει ότι χρειαζόμαστε μία αντίσταση των 125Ω για το LED. Αν δεν έχουμε μία αντίσταση των 125Ω, μπορούμε να χρησιμοποιήσουμε μία των 150Ω ή των 220Ω. Θα προστατεύουν το LED και θα μειώσουν ελαφρώς τη φωτεινότητά του. Και αυτό γιατί μειώσαμε το ρεύμα ακόκα περισσότερο: I = 2.5V / 150Ω = 17mA I = 2.5V / 220Ω = 17mA Πηγή : Arduino A quick start guide by Maik Schmidt 3.2 Ηλεκτρονικά στοιχεία και έννοιες που χρειαζόμαστε. Τα βασικά στοιχεία του ηλεκτρικού κυκλώματος είναι: οι αγωγοί, μέσα από τους οποίους ρέει το ηλεκτρικό ρεύμα, η πηγή που αναγκάζει τα ελεύθερα ηλεκτρόνια να κινηθούν, ο διακόπτης με τον οποίο μπορούμε να διακόψουμε τη ροή του ρεύματος και η ηλεκτρική συσκευή. Ωστόσο, στις ασκήσεις που θα ακολουθήσουν χρειαζόμαστε μερικά ακόμα ηλεκτρονικά στοιχεία. Παρακάτω παρουσιάζονται τα ηλεκτρονικά εξαρτήματα που θα χρησιμοποιήσουμε, η έννοια του καθενός και οι συμβολισμοί τους. BREADBOARD Το να συνδέουμε στοιχεία όπως LEDs απευθείας στο Arduino είναι μόνο μία επιλογή στις πιο απλές περιπτώσεις. Συνήθως, προτοτυποποιούμε τα έργα μας σε μία πλάκα κατασκευής κυκλωμάτων ή breadboard το οποίο συνδέουμε με τον Arduino. Υπάρχουν διαφορετικά είδη και μεγέθη breadboard, όπως φαίνεται στην εικόνα 2, αλλά όλα λειτουργούν με τον ίδιο τρόπο. Έχουν πολλές υποδοχές που μπορούμε να συνδέουμε καλώδια και εξαρτήματα. Αυτό που είναι σημαντικό να γνωρίζουμε είναι ότι οι υποδοχές είναι συνδεδεμένες μεταξύ τους με ένα ειδικό τρόπο. Στην εικόνα 3 μπορούμε να δούμε το πώς συνδέονται. Όπως μπορέιτε να δείτε οι περισσότερες υποδοχές είναι σενδεδεμένες σε στήλες. Αυτό σημαίνει ότι αν μια υποδοχή μιας στήλης συνδεθεί με παροχή τάσης, τότε αυτόματα όλες οι υπόλοιπες υποδοχές της ίδιας στήλης έχουν επίσης τάση. Στο μεγαλύτερο breadboard στην εικόνα, βλέπουμε τέσσερις γραμμές συνδεδεμένων υποδοχών. Αυτό διευκολύνει τα μεγαλύτερα κυκλώματα. Συνήθως, συνδέουμε μία γραμμή με παροχή τάσης και μία άλλη με τη 31

33 γείωση. Με αυτόν τον τρόπο μπορούμε να διανείμουμε ρεύμα και και γείωση σε οποιοδήποτε σημείο στο breadboard. Εικόνα 2 : Είδη breadboard Εικόνα 3 : Σύνδεση υποδοχών breadboard ΠΗΓΗ Για να προσφέρουμε την απαιτούμενη ενέργεια που απαιτείται για τη δημιουργία ροής ρεύματος σε έναν αγωγό χρειαζόμαστε κάποιας μορφής ηλεκτρική πηγή. Στις πηγές οφείλεται η ηλεκτρεγερτική δύναμη (ΗΕΔ), η οποία είναι η αιτία του ηλεκτρικού ρεύματος στο κύκλωμα, δηλαδή οι πηγές δημιουργούν ηλεκτρικό πεδίο, ώστε να ασκούνται δυνάμεις στα ελεύθερα ηλεκτρόνια του κυκλώματος, άρα και να δημιουργείται ηλεκτρικό ρεύμα. Οι πηγές, άρα και τα κυκλώματα και οι συσκευές, είναι δύο ειδών : συνεχούς ηλεκτρικού ρεύματος (DC) και εναλλασσόμενου ηλεκτρικού ρεύματος (AC). Στα στοιχεία για κυκλώματα συνεχούς ηλεκτρικού ρεύματος υπάρχει επισήμανση + και -, όπως και στην πηγή. Σε κάθε συσκευή το άκρο + συνδέεται με το άκρο + της πηγής ή με άκρο - μιας άλλης συσκευής, ενώ το άκρο - της συσκευής συνδέεται με το άκρο - της πηγής ή άκρο + μιας άλλης συσκευής. Ηλεκτρική πηγή θεωρείται μια μπαταρία, ένας προσαρμογέας τάσης ή μια γεννήτρια. Το σύμβολο της πηγής για σχηματικά διαγράμματα είναι το : 32

34 ΓΕΙΩΣΗ Γείωση είναι η τάση αναφοράς, δηλαδή αυτή που ορίζουμε ως 0V και ως προς αυτήν μετράμε τις υπόλοιπες τάσεις σε ένα κύκλωμα. Συνδέεται σχεδόν πάντα με το (-) της πηγής συνεχούς ρεύματος. Το σύμβολο της γείωσης για σχηματικά διαγράμματα είναι το : ΒΡΑΧΥΚΥΚΛΩΜΑ Μια ιδιαίτερη περίπτωση των κυκλωματικών στοιχείων θεωρούνται τα βραχυκυκλώματα. Στην περίπτωση του βραχυκυκλώματος η διαφορά δυναμικού στα άκρα του είναι 0 και επομένως διαρρέεται από το μέγιστο δυνατό ρεύμα. ΑΝΤΙΣΤΑΣΗ Η ηλεκτρική αντίσταση είναι ένα ηλεκτρολογικό/ηλεκτρονικό εξάρτημα το οποίο χρησιμοποιείται σε διάφορα κυκλώματα για τον έλεγχο της ροής του ρεύματος. Οι αντιστάσεις έχουν ένα χρωματικό κώδικα. Ο κώδικας αυτός εμφανίζεται με την μορφή χρωματικών λωρίδων, οι οποίες τυπώνονται πάνω στο εξάρτημα και υποδηλώνουν την τιμή του εξαρτήματος αυτού, την ανοχή και τον θερμικό συντελεστή. Στον παρακάτω πίνακα παρουσιάζονται οι τιμές που αντιστοιχούν σε κάθε χρώμα σύμφωνα με το πρότυπο EIA-RS-279 του Συνδέσμου Ηλεκτρονικών Βιομηχανιών (EIA - Electronic Industries Alliance): 33

35 Για παράδειγμα, η παρακάτω αντίσταση έχει τιμή : (Καφέ=1),(Μαύρο=0),(Πορτοκαλί=3) 10x10 3 =10kΩ Ανοχή (Χρυσό) = ±5% Υπάρχουν online εφαρμογές για τον υπολογισμό της τιμής της αντίστασης από τον κώδικα χρωμάτων. Δείτε εδώ : Το σύμβολο της αντίστασης για σχηματικά διαγράμματα είναι το : ΠΟΤΕΝΣΙΟΜΕΤΡΟ Το ποτενσιόμετρο είναι αναλογικό ηλεκτρονικό εξάρτημα, που χρησιμοποιείται στα κυκλώματα ως μεταβλητή αντίσταση. Αποτελείται από αγώγιμη πλάκα σχήματος Ω, πάνω στην οποία γυρίζει, με τη βοήθεια ενός στροφέα, μια επαφή. Ανάλογα με την απόσταση της επαφής από την είσοδο του ρεύματος στο ποτενσιόμετρο μεταβάλλεται και η αντίσταση. 34

36 Το σύμβολο του ποτενσιόμετρου για σχηματικά διαγράμματα είναι το : ΠΥΚΝΩΤΗΣ Είναι ένα σύστημα δύο γειτονικών αγωγών, οι οποίοι χωρίς να συνδέονται αγώγιμα, είναι δυνατόν να φορτίζονται ο ένας με θετικό φορτίο και ο άλλος με απολύτως ίσο φορτίο αρνητικό. Ο πυκνωτής έχει την δυνατότητα να αποθηκεύει ηλεκτρικό φορτίο και ηλεκτρική ενέργεια στους οπλισμούς του, καθώς επίσης και να αποδίδει το φορτίο και την ενέργεια στο κύκλωμα. Η αξία τους είναι ανεκτίμητη όσον αφορά την χρήση σε κυκλώματα υψηλών ρευμάτων και χαμηλών συχνοτήτων. Μερικές χρήσεις τους είναι σε κυκλώματα εξομάλυνσης τάσης, στη διαμόρφωση της συχνότητας εκπομπής ραδιοφωνικών πομπών, στις εισόδους και εξόδους των τρανζίστορς κ.α. Το σύμβολο του πυκνωτή φαίνεται στην παρακάτω εικόνα: LED Δίοδος Εκπομπής Φωτός, (LED, Light Emitting Diode), αποκαλείται ένας ημιαγωγός ο οποίος εκπέμπει φως στενού φάσματος όταν του παρέχεται μία ηλεκτρική τάση κατά τη φορά ορθής πόλωσης (forward -biased). Το σύμβολο του LED για σχηματικά διαγράμματα είναι το : 35

37 ΔΙΟΔΟΣ Στην ηλεκτρονική, η δίοδος είναι ένα στοιχείο που περιορίζει τη κατευθυντήρια ροή των φορέων αγωγιμότητας (charge carriers). Ουσιαστικά, η δίοδος επιτρέπει το ηλεκτρικό ρεύμα να περάσει από τη μια διεύθυνση, αλλά μπλοκάρει την κίνηση από την αντίθετη διεύθυνση. Έτσι, η δίοδος μπορεί να θεωρηθεί ως μια ηλεκτρονική εκδοχή της βαλβίδας. Τα κυκλώματα που απαιτούν ροή προς μία μόνο κατεύθυνση περιλαμβάνουν μία ή περισσότερες διόδους στη σχεδίαση του κυκλώματος. Το σύμβολο της διόδου για σχηματικά διαγράμματα είναι το : 7SEGMENT DISPLAY Ένα 7Segment είναι μία ηλεκτρονική μονάδα απεικόνισης που απεικονίζει δεκαδικούς αριθμούς. Είναι κατασκευασμένο από μία σειρά από LEDs που είναι είτε κοινής ανόδου είτε κοινής καθόδου. Τα 7Segment χρησιμοποιούνται ευρέως σε ηλεκτρονικά ρολόγια, ηλεκτρονικούς μετρητές, ψηφιακές οθόνες και σε πολλές ακόμα εφαρμογές όπου αναπαρίστανται αριθμητικά δεδομένα. Η λειτουργία του και η συνδεσμολογία του θα αναλυθούν εκτενέστερα στην ενότητα 14. Το σύμβολο του 7Segment για σχηματικά διαγράμματα είναι το : 36

38 ΔΕΚΤΗΣ ΥΠΕΡΥΘΡΩΝ ΑΚΤΙΝΩΝ (IR RECEIVER) Είναι ένα εξάρτημα το οποίο χρησιμοποιείται ως δέκτης σε εκπομπές τηλεχειριστηρίων. Η βασική αρχή λειτουργίας ενός συστήματος τηλεχειρισμού με υπέρυθρες είναι πολύ απλή. Τροφοδοτούμε με ρεύμα τον πομπό και αυτός εκπέμπει υπέρυθρη ακτινοβολία, με ένταση ανάλογη με το ρεύμα που τον διαρρέει. Ο δέκτης λαμβάνει την υπέρυθρη ακτινοβολία και την μετατρέπει σε ανάλογο ηλεκτρικό σήμα. Η λειτουργία και η συνδεσμολογία του θα αναλυθούν εκτενέστερα στην ενότητα 13. Το σύμβολο του IR δέκτη για σχηματικά διαγράμματα είναι το : ΤΡΑΝΖΙΣΤΟΡ Το τρανζίστορ (transistor), είναι διάταξη ημιαγωγών στερεάς κατάστασης, η οποία βρίσκει διάφορες εφαρμογές στην ηλεκτρονική, μερικές εκ των οποίων είναι η ενίσχυση, η σταθεροποίηση τάσης, η διαμόρφωση συχνότητας, η λειτουργία ως διακόπτης και ως μεταβλητή ωμική αντίσταση. Το τρανζίστορ μπορεί, ανάλογα με την τάση με την οποία πολώνεται, να ρυθμίζει την ροή του ηλεκτρικού ρεύματος που απορροφά από συνδεδεμένη πηγή τάσης. Τα τρανζίστορ κατασκευάζονται είτε ως ξεχωριστά ηλεκτρονικά εξαρτήματα είτε ως τμήματα κάποιου ολοκληρωμένου κυκλώματος. Αποτελείται από 3 επαφές Ν-Ρ-Ν(not pointing in) ή P-N-P(pointing in permanently) γερμανίου ή πυριτίου. Οι επαφές του ονομάζονται Βάση (Β), Συλλέκτης (C), Εκπομπός (Ε). Τα σύμβολα ενός N-P-N και ενός P-N-P transistor αντίστοιχα φαίνονται παρακάτω: 37

39 ΟΛΟΚΛΗΡΩΜΕΝΑ ΚΥΚΛΩΜΑΤΑ Στα ηλεκτρονικά, ένα τυπωμένο κύκλωμα (γνωστό και ως μικροκύκλωμα, μικροτσίπ, τσιπ, τσιπ σιλικόνης) είναι μια μικρογραφία ενός ηλεκτρονικού κυκλώματος, το οποίο αποτελείται συνήθως από ημιαγώγιμα υλικά όπως επίσης και από παθητικά στοιχεία. Τα ολοκληρωμένα κυκλώματα έγινε δυνατό να κατασκευαστούν μετά από πειραματικές ανακαλύψεις που έδειχναν ότι ημιαγώγιμα στοιχεία μπορούσαν να εκτελέσουν τις λειτουργίες των λυχνιών κενού και από την τεχνολογική πρόοδο στον τομέα της κατασκευής ημιαγώγιμων στοιχείων που συντελέστηκε τα μέσα του εικοστού αιώνα. Η ολοκλήρωση (ενσωμάτωση) ενός μεγάλου αριθμού από μικροσκοπικά τρανζίστορ πάνω σε μια λεπτή ψηφίδα πυριτίου αποτέλεσε πολύ σημαντική βελτίωση σε σχέση με την χειρωνακτική συναρμολόγηση λυχνιών κενού και διακριτών ηλεκτρικών στοιχείων. Η δυνατότητα που παρείχαν τα ολοκληρωμένα κυκλώματα για μαζική παραγωγή, προσθήκη παραπέρα πολυπλοκότητας, η αξιοπιστία τους και η σημαντική μείωση του κόστους συνέβαλε στην ταχεία διάδοσή τους εκτοπίζοντας τις λυχνίες κενού και τα διακριτά κυκλώματα. Η σημαντική μείωση στο κόστος έγινε δυνατή γιατί όλα τα στοιχεία τυπώνονται ενιαία με χρήση φωτολιθογραφίας αντί να τυπώνεται το κάθε τρανζίστορ ξεχωριστά. Το 2006, το εμβαδόν ενός τσιπ κυμαίνεται από μερικά τετραγωνικά χιλιοστά μέχρι 250 mm 2, με ένα εκατομμύριο τρανζίστορ ανά mm 2. Η χρήση τους είναι ευρεία σε όλα τις ηλεκτρικές και ηλεκτρονικές συσκευές που χρησιμοποιούμε σήμερα. ΔΙΑΚΟΠΤΗΣ ή PUSHBUTTON Διακόπτης ονομάζεται το ηλεκτρικό στοιχείο που μεταβάλλει τη δυνατότητά διέλευσης του ηλεκτρικού ρεύματος μέσω του. Οι διακόπτες έχουν σημεία με τα οποία συνδέονται με το κύκλωμα τα οποία ονομάζονται ακροδέκτες. Κάθε διακόπτης έχει δύο καταστάσεις, την κατάσταση που είναι κλειστός και την κατάσταση που είναι ανοιχτός. Όταν ένας διακόπτης είναι ανοιχτός δεν επιτρέπει τη διέλευση ηλεκτρικού ρεύματος μεταξύ των ακροδεκτών του, ενώ όταν είναι κλειστός επιτρέπει τη διέλευση ηλεκτρικού ρεύματος μεταξύ των ακροδεκτών του. Ο διακόπτης διατηρεί την κατάσταση στην οποία βρίσκεται, ενώ αυτή μεταβάλλεται μόνο από εξωτερικούς του στοιχείου παράγοντες, όπως είναι το πάτημα ενός κουμπιού ή αλλαγή στο ηλεκτρικό πεδίο. Το σύμβολο του διακόπτη για σχηματικά διαγράμματα είναι το : 38

40 ΡΕΛΕ Το ρελέ (Relay) είναι ένας ηλεκτρικός διακόπτης ο οποίος ανοίγει και κλείνει ελεγχόμενος από ένα άλλο κύκλωμα. Στην πρωταρχική του μορφή ο διακόπτης ελεγχόταν από έναν ηλεκτρομαγνήτη για να ανοίξει ή να κλείσει ένα ή περισσότερα κυκλώματα (ή επαφές που άγουν). Ο εφευρέτης του ρελέ είναι ο Joseph Henry το Το ρελέ έχει την δυνατότητα να ελέγχει ένα εξωτερικό κύκλωμα μεγαλύτερης ισχύος από αυτό το οποίο το τροφοδοτεί. Σήμερα πέρα από τα ηλεκτρομαγνητικά ρελέ υπάρχουν και τα ηλεκτρονικά. Η λειτουργία και η συνδεσμολογία θα αναλυθούν εκτενέστερα στο κεφάλαιο 11. Το σύμβολο στο λογικό διάγραμμα και μια εικόνα του πραγματικού ηλεκτρονικού στοιχείου φαίνονται στις παρακάτω εικόνες: ΑΙΣΘΗΤΗΡΕΣ : LDR Φωτοαντίσταη ή Light Dependent Resistor. Μετατροπέας που μετατρέπει την φωτεινότητα σε αντίσταση. Η αντίστασή του ελαττώνεται όσο ο φωτισμός που προσπίπτει πάνω του γίνεται πιο έντονος. Το σύμβολο του αισθητήρα για σχηματικά διαγράμματα είναι το : 39

41 ΑΙΣΘΗΤΗΡΑΣ ΘΕΡΜΟΤΗΤΑΣ LM35 Αποτελεί μία διάταξη που παίρνει μία τάση τροφοδοσίας και έχει μία έξοδο. Στην έξοδο δίνει μία τιμή τάσης η οποία μεταβάλλεται ανάλογα με τη θερμοκρασία και βρίσκεται πάντα μέσα στα όρια της τάσης τροφοδοσίας. Το σύμβολο του αισθητήρα για σχηματικά διαγράμματα είναι το : ΚΙΝΗΤΗΡΕΣ : ΣΕΡΒΟΚΙΝΗΤΗΡΑΣ Ένας σερβοκινητήρας είναι ένας ειδικής κατασκευής κινητήρας του οποίου τη γωνία περιστροφής μπορούμε να ελέγξουμε με μεγάλη ακρίβεια με ένα σήμα ελέγχου. Η λειτουργία και η συνδεσμολογία του θα αναλυθούν εκτενέστερα στην ενότητα 8. Το σύμβολο του σερβοκινητήρα για σχηματικά διαγράμματα είναι το : ΒΗΜΑΤΙΚΟΣ ΚΙΝΗΤΤΗΡΑΣ Ένας βηματικός κινητήρας διαφέρει από τους υπόλοιπους ως προς τη μεγάλη του ακρίβεια. Είναι μία ηλεκτρομαγνητική συσκευή που μετατρέπει τους ηλεκτρικούς 40

42 παλμούς σε διακριτές μηχανικές κινήσεις, κάνοντας έτσι τον κινητήρα να κινείται σε «βήματα». Το σύμβολο του βηματικού για σχηματικά διαγράμματα είναι το : ΟΡΓΑΝΑ ΜΕΤΡΗΣΗΣ : ΠΟΛΥΜΕΤΡΟ Το πολύμετρο είναι ένα ηλεκτρολογικό/ηλεκτρονικό όργανο το οποίο μετράει την τάση, την ένταση και την αντίσταση σε ένα ηλεκτρικό κύκλωμα. Είναι εξαιρετικά πρακτικές συσκευές που μπορούν να χρησιμοποιηθούν για να ανιχνεύσουν ηλεκτρικά προβλήματα σε οικιακές συσκευές, στα ηλεκτρονικά συστήματα ενός αυτοκινήτου κ.α. Εμείς θα το χρησιμοποιήσουμε για να μετράμε τις τιμές των αντιστάσεων που θα χρησιμοποιούμε στα κυκλώματα, το ρεύμα που περνάει από το κύκλωμα, το βραχυκύκλωμα. Παρακάτω είναι μία εικόνα ενός ψηφιακού πολυμέτρου. 41

43 4. Εισαγωγηή στο Arduino 4.1 Blinking LED Στόχοι αυτής της άσκησης Αυτή η άσκηση στοχεύει στην εξοικείωση του χρήστη με τις βασικές λειτουργίες της πλακέτας του Arduino, και του software που χρησιμοποιείται. Στο τέλος αυτής της άσκησης, θα πρέπει να γνωρίζουμε τις βασικές λειτουργίες του IDE. Το Blinking LED είναι το πρώτο sketch το οποίο θα εκτελέσουμε για να δούμε αν η πλακέτα του Arduino λειτουργεί και έχει ρυθμιστεί σωστά. Είναι επίσης, η πρώτη προγραμματιστική εργασία η οποίο εκτελεί κάποιος που χρησιμοποιεί έναν μικροελεγκτή. Μία δίοδος εκπομπής φωτός ή LED είναι ένα μικρό ηλεκτρονικό εξάρτημα που μοιάζει με λάμπα, αλλά είναι πιο αποδοτική και απαιτεί μικρότερη τάση για να λειτουργήσει. Η πλακέτα του Arduino έχει προεγκατεστημένο ένα LED. Σημειώνεται με ένα L. Μπορούμε όμως να συνδέσουμε ξεχωριστά και το δικό μας LED. Υλοποίηση άσκησης Εικόνα 4.1 Συνδέστε το LED στην πλακέτα του Arduino όπως φαίνεται στην εικόνα 4.1. Συνδέστε το Arduino μέσω της USB θήρας στον υπολογιστή. Ανοίξτε το περιβάλλον ανάπτυξης εφαρμογών του Arduino. Παρατηρήστε τι συμβαίνει όταν συνδέετε το Arduino με τον υπολογιστή. Από το περιβάλλον ανάπτυξης εφαρμογών επιλέξτε File Examples 1.Basics Blink και φορτώστε το έτοιμο παράδειγμα που διαθέτει το περιβάλλον ανάπτυξης του Arduino. Θα πρέπει να εμφανίζεται 42

44 όπως στην εικόνα 4.2. Εικόνα 4.2 Τώρα θα πρέπει να επιβεβαιώσουμε ότι ο κώδικας είναι σωστός. Πατάμε το κουμπί Verify, όπως φαίνεται στην εικόνα 4.2 και αν όλα είναι σωστά, θα εμφανιστεί το μήνυμα Done compiling. Αυτό το μήνυμα σημαίνει ότι το Arduino IDE έχει μεταφράσει το sketch σε ένα εκτελέσιμο πρόγραμμα που μπορεί να εκτελεστεί από το Arduino. Σε αυτό το σημείο θα μεταφέρουμε το πρόγραμμα στην μνήμη του μικροελεγκτή πατώντας το κουμπί Upload to I/O board που φαίνεται στην εικόνα 4.2. Αυτό θα επαναφέρει την πλακέτα, αναγκάζοντάς την να σταματήσει ότι κάνει και να ακούσει τις εντολές που έρχονται από τη θύρα USB. Το Arduino IDE στέλνει το sketch στην πλακέτα, που το αποθηκεύει στη μνήμη και τελικά το εκτελεί. Για να μας ενημερώσει ότι η διαδικασία ολοκληρώθηκε σωστά το Arduino IDE εμφανίζει το μήνυμα Done uploading. Παρατηρήστε τι συμβαίνει στην πλακέτα κατά τη διαδικασία της φόρτωσης του προγράμματος στη μνήμη του μικροεπεξεργαστή. Υπάρχουν δύο LEDs στην πλακέτα, συμβολίζονται με RX και TX, τα οποία αναβοσβήνουν κάθε φορά που στέλνεται ή λαμβάνεται ένα byte από την πλακέτα. 43

45 Από τη στιγμή που ο κώδικας είναι στην πλακέτα, παραμένει εκεί μέχρι να φορτώσουμε κάποιο άλλο πρόγραμμα. Το sketch θα παραμείνει εκεί ακόμα και αν σβήσουμε την πλακέτα ή αν πατήσουμε το κουμπί reset. Εφόσον το sketch έχει φορτωθεί στην πλακέτα σωστά, παρατηρούμε ότι το LED L ανάβει για ένα δευτερόλεπτο και σβήνει για ένα δευτερόλεπτο. Το ίδιο θα συμβεί και στο ξεχωριστό LED που προσθέσαμε. Ο κώδικας, βήμα-βήμα // Example 01 : Blinking LED Τα σχόλια είναι ένας χρήσιμος τρόπος για να γράφουμε μικρές σημειώσεις. #define LED 13 // LED connected to // digital pin 13 Η εντολή #define λειτουργεί σα μια αυτόματη αναζήτηση και αντικατάσταση για τον κώδικα. Εδώ λέει στον Arduino να γράφει τον αριθμό 13 κάθε φορά που εμφανίζεται η λέξη LED. void setup() { Σε αυτή τη συνάρτηση βάζουμε τον κώδικα που θέλουμε να εκτελέσουμε μία φορά στην αρχή του προγράμματός μας. pinmode(led, OUTPUT); Η εντολή pinmode λέει στον Arduino πώς να ρυθμίσει ένα συγκεκριμένο pin. Τα ψηφιακά pin είναι είτε είσοδοι (INPUT) είτε έξοδοι (OUTPUT). Σε αυτή την περίπτωση, χρειαζόμαστε ένα pin εξόδου για να ελέγξουμε το LED και έτσι βάζουμε τον αριθμό του LED και την κατάστασή του στη παρένθεση. void loop() { Σε αυτή τη συνάρτηση καθορίζουμε την κύρια δραστηριότητα του προγράμματός μας που θα εκτελείται ξανά και ξανά μέχρι να αποσυνδέσουμε τον Arduino. digitalwrite(led, HIGH); // set the LED on Η εντολή digitalwrite() μπορεί να ανάψει ή να σβήσει οποιοδήποτε pin που έχει ρυθμιστεί ως έξοδος. Η πρώτη παράμετρος (εδώ το LED) καθορίζει ποιο pin θα ανάψει ή θα σβήσει. Και η δεύτερη ανάβει το pin (HIGH) ή το σβήνει (LOW), που σημαίνει ότι όταν το pin είναι HIGH διαρρέεται από ρεύμα των 5V, ενώ όταν είναι LOW από 0V. delay(1000); // wait for a second Με αυτή την εντολή λέμε στον επεξεργαστή να παραμείνει αδρανής για τα 44

46 χιλιοστά του δευτερολέπτου που θα του δώσουμε ως παράμετρο milliseconds ισοδυναμούν με 1 δευτερόλεπτο. Άρα του λέμε να περιμένει ένα δευτερόλεπτο. digitalwrite(led, LOW); // set the LED off Αντίθετα με προηγουμένως αυτή η εντολή σβήνει το LED. delay(1000); Εδώ περιμένουμε για άλλο ένα δευτερόλεπτο. // wait for a second Τι θα συμβεί αν δε χρησιμοποιήσουμε το delay(); Το αποτέλεσμα που θα πάρουμε είναι ένα LED που φαίνεται να είναι μόνιμα αναμμένο. Και αυτό γιατί δε λάβαμε υπόψη μας την ταχύτητα με την οποία λειτουργεί ο μικροελεγκτής και κατά συνέπεια την ταχύτητα με την οποία εκτελούνται οι εντολές. Ο μικροελεγκτής λειτουργεί στα 16MHz με τη χρήση ενός κρυστάλλου χαλαζία που υπάρχει επάνω στην πλακέτα του αναπτυξιακού. Αυτό 1 σημαίνει ότι ο κύκλος μηχανής είναι = 0, sή 63ns. Οι εντολές εκτελούνται πολύ γρήγορα και το LED στην πραγματικότητα αναβοσβήνει, τόσο γρήγορα που όμως δεν μπορούμε να το αντιληφθούμε και μας φαίνεται οτι είναι μόνιμα αναμμένο. Η λύση είναι η χρονοκαθυστέρηση. Πρέπει με κάποιον τρόπο να εισάγουμε μία χρονοκαθυστέρηση μεταξύ του ανάμματος και σβησίματος, τέτοια ώστε να μπορούμε να το αντιληφθούμε. Ουσιαστικά η εντολή delay βάζει τον μικροελεγκτή σε μία αναμονή, στα λειτουργικά συστήματα αυτού του είδους η αναμονή ονομάζεται και ενεργός αναμονή, busy wait, επειδή κατά τη διάρκεια αυτής της αναμονής ο μικροελεγκτής δεσμεύεται και δεν μπορεί να εκτελέσει άλλες εντολές. Συμπεράσματα Σε αυτή την άσκηση, μάθαμε πώς να δημιουργούμε sketch με το Arduino IDE και να τα εκτελούμε. Μάθαμε επίσης, πως μπορούμε να ελέγχουμε ένα LED, πιο συγκεκριμένα να το ανάβουμε ή να το σβήνουμε, το οποίο είναι συνδεδεμένο στην πλακέτα του Arduino χρησιμοποιώντας τη συνάρτηση delay(). Επέκταση Με τον ίδιο κώδικα δοκιμάστε να συνδέσετε το LED όχι απευθείας στο Arduino αλλά σε ένα breadboard. Επίσης, δοκιμάστε να αλλάξετε τον κώδικα ώστε το LED να παραμένει αναμμένο για 100 χιλιοστά του δευτερολέπτου και σβηστό για Στη συνέχεια αλλάξτε τον κώδικα ώστε το LED να ανάβει όταν ξεκινάει η εκτέλεση του προγράμματος και να παραμένει αναμμένο. Τέλος, με βάση το παραπάνω παράδειγμα φτιάξτε μία δική σας εφαρμογή που θα αναβοσβήνει 2 leds το ένα με συχνότητα 500 ms και θα βρίσκεται 45

47 συνδεδεμένο πάνω στο PIN 13 και το δεύτερο στην πολλαπλάσια συχνότητα των 2s και θα βρίσκεται συνδεδεμένο πάνω στο PIN 12. Εξαρτήματα για την υλοποίηση της άσκησης Τα εξαρτήματα που απαιτούνται για την κατασκευή, είναι τα εξής: 1 breadboard 1 LED των 5mm 1 αντίσταση των 220 Ω 2 καλώδια Η απαραίτητη συνδεσμολογία φαίνεται στην Εικόνα 4.3. Εικόνα 4.3 Το συγκεκριμένο λαμπάκι, ως δίοδος, έχει πολικότητα και άρα απαιτείται η σωστή σύνδεση των καλωδίων. Συγκεκριμένα, το λαμπάκι πρέπει να συνδεθεί με τέτοιο τρόπο ώστε το μακρύ του άκρο (άνοδος) να επικοινωνεί με το pin 13 της πλακέτας και το κοντό του άκρο (κάθοδος) να επικοινωνεί με το pin GND της πλακέτας. 46

48 Σχηματικό διάγραμμα Blinking LED Σχηματικό διάγραμμα είναι το διάγραμμα που χρησιμοποιεί μόνο σύμβολα για να δείξει τη σύνδεση των εξαρτημάτων. Εικόνα 4.4 : Σχηματικό διάγραμμα Blinking LED 47

49 4.2 Blink χωρίς καθυστερήσεις Στόχοι της άσκησης Αυτή η άσκηση είναι μία παραλλαγή της παραπάνω άσκησης. Σκοπός της είναι να δώσει το ίδιο αποτέλεσμα με την προηγούμενη άσκηση αλλά αυτή τη φορά χωρίς τη χρήση της λειτουργίας delay(). Θεωρητική παρουσίαση Και αυτό γιατί η λειτουργία delay() έχει συνήθως ένα ανεπιθύμητο συνεπακόλουθο : ο Arduino για αυτά τα δευτερόλεπτα που ορίσαμε δεν κάνει τίποτα. Όμως, κάποιες φορές χρειάζεται να κάνουμε πράγματα ταυτόχρονα. Για παράδειγμα, μπορεί να θέλουμε να αναβοσβήσουμε ένα LED ενώ διαβάζουμε μία είσοδο από ένα κουμπί. Σε αυτή την περίπτωση δεν μπορούμε να χρησιμοποιήσουμε τη λειτουργία delay(), γιατί θα σταματούσαμε ότι συνέβαινε στο πρόγραμμα ενώ αναβοσβήνει το LED και το πρόγραμμα πιθανώς θα έχανε το πάτημα του κουμπιού αν γινόταν κατά τη διάρκεια της αναμονής. Το παρακάτω sketch παρουσιάζει πώς να αναβοσβήσουμε ένα LED χωρίς τη χρήση της delay(). Το πρόγραμμα κρατάει χρόνο από την τελευταία φορά που το Arduino άναψε ή έσβησε το LED. Τότε, κάθε φορά μέσω του βρόγχου επανάληψης ελέγχει αν έχει περάσει ένα αρκετά μεγάλο διάστημα. Αν έχει ανάβει ή σβήνει το LED. Αυτό που πρέπει να παρατηρήσουμε είναι ότι το πρόγραμμα κάνει χρήση της συνάρτησης millis(). Αυτή η συνάρτηση επιστρέφει τα χιλιοστά του δευτερολέπτου από τότε που ο Arduino άρχισε να τρέχει το συγκεκριμένο πρόγραμμα. Δεν παίρνει τίποτε ως παράμετρο και επιστρέφει έναν μη προσημασμένο long. Ο αριθμός αυτός θα υπερχειλίσει μετά από 50 ημέρες! Έτσι, σε κάθε βρόχο επανάληψης, εκχωρεί στη μεταβλητή currentmillis τα δέκατα του δευτερολέπτου που λειτουργεί ο Arduino μέσω της συνάρτησης millis() και με έναν έλεγχο if() αφαιρεί τον τρέχοντα χρόνο από τον προηγούμενο. Αν ο αριθμός που παίρνει είναι μεγαλύτερος από το διάστημα που έχουμε ορίσει αρχικά αλλάζει την κατάσταση του LED. Κώδικας /* Example 02 : Blink χωρίς Delay */ //Οι σταθερές δεν αλλάζουν. Χρησιμοποιούνται για να ορίσουν τα pin: const int ledpin = 13; // ο αριθμός του pin του LED // Οι μεταβλητές αλλάζουν: int ledstate = LOW; // η μεταβλητή ledstate χρησιμοποιείται για να // ρυθμίσει την κατάσταση του LED long previousmillis = 0; // θα αποθηκεύσει την τελευταία φορά που // ενημερώθηκε το LED // οι επόμενες μεταβλητές είναι τύπου long γιατί ο χρόνος, μετράται // σε χιλιοστά του δευτερολέπτου, και σύντομα θα γίνει ένας πολύ // μεγάλος αριθμός για να μπορεί να αποθηκευτεί σε έναν int long interval = 1000; // διάστημα στο οποίο αναβοσβήνει // (χιλιοστά του δευτερολέπτου) 48

50 void setup() { // όρισε το ψηφιακό Pin ως έξοδο: pinmode(ledpin, OUTPUT); void loop() { // έλεγξε να δεις αν είναι η στιγμή να αναβοσβήσει το LED;αυτό // συμβαίνει όταν η διαφορά μεταξύ της τρέχουσας ώρας και της // τελευταίας φοράς που αναβόσβησε είναι μεγαλύτερη από το // διάστημα που θέλουμε για να αναβοσβήσει το LED unsigned long currentmillis = millis(); if(currentmillis - previousmillis > interval) { //αποθήκευσε την τελευταία φορά που αναβόσβησε το LED previousmillis = currentmillis; // αν το LED είναι σβηστό άναψέ το και αντιστρόφως : if(ledstate == LOW) ledstate = HIGH; else ledstate = LOW; // όρισε το LED με την κατάσταση της μεταβλητής ledstate : digitalwrite(ledpin, ledstate); Υλοποίηση άσκησης Η συνδεσμολογία είναι ίδια με το προηγούμενο παράδειγμα. Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Αποτελέσματα Εφόσον το sketch έχει φορτωθεί στην πλακέτα σωστά, παρατηρούμε ότι το LED στο pin 13 ανάβει για ένα δευτερόλεπτο και σβήνει για ένα δευτερόλεπτο. Συμπεράσματα Παρατηρούμε, λοιπόν, ότι ενώ το να αναβοσβήσουμε ένα LED με τη λειτουργία delay() είναι εύκολο και πολλά sketches χρησιμοποιούν μικρές καθυστερήσεις για εργασίες όπως για παράδειγμα να εξαλείψουν το de-bouncing που θα δούμε σε επόμενες ασκήσεις, η χρήση της έχει πολλά μειονεκτήματα. Καμία άλλη ενέργεια δεν μπορεί να γίνει όταν εκτελείται η delay(). Αντίθετα στο sketch που μόλις δημιουργήσαμε θα μπορούσαμε παράλληλα να διαβάζαμε από αισθητήρες, να κάναμε υπολογισμούς ή να αλλάζαμε τις καταστάσεις των pin. 49

51 4.3 Traffic Lights Στόχοι αυτής της άσκησης Αυτή η άσκηση στοχεύει στο να γίνει κατανοητή η χρήση και η αναγκαιότητα της παύσης του προγράμματος σε μερικές εφαρμογές. Αυτή η άσκηση θα προσομοιώσει ένα σύστημα φαναριών κυκλοφορίας για οχήματα. Μέχρι το τέλος της άσκησης, ο χρήστης του Arduino θα πρέπει να έχει μάθει πώς να ελέγχει τις καθυστερήσεις για να παράγει τα επιθυμητά αποτελέσματα. Συγκεκριμένα χρησιμοποιεί τρία LED για τη δημιουργία ενός σηματοδότη στον οποίο προκαλείται η αλλαγή του χρώματός του από πράσινο σε κίτρινο και ακολούθως σε κόκκινο, και αντιστρόφως, μετά από ένα καθορισμένο χρονικό διάστημα. Εξαρτήματα για την υλοποίηση της άσκησης Τα συστατικά που απαιτούνται για την κατασκευή, είναι τα εξής: 1 breadboard 1 Κόκκινο Led 1 Κίτρινο Led 1 Πράσινο Led 3 αντιστάσεις των 150 Ω 4 καλώδια Κώδικας // Example 03 - Traffic Lights int leddelay = 10000; // καθυστέρηση μεταξύ των αλλαγών int redpin = 10; int yellowpin = 9; int greenpin = 8; void setup() { pinmode(redpin, OUTPUT); pinmode(yellowpin, OUTPUT); pinmode(greenpin, OUTPUT); void loop() { digitalwrite(redpin, HIGH); // άναψε το κόκκινο φως delay(leddelay); // περίμενε leddelay χιλ. του δευτερολέπτου digitalwrite(greenpin, HIGH); // άναψε το πράσινο φως digitalwrite(redpin, LOW); // σβήσε το κόκκινο φως delay(leddelay); // περίμενε leddelay χιλ. του δευτερολέπτου digitalwrite(yellowpin, HIGH); // άναψε το κίτρινο φως digitalwrite(greenpin, LOW); // σβήσε το πράσινο φως delay(2000); // περίμενε 2 δευτερόλεπτα digitalwrite(yellowpin, LOW); // σβήσε το κίτρινο φως // τώρα ο βρόγχος επαναλαμβάνεται 50

52 Υλοποίηση άσκησης Η απαραίτητη συνδεσμολογία φαίνεται στην εικόνα43.5. Εικόνα 4.5 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Παρατηρήστε το αποτέλεσμα της εκτέλεσης του προγράμματος επάνω στην πλακέτα του Arduino. 51

53 Σχηματικό διάγραμμα Εικόνα 4.6 Αποτελέσματα Στην εικόνα 4.7 φαίνονται οι βηματικές καταστάσεις του φαναριού που θα εμφανίζονται κατά τη διάρκεια εκτέλεσης του προγράμματος. Εικόνα

54 Συμπεράσματα Σε αυτή την άσκηση, μάθαμε πώς να χρησιμοποιούμε την πλακέτα του Arduino και το IDE για να δημιουργούμε και να ελέγχουμε ένα κύκλωμα που αναπαριστά ένα σύστημα. Μάθαμε, επίσης, πώς να ελέγχουμε τις καθυστερήσεις και να βάζουμε σε παύση το πρόγραμμα χειριζόμενοι τον χρόνο κάθε LED. Επέκταση Δοκιμάστε να συνδέσετε ακόμη δύο LED, ένα κόκκινο και ένα πράσινο τα οποία θα λειτουργούν ως φανάρια για τους πεζούς. Τροποποιήστε τον κώδικά σας ώστε όταν το φανάρι είναι κόκκινο για τα αυτοκίνητα, να είναι πράσινο το φανάρι των πεζών και αντίστροφα, όταν είναι πράσινο το φανάρι για τα αυτοκίνητα να είναι κόκκινο το φανάρι των πεζών. 53

55 5. Ψηφιακηή ειήσοδος : Εισαγωγηή στα pushbuttons 5.1 Ανάβουμε ένα LED κρατώντας το κουμπί πατημένο Στόχοι άσκησης Ο στόχος αυτής της άσκησης είναι να κάνει αρχικά μία εισαγωγή στην έννοια των εισόδων και εξόδων σήματος καθώς και στους διαφορετικούς τύπους τους. Στη συνέχεια θα επικεντρωθούμε περισσότερο στην έννοια της εξόδου, και συγκεκριμένα στην έξοδο ψηφιακού σήματος, και θα παρουσιάσουμε τον τρόπο λειτουργίας μίας τέτοιας εξόδου μέσα από ένα παράδειγμα. Εξαρτήματα για την υλοποίηση της άσκησης Στην άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Μία αντίσταση 220Ω. Ένα LED. Ένα pushbutton. Μία αντίσταση 2.2ΚΩ Θεωρητική παρουσίαση Όπως είδαμε στην εισαγωγή το αναπτυξιακό του Arduino περιλαμβάνει τον μικροελεγκτή ATMega328p, καθώς και υποδοχές με τις οποίες μπορούμε να διασύνδεουμε ακροδέκτες- PINS του μικροελεγκτή με περιφερειακές συσκευές και εξαρτήματα. Κάποιο στοιχείο που συνδέεται σε έναν ακροδέκτη του μικροελεγκτή μπορεί να χρησιμεύει είτε για να δίνει κάποιο ηλεκτρικό σήμα ως είσοδο στον μικροελεγκτή είτε για να πάρει κάποιο ηλεκτρικό σήμα εξόδου από τον μικροελεγκτή Επίσης ένα ηλεκτρικό σήμα ανάλογα με το είδος του μπορεί να διακριθεί σε αναλογικό ψηφιακό Ένα Ψηφιακό σήμα μπορεί να παίρνει μόνο 2 διακριτές τιμές τάσης οι οποίες αντιστοιχίζονται στις 2 λογικές καταστάσεις 0 και 1. Συνήθως η λογική κατάσταση 1 αντιστοιχίζεται στην υψηλότερη από τις 2 τιμές τάσης ενώ η λογική κατάσταση 0 αντιστοιχίζεται στην χαμηλότερη τάση. Στην περίπτωση του Arduino Duemilanove το 0 αντιστοιχίζεται σε τάση 0 Volt ενώ το 1 σε τάση 5 Volt. Ένα αναλογικό σήμα αντίθετα μπορεί να πάρει μία οποιαδήποτε τιμή μέσα σε ένα προκαθορισμένο εύρος. Συνεπώς το σύνολο τιμών του μέσα σε αυτό το προκαθορισμένο εύρος είναι άπειρο. Τα PINS του μικροελεγκτή δεν έχουν προκαθορισμένη λειτουργία. Μπορεί να λειτουργούν είτε ως είσοδοι είτε ως έξοδοι. Μέχρι στιγμής χρησιμοποιήσαμε τα pin ως εξόδους με την εντολή pinmode(pinnumber, OUTPUT). Ήρθε η στιγμή να διαβάσουμε μία ψηφιακή είσοδο από ένα pin του Arduino. Αυτό θα το πετύχουμε με τη χρήση ενός κουμπιού ή pushbutton. Έτσι, ορίζουμε το pin στο οποίο είναι συνδεδεμένο το pushbutton να διαβάζει ένα σήμα εισόδου με την εντολή pinmode(pinnumber, INPUT). 54

56 Για να μπορέσουμε να ελέγξουμε την κατάσταση του κουμπιού θα χρησιμοποιήσουμε μία καινούρια λειτουργία του Arduino. Αυτή είναι η digitalread(pinnumber). Με την εντολή αυτή μπορούμε να διαβάσουμε ένα ψηφιακό σήμα σε ένα PIN που προηγουμένως έχουμε ορίσει ως είσοδο. Ουσιαστικά ελέγχει να δει αν υπάρχει κάποια τάση στον ακροδέκτη που ορίσαμε στην παρένθεση, και επιστρέφει μία τιμή HIGH ή LOW ανάλογα με αυτό που βρήκε. Πώς λειτουργεί ένα pushbutton; Όταν ένας διακόπτης ή pushbutton είναι ανοιχτό (όχι πατημένο) δεν υπάρχει καμία σύνδεση μεταξύ των «ποδιών» του διακόπτη, έτσι ο ακροδέκτης είναι συνδεδεμένο στη γείωση (μέσω της γείωσης) και εμείς διαβάζουμε LOW. Όταν ο διακόπτης κλείνει (πατάμε το κουμπί), δημιουργεί μία σύνδεση μεταξύ των δύο «ποδιών», συνδέοντας τον ακροδέκτη στην τάση, και έτσι διαβάζουμε HIGH. Tip: Για να είστε σίγουροι ότι έχετε συνδέσει σωστά ένα pushbutton, δοκιμάστε όταν το τοποθετείτε στο breadboard Θα φτιάξουμε,λοιπόν, ένα πρόγραμμα που θα κρατάει το LED αναμμένο όταν είναι πατημένο το κουμπί. Κώδικας // Example 04: Ανάβουμε ένα LED κρατώντας το κουμπί πατημένο #define LED 13 // το pin για το LED #define BUTTON 7 // το pin της εισόδου που είναι // συνδεδεμένο το pushbutton void setup() { pinmode(led, OUTPUT); // ορίζω το Arduino LED ως έξοδο pinmode(button, INPUT); // και το BUTTON ως είσοδο void loop(){ // έλεγξε αν η είσοδος είναι HIGH (πατημένο το κουμπί) if (digitalread(button)== HIGH) { digitalwrite(led, HIGH); // άναψε το LED else { digitalwrite(led, LOW); // σβήσε το LED 55

57 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 5.1. Εικόνα 5.1 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 56

58 Σχηματικό διάγραμμα Εικόνα 5.2 Αποτελέσματα Αν έχουμε συνδέσει σωστά το κύκλωμά μας, το LED θα ανάβει για όσο έχουμε πατημένο το κουμπί. Συμπεράσματα Σε αυτή την άσκηση έγινε μία εισαγωγή στην ψηφιακή είσοδο και ήρθαμε σε επαφή με την πιο απλή μορφή αισθητήρα που υπάρχει : το κουμπί. Επεκτάσεις Δοκιμάστε να συνδέσετε έναν ακόμη διακόπτη και ένα LED πράσινο, ώστε όταν έχετε πατημένο τον έναν διακόπτη να ανάβει το κόκκινο LED και όταν έχετε πατημένο το δεύτερο διακόπτη να ανάβει το πράσινο LED. Δοκιμάστε να τροποποιήσετε το πρόγραμμα ώστε το LED να ανάβει μόλις αφήσουμε το χέρι μας από το διακόπτη. Ωστόσο, το να έχουμε πατημένο το διακόπτη για όσο χρόνο χρειαζόμαστε φως δεν είναι πολύ πρακτικό. Η επόμενη άσκηση μας δίνει τη λύση. 57

59 5.2 Ανάβουμε ένα LED πατώντας ένα κουμπί και παραμένει αναμμένο Στόχοι άσκησης Σε αυτή την άσκηση με τη βοήθεια του προηγούμενου παραδείγματος και με την ίδια συνδεσμολογία θα δούμε πως μπορούμε να κρατήσουμε το LED αναμμένο αφού πατήσουμε το κουμπί. Θα κάνουμε μία προσομοίωση ενός φωτιστικού : όταν πατάμε το διακόπτη θα ανάβει το φως και όταν τον ξαναπατάμε θα σβήνει. Θεωρητική παρουσίαση Όπως αναφέραμε νωρίτερα, δεν είναι πρακτικό να κρατάμε με το δάχτυλο το διακόπτη για να έχουμε φως. Γι αυτό το λόγο θα εφαρμόσουμε ένα είδος «μνήμης», για να κάνουμε το πρόγραμμά μας να θυμάται ότι πατήσαμε το διακόπτη και να μένει το φως αναμμένο αφού πάρουμε το δάχτυλό μας από το διακόπτη. Αυτό θα το πετύχουμε με τη χρήση μιας μεταβλητής. Θα δημιουργήσουμε μία μεταβλητή με όνομα state που θα μας δίνει την κατάσταση του LED : 0 όταν το LED είναι σβηστό και 1 όταν το LED είναι αναμμένο. Η μεταβλητή αυτή αρχικοποιείται στην τιμή 0 και κάθε φορά που ελέγχουμε αν πατήθηκε το κουμπί εκτελεί την έκφραση state = state -1 ; που μας δίνει σαν αποτέλεσμα κάθε φορά δύο τιμές, είτε 1-0 = 1 είτε 1-1=0. Δηλαδή, εκχωρεί στη νέα κατάσταση 1 μείον την παλιά κατάσταση. Κώδικας Προσπάθεια 1 /* Example 05A: Ανάβουμε ένα LED πατώντας ένα κουμπί και παραμένει αναμμένο αφού το αφήσουμε*/ #define LED 13 // το pin για το LED #define BUTTON 7 // το pin της εισόδου που είναι // συνδεδεμένο το pushbutton int val = 0; // η val θα χρησιμοποιηθεί για να αποθηκεύσει την // τιμή από το Pin εισόδου int state = 0; // 0 = LED σβηστό, ενώ 1 = LED αναμμένο void setup() { pinmode(led, OUTPUT); // όρισε το Arduino LED ως έξοδο pinmode(button, INPUT); // και το BUTTON ως είσοδο void loop() { val = digitalread(button); // διάβασε την τιμή εισόδου και // αποθήκευσε τη // έλεγξε αν η είσοδος είναι HIGH (πατημένο κουμπί) // και άλλαξε την κατάσταση if (val == HIGH) { state = 1 - state; if (state == 1) { digitalwrite(led, HIGH); // άναψε το LED else { digitalwrite(led, LOW); // σβήσε το LED 58

60 Αν εκτελέσουμε αυτό το πρόγραμμα θα παρατηρήσουμε ότι δεν δουλεύει όπως ακριβώς θα θέλαμε. Διαπιστώνουμε ότι το φως αλλάζει τόσο γρήγορα που δεν μπορούμε να ανάψουμε αξιόπιστα το φως με ένα πάτημα του κουμπιού. Αυτό συμβαίνει εξαιτίας του τρόπου που διαβάζουμε το κουμπί. Όπως αναφέραμε νωρίτερα, ο μικροελεγκτής του Arduino λειτουργεί στα 16MHZ,δηλαδή, μπορεί να διαβάσει μερικά εκατομμύρια γραμμές κώδικα το δευτερόλεπτο. Αυτό σημαίνει ότι ενώ το δάχτυλό μας πιέζει το κουμπί ο Arduino μπορεί να διαβάζει την θέση του κουμπιού μερικές εκατοντάδες φορές και να αλλάζει την κατάσταση σύμφωνα με αυτό. Έτσι τα αποτελέσματα είναι απρόβλεπτα. Πώς μπορούμε λοιπόν, να το διορθώσουμε; Αρκεί να καθορίσουμε ακριβώς τη στιγμή που πατάμε το κουμπί. Δημιουργούμε, λοιπόν, μία νέα μεταβλητή την old_val που θα κρατάει την προηγούμενη κατάσταση. Βάζουμε ένα έλεγχο που ελέγχει αν έγινε κάποια μετάβαση στο κουμπί, αν δηλαδή, αν το κουμπί έγινε HIGH αφού ήταν προηγουμένως LOW και μόνο τότε αλλάζει την κατάσταση του LED. Προσπάθεια 2 // Example 05B: Ανάβουμε ένα LED πατώντας ένα κουμπί και παραμένει αναμμένο αφού το αφήσουμε*/ // Με νέα βελτιωμένη formula! #define LED 13 // το pin για το LED #define BUTTON 7 // το pin της εισόδου που είναι // συνδεδεμένο το pushbutton int val = 0; // η val θα χρησιμοποιηθεί για να αποθηκεύσει την // τιμή από το Pin εισόδου int old_val = 0; // αυτή η μεταβλητή αποθηκεύει την προηγούμενη // τιμή της val int state = 0; // 0 = LED σβηστό και 1 = LED αναμμένο void setup() { pinmode(led, OUTPUT); // όρισε το Arduino LED ως έξοδο pinmode(button, INPUT); // και το BUTTON ως είσοδο void loop(){ val = digitalread(button); // διάβασε την τιμή εισόδου και // αποθήκευσε τη // yum, fresh // έλεγξε αν υπάρχει κάποια μετάβαση if ((val == HIGH) && (old_val == LOW)){ state = 1 - state; old_val = val; // η val είναι τώρα παλιά, την αποθηκεύουμε if (state == 1) { digitalwrite(led, HIGH); // άναψε το LED else { digitalwrite(led, LOW); // σβήσε το LED Δυστυχώς, ούτε και αυτή η προσέγγιση είναι εντελώς σωστή και αυτή τη φορά εξαιτίας του κουμπιού. Όταν πατάμε το κουμπί, τα δύο «πόδια» του κουμπιού 59

61 ενώνονται και ρέει ο ηλεκτρισμός. Ωστόσο, στην πραγματικότητα η σύνδεση δεν είναι τέλεια, ειδικά όταν το κουμπί δεν πατιέται καλά, με αποτέλεσμα να παράγει κάποια ψευδή σήματα το οποίο φαινόμενο ονομάζεται αναπήδηση ή bouncing. Όταν εμφανίζεται το φαινόμενο της αναπήδησης στο κουμπί, ο Arduino βλέπει μία πολύ γρήγορη ακολουθία από σήματα HIGH και LOW. Μία απλή λύση για να καταπολεμήσουμε το φαινόμενο της αναπήδησης είναι να προσθέσουμε μία καθυστέρηση των 10 με 50 χιλιοστών του δευτερολέπτου όταν ο κώδικας ανιχνεύει μία μετάβαση. Προσπάθεια 3 και τελευταία! /* Example 05C: Ανάβουμε ένα LED πατώντας ένα κουμπί και παραμένει αναμμένο αφού το αφήσουμε*/ // περιλαμβάνει ένα απλό κώδικα για την αποφυγή της αναπήδησης // Τώρα με μία ακόμα νέα και βελτιωμένη formula!! #define LED 13 // το pin για το LED #define BUTTON 7 // το pin εισόδου όπου είναι συνδεδεμένο // το pushbutton int val = 0; // η val θα χρησιμοποιηθεί για να αποθηκεύσει // την τιμή του pin εισόδου int old_val = 0; // αυτή η μεταβλητή αποθηκεύει την προηγούμενη // τιμή της "val" int state = 0; // 0 = LED σβηστό και 1 = LED αναμμένο void setup() { pinmode(led, OUTPUT); // όρισε το Arduino LED ως έξοδο pinmode(button, INPUT); // και το BUTTON ως είσοδο void loop(){ val = digitalread(button); // διάβασε την τιμή εισόδου και // αποθήκευσε τη // yum, fresh // έλεγξε αν υπάρχει κάποια μετάβαση if ((val == HIGH) && (old_val == LOW)){ state = 1 - state; delay(10); old_val = val; // η val είναι τώρα παλιά, την αποθηκεύουμε if (state == 1) { digitalwrite(led, HIGH); // άναψε το LED else { digitalwrite(led, LOW); // σβήσε το LED 60

62 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης είναι ίδια με αυτή τα άσκησης 5.1 και φαίνεται στην εικόνα 5.1. Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Αποτελέσματα Μετά την εκτέλεση του προγράμματος παρατηρούμε ότι αυτή τη φορά το LED ανάβει όταν πατάμε το κουμπί και σβήνει αφού το ξαναπατήσουμε χωρίς να παρατηρείται το φαινόμενο της αναπήδησης. Συμπεράσματα Στο σημείο αυτό θα πρέπει να είμαστε εξοικειωμένη με τη χρήση διακοπτών, το πώς μπορούμε να προγραμματίσουμε ώστε να διαβάζουμε ψηφιακά σήματα και να παράγουμε εξόδους που ανταποκρίνονται σε αυτά που διαβάσαμε. Επέκταση Τροποποιήστε το πρόγραμμα ώστε να παράγεται αποτέλεσμα αφού αφήσουμε το χέρι μας από το κουμπί. Δηλαδή, πατάμε το κουμπί και το LED ανάβει αφού πάρουμε το χέρι μας από το κουμπί, και αντίστοιχα όταν το ξαναπατάμε το LED σβήνει αφού πάρουμε το χέρι μας από το κουμπί. Τέλος, δοκιμάστε να πάρετε το ίδιο αποτέλεσμα χωρίς όμως αυτή τη φορά τη χρήση της delay() αλλά με τη χρήση της συνάρτησης millis() όπως είδαμε στην άσκηση 5.2 στο παράδειγμα κώδικα

63 6. Σειριακηή επικοινωνιήα 6.1 Πώς να στέλνουμε δεδομένα στον υπολογιστή Hello World Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα γίνει μία εισαγωγή στη σειριακή επικοινωνία της πλακέτας του Arduino με το αναπτυξιακό περιβάλλον. Στο τέλος της άσκησης, θα πρέπει να έχουμε εξοικειωθεί με το να στέλνουμε μηνύματα στη σειριακή οθόνη του Arduino IDE. Θεωρητική παρουσίαση Η πλακέτα του Arduino μπορεί να επικοινωνεί με έναν Η/Υ, με ένα άλλο Arduino ή με άλλους μικροεπεξεργαστές. Όπως αναφέραμε και στην εισαγωγή, ο μικροεπεξεργαστής της πλακέτας, ο AT mega328, χρησιμοποιεί τα ψηφιακά pin 0 (RX) και 1 (ΤΧ) για τη λήψη και μετάδοση σειριακών δεδομένων με άλλες συσκευές, όπως επίσης και το καλώδιο USB για την επικοινωνία με τον υπολογιστή. Έτσι, αν χρησιμοποιήσουμε τα pin 0 και 1 για επικοινωνία με άλλες συσκευές δεν μπορούμε να τα χρησιμοποιήσουμε και ως ψηφιακές εισόδους/ εξόδους. Το αναπτυξιακό περιβάλλον του Arduino έχει μία σειριακή οθόνη για την αποστολή και τη λήψη δεδομένων με την πλακέτα του Arduino η οποία εμφανίζεται όταν πατήσουμε το κουμπί, όπως φαίνεται στην εικόνα 6.1 παρακάτω, και εναλλακτικά από το μενού Tools -> Serial Monitor. Εικόνα 6.1 Μέσα στο πρόγραμμα θα χρησιμοποιήσουμε τις παρακάτω εντολές : Serial.begin(speed); Για να αρχικοποιήσουμε την σειριακή επικοινωνία. Συνήθως η ταχύτητα που ορίζεται έχει ρυθμό μετάδοσης δεδομένων 9600 Kbps. Serial.println(value); ή Serial.print(value); Για να στείλουμε δεδομένα στη σειριακή θύρα ώστε αυτά να απεικονιστούν στην κονσόλα. Η παράμετρος value μπορεί να είναι είτε αριθμός είτε αλφαριθμητικό. 62

64 Κώδικας άσκησης /* Example 06 : Hello World! * Αυτό είναι το Hello World! για τον Arduino. * Δείχνει πώς να στέλνουμε δεδομένα στον υπολογιστή. */ void setup() // τρέχει μία φορά, όταν ξεκινάει το sketch { Serial.begin(9600); // όρισε τη Σειριακή βιβλιοθήκη στα 9600 bps Serial.println("Hello world!"); // τυπώνει hello στην οθόνη void loop() // τρέχει ξανά και ξανά { // μην κάνεις τίποτα! Υλοποίηση άσκησης Συνδέστε την πλακέτα του Arduino με τον Η/Υ μέσω του καλωδίου USB. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε το παράθυρο της κονσόλας. Αποτελέσματα Το αποτέλεσμα που θα πρέπει να πάρετε από την εκτέλεση του προγράμματος φαίνεται στην εικόνα 6.2 παρακάτω. Εικόνα

65 Συμπεράσματα Σε αυτή την άσκηση μάθαμε να στέλνουμε δεδομένα στον υπολογιστή μας και να βλέπουμε τα αποτελέσματα στην οθόνη μας. Επέκταση Επεκτείνετε το πρόγραμμά σας τυπώνοντας περισσότερα μηνύματα στην οθόνη της επιλογής σας. Τέλος, δοκιμάστε να τυπώσετε μία ακολουθία αριθμών γράφοντας τον κώδικά σας μέσα στη συνάρτηση loop(). Προσέξτε να χρησιμοποιήσετε τη συνάρτηση delay() ώστε να προλαβαίνετε να διαβάζετε τα αποτελέσματα στην οθόνη. 6.2 Πώς να στέλνουμε μορφοποιημένα κείμενα και αριθμητικά δεδομένα από τον Arduino στην οθόνη Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι να δούμε πώς μπορούμε να τυπώσουμε δεδομένα διαφορετικών τύπων στην οθόνη μας, όπως κείμενο, δεκαδικές τιμές, δεκαεξαδικές ή δυαδικές. Θεωρητική παρουσίαση Στη προηγούμενη άσκηση κάναμε χρήση της εντολής Serial.print(value). Αυτή η εντολή μπορεί να πάρει και μία δεύτερη προαιρετική παράμετρο Serial.print(value,format) που καθορίζει τη μορφοποίηση που θα χρησιμοποιήσει στην τιμή που δώσαμε του αριθμού που δώσαμε. Η παράμετρος format μπορεί να πάρει τις τιμές BIN, OCT, DEC και HEX για να αποδώσει μορφοποίηση τύπου δυαδικού, οκταδικού, δεκαδικού και δεκαεξαδικού, αντίστοιχα. Για παράδειγμα: Serial.print(78, BIN) gives " " Serial.print(78, OCT) gives "116" Serial.print(78, DEC) gives "78" Serial.print(78, HEX) gives "4E" Στην παρακάτω άσκηση τυπώνονται στην οθόνη οι αριθμοί από το 0 έως το 64 σε όλους τους παραπάνω τύπους μορφοποίησης. Κώδικας /* Example 07: Χρησιμοποιεί ένα βρόγχο FOR για τα δεδομένα και int x = 0; τυπώνει έναν αριθμό σε διάφορους τύπους.*/ // μεταβλητή 64

66 void setup() { Serial.begin(9600); // άνοιξε τη σειριακή θύρα στα 9600 bps: void loop() { // print labels Serial.print("NO FORMAT"); // τυπώνει μία επιγραφή Serial.print("\t"); // τυπώνει ένα tab Serial.print("DEC"); Serial.print("\t"); Serial.print("HEX"); Serial.print("\t"); Serial.print("OCT"); Serial.print("\t"); Serial.print("BIN"); Serial.println("\t"); for(x=0; x< 64; x++){ // τύπωσέ το σε διαφορετικούς τύπους: Serial.print(x); // τυπώνει ένα δεκαδικό κωδικοποιημένο σε // ASCII ίδιο με το "DEC" Serial.print("\t"); // τυπώνει ένα tab Serial.print("\t"); // τυπώνει κι άλλο tab Serial.print(x, DEC); //τυπώνει ένα δεκαδικό κωδικοποιημένο σε // ASCII Serial.print("\t"); Serial.print(x, HEX); // τυπώνει ένα δεκαεξαδικό // κωδικοποιημένο σε ASCII Serial.print("\t"); Serial.print(x, OCT); // τυπώνει ένα οκταδικό // κωδικοποιημένο σε ASCII Serial.print("\t"); Serial.println(x, BIN); // τυπώνει ένα δυαδικό σε ASCII // μετά επιστρέφει στην αρχή της επόμενης // γραμμής με την "println" delay(1000); Serial.println(""); // καθυστέρησε 1 δευτερόλεπτο // αφού βγει από το βρόγχο συνεχίζει πάλι //σε επόμενη γραμμή Υλοποίηση άσκησης Συνδέστε την πλακέτα του Arduino με τον Η/Υ μέσω του καλωδίου USB. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε το παράθυρο της κονσόλας. 65

67 Αποτελέσματα Το αποτέλεσμα που θα πρέπει να πάρετε από την εκτέλεση του προγράμματος φαίνεται στην εικόνα 6.3 παρακάτω. Εικόνα 6.3 Συμπεράσματα Σε αυτή την άσκηση μάθαμε πώς να χρησιμοποιούμε τη συνάρτηση Serial.print() για να τυπώνουμε τιμές διαφορετικών τύπων στην οθόνη. 66

68 6.3 Πώς να λάβουμε σειριακά δεδομένα από τον υπολογιστή Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα μάθουμε πώς να λαμβάνουμε δεδομένα από τον υπολογιστή, ώστε ο Arduino να αντιδρά ανάλογα σε αυτά που λαμβάνει. Θεωρητική παρουσίαση Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε δύο νέες εντολές. Αυτές είναι οι : Serial.available(); Διαβάζει τον αριθμό των byte που είναι διαθέσιμα προς ανάγνωση από τη σειριακή θύρα. Τα δεδομένα που έχουν ήδη φτάσει αποθηκεύονται σε μία μνήμη προσωρινής αποθήκευσης (μπορεί να συγκρατήσει μέχρι 64 bytes). Serial.read(); Διαβάζει τα εισερχόμενα σειριακά δεδομένα. Σε αυτό το παράδειγμα ο Arduino λαμβάνει δεδομένα από τον υπολογιστή. Όταν λαμβάνει το γράμμα H ανάβει το ενσωματωμένο LED τον ακροδέκτη 13 του Arduino και όταν λαμβάνει το γράμμα L το σβήνει. Κώδικας /* Example 08 : Physical Pixel * */ const int ledpin = 13; // το pin στο οποίο βρίσκεται το LED int incomingbyte; // μία μεταβλητή που διαβάζει τα εισερχόμενα // δεδομένα void setup() { // αρχικοποίηση σειριακής επικοινωνίας: Serial.begin(9600); // αρχικοποιεί το pin του LED ως έξοδο: pinmode(ledpin, OUTPUT); void loop() { // δες αν υπάρχουν εισερχόμενα σειριακά δεδομένα: if (Serial.available() > 0) { // διάβασε το παλαιότερο byte στον σειριακό buffer: incomingbyte = Serial.read(); // αν είναι κεφαλαίο H (ASCII 72), άναψε το LED: if (incomingbyte == 'H') { digitalwrite(ledpin, HIGH); // αν είναι κεφαλαίο L (ASCII 76) σβήσε το LED: if (incomingbyte == 'L') { digitalwrite(ledpin, LOW); 67

69 Υλοποίηση άσκησης Συνδέστε την πλακέτα του Arduino με τον Η/Υ μέσω του καλωδίου USB. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε το παράθυρο της κονσόλας. Αποτελέσματα Παρατηρούμε ότι όταν πατάμε H το ενσωματωμένο LED ανάβει, όταν πατάμε το L σβήνει, και σε οποιαδήποτε άλλη περίπτωση δεν κάνει τίποτα. 68

70 7. Αναλογικηή ειήσοδος: Χρηή ση αναλογικωή ν αισθητηή ρων 7.1 Σταδιακό άναμμα και σβήσιμο ενός LED. Στόχοι αυτής της άσκησης Μέχρι στιγμής μάθαμε πώς να ελέγχουμε μία λάμπα απλώς ανάβοντας και σβήνοντάς την. Σε αυτή την άσκηση θα πάμε ένα βήμα παραπέρα και θα μάθουμε πώς να αυξομειώνουμε την ένταση ενός LED με τη χρήση μιας αναλογικής εξόδου. Θεωρητική παρουσίαση Για να το πετύχουμε αυτό θα χρησιμοποιήσουμε μια τεχνική που λέγεται διαμόρφωση πλάτους (Pulse Width Modulation PWM). Όπως αναφέραμε και στην εισαγωγή, όταν αναλύαμε τα χαρακτηριστικά της πλατφόρμας του Arduino, η διαμόρφωση πλάτους είναι μία τεχνική για να παίρνουμε αναλογικά αποτελέσματα με τη χρήση ψηφιακών μέσων. Χρησιμοποιείται ο ψηφιακός έλεγχος για να δημιουργήσει ένα τετραγωνικό κύμα, δηλαδή ένα σήμα που εναλλάσσεται άνω και κάτω. Αυτό το μοτίβο εναλλαγής μπορεί να εξομοιώσει την τάση μεταξύ υψηλής (5 Volts) και ελάχιστης (0 Volts), εναλλάσσοντας την ποσότητα του χρόνου που το σήμα είναι άνω με το χρόνο που το σήμα είναι κάτω. Η διάρκεια που το σήμα είναι «άνω» ονομάζεται πλάτος. Για να πάρουμε διαφορετικές αναλογικές τιμές, αλλάζουμε, ή τροποποιούμε αυτό το πλάτος. Αν επαναλάβουμε αυτό το μοτίβο άνωκάτω αρκετά γρήγορα με ένα LED για παράδειγμα, το αποτέλεσμα θα είναι όπως όταν το σήμα έχει σταθερή τάση μεταξύ 0 και 5V, ελέγχοντας έτσι τη φωτεινότητα του LED. Στο παρακάτω γράφημα, εικόνα 7.1, βλέπουμε πώς λειτουργεί η διαδικασία αυτή. Η πράσινες γραμμές αναπαριστούν μία κανονική χρονική περίοδο. Αυτή η διάρκεια ή περίοδος είναι το αντίστροφο της συχνότητας διαμόρφωσης πλάτους. Πιο συγκεκριμένα, αν η συχνότητα διαμόρφωσης πλάτους του Arduino είναι στα 500Hz, οι πράσινες γραμμές θα μετρηθούν στα δύο χιλιοστά του δευτερολέπτου η καθεμία. Εικόνα

71 Για να στείλουμε αναλογικές τιμές σε ένα pin θα χρησιμοποιήσουμε τη συνάρτηση analogwrite(pin,value). Αυτή η συνάρτηση λειτουργεί στις περισσότερες πλακέτες στα pin 3,5,6,9,10,11. Ωστόσο, αυτή η συνάρτηση δεν έχει να κάνει με τα αναλογικά pin και τη συνάρτηση analogread() που θα δούμε σε επόμενη άσκηση. Στην πρώτη παράμετρο της συνάρτησης λέμε σε ποιο pin θέλουμε να γράψει, και στη δεύτερη δίνουμε μία τιμή μεταξύ Αυτή η τιμή δίνει τον κύκλο εργασίας (Duty cycle) που είναι ουσιαστικά το ποσοστό της διάρκειας του υψηλού δυναμικού. Η τιμή analogwrite(9,255) απαιτεί έναν κύκλο εργασίας στο 100% (μονίμως αναμμένο LED), analogwrite(127) απαιτεί έναν κύκλο εργασίας στο 50% (στο ήμισυ της φωτεινότητάς του) και analogwrite(0) απαιτεί έναν κύκλο εργασίας στο 0% (μονίμως σβηστό). Κώδικας // Example 09: Ανάβουμε και σβήνουμε σταδιακά ένα LED #define LED 9 // το pin για το LED int i = 0; // μετρητής void setup() { pinmode(led, OUTPUT); // όρισε το Arduino LED ως έξοδο void loop(){ for (i = 0; i < 255; i++) { // βρόγχος από (σταδιακό άναμμα) analogwrite(led, i); // όρισε την αναλογική LED φωτεινότητα delay(10); // Περίμενε 10ms γιατί οι αλλαγές στην analogwrite // γίνονται ακαριαία και δε θα δούμε κάποια αλλαγή for (i = 255; i > 0; i--) { // βρόγχος από (σταδιακό σβήσιμο) analogwrite(led, i); // όρισε τη φωτεινότητα του LED delay(10); // περίμενε 10ms Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα

72 Εικόνα 7.2 Συνδέστε την πλακέτα του Arduino με τον Η/Υ μέσω του καλωδίου USB. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Αποτελέσματα Μετά την εκτέλεση του προγράμματος παρατηρούμε το LED να ανάβει σταδιακά και να σβήνει σταδιακά. Και επαναλαμβάνει αυτή τη διαδικασία συνέχεια. Συμπεράσματα Σε αυτό το παράδειγμα είδαμε ένα πιο φανταχτερό τρόπο για να αναβοσβήνουμε ένα LED. Κάναμε χρήση της συνάρτησης analogwrite() και είδαμε πώς να στέλνουμε αναλογικά δεδομένα με ψηφιακά μέσα μέσω της διαμόρφωσης πλάτους. Επέκταση Δοκιμάστε να προσθέσετε ακόμη ένα LED στο κύκλωμα. Προσπαθήστε να τροποποιήσετε το κύκλωμα ώστε να αναβοσβήνουν σταδιακά και εναλλάξ. Δηλαδή όταν ανάβει σιγά-σιγά το ένα να σβήνει σιγά-σιγά το άλλο και αντιστρόφως. Ας χρησιμοποιήσουμε, λοιπόν, τις γνώσεις που έχουμε αποκομίσει μέχρι τώρα για να φτιάξουμε μια πιο χρήσιμη λάμπα. Χρησιμοποιήστε το κύκλωμα που είδαμε στο κεφάλαιο 4 με την προσθήκη ενός κουμπιού, και στοιχεία από τους δύο κώδικες των παραδειγμάτων. Προσπαθήστε να τροποποιήσετε τον κώδικα έτσι ώστε όταν πατήσετε το κουμπί και το αφήσετε αμέσως η λάμπα να ανάβει ή να σβήνει. Όταν όμως, κρατάτε πατημένο το κουμπί η φωτεινότητα να αλλάζει, και όταν φτάνει στην επιθυμητή φωτεινότητα να το αφήνετε και να παραμένει εκεί. Το κώδικα του παραδείγματος θα τον βρείτε και εδώ : 71

73 7.2 Καθορισμός της φωτεινότητας ενός LED βάση της αναλογικής εισόδου- χρήση φωτοαντίστασης. Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα χρησιμοποιήσουμε για πρώτη φορά ένα ηλεκτρονικό εξάρτημα που δεν είναι ένας απλός μηχανισμός, αλλά ένας πραγματικός αισθητήρας. Η άσκηση μας εισάγει στη διαδικασία μετατροπής Αναλογικού-σε-Ψηφιακό σήμα που διαθέτει η πλακέτα του Arduino. Εδώ, χρησιμοποιούμε μία φωτοαντίσταση και ανάλογα με τις φωτεινότητα του χώρου καθορίζει τη φωτεινότητα του LED. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Μία φωτοαντίσταση ως αισθητήρας φωτός Μια αντίσταση στα 2,2ΚΩ. Ένα Led. Μία αντίσταση 220Ω. Θεωρητική παρουσίαση Πριν δούμε την κεντρική εφαρμογή της άσκησης πρέπει να αναλύσουμε τον τρόπο με τον οποίο λειτουργεί ένας αναλογικός σε ψηφιακό μετατροπέας, Ο μικροελεγκτής ATMega328p που περιλαμβάνει το αναπτυξιακό του Arduino έχει τη δυνατότητα να διαχειριστεί αναλογικά σήματα εισόδου, χάρη σε έναν αναλογικό σε ψηφιακό μετατροπέα που διαθέτει ολοκληρωμένο στο εσωτερικό του. Ένας αναλογικός σε ψηφιακό μετατροπέας, Analog to Digital Converter ADC, μπορεί να πάρει ένα αναλογικό σήμα στην είσοδό του και να το μετατρέψει σε μία ψηφιακή λέξη από n bits. Ο ADC που περιλαμβάνει ο μικροελεγκτής ATMega328p περιλαμβάνει έναν ADC των 10 bits. Εκτός από το πλήθος των bits της ψηφιακής λέξης στην οποία μετατρέπει ένα αναλογικό σήμα, ένα άλλο χαρακτηριστικό ενός ADC μετατροπέα είναι η τάση αναφοράς Vref. Η τάση αναφοράς του ADC είναι η μέγιστη τιμή τάσης αναλογικού σήματος που μπορεί να μετατρέψει σε ψηφιακή τιμή. Η τάση αναφοράς αντιστοιχίζεται στην μέγιστη ψηφιακή λέξη που στην περίπτωση του ADC των 10 bits είναι ή στο δεκαδικό σύστημα αρίθμησης =2n όπου n είναι το πλήθος των bits της ψηφιακής λέξης, δηλαδή 210. Όλες οι ενδιάμεσες τιμές τάσης από 0 Vref αντιστοιχίζονται στις ενδιάμεσες τιμές που μπορεί να πάρει η ψηφιακή λέξη των 10 bits, δηλαδή από ή στο δεκαδικό σύστημα Υπάρχει μία μεταβολή στην τιμή της τάσης εισόδου που προκαλεί μεταβολή της ψηφιακής λέξης κατά μία μονάδα. Αυτή είναι και η ελάχιστη μεταβολή της τιμής της τάσης εισόδου που μπορούμε να μετρήσουμε. Αν υποθέσουμε ότι η τιμή αυτής της τάσης, η οποία ονομάζεται και βήμα, είναι S. Τότε μία μεταβολή της τάσης εισόδου από 0 σε S θα προκαλέσει μεταβολή της τιμής της ψηφιακής λέξης από σε ενώ μία μεταβολή της τάσης εισόδου από S σε 2S θα είχε ως αποτέλεσμα η τιμή της ψηφιακής λέξης να μεταβληθεί από σε Με παρόμοιο τρόπο θα μεταβληθεί η τιμή της ψηφιακής λέξης μέχρι να φτάσει τελικά στην μέγιστη τιμή της η οποία θα αντιστοιχεί σε τάση εισόδου (1023-1)*S ή (210-1)*S όπου το 10 στον εκθέτη του 2 είναι το πλήθος των bits της ψηφιακής λέξης. Είπαμε όμως προηγουμένως ότι η μέγιστη τιμή της ψηφιακής λέξης αντιστοιχίζεται στην τάση αναφοράς Vref. Αυτό σημαίνει ότι (210-72

74 1)*S = Vref επομένως το βήμα είναι ίσο με S = Vref και στην γενική περίπτωση ψηφιακής λέξης n bits S = Vref. 2 n 1 Εικόνα 7.3 Στο αναπτυξιακό του Arduino δίνεται η δυνατότητα επιλογής της τάσης αναφοράς μέσα από τρεις διαφορετικές πηγές, την προκαθορισμένη DEFAULT στα 5V, την εσωτερική INTERNAL στο 1.1V και την εξωτερική EXTERNAL η οποία μπορεί να ρυθμιστεί σε μία οποιαδήποτε τιμή από 0-5V από την υποδοχή AREF η οποία φαίνεται επάνω αριστερά στην εικόνα 7.3. Η επιλογή της πηγής τροφοδοσίας γίνεται με την εντολή analogreference. analogreference(default) analogreference(internal) analogreference(external) αντίστοιχα για την κάθε πηγή τροφοδοσίας. Πάντα στις ασκήσεις θα χρησιμοποιούμε για λόγους απλοποίησης την DEFAULT τάση αναφοράς, η οποία και υπονοείται αν στο πρόγραμμα δεν ορίσουμε ρητά με μία από τις παραπάνω εντολές κάποια πηγή για την τάση αναφοράς. Για την είσοδο αναλογικού σήματος παρέχονται 6 κανάλια εισόδου, των οποίων οι υποδοχές φαίνονται κάτω δεξιά στην εικόνα 6.3. Από τη στιγμή που έχουμε συνδέσει μία πηγή αναλογικού σήματος σε κάποιο από τα 6 κανάλια εισόδου, που αριθμούνται από 0 μέχρι 5 μπορούμε να χρησιμοποιήσουμε τον ADC για να διαβάσουμε την τιμή της τάσης της, ουσιαστικά την ψηφιακή λέξη που αντιστοιχίζεται στην τάση της πηγής του αναλογικού σήματος. Η εντολή που χρησιμοποιείται για αυτό το σκοπό είναι η analogread(pin). Η εντολή αυτή διαβάζει την τιμή από το αναλογικό Pin που της ορίσαμε στο οποίο έχουμε συνδέσει την πηγή του καναλιού. Ως πηγή αναλογικού σήματος μπορεί να χρησιμοποιηθεί ένας αισθητήρας ο οποίος ουσιαστικά αποτελεί μία διάταξη που παίρνει μία τάση τροφοδοσίας και έχει μία έξοδο. Στην έξοδο δίνει μία τιμή τάσης η οποία μεταβάλλεται με την μεταβολή ενός φυσικού μεγέθους, όπως είναι για παράδειγμα η φωτεινότητα. Επίσης, σε αυτή την άσκηση θα χρησιμοποιήσουμε και την analogwrite() που εξηγήσαμε στο προηγούμενο παράδειγμα για να εισάγουμε στο Pin της εξόδου την αναλογική τιμή που πήραμε από την analogread(). Ωστόσο, η analogwrite() δέχεται τιμές από 0-255, οπότε θα πρέπει να βρούμε έναν τρόπο να αντιστοιχίσουμε τις τιμές. 73

75 Ο αισθητήρας που θα χρησιμοποιήσουμε σε αυτή την άσκηση είναι μία φωτοαντίσταση. Αρχικά η φωτοαντίσταση είναι ένα εξάρτημα το οποίο μπορεί να μεταβάλει την τιμή της αντίστασής του, ανάλογα με την ένταση του φωτός που δέχεται. Για να μπορέσουμε να μετατρέψουμε την μεταβολή της αντίστασης μίας φωτοαντίστασης, σε μεταβολή τάσης, θα πρέπει να συνδέσουμε την φωτοαντίσταση σε διάταξη διαιρέτη τάσης με μία δεύτερη αντίσταση. Για τον διαιρέτη τάσης θα χρησιμοποιηθεί μία δεύτερη αντίσταση στα 2,2ΚΩ και την μέτρηση της μεταβολής της τάσης θα την μετράμε από το σημείο σύνδεσης των δύο αντιστάσεων, το οποίο θα καταλήγει σε κάποιο από τα 6 κανάλια εισόδου αναλογικού σήματος που παρέχει το Arduino. Κώδικας /* Example 10: Καθορισμός της φωτεινότητας ενός LED βάση της τιμής που παίρνουμε από την αναλογική είσοδο. */ #define LED 9 // το pin για το LED int val = 0; // μεταβλητή που χρησιμοποιείται για να αποθηκεύσει // την τιμή που λαμβάνουμε από τον αισθητήρα void setup() { pinmode(led, OUTPUT); // ορίζουμε το LED ως έξοδο // Σημείωση: Τα αναλογικά pins ορίζονται αυτόματα ωε είσοδοι void loop() { val = analogread(0); // διάβασε την τιμή από τον αισθητήρα analogwrite(led, val/4); // άναψε το LED στη φωτεινότητα που έχει // ορισθεί από τον αισθητήρα delay(10); // περίμενε 10 ms 74

76 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 7.4. Εικόνα 7.4 Συνδέστε την πλακέτα του Arduino με τον Η/Υ μέσω του καλωδίου USB. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 75

77 Σχηματικό διάγραμμα Αποτελέσματα Εικόνα 7.5 Αυτό που θα πάρουμε μετά την εκτέλεση είναι ένα Blinking LED το οποίο ανάβει ανάλογα με την ένταση του φωτός που του δίνουμε. Όταν το φωτίζουμε πολύ, με έναν φακό για παράδειγμα, η ένταση του LED αυξάνεται. Και όταν καλύπτουμε τη φωτοαντίσταση η ένταση μειώνεται και αν την καλύψουμε τελείως το LED σβήνει. Τέλος, παρατηρήστε την εντολή με την οποία αντιστοιχούμε τις δύο διαφορετικές κλίμακες τιμών. Είναι πολύ απλή. Το ίδιο, όμως, θα μπορούσαμε να πετύχουμε και με τη χρήση της εντολής map(), για περισσότερες πληροφορίες σχετικά με την εντολή αυτή διαβάστε εδώ : Συμπεράσματα Σε αυτή την άσκηση μάθαμε πώς να χρησιμοποιούμε την πλακέτα του Arduino και το IDE για να ελέγχουμε εξόδους με βάση αποτελέσματα που παίρνουμε από ένα αισθητήρα. Επίσης, μάθαμε πως λειτουργεί ο ADC μετατροπέας των αναλογικών pins ελέγχοντας την ένταση φωτός ενός LED βάση της φωτεινότητας που λαμβάνει ο αισθητήρας. Επέκταση Χρησιμοποιείστε αυτά που μάθαμε στο κεφάλαιο της σειριακής επικοινωνίας, και προσθέστε στον παρόν κώδικα τις εντολές που χρειάζονται ώστε να παίρνουμε τις τιμές που δίνει η φωτοαντίσταση στην οθόνη μας. Το κώδικα του παραδείγματος θα τον βρείτε και εδώ : 76

78 7.3 Αυτοματισμός έξυπνου σπιτιού που ελέγχει τα φώτα. Στόχοι αυτής της άσκησης Ο στόχος αυτής της άσκησης είναι να δημιουργηθεί ένα σύστημα που θα παίρνει μία απόφαση βάση της μέτρησης ενός φυσικού μεγέθους. Θα έχουμε ως βάση μία κεντρική εφαρμογή που είναι ένας αυτοματισμός έξυπνου σπιτιού που ελέγχει το άναμμα ή σβήσιμο των φώτων μέσα στο σπίτι με βάση την μέτρηση της έντασης του φωτός του εξωτερικού περιβάλλοντος Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Μία φωτοαντίσταση ως αισθητήρας φωτός Μια αντίσταση στα 2,2ΚΩ. Ένα Led. Μία αντίσταση 220Ω. Θεωρητική παρουσίαση Όπως αναφέρουμε και στην ενότητα βασικές έννοιες των ηλεκτρονικών κυκλωμάτων η φωτοαντίσταση είναι μία αντίσταση η τιμή της οποίας μειώνεται με την αύξηση του φωτός που προσπίπτει στην επιφάνειά της. Θα εκμεταλλευτούμε λοιπόν, αυτή την αρχή και θα κατασκευάσουμε έναν αυτοματισμό σπιτιού που θα ελέγχει τα φώτα. Όταν είναι μέρα, δηλαδή όταν η ποσότητα του φωτός που προσπίπτει στην αντίσταση ξεπερνάει ένα μέγιστο όριο, τα φώτα θα είναι σβηστά. Και όταν είναι νύχτα, δηλαδή, η ποσότητα του φωτός πέφτει κάτω από ένα ελάχιστο όριο, τα φώτα θα σβήνουν. Όπως και στο προηγούμενο παράδειγμα, θα χρησιμοποιηθεί μία δεύτερη αντίσταση στα 2,2ΚΩ και την μέτρηση της μεταβολής της τάσης θα την μετράμε από το σημείο σύνδεσης των δύο αντιστάσεων, το οποίο θα καταλήγει σε κάποιο από τα 6 κανάλια εισόδου αναλογικού σήματος που παρέχει το Arduino. Το αποτέλεσμα της μέτρησης θα επηρεάζει την τιμή μία ψηφιακής εξόδου, η οποία θα ελέγχει τα φώτα του σπιτιού. Στις 2 λογικές καταστάσεις της αντιστοιχίζονται οι καταστάσεις των φώτων : 0, LOW φώτα σβηστά, ενώ 1, HIGH φώτα αναμμένα. Σε αυτή την άσκηση εκτός από την αναλογική είσοδο, θα χρησιμοποιήσουμε και μία ψηφιακή η οποία χρησιμοποιείτε για τον έλεγχο της μετάδοσης των μετρήσεων θερμοκρασίας από τη σειριακή θύρα, για επιτρέπετε ή να σταματά η μετάδοση δεδομένων από αυτή. Τέλος, θα χρησιμοποιήσουμε την εντολή map() που αναφέραμε στην προηγούμενη άσκηση, για να γίνει η μετατροπή από τη μία κλίμακα στην άλλη. Κώδικας /*Example 11 : Η εφαρμογή αυτή παίρνει μετρήσεις από έναν αισθητήρα φωτός. Όταν η τιμή της μέτρησης φωτός πέφτει κάτω από ένα όριο τότε ενεργοποιούνται τα φώτα. Στο pin 13 συνδέεται ο ενδείκτης αναμμένων ή σβηστών φώτων, 77

79 που είναι ένα led. Στο pin 3 των αναλογικών εισόδων συνδέεται ο αισθητήρας φωτός. Το pin 12 ρυθμίζει το σταμάτημα ή την έναρξη της μετάδοσης των τιμών της μέτρησης φωτός στην σειριακή θύρα. */ const int MaxLight= 100; //Κάτω από αυτή την τιμή μέτρησης φωτός //απενεργοποιούνται τα φώτα. const int MinLight= 140; //Πάνω από αυτή την τιμή μέτρησης φωτός //ενεργοποιούνται τα φώτα. const int lightsout = 13;//Το Pin εξόδου για τον έλεγχο των φώτων. const int readpin = 12; /*Αυτό είναι το Pin της ψηφιακής εισόδου *που ελέγχει την ενεργοποίηση και *απενεργοποίηση της σειριακής μετάδοσης.*/ const int analogpin = 3; /*Αυτό είναι το Pin εισόδου του αναλογικού σήματος.*/ int analogin=0; /*Σε αυτόν τον καταχωρητή αποθηκεύεται το αποτέλεσμα της μέτρησης της αναλογικής εισόδου.*/ void setup() { analogreference(default); /*Στο σημείο αυτό ορίζεται η τάση *αναφοράς του ADC που βρίσκεται *ενσωματωμένος στον μικροεπεξεργαστή*/ pinmode(readpin, INPUT); /*Ορίζεται η λειτουργία εισόδου στο Pin *της ψηφιακής εισόδου.*/ pinmode(lightsout, OUTPUT); Serial.begin(9600); /*Αρχικοποίηση της σειριακής επικοινωνίας.*/ void loop() { analogin=map(analogread(analogpin), 0, 1023, 0, 255); /*Διαβάζεται η αναλογική είσοδος. Το αποτέλεσμα αποθηκεύεται *εσωτερικά σε καταχωρητή των 10bit, που σημαίνει ότι έχει εύρος τιμών *από Όμως θέλουμε να αποθηκεύσουμε το αποτέλεσμα σε έναν *καταχωρητή των 8bit που παίρνει τιμές από και να το *μεταδώσουμε στη σειριακή θύρα. Αυτή η αλλαγή της κλίμακα γίνεται με *τη συνάρτηση map */ if(digitalread(readpin)==high){ /*Από το pin 12 που είναι ψηφιακή *είσοδος ενεργοποιείται και *απενεργοποιείται η σειριακή *μετάδοση δεδομένων. */ /*Στις επόμενες γραμμές γίνεται η σειριακή μετάδοση της μέτρησης*/ Serial.print("Analog value: "); Serial.println(analogIn); if(analogin<=maxlight){ digitalwrite(lightsout, HIGH);//Ενεργοποίηση φώτων. if(analogin>=minlight){ digitalwrite(lightsout, LOW);//Απενεργοποίηση φώτων. delay(500); /*Αυτή η χρονοκαθυστέρηση μπαίνει για να προλαβαίνει * ο χρήστης να διαβάζει το αποτέλεσμα της μέτρησης * στην κονσόλα */ 78

80 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 7.6. Εικόνα 7.6 Συνδέστε την πλακέτα του Arduino με τον Η/Υ μέσω του καλωδίου USB. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε το παράθυρο της κονσόλας. Συνδέστε την ψηφιακή είσοδο PIN 12 που ελέγχει την έναρξη και το σταμάτημα της σειριακής μετάδοσης από την γείωση, στην τάση των 5V, ώστε να ξεκινήσει η σειριακή μετάδοση των μετρήσεων. Πλησιάσετε και απομακρύνετε μία πηγή φωτός στον αισθητήρα και στη συνέχεια καλύψτε τον με ένα καπάκι από στυλό ή άλλο αντικείμενο ώστε να μην δέχεται φως και δείτε πώς μεταβάλλονται οι τιμές μέτρησης. Παρατηρήστε επίσης πώς μεταβάλλεται και η κατάσταση του LED στη θέση 13 με τις μεταβολές της έντασης του φωτός στον αισθητήρα. Αν δεν μεταβάλλεται κάντε τις απαραίτητες μεταβολές στο πρόγραμμα ώστε όταν η ένταση του φωτός ξεπερνάει μια τιμή να σβήνει το LED του PIN 13 και όταν πέφτει κάτω από ένα επίπεδο έντασης να ανάβει. 79

81 Αποτελέσματα Μετά την εκτέλεση παρατηρούμε ότι όταν πλησιάζουμε μία πηγή φωτός στον αισθητήρα το LED σβήνει ενώ όταν καλύπτουμε τον αισθητήρα το LED ανάβει. Με τον τρόπο συνδεσμολογίας του αισθητήρα, χαμηλός φωτισμός αντιστοιχεί σε μικρές τιμές μέτρησης ενώ αντίθετα υψηλός φωτισμός αντιστοιχεί σε μεγάλες τιμές μέτρησης. Αν όμως, αντιστρέψουμε τα pin και κάνουμε μία συνδεσμολογία όπως φαίνεται στην εικόνα 7.7, χαμηλός φωτισμός αντιστοιχεί σε μεγάλες τιμές μέτρησης ενώ αντίθετα υψηλός φωτισμός αντιστοιχεί σε μικρές τιμές μέτρησης. Εικόνα 7.7 Συμπεράσματα Μόλις κατασκευάσαμε τον πρώτο μας αυτοματισμό με τη χρήση ενός αναλογικού αισθητήρα. Επέκταση Συνδέστε ένα ακόμα LED σε ψηφιακή έξοδο στο PIN 11 και κάντε τις απαραίτητες μεταβολές στο πρόγραμμα ώστε το LED αυτό να έχει τα δικά του όρια μεταβολής κατάστασης. 80

82 7.4 Μέτρηση θερμοκρασίας χρήση αισθητήρα θερμοκρασίας Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα χρησιμοποιήσουμε έναν αισθητήρα θερμοκρασίας ως πηγή αναλογικού σήματος. Θα λαμβάνουμε την αναλογική τιμή του αισθητήρα και μέσω του ADC θα μετατρέπεται σε ψηφιακή τιμή. Στη συνέχεια, μέσω της σειριακής επικοινωνίας θα τυπώνονται οι τιμές στην οθόνη μας. Πριν δούμε το πρόγραμμα, θα πρέπει να κατανοήσουμε τη λειτουργία του αισθητήρα. Εξαρτήματα για την υλοποίηση της άσκησης Για αυτή την άσκηση θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Ένας αισθητήρας θερμοκρασίας LM35. Μία αντίσταση στα 18ΚΩ. Θεωρητική παρουσίαση Ο αισθητήρας που θα χρησιμοποιηθεί στο παράδειγμα αυτής της άσκησης είναι ένας αισθητήρας θερμοκρασίας, ο LM35. Όπως παρουσιάζονται οι ακροδέκτες του αισθητήρα στην εικόνα 7.8 παρακάτω, ο ακροδέκτης +Vs θα συνδεθεί στην τροφοδοσία. Ο ακροδέκτης GND στην γείωση, ενώ ο ακροδέκτης Vout θα συνδεθεί σε ένα κανάλι εισόδου αναλογικού σήματος. Ο συγκεκριμένος αισθητήρας δίνει στην έξοδό του Vout μία αύξηση της τάσης κατά 10mV για κάθε αύξηση της θερμοκρασίας κατά 1 βαθμό Κελσίου. Κώδικας /* Example 12 : Εικόνα 7.8 Αυτό το πρόγραμμα διαβάζει την αναλογική τιμή από την έξοδο ενός αναλογικού αισθητήρα, και με τον ενσωματωμένο αναλογικό σε ψηφιακό μετατροπέα τη μετατρέπει σε ψηφιακή τιμή. Η τάση αναφοράς του ADC μετατροπέα είναι η DEFAULT στα 5V. Στη συνέχεια γίνεται σειριακή μεταφορά των δεδομένων στη σειριακή είσοδο του υπολογιστή και το αποτέλεσμα απεικονίζεται στην κονσόλα. Το κανάλι 3 είναι αυτό στο οποίο συνδέεται ο αισθητήρας θερμοκρασίας. Το PIN 12 λειτουργεί ως ψηφιακή είσοδος που ελέγχει τη σειριακή μετάδοση δεδομένων. */ const int readpin = 12; /*Αυτό είναι το Pin της ψηφιακής εισόδου που ελέγχει την ενεργοποίηση και απενεργοποίηση της σειριακής μετάδοσης.*/ 81

83 const int analogpin = 3; /*Αυτό είναι το Pin εισόδου του αναλογικού σήματος.*/ int analogin=0; /*Σε αυτόν τον καταχωρητή αποθηκεύεται το αποτέλεσμα της μέτρησης της αναλογικής εισόδου.*/ void setup() { analogreference(default); /*Στο σημείο αυτό ορίζεται η τάση αναφοράς του ADC που βρίσκεται ενσωματωμένος στον μικροεπεξεργαστή*/ pinmode(readpin, INPUT); /*Ορίζεται η λειτουργία εισόδου στο Pin της ψηφιακής εισόδου.*/ Serial.begin(9600); /*Αρχικοποίηση της σειριακής επικοινωνίας.*/ void loop() { analogin=map(analogread(analogpin), 0, 1023, 0, 255); /*Διαβάζεται η αναλογική είσοδος. Το αποτέλεσμα αποθηκεύεται εσωτερικά σε καταχωρητή των 10bit, που σημαίνει ότι έχει εύρος τιμών από Όμως θέλουμε να αποθηκεύσουμε και να μεταδώσουμε σειριακά το αποτέλεσμα σε έναν byte δεδομένων που έχει 8bit και παίρνει τιμές από πρέπει να κάνουμε μετατροπή της κλίμακας τιμών. Αυτή η αλλαγή της κλίμακα γίνεται με τη συνάρτηση map */ if(digitalread(readpin)==high){ /*Από το pin 12 που είναι ψηφιακή είσοδος ενεργοποιείται και απενεργοποιείται η σειριακή μετάδοση δεδομένων. */ /*Στις επόμενες γραμμές γίνεται η σειριακή μετάδοση της μέτρησης*/ Serial.print("Analog value: "); Serial.println(analogIn); Serial.print("\b C\n"); delay(500); /*Αυτή η χρονοκαθυστέρηση μπαίνει για να προλαβαίνει ο χρήστης να διαβάζει το αποτέλεσμα της μέτρησης στην κονσόλα */ 82

84 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 7.9. Εικόνα 7.9 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε το παράθυρο της κονσόλας. Συνδέστε την ψηφιακή είσοδο PIN 12 που ελέγχει την έναρξη και το σταμάτημα της σειριακής μετάδοσης από την γείωση, στην τάση των 5V, ώστε να ξεκινήσει η σειριακή μετάδοση των μετρήσεων θερμοκρασίας. 83

85 Σχηματικό διάγραμμα Εικόνα 7.10 Αποτελέσματα Μετά την εκτέλεση παρατηρούμε ότι οι τιμές που παίρνουμε ως μέτρηση θερμοκρασίας δεν ανταποκρίνονται στις πραγματικές τιμές. Αυτό συμβαίνει γιατί δεν έχουμε μετατρέψει τη 10-bit αναλογική είσοδο σε θερμοκρασία. Συμπεράσματα Σε αυτή την άσκηση χρησιμοποιήσαμε ακόμα έναν αισθητήρα και κάναμε ένα απλό παράδειγμα μέτρησης θερμοκρασίας χρησιμοποιώντας τον αισθητήρα θερμοκρασίας LM35. 84

86 Επέκταση Προσπαθήστε να σκεφτείτε έναν τρόπο και να κάνετε τις απαραίτητες τροποποιήσεις στο πρόγραμμά σας ώστε να πάρετε το σωστό αποτέλεσμα μέτρησης. Συμβουλευτείτε την παρακάτω πηγή : Δοκιμάστε να τροποποιήσετε τον κώδικά σας ώστε να παίρνετε τη θερμοκρασία σε βαθμούς Κελσίου και σε Φαρενάιτ όπως φαίνεται στην εικόνα 7.11 παρακάτω. Η συνάρτηση μετατροπής Celsius σε Fahrenheit είναι : [ F] = [ C] Εικόνα

87 8. Εισαγωγηή στους σερβοκινητηή ρες 8.1 Περιστροφή με σταθερό βήμα από τη μέγιστη στην ελάχιστη τιμή γωνίας περιστροφής. Στόχοι αυτής της άσκησης Στην άσκηση αυτή θα γίνει αρχικά μία εισαγωγή στον τρόπο λειτουργίας των σερβοκινητήρων και στη συνέχεια θα δούμε πώς μπορούμε μέσα από ένα πρόγραμμα να ελέγξουμε έναν τέτοιο κινητήρα. Το Arduino διαθέτει ειδική βιβλιοθήκη για τον έλεγχο σερβοκινητήρων, καθώς επίσης και ένα πλήθος άλλων βιβλιοθηκών για έλεγχο και άλλων συσκευών, όπως LCD οθονών, Matrix οθονών, βηματικών κινητήρων, μνημών και άλλων περιφερειακών. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Ένας σερβοκινητήρας Θεωρητική παρουσίαση Ένας σερβοκινητήρας είναι ένας ειδικής κατασκευής κινητήρας του οποίου τη γωνία περιστροφής μπορούμε να ελέγξουμε με μεγάλη ακρίβεια με ένα σήμα ελέγχου. Περιλαμβάνει τρία καλώδια, την τροφοδοσία την γείωση και τον έλεγχο. Το καλώδιο του ελέγχου είναι αυτό στο οποίο δίνουμε το σήμα του ελέγχου, το οποίο καθορίζει το πόσες μοίρες θα περιστραφεί ο κινητήρας. Οι σερβοκινητήρες περιλαμβάνουν και αυτοί εσωτερικά έναν μικροελεγκτή ο οποίος είναι υπεύθυνος στο να μετατρέψει το σήμα ελέγχου σε κατάλληλο σήμα συνεχούς τάσης και χρονικής διάρκειας, ικανό να περιστρέψει έναν κινητήρα κατά μία συγκεκριμένη γωνία. Το σήμα ελέγχου είναι ουσιαστικά ένα ψηφιακό σήμα τετραγωνικού παλμού, προκαθορισμένης περιόδου του οποίου όμως μεταβάλετε η διάρκεια του τμήματος υψηλού δυναμικού, που ονομάζεται και πλάτος του παλμού, δηλαδή το τμήμα του χρόνου της περιόδου κατά το οποίο το σήμα έχει ψηφιακή τιμή 1. Η διάρκεια του πλάτους του παλμού είναι αυτή που καθορίζει το πόσες μοίρες θα περιστραφεί ο κινητήρας. Μία τέτοια διαμόρφωση σήματος ονομάζεται κατά πλάτος διαμόρφωση Pulse Width Modulation (PWM), όπως εξηγήσαμε και σε προηγούμενο παράδειγμα. Αυτό δηλαδή που μεταβάλλεται στον τετραγωνικό παλμό σε μία διαμόρφωση PWM, είναι ο κύκλος εργασίας. Ο κινητήρας, έχοντας ως αναφορά ένα νεκρό σημείο που αντιστοιχεί στις 90 μοίρες, μπορεί να περιστρέφετε είτε προς την κατεύθυνση από 90 ο -0 ο, είτε προς την κατεύθυνση από 90 ο -180 ο. Για να γίνει περισσότερο κατανοητή η μορφή που έχει ένα σήμα διαμορφωμένο κατά πλάτος και η σχέση ενός τέτοιου σήματος με τη γωνία περιστροφής, παρουσιάζετε η σχέση αυτή διαγραμματικά στην εικόνα 8.1. Πρέπει να επισημάνουμε ότι ένας σερβοκινητήρας πρέπει να δέχεται σταθερά το ίδιο σήμα με τη συγκεκριμένη περίοδο και πλάτος παλμού, ώστε να διατηρεί σταθερή τη γωνία στην οποία βρίσκεται. Αλλαγή στο σήμα σημαίνει και αλλαγή της γωνίας, ενώ διατήρηση του σήματος σημαίνει και διατήρηση της γωνίας. 86

88 Εικόνα 8.1 Στην εικόνα 8.2 βλέπουμε πώς είναι εσωτερικά ένας σερβοκινητήρας. Οι πηγή των 2 εικόνων προέρχεται από Εικόνα 8.2 Για την παραγωγή των κατάλληλων σημάτων ελέγχου το Arduino παρέχει μία ειδική βιβλιοθήκη, την Servo.h. Ένα πρόγραμμα το οποίο θα περιλαμβάνει έλεγχο ενός σερβοκινητήρα θα ξεκινάει με την κλήση αυτής της βιβλιοθήκης. #include <Servo.h> Αυτή η βιβλιοθήκη περιλαμβάνει όλες τις μεθόδους για τον έλεγχο ενός σερβοκινητήρα. Το επόμενο βήμα είναι η δημιουργία στο πρόγραμμα ενός αντικειμένου τύπου Servo το οποίο αντιπροσωπεύει έναν σερβοκινητήρα μέσα στο πρόγραμμα, και η αντιστοίχηση, σε αυτό το αντικείμενο, του αριθμού της υποδοχής του Arduino στην οποία έχει συνδεθεί το καλώδιο ελέγχου του σερβοκινητήρα. Τα παραπάνω γίνονται με τις ακόλουθες εντολές. Servo myservo; Το myservo είναι ένα αντικείμενο τύπου Servo. myservo.attach(servoout); Με την εντολή αυτή αντιστοιχίζουμε στο αντικείμενο 87

89 myservo που δημιουργήσαμε προηγουμένως μία υποδοχή του Arduino, στην οποία είναι συνδεδεμένο το καλώδιο ελέγχου του σερβοκινητήρα. Το αντίστροφο κάνει η εντολή myservo.detach(); που αποδεσμεύει την υποδοχή που αντιστοιχίσαμε στο αντικείμενο myservo. Τέλος έχουμε τη δυνατότητα να δούμε ποια υποδοχή έχει αντιστοιχιστεί στο αντικείμενο myservo με την εντολή myservo.attached();. Από το σημείο αυτό και μετά μπορούμε να δίνουμε εντολές στον σερβοκινητήρα για να περιστρέφεται σε συγκεκριμένες γωνίες. Αυτό μπορούμε να το πετύχουμε με τις ακόλουθες εντολές myservo.writemicroseconds(a); Η εντολή αυτή επηρεάζει τη διάρκεια-πλάτος του παλμού, και κατά συνέπεια τη γωνία περιστροφής. Η παράμετρος a είναι ο χρόνος σε μικρό-δευτερόλεπτα που θα διαρκεί ο παλμός. myservo.write(a); Η εντολή αυτή κάνει ότι ακριβώς και η προηγούμενη με τη μόνη διαφορά ότι η παράμετρος a είναι η γωνία σε μοίρες από 0 ο -180 ο στην οποία θέλουμε να περιστραφεί ο σερβοκινητήρας. Επίσης έχουμε τη δυνατότητα να δούμε σε ποιά γωνία βρίσκεται ο σερβοκινητήρας, με την εντολή myservo.read(); Περισσότερες πληροφορίες για την βιβλιοθήκη αυτή μπορείτε να διαβάσετε στην πηγή Στα παραδείγματα που θα ακολουθήσουν θα χρησιμοποιούμε την εντολή myservo.writemicroseconds(a); επειδή με αυτή μπορούμε να πετύχουμε μεγαλύτερη ακρίβεια στην περιστροφή. Κώδικας /* Example 13 : Με αυτή την εφαρμογή ξεκινάει η λειτουργία ενός σερβοκινητήρα ο οποίος περιστρέφεται με σταθερό βήμα από τη μέγιστη στην ελάχιστη τιμή γωνίας περιστροφής. */ #include <Servo.h> Servo myservo; /*Δημιουργεί ένα αντικείμενο τύπου servo για τον έλεγχο του σερβοκινητήρα. Στο συγκεκριμένο επεξεργαστή μπορούμε να έχουμε μέχρι 8 αντικείμενα αυτού του τύπου*/ const int c = 1500; /*Το κεντρικό σημείο του κινητήρα στις 90 μοίρες. Χρόνος σε microsecond του πλάτους του παλμού που αντιστοιχεί στο κεντρικό σημείο*/ int a = 1500; /* Μοίρες περιστροφής οι οποίες εκφράζονται σε περίοδο παλμού σε microsecond*/ int t = 20; /*Ο χρόνος σε ms που θα περιμένει το πρόγραμμα μέχρι να σταλεί η πρώτη περίοδος του σήματος και να ξεκινήσει η περιστροφή του κινητήρα*/ const int max = *12; /*Το πλάτος του παλμού που αντιστοιχεί στη μέγιστη γωνία περιστροφής στις 180 μοίρες. */ const int min = *12; /*Το πλάτος του παλμού που αντιστοιχεί στην ελάχιστη γωνία περιστροφής στις 0 μοίρες.*/ 88

90 const int servoout = 3; //Η έξοδος των παλμών για τον κινητήρα. int updown =1; /*Βοηθητική μεταβλητή που προσδιορίζει το αν οι μοίρες περιστροφής θα αυξάνονται ή θα μειώνονται. Η τιμή 1 σημαίνει αύξηση ενώ η τιμή 0 σημαίνει μείωση. */ void setup() { //Ορισμός εισόδων και εξόδων myservo.attach(servoout); myservo.writemicroseconds(c); /* Αρχικοποιεί τη θέση του σερβοκινητήρα στο κεντρικό σημείο. */ delay(t); //Περιμένουμε να ολοκληρωθεί η αρχικοποίηση void loop(){ myservo.writemicroseconds(a); // Περιστρέφει το σερβοκινητήρα. delay(t); if(a>=max){ updown=0; else if(a<=min){ updown=1; if(updown==1){ a=a+12; else if(updown==0){ a=a-12; Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 8.3. Εικόνα

91 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Σχηματικό διάγραμμα Εικόνα 8.4 Αποτελέσματα Το παράδειγμα αυτό περιστρέφει τον κινητήρα από μία μέγιστη τιμή γωνίας σε μία ελάχιστη και το αντίστροφο. Η αρχική του θέση είναι στις 90 μοίρες. Η γωνία περιστροφής αρχικά αυξάνεται συνέχεια μέχρι να φτάσει το μέγιστο πλάτος παλμού που είναι 2400ms, δηλαδή μέγιστη γωνία 180 μοίρες, και μετά αρχίζει και μειώνεται συνέχεια μέχρι να φτάσει το ελάχιστο πλάτος παλμού που είναι 600 ms, δηλαδή γωνία 0 μοιρών. Η διαδικασία αυτή επαναλαμβάνεται συνέχεια. 90

92 Συμπεράσματα Σε αυτό το παράδειγμα έγινε μία εισαγωγή στους σερβοκινητήρες και στον τρόπο λειτουργίας τους. Επέκταση Με βάση το παραπάνω παράδειγμα, κάντε τις κατάλληλες αλλαγές στον κώδικα για να περιστρέψετε τον σερβοκινητήρα με τη χρήση κουμπιών. Φτιάξτε μία εφαρμογή που θα περιλαμβάνει 2 ψηφιακές εισόδους, στα PINS 7 και 8, πάνω στις οποίες θα συνδέονται 2 pushbuttons. Αρχικά ο σερβοκινητήρας θα αρχικοποιείται στο κεντρικό σημείο και θα μένει εκεί σταματημένος. Κάθε φορά που θα πατιέται το pushbutton που συνδέεται στην ψηφιακή είσοδο 7 ο σερβοκινητήρας θα περιστρέφεται κατά ένα βήμα μοιρών, που θα επιλέξετε εσείς, προς τα αριστερά, ενώ θα περιστρέφετε κατά το ίδιο βήμα μοιρών στην αντίθετη κατεύθυνση όταν πατιέται το pushbutton της ψηφιακής εισόδου 8. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Ένας σερβοκινητήρας Δύο pushbuttons Δύο pulldown αντιστάσεις στο 1ΚΩ Πριν πριν δείξουμε τη συνδεσμολογία της άσκησης θα αναλύσουμε λίγο την έννοια της pulldown αντίστασης. Όταν σε μία ψηφιακή είσοδο του μικροελεγκτή χρησιμοποιούμε διακόπτες για να δίνουμε τις δύο λογικές καταστάσεις 0 ή 1 συνδέουμε το διακόπτη μας στα 5V ώστε πάτημα του διακόπτη να δίνει τάση 5V στην ψηφιακή είσοδο, που αντιστοιχεί στη λογική κατάσταση 1. Πρέπει όμως με κάποιον τρόπο όταν ο διακόπτης δεν είναι πατημένος η ψηφιακή είσοδος να συνδέετε με την γείωση για να βρίσκετε στη λογική κατάσταση 0. Αυτό το πετυχαίνουμε με μία αντίσταση η οποία συνδέεται με την ψηφιακή είσοδο και την γείωση. Η αντίσταση αυτή επειδή δίνει το χαμηλό δυναμικό στην ψηφιακή είσοδο ονομάζεται pulldown αντίσταση. Ο τρόπος συνδεσμολογίας φαίνεται στην ακόλουθη εικόνα 8.5. Εικόνα

93 Υλοποίηση επέκτασης της άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 8.6. Εικόνα

94 Σχηματικό διάγραμμα Εικόνα

95 8.2 Περιστροφή σερβοκινητήρα με τη χρήση ποτενσιόμετρου. Στόχοι αυτής της άσκησης Σε αυτή την άσκηση επιχειρήσουμε πάλι να περιστρέψουμε τον σερβοκινητήρα, αλλά αυτή τη φορά θα χρησιμοποιήσουμε ένα καινούριο εξάρτημα για να το πετύχουμε αυτό, ένα ποτενσιόμετρο. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Ένας σερβοκινητήρας Ένα ποτενσιόμετρο. Θεωρητική παρουσίαση Πριν περάσουμε στην παρουσίαση του κώδικα θα εξηγήσουμε τι είναι και πώς δουλεύει ένα ποτενσιόμετρο. Όπως αναφέραμε και στην ενότητα των κυκλωμάτων στην εισαγωγή, το ποτενσιόμετρο είναι αναλογικό ηλεκτρονικό εξάρτημα, που χρησιμοποιείται στα κυκλώματα ως μεταβλητή αντίσταση και μπορούμε να διαβάσουμε με τον Arduino ως αναλογική τιμή. To ποτενσιόμετρο έχει 3 ποδαράκια, τα οποία τα συνδέουμε με τρία καλώδια στην πλακέτα του Arduino. Το ένα πάει στη γείωση, το δεύτερο στα 5volts και το τελευταίο πηγαίνει σε μία αναλογική είσοδο στον Arduino, όπως φαίνεται στην εικόνα 8.7. Εικόνα 8.7 Γυρίζοντας τον άξονα του ποτενσιόμετρου, αλλάζουμε την ποσότητα της αντίστασης που είναι συνδεδεμένη με το κεντρικό Pin του ποτενσιόμετρου. Αυτό αλλάζει τη σχετική εγγύτητα αυτού του pin με τα 5volts και τη γείωση, δίνοντάς μας μία διαφορετική αναλογική τιμή. Όταν ο άξονας είναι γυρισμένος στο τέρμα της μίας κατεύθυνσης στο pin καταλήγουν 0 volts, και διαβάζουμε 0. Ενώ όταν είναι γυρισμένος στο τέρμα της άλλης κατεύθυνσης, στο pin καταλήγουν 5 volts και διαβάζουμε Και αυτό γιατί όπως έχουμε αναφέρει ξανά σε προηγούμενες 94

96 ασκήσεις η analogread() επιστρέφει έναν αριθμό μεταξύ 0 και 1023 που είναι αντίστοιχος της ποσότητας της τάσης που καταλήγει στο αναλογικό pin. Πηγή : Κώδικας /* Example 14 : Έλεγχος της θέσης ενός σερβοκινητήρα με τη χρήση ενός ποτενσιόμετρου */ #include <Servo.h> Servo myservo; // Δημιουργεί ένα αντικείμενο τύπου servo. int potpin = 0; /*Το αναλογικό Pin που χρησιμοποιείται για τη σύνδεση του ποτενσιόμετρου. */ int val; //Μεταβλητή για την ανάγνωση της τιμής από το αναλογικό pin. void setup() { myservo.attach(9); /*Αντιστοιχίζουμε το αντικείμενο που δημιουργήσαμε με το Pin 9 του Arduino. */ void loop() { val = analogread(potpin);/*διαβάζει την τιμή από το ποτενσιόμετρο (τιμή μεταξύ 0 και 1023)*/ val = map(val, 0, 1023, 0, 179);/* Κλιμακώνει την τιμή στα δεδομένα του σερβοκινητήρα (μεταξύ 0 και 180). */ myservo.write(val); /*Ρυθμίζει την κίνηση του σερβοκινητήρα ανάλογα με την κλιμακωμένη τιμή που πήραμε. */ delay(15); // Περιμένει μέχρι ο servo να φτάσει σε αυτή τη θέση. 95

97 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 8.8. Εικόνα 8.8 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 96

98 Σχηματικό διάγραμμα Εικόνα 8.9 Αποτελέσματα Το αποτέλεσμα που παίρνουμε είναι η περιστροφή του σερβοκινητήρα ανάλογα με το πόσο περιστρέφουμε το ποτενσιόμετρο. Συμπεράσματα Σε αυτή την άσκηση είδαμε ακόμη μία απλή εφαρμογή του σερβοκινητήρα και χρησιμοποιήσαμε ένα καινούριο εξάρτημα, το ποτενσιόμετρο. Στη συνέχεια θα δούμε πιο σύνθετα παραδείγματα. 97

99 8.3 Εφαρμογή έξυπνου σπιτιού- έλεγχος περσίδων με τη χρήση servo. Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι ο συνδυασμός ενός αισθητήρα, που παρέχει μία αναλογική είσοδο στον μικροελεγκτή, και του σερβοκινητήρα, που αποτελεί μία έξοδο για το σύστημα, για τη δημιουργία ενός αυτοματισμού για έξυπνο σπίτι. Ουσιαστικά είναι ένας συνδυασμός των όσων έχουμε δει στα τελευταία δύο κεφάλαια. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Δύο pushbuttons. Ένας σερβοκινητήρας. Μία φωτοαντίσταση ως αισθητήρας φωτός. Μια αντίσταση στα 2,2ΚΩ. Δύο pulldown αντιστάσεις στο 1ΚΩ. Θεωρητική παρουσίαση Ο αυτοματισμός που θα υλοποιήσουμε σε αυτή την άσκηση είναι ο έλεγχος των περσίδων ανάλογα με την ένταση του φωτός έξω από το σπίτι. Όταν έξω είναι νύχτα θέλουμε οι περσίδες να κλείνουν, ενώ όταν έξω είναι μέρα θέλουμε να ανοίγουν. Επίσης θέλουμε ο χρήστης να έχει τη δυνατότητα να επέμβει στο πόσο ανοιχτές ή κλειστές θα είναι οι περσίδες, και αυτό θα μπορεί να το κάνει από 2 pushbuttons που το ένα θα ανοίγει με ένα σταθερό βήμα της περσίδες ενώ το άλλο θα τις κλείνει. Τα 2 pushbuttons είναι συνδεδεμένα επάνω σε ψηφιακές εισόδους στις υποδοχές σύνδεσης 7 και 8 του Arduino. Στην αναλογική υποδοχή 3 του Arduino θα συνδέσουμε την έξοδο του αισθητήρα φωτός ενώ στην ψηφιακή υποδοχή 9 θα συνδέσουμε τον έλεγχο του σερβοκινητήρα. Στην άσκηση αυτή θα χρησιμοποιηθεί και η σειριακή μετάδοση δεδομένων, των μετρήσεων του αισθητήρα. Θα χρησιμοποιηθεί για τον έλεγχο της μετάδοσης η υποδοχή 12 ως ψηφιακή είσοδος. Κώδικας /* Example 15 : Αυτό το πρόγραμμα διαβάζει την αναλογική τιμή από την έξοδο ενός αναλογικού αισθητήρα φωτός, και με τον ενσωματωμένο αναλογικό σε ψηφιακό μετατροπέα τη μετατρέπει σε ψηφιακή τιμή. Η τάση αναφοράς του αισθητήρα είναι στα 5V. Από τις τιμές του αισθητήρα οδηγείτε ένας σερβοκινητήρας που ελέγχει το άνοιγμα και το κλείσιμο των περσίδων σε ένα έξυπνο σπίτι. Ο χρήστης μπορεί να επέμβει και χειροκίνητα στο άνοιγμα και το κλείσιμο με 2 pushbuttons. Επίσης οι τιμές μέτρησης μπορούν να μεταδίδονται και στη σειριακή θύρα για να απεικονίζονται στην κονσόλα. Pin 7 και 8 συνδέονται τα pushbuttons. Pin 12 έλεγχος σειριακής μετάδοσης μετρήσεων. Pin 3 έξοδος σερβοκινητήρα. */ #include <Servo.h> Servo myservo; /*Δημιουργεί ένα αντικείμενο τύπου servo για τον 98

100 έλεγχο του σερβοκινητήρα. Στο συγκεκριμένο επεξεργαστή μπορούμε να έχουμε μέχρι8 αντικείμενα αυτού του τύπου*/ const int c =1500; /*Το κεντρικό σημείο του κινητήρα Χρόνος σε microsecond της περιόδου του παλμού που αντιστοιχεί στο κεντρικό σημείο*/ const int night =170; const int day =130; const int t = 20; /*Ο χρόνος σε ms που θα περιμένει το πρόγραμμα μέχρι να γίνει η περιστροφή. */ const int open = *12; // Τελείως ανοιχτές περσίδες. const int close = *12; // Τελείως κλειστές περσίδες. const int readpin = 12; /*Αυτό είναι το Pin της ψηφιακής εισόδου που ελέγχει την ενεργοποίηση και απενεργοποίηση της σειριακής μετάδοσης.*/ const int analogpin = 3; /*Αυτό είναι το Pin εισόδου του αναλογικού σήματος.*/ const int servoout = 9;//Η έξοδος των παλμών για τον κινητήρα. const int manualopen= 7;//Push button για άνοιγμα περσίδων. const int manualclose=8;//push button για κλείσιμο περσίδων. int analogin=0; /*Σε αυτόν τον καταχωρητή αποθηκεύεται το αποτέλεσμα της μέτρησης της αναλογικής εισόδου.*/ /* *Η μεταβλητή previousstate κρατάει την τελευταία κατάσταση στην *οποία βρίσκονται οι περσίδες και μπορεί να έχει τρείς τιμές: * 0 = στο κεντρικό σημείο, είναι το σημείο εκκίνησης * 1 = κλειστές περσίδες, ή νύχτα * 2 = ανοιχτές περσίδες, ή μέρα * */ int previousstate =0; int a=1500; /*Η μεταβλητή αυτή συγκρατεί την τρέχουσα γωνία, σε μορφή *περιόδου παλμών στον κινητήρα,στην οποία βρίσκονται οι *περσίδες. Αυτή η μεταβλητή είναι χρήσιμη όταν γίνεται *χειροκίνητα η επέμβαση στην γωνία των περσίδων από το *χρήστη. */ void setup() { pinmode(readpin, INPUT); /*Ορίζεται η λειτουργία εισόδου στο Pin της ψηφιακής εισόδου.*/ pinmode(manualopen, INPUT); pinmode(manualclose, INPUT); myservo.attach(servoout); analogreference(default); myservo.writemicroseconds(c); /*Αρχικοποιεί τη θέση του σερβοκινητήρα στο κεντρικό σημείο*/ delay(t); //Περιμένουμε να ολοκληρωθεί η αρχικοποίηση Serial.begin(9600); /*Αρχικοποίηση της σειριακής επικοινωνίας.*/ 99

101 void loop() { analogin=map(analogread(analogpin), 0, 1023, 0, 255); if(digitalread(readpin)==high){ /*Από το pin 12 που είναι ψηφιακή είσοδος ενεργοποιείται και απενεργοποιείται η σειριακή μετάδοση δεδομένων. Προσοχή αν δεν υπάρχει αυτός ο έλεγχος μπορεί να κολλήσει το Arduino. */ /*Στις επόμενες γραμμές γίνεται η σειριακή μετάδοση της μέτρησης*/ Serial.print("Analog value: "); Serial.println(analogIn); /*Στις επόμενες γραμμές γίνεται ο έλεγχος των περσίδων. */ if (analogin<=day && previousstate!=2){ previousstate=2; myservo.writemicroseconds(open); a=open; if (analogin>=night && previousstate!=1){ previousstate=1; myservo.writemicroseconds(close); a=close; if(digitalread(manualopen)==high && a!=open){ a=a+12; myservo.writemicroseconds(a); delay(t); if(digitalread(manualclose)==high && a!=close){ a=a-12; myservo.writemicroseconds(a); delay(t); delay(500); 100

102 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα Εικόνα 8.10 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε το παράθυρο της κονσόλας. Συνδέστε την ψηφιακή είσοδο pin 12 που ελέγχει την έναρξη και το σταμάτημα της σειριακής μετάδοσης από η γείωση, στην τάση ων 5V, ώστε να ξεκινήσει η ψηφιακή μετάδοση. Ελέγξτε τη λειτουργία της εφαρμογής σας μεταβάλλοντας την ένταση του φωτός με τη βοήθεια κάποιας πηγής φωτός ή προκαλώντας συσκότιση καλύπτοντας τον αισθητήρα με κάποιο αντικείμενο, όπως για παράδειγμα με ένα καπάκι από στυλό 101

103 Σχηματικό σχήμα Αποτελέσματα Παρατηρούμε, λοιπόν, ότι κατά την εκκίνηση του προγράμματος ο σερβοκινητήρας ανοίγει ή κλείνει τις περσίδες ανάλογα με την ένταση του φωτός. Ωστόσο, μπορούμε πατώντας τα κουμπιά, να επέμβουμε και να ρυθμίσουμε τις περσίδες μας να είναι όσο ανοιχτές ή κλειστές θέλουμε. Συμπεράσματα Η άσκηση αυτή ήταν ένα πιο σύνθετο παράδειγμα του τι μπορούμε να κάνουμε με ένα σερβοκινητήρα και ένας συνδυασμός των τελευταίων κεφαλαίων. Πλέον βλέπουμε πως οι εφαρμογές αρχίζουν και ανταποκρίνονται σε πραγματικά παραδείγματα, που ίσως να φαντάζουν δύσκολα όταν δε γνωρίζουμε τίποτε για αυτά αλλά με τον Arduino απλοποιούνται όλα! Επέκταση Πειραματιστείτε με την υστέρηση και παρατηρήστε πώς μεταβάλλεται η λειτουργία του συστήματος όταν οι οριακές τιμές έντασης φωτός για μέρα και νύχτα ταυτίζονται η απόστασή τους είναι πολύ μικρή. Προσπαθήστε πάλι με μία πηγή φωτός να φέρετε το σύστημα σε οριακή κατάσταση. 102

104 9. Εισαγωγηή στους βηματικουή ς κινητηή ρες 9.1 Περιστροφή του κινητήρα εμπρός και πίσω. Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι να παρουσιάσουμε έναν ακόμη κινητήρα, διαφορετικό από τον προηγούμενο, λόγω της μεγαλύτερης ακρίβειας που παρέχει. Ένας τέτοιος κινητήρας είναι ο βηματικός. Παρακάτω θα αναφέρουμε τις βασικές λειτουργίες και τη βιβλιοθήκη του βηματικού κινητήρα. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Ένας διπολικός βηματικός κινητήρας. Μία Διπλή H-Bridge L293D. Θεωρητική παρουσίαση Οι βηματικοί είναι κινητήρες μεγάλης ακρίβειας που συναντιούνται συνήθως σε σκληρούς δίσκους, εκτυπωτές, ρολόγια. Οι βηματικοί απαιτούν η παροχή ρεύματος να πάλλεται συνεχόμενα σε συγκεκριμένους ρυθμούς. Για κάθε παλμό, ο κινητήρας κινείται ένα «βήμα», που είναι συνήθως 18 μοίρες (δίνοντας 20 βήματα για μία πλήρη περιστροφή). Υπάρχουν δύο τύποι βηματικών κινητήρων : οι μονοπολικοί και οι διπολικοί. Οι μονοπολικοί έχουν 4 πηνία στο εσωτερικό τους που ενεργοποιούνται και απενεργοποιούνται σε συγκεκριμένη ακολουθία. Οι διπολικοί έχουν δύο πηνία στα οποία η ροή του ρεύματος αντιστρέφεται με παρόμοια αλληλουχία. Σε αυτή την ενότητα θα χρησιμοποιήσουμε ένα διπολικό βηματικό κινητήρα. Ο διπολικός βηματικός έχει δύο πηνία που πρέπει να ελεγχθούν ώστε το ρεύμα να ρέει σε διαφορετικές κατευθύνσεις μέσω του πηνίου με συγκεκριμένη σειρά. Τα μεταβαλλόμενα μαγνητικά πεδία που δημιουργούν αυτά τα πηνία προκαλούν τον άξονα του κινητήρα να κινηθεί σε βήματα. Το κύκλωμα που χρησιμοποιείται συνήθως για να ελέγξουμε ένα πηνία φαίνεται παρακάτω στην εικόνα 9.1, όπως και οι αντίθετες φορές του ρεύματος. Προσέξτε ότι υπάρχουν τέσσερα τρανζίστορ «ελέγχου», που ενεργοποιούνται σε ζευγάρια για το ένα πηνίο. Συνεπάγεται ότι με δύο πηνία υπάρχουν οχτώ τρανζίστορ ελέγχου σε ζευγάρια, που πρέπει να ενεργοποιούνται ή να απενεργοποιούνται σε αλληλουχία. 103

105 Εικόνα 9.1 Προσέξτε ότι καθώς τα πηνία δημιουργούν ένα ηλεκτρομαγνητικό πεδίο όταν ενεργοποιούνται, χρειάζονται 8 δίοδοι καταστολής (τέσσερις για το κάθε πηνίο). Ευτυχώς έχει σχεδιαστεί ένα ειδικό εξάρτημα, η διπλή H-Bridge L293D, το οποίο περιέχει αυτό το κύκλωμα από τρανζίστορ. Το L293D περιέχει 8 τρανζίστορς και διόδους σε ένα ολοκληρωμένο κύκλωμα με 16 pins. Στην εικόνα 9.2 φαίνεται το σχηματικό διάγραμμα του L293D με τον βηματικό κινητήρα. Εικόνα 9.2 Αφού εξετάσαμε τη συνδεσμολογία του βηματικού θα αναλύσουμε τώρα τη βιβλιοθήκη που χρησιμοποιεί και θα δούμε πώς μπορούμε να τον περιστρέψουμε με απλές εντολές. 104

106 #include <Stepper.h> : Αρχικά λέμε στον Arduino να συμπεριλάβει τη βιβλιοθήκη Stepper, όπως με κάθε βιβλιοθήκη. Stepper stepper(steps, pin1, pin2, pin3, pin4) : Δημιουργούμε το αντικείμενο που είναι τύπου Stepper. Η εντολή αυτή μπαίνει στην αρχή του προγράμματος πριν από τις συναρτήσεις setup() και void(). Σαν παραμέτρους παίρνει τα steps που είναι ο αριθμός των βημάτων σε μία περιστροφή και τα pins που είναι συνδέεται ο stepper με τον arduino. Stepper.setSpeed(rpms) : Ορίζουμε την ταχύτητα περιστροφής του κινητήρα σε περιστροφές ανά λεπτό (rotations per minute). Stepper.step(steps) : Γυρνάει τον κινητήρα έναν καθορισμένο αριθμό βημάτων που θα του ορίσουμε. Όταν δίνουμε θετική παράμετρο γυρνάμε τον κινητήρα προς τη μία κατεύθυνση και όταν δίνουμε αρνητική προς την αντίθετη κατεύθυνση. Παρακάτω δίνεται ο κώδικας ενός απλού παραδείγματος που περιστρέφει τον βηματικό κινητήρα προς τη μία κατεύθυνση και μετά προς την αντίθετη. Κώδικας /* Example : 16 Περιστροφή βηματικού κινητήρα εμπρός και πίσω. */ #include <Stepper.h> #define SPEED 200 // Ορίζουμε τιμή στη σταθερά SPEED. // Δημιουργούμε ένα αντικείμενο της κλάσης stepper. // Καθορίζουμε τον αριθμό των βημάτων του κινητήρα καθώς και // τα pins στα οποία είναι συνδεδεμένος. // // Η σειρά εδώ, στο πώς δίνουμε τα pins, έχει σημασία. Stepper stepper(20, 8, 9, 10, 11); void setup() { // Ορίζουμε την ταχύτητα του κινητήρα στα 30 RPMs. stepper.setspeed(speed); void loop() { // Λέμε στον κινητήρα να περιστραφεί 100 βήματα προς μία // κατεύθυνση. stepper.step(100); delay(300); // Λέμε στον κινητήρα να περιστραφεί 100 βήματα προς την // αντίθετη κατεύθυνση. stepper.step(-100); delay(300); 105

107 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 9.3. Προσέξτε ότι κάποιες πλακέτες Arduino χρειάζονται επιπλέον εξωτερική τροφοδοσία για να λειτουργήσει ο stepper. Τότε θα πρέπει να ενώσουμε τη γείωση από τον arduino και από την εξωτερική πηγή και με μία κοινή γείωση να τροφοδοτήσουμε τον stepper μέσω του L293D. Εικόνα 9.3 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Αν χρειάζεται συνδέστε και την εξωτερική τροφοδοσία. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 106

108 Σχηματικό διάγραμμα Εικόνα 9.4 Αποτελέσματα Το αποτέλεσμα που παίρνουμε είναι η περιστροφή του κινητήρα προς τη μία κατεύθυνση και μετά προς την αντίθετη. Συμπεράσματα Σε αυτή την ενότητα έγινε μία εισαγωγή στους βηματικούς κινητήρες. Είδαμε την αρκετά πιο πολύπλοκη, σε σχέση με τον σερβοκινητήρα, συνδεσμολογία του και τη βιβλιοθήκη που χρησιμοποιεί ο Arduino. Επέκταση Συνδέστε έναν αναλογικό αισθητήρα και περιστρέψτε τον κινητήρα ανάλογα με την αλλαγή της τιμής του που δέχεται. Συμβουλευτείτε την παρακάτω ιστοσελίδα : 107

109 9.2 Περιστροφή του stepper χωρίς τη βιβλιοθήκη του Arduino. Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι η περιστροφή του βηματικού κινητήρα εμπρός και πίσω χωρίς τη χρήση της βιβλιοθήκης του Arduino για να κατανοήσουμε καλύτερα τη λειτουργία του. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιηθούν τα ακόλουθα εξαρτήματα. Ένας διπολικός βηματικός κινητήρας. Μία Διπλή H-Bridge L293D. Δύο pushbuttons. Δύο αντιστάσεις των 10KΩ. Θεωρητική παρουσίαση Ο πίνακας της εικόνα 9.5 παρακάτω, δείχνει την ακολουθία των βημάτων που απαιτούνται για να περιστραφεί ο κινητήρας ένα βήμα. Τα βήματα αυτά δίνονται από τον κατασκευαστή του κάθε κινητήρα. Εικόνα 9.5 Ο κώδικας που ακολουθεί Στον κώδικα που ακολουθεί φτιάξαμε τρεις νέες συναρτήσεις. Στην πρώτη initmotorpins() ορίζουμε τα pins του κινητήρα, και παίρνει ως παραμέτρους τα pins του arduino που έχουμε συνδέσει τον κινητήρα. Η επόμενη συνάρτηση Forward_1_step() δίνει την ακολουθία των βημάτων για να κινηθεί ο κινητήρας κατά 1 βήμα προς τα εμπρός, σύμφωνα με τον πίνακα της εικόνας 9.5. Αντίθετα η συνάρτηση Backward_1_step() δίνει την ακολουθία των βημάτων για να κινηθεί ο κινητήρας προς τα πίσω. Δεν αντιστρέφουμε τα HIGH με τα LOW, αλλά ακολουθούμε την Forward συνάρτηση από κάτω προς τα πάνω. Έπειτα μέσα στη συνάρτηση setup() καλούμε την initmotorpins() με τα pins στα οποία είναι συνδεδεμένος ο Arduino. Τέλος, σε αυτή την άσκηση θα περιστρέψουμε τον κινητήρα πατώντας δύο κουμπιά. Πατώντας το ένα θα κινείται προς τα εμπρός και πατώντας το άλλο θα κινείται προς τα πίσω. Αυτή η διαδικασία φαίνεται μέσα στο βρόγχο του κώδικα. 108

110 Κώδικας /* Example : 17 Περιστροφή βηματικού εμπρός και πίσω με τη χρήση κουμπιών και χωρίς Τη βιβλιοθήκη του Arduino. */ int delaytime = 10; void initmotorpins(int motorpin1,int motorpin2,int motorpin3,int motorpin4){ pinmode(motorpin1, OUTPUT); pinmode(motorpin2, OUTPUT); pinmode(motorpin3, OUTPUT); pinmode(motorpin4, OUTPUT); void Forward_1_step(int motorpin1,int motorpin2,int motorpin3,int motorpin4){ digitalwrite(motorpin1, HIGH); digitalwrite(motorpin2, LOW); digitalwrite(motorpin3, LOW); digitalwrite(motorpin4, HIGH); delay(delaytime); digitalwrite(motorpin1, HIGH); digitalwrite(motorpin2, LOW); digitalwrite(motorpin3, HIGH); digitalwrite(motorpin4, LOW); delay(delaytime); digitalwrite(motorpin1, LOW); digitalwrite(motorpin2, HIGH); digitalwrite(motorpin3, HIGH); digitalwrite(motorpin4, LOW); delay(delaytime); digitalwrite(motorpin1, LOW); digitalwrite(motorpin2, HIGH); digitalwrite(motorpin3, LOW); digitalwrite(motorpin4, HIGH); delay(delaytime); void Backward_1_step(int motorpin1,int motorpin2,int motorpin3,int motorpin4){ //ανάποδα το Forward από κάτω προς τα πάνω digitalwrite(motorpin1, LOW); digitalwrite(motorpin2, HIGH); digitalwrite(motorpin3, LOW); digitalwrite(motorpin4, HIGH); delay(delaytime); digitalwrite(motorpin1, LOW); digitalwrite(motorpin2, HIGH); digitalwrite(motorpin3, HIGH); digitalwrite(motorpin4, LOW); delay(delaytime); digitalwrite(motorpin1, HIGH); digitalwrite(motorpin2, LOW); digitalwrite(motorpin3, HIGH); digitalwrite(motorpin4, LOW); delay(delaytime); digitalwrite(motorpin1, HIGH); digitalwrite(motorpin2, LOW); digitalwrite(motorpin3, LOW); 109

111 digitalwrite(motorpin4, HIGH); delay(delaytime); void setup() { initmotorpins(8,9,10,11); void loop() { if(digitalread(2)==high){ Backward_1_step(8,9,10,11); if(digitalread(3)==high){ Forward_1_step(8,9,10,11); Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης είναι ίδια με αυτή της προηγούμενης άσκησης και φαίνεται στην εικόνα 9.6. Εικόνα 9.6 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Αν χρειάζεται συνδέστε και την εξωτερική τροφοδοσία. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 110

112 Σχηματικό διάγραμμα Εικόνα 9.7 Αποτελέσματα Σε αυτό το παράδειγμα, είδαμε πώς μπορούμε να περιστρέψουμε έναν βηματικό κινητήρα χωρίς να χρειάζεται να χρησιμοποιήσουμε τη βιβλιοθήκη που διαθέτει ο Arduino. Αυτό η άσκηση μπορεί να γίνει η αρχή για να χτίσουμε μια δική μας βιβλιοθήκη αναφορικά με τον βηματικό κινητήρα. Συμπεράσματα Με αυτό το παράδειγμα ολοκληρώσαμε την ενότητα του βηματικού κινητήρα, κατανοώντας καλύτερα τη λειτουργία του. Επέκταση Δείτε ένα πιο απτό παράδειγμα χρήσης του βηματικού κινητήρα εδώ : 111

113 10. Πιεζοηλεκτρικοή στοιχειήο παραγωγηή ς ηή χου 10.1 Αναπαραγωγή ακολουθίας από νότες Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι η παρουσίαση νέων εντολών και βιβλιοθηκών του Arduino και η χρήση ενός ακόμη νέου εξαρτήματος, ενός πιεζοηλεκτρικού στοιχείου. Σε αυτή τη άσκηση θα χρησιμοποιήσουμε τον Arduino για την αναπαραγωγή ήχου, και πιο συγκεκριμένα, για την αναπαραγωγή μιας ακολουθίας από νότες. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρειαστούμε τα ακόλουθα εξαρτήματα. Ένα πιεζοηλεκτρικό στοιχείο για παραγωγή ήχου. Μία αντίσταση των 100Ω. Θεωρητική παρουσίαση Ένα πιεζοηλεκτρικό στοιχείο είναι ένα εξάρτημα που μπορεί να χρησιμοποιηθεί και για να παίζει νότες και μελωδίες. Ουσιαστικά παράγει μονοτονικούς ήχους, δηλαδή, ήχους που αποτελούνται από μία συχνότητα. Αποτελείται από ένα μικρό κεραμικό αισθητήριο, το οποίο παράγει ήχο όταν πάλλεται. Ο ήχος παράγεται από δονήσεις του αέρα. Ο ήχος έχει μια ξεχωριστή συχνότητα όταν η δόνηση επαναλαμβάνεται τακτικά. Ο Arduino μπορεί να δημιουργήσει ήχο με ένα πιεζοηλεκτρικό στοιχείο, μετατρέποντας τις ηλεκτρικές δονήσεις σε παλμούς για το ηχείο που πάλλουν τον αέρα. Η συχνότητα του ήχου καθορίζεται από το χρόνο που χρειάζεται για το ηχείο να πάλλεται. Όσο μικρότερο το χρονικό διάστημα, τόσο υψηλότερη η συχνότητα. Η ακτίνα της ανθρώπινης ακοής κυμαίνεται από 20Hz μέχρι και Hz. Ο ήχος που παράγεται από ένα πιεζοηλεκτρικό ηχείο είναι περιορισμένος και δεν ακούγεται πολύ μουσικός. Η έξοδος που δίνει είναι ένα τετραγωνικό σήμα παλμού, όπως φαίνεται στην εικόνα Στο συγκεκριμένο εξάρτημα αν εφαρμόσουμε στα άκρα του ένα ψηφιακό σήμα τετραγωνικού παλμού συχνότητας f και κύκλου εργασίας DC=0,5 ή 50%, όπως αυτό που φαίνεται στην ακόλουθη εικόνα, παράγεται ήχος συχνότητας f ίδιας με τη συχνότητα του τετραγωνικού παλμού. 112

114 Εικόνα 10.1 Στο σετ εντολών του Arduino υπάρχει η εντολή tone η οποία παράγει τετραγωνικούς παλμούς, όπως αυτός που φαίνεται στην εικόνα η εντολή αυτή συντάσσεται με τον ακόλουθο τρόπο. tone (PinNumber, frequency) : όπου η παράμετρος PinNumber είναι ο αριθμός του PIN στο οποίο θα γίνει η έξοδος του τετραγωνικού παλμού. Το PIN αυτό πρέπει προηγουμένως να το έχουμε ορίσει ως ψηφιακή έξοδο. Η παράμετρος frequency είναι η συχνότητα του τετραγωνικού παλμού που θέλουμε να παράγουμε στο συγκεκριμένο PIN. tone(pinnumber, frequency,duration) : Αυτή η παραλλαγή της εντολής διαφέρει από την προηγούμενη μόνο ως προς μία παράμετρο, η οποία είναι προαιρετική, την duration που καθορίζει την διάρκεια που θα έχει τετραγωνικός παλμός στο PIN εξόδου σε milliseconds. Ουσιαστικά όταν δεν χρησιμοποιείται αυτή η παράμετρος ο τετραγωνικός παλμός συνεχίζει να παράγεται στην έξοδο χωρίς να σταματάει εκτός και εάν χρησιμοποιήσουμε την εντολή notone(pinnumber) για να τον διακόψουμε. Για παράδειγμα, Αν θεωρήσουμε ότι έχουμε ορίσει το PIN 12 ως ψηφιακή έξοδο, τότε η εντολή : tone (12, 1000, 2000); παράγει έναν τετραγωνικό παλμό στο PIN 12 συχνότητας 1000Ηz και διάρκειας 2 δευτερολέπτων. Η εντολή αυτή θα έχει το ίδιο αποτέλεσμα με την εξής ακολουθία εντολών : tone (12, 1000); delay(2000); notone(12); Παρακάτω δίνεται ο κώδικας της άσκησης, που αναπαράγει μία ακολουθία από νότες, και επαναλαμβάνεται συνέχεια. Κώδικας /* Example : 18 Η εφαρμογή αυτή παίζει την κλίμακα του ντο στο κλειδί του Σολ κανονικά και αντίστροφα. 113

115 Οι νότες αναπαράγονται σε ένα πιεζοηλεκτρικό στοιχείο. */ // Οι σταθερές με τις Νότες ========================================== const int c const int d = const int e = const int f = const int g = const int a = const int b = const int C = = 261;// 261 Hz 294;// 294 Hz 329;// 329 Hz 349;// 349 Hz 392;// 392 Hz 440;// 440 Hz 493;// 493 Hz 523;// 523 Hz //================================== const int speakerout = 9;//Το pin εξόδου του πιεζοηλεκτρικού ηχείου int count = 0; /*Βοηθητική μεταβλητή που δείχνει ποια νότα θα αναπαραχθεί. */ int updown = 1; /*Βοηθητική μεταβλητή που ρυθμίζει το αν το count θα αύξανεται ή θα μειώνεται. */ void setup() { pinmode(speakerout, OUTPUT); void loop(){ /* Ανάλογα με την τιμή που έχει η μεταβλητή updown παίζεται στην έξοδο η ανάλογη νότα. */ switch(count){ case -1: updown=1; break; case 0: tone(speakerout, c); delay(700); notone(speakerout); break; case 1: tone(speakerout, d); delay(700); notone(speakerout); break; case 2: tone(speakerout, e); delay(700); notone(speakerout); break; case 3: tone(speakerout, f); delay(700); notone(speakerout); break; case 4: tone(speakerout, g); delay(700); 114

116 notone(speakerout); break; case 5: tone(speakerout, a); delay(700); notone(speakerout); break; case 6: tone(speakerout, b); delay(700); notone(speakerout); break; case 7: tone(speakerout, C); delay(700); notone(speakerout); break; case 8: updown=0; break; /* Ανάλογα με την τιμή της μεταβλητής updown η μεταβλητή count αυξάνεται ή μειώνεται, ώστε στην επόμενη επανάληψη να παιχτεί η επόμενη νότα. */ if(updown==1){ count+=1; else if(updown==0){ count-=1; 115

117 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα Εικόνα 10.2 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 116

118 Σχηματικό διάγραμμα Αποτελέσματα Εικόνα 10.3 Αφού εκτελέσουμε αυτό το παράδειγμα, αυτό που ακούμε είναι η κλίμακα του Ντο στο κλειδί του Σολ. Αρχικά ανεβαίνει την κλίμακα, μετά κατεβαίνει, και η διαδικασία επαναλαμβάνεται. Συμπεράσματα Είδαμε, λοιπόν, ένα πρώτο απλό παράδειγμα αναπαραγωγής ήχου με τον Arduino. Χρησιμοποιήσαμε ένα νέο εξάρτημα και μάθαμε νέες εντολές. Επέκταση Δοκιμάστε να προσθέσετε ακόμα ένα ή δύο πιεζοηλεκτρικά ηχεία στο κύκλωμά σας, όπως φαίνεται στην εικόνα Προσπαθήστε να παράγετε διαφορετικούς τόνους στα ηχεία σας. Προσέξτε, ότι για να παράγεται έναν τόνο στο ένα ηχείο, θα πρέπει προηγουμένως να σταματήσετε την παραγωγή τόνου στο άλλο ηχείο. 117

119 Εικόνα 10.4 Τον κώδικα αυτής της επέκτασης μπορείτε να τον βρείτε και εδώ : 118

120 10.2 Fire alarm! Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι να χρησιμοποιήσουμε τις έως τώρα γνώσεις μας και να τις συνδυάσουμε για να δημιουργήσουμε ένα πρόγραμμα που υλοποιεί ένα σύστημα συναγερμού. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Ένα πιεζοηλεκτρικό στοιχείο για παραγωγή ήχου. Ένας αισθητήρας θερμοκρασίας LM35. Θεωρητική παρουσίαση Θα χρησιμοποιήσουμε τον αισθητήρα θερμοκρασίας που είδαμε στην ενότητα 7.4. αλλά και τον κώδικα, στον οποίο βέβαια, θα κάνουμε κάποιες αλλαγές. Η εφαρμογή αυτή παίρνει μετρήσεις θερμοκρασίας. Όταν η τιμή της θερμοκρασίας ξεπερνάει ένα όριο τότε ενεργοποιείται ένας συναγερμός. Κώδικας /* Example : 19 Η εφαρμογή αυτή παίρνει μετρήσεις θερμοκρασίας. Όταν η τιμή της θερμοκρασίας ξεπερνάει ένα όριο τότε ενεργοποιείται ένας συναγερμός. Στο pin 9 συνδέεται το πιεζοηλεκτρικό στοιχείο το οποίο παράγει τον ήχο του συναγερμού. Στο pin 3 των αναλογικών εισόδων συνδέεται ο αισθητήρας της θερμοκρασίας. */ const int analogpin = 3; /*Αυτό είναι το Pin εισόδου του αναλογικού σήματος.*/ const int speakerout = 9;/*Το pin εξόδου του πιεζοηλεκτρικού ηχείου*/ int analogin=0; /*Σε αυτόν τον καταχωρητή αποθηκεύεται το αποτέλεσμα της μέτρησης της αναλογικής εισόδου.*/ const int MaxTemp= 36; /*Πάνω από αυτή την τιμή μέτρησης θερμοκρασίας ενεργοποιείται ο συναγερμός. */ const int MinTemp= 27; /*Κάτω από αυτή την τιμή μέτρησης θερμοκρασίας απενεργοποιείται ο συναγερμός. */ void setup() { analogreference(default); /*Στο σημείο αυτό ορίζεται η τάση αναφοράς του ADC που βρίσκεται ενσωματωμένος στον μικροεπεξεργαστή*/ pinmode(speakerout, OUTPUT); Serial.begin(9600); /*Αρχικοποίηση της σειριακής επικοινωνίας.*/ delay(1000); void loop() { analogin = analogread(analogpin); /*Διάβασε την τιμή από τον αισθητήρα. */ analogin = (5.0 * analogin *100.0)/1024.0; /* Μετέτρεψε τα 119

121 αναλογικά δεδομένα σε θερμοκρασία. */ /*Στις επόμενες γραμμές γίνεται η σειριακή μετάδοση της μέτρησης*/ Serial.print("Analog value: "); Serial.println(analogIn); Serial.print("\b C\n"); delay(1000); if(analogin>=maxtemp){ //Ενεργοποίηση συναγερμού. for(int i=0;i<4;i++){ beep(50); if(analogin<=mintemp){ //Απενεργοποίηση συναγερμού. notone(9); void beep(unsigned char delayms){ analogwrite(speakerout, 20); /* Σχεδόν οποιαδήποτε τιμή μπορεί να χρησιμοποιηθεί εκτός από το 0 και το 255. Πειραματιστείτε ώστε να βρείτε τον καλύτερο Τόνο. */ delay(delayms); // περίμενε για delayms microseconds analogwrite(speakerout, 0); // το 0 το απενεργοποιεί delay(delayms); // περίμενε για delayms microseconds 120

122 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα Εικόνα 10.5 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε το παράθυρο της κονσόλας. 121

123 Σχηματικό διάγραμμα Αποτελέσματα Εικόνα 10.6 Μετά την εκτέλεση του προγράμματος, παρατηρούμε ότι όταν ανεβαίνει η θερμοκρασία του αισθητήρα (όταν πλησιάζουμε, για παράδειγμα, έναν αναπτήρα) και περνάει το ανώτατο όριο που έχουμε θέσει, ενεργοποιείται ο συναγερμός, καλώντας τη συνάρτηση beep(). Αν πέσει ξανά η θερμοκρασία ο συναγερμός σταματάει καλώντας τη συνάρτηση notone(). Προσέξτε όταν η θερμοκρασία πέσει από το μέγιστο όριο αλλά δεν έχει φτάσει ακόμα το ελάχιστο, ότι ο συναγερμός εξακολουθεί να χτυπάει. Αντίστοιχα, όταν ανεβαίνει η θερμοκρασία αλλά δεν έχει φτάσει ακόμα τη μέγιστη ο συναγερμός δε χτυπάει. Αυτή η διαφορά μεταξύ των δύο τιμών λέγεται υστέρηση. Τη χρησιμοποιούμε γιατί αν είχαμε την ίδια τιμή αλλαγής κατάστασης ο arduino θα μπερδευόταν και δε θα ήξερε πότε έπρεπε να απενεργοποιήσει ή να ενεργοποιήσει το συναγερμό. Συμπεράσματα Σε αυτό το παράδειγμα είδαμε μια πιο ολοκληρωμένη εφαρμογή και συνδυάσαμε γνώσεις τόσο από το νέο κεφάλαιο όσο και από προηγούμενα. Επέκταση Δοκιμάστε να συνδέσετε αντί για τον αισθητήρα θερμοκρασίας, ένα αισθητήρα φωτός LDR, όπως φαίνεται στην εικόνα Τροποποιήστε τον κώδικα, ώστε το ηχείο να αναπαράγει συχνότητες ανάλογα με το φως που δέχεται. Θα πρέπει να χρησιμοποιήσετε τη συνάρτηση map() ώστε να κλιμακώσετε τις τιμές που δέχεστε από τον αισθητήρα φωτός σε συχνότητες Hz, που αναπαράγει το ηχείο. 122

124 Εικόνα 10.7 Τον κώδικα αυτής της επέκτασης μπορείτε να τον βρείτε και εδώ : 123

125 11. Ρελεέ 11.1 Εναλλάξ Flashing μεταξύ 2 LEDs Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα δούμε μία πιο προχωρημένη άσκηση από πλευράς κυκλώματος. Θα χρησιμοποιήσουμε έναν διαφορετικό διακόπτη ο οποίος πραγματοποιεί εναλλάξ «άναψε- σβήσε» μεταξύ των δυο LED. Αυτός ο διακόπτης λέγεται ρελέ και έχει μεγάλο ενδιαφέρον η λειτουργία του. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Ένα Ρελέ Ένα τρανζίστορ P2N2222AG Μία Δίοδο Δύο αντιστάσεις των 220Ω Ένα Πράσινο Led Ένα Κόκκινο Led Μία αντίσταση των 2.2kΩ Θεωρητική παρουσίαση Το ρελέ είναι ένας μηχανικός διακόπτης, ηλεκτρικά ελεγχόμενος. Μέσα στο μικρό πλαστικό κουτί, από το οποίο αποτελείται, υπάρχει ένα πηνίο που, όταν ενεργοποιείται, έλκει έναν μοχλό και αλλάζει επαφή στον διακόπτη (συχνά συνοδευόμενη από έναν ικανοποιητικό ήχο κλικ). Στην εικόνα 11.1 φαίνεται το σχηματικό ενός ρελέ. Εικόνα 11.1 Τα περισσότερα πηνία απαιτούν περισσότερη τάση από αυτή που μπορεί να παρέχει ο Arduino και γι αυτό χρησιμοποιείται ένα τρανζίστορ για να επαυξήσει το ρεύμα που χρειάζεται το πηνίο για να λειτουργήσει. Επίσης, στο κύκλωμα προσθέτουμε και μια δίοδο προστασίας ανάστροφα πολωμένη παράλληλα στο πηνίο του ρελέ. Ανάστροφα πολωμένη σημαίνει πως ο θετικός πόλος της πηγής συνδέεται με την κάθοδο, ενώ ο αρνητικός με την άνοδο. Η δίοδος έχει μία λεπτή ασημένια γραμμή στο ένα άκρο της, η οποία είναι η κάθοδος. Ο σκοπός της διόδου είναι να προστατέψει το τρανζίστορ από το υψηλό αντίθετο ρεύμα αυτεπαγωγής που δημιουργείται στο πηνίο του ρελέ και αυτό επιτυγχάνεται αντιστρέφοντας την πολικότητά του. 124

126 Τέλος, έχουμε συνδέσει τα 2 LEDs στα 2 ποδαράκια του ρελέ ώστε όταν περνάει ρεύμα και κλείνει ο ένας διακόπτης να ανάβει το ένα LED και όταν ανοίγει ο διακόπτης να ανάβει το άλλο. Παρακάτω είναι ο κώδικας της άσκησης, ο οποίος είναι ίδιος με αυτόν που χρησιμοποιήσαμε στο πρώτο παράδειγμά μας! Εμείς παρέχουμε στο pin που είναι συνδεδεμένο το ρελέ τάση 5V και τάση 0V μετά από ένα δευτερόλεπτο και το ρελέ αναβοσβήνει αυτόματα τα 2 LEDs. Κώδικας /*Example : 20 Εναλλάξ Flashing μεταξύ 2 LEDs. */ int ledpin = 2; // Το pin που είναι συνδεδεμένο το ρελέ. void setup() { // Αρχικοποίηση του ψηφιακού pin ως έξοδο. pinmode(ledpin, OUTPUT); void loop() { digitalwrite(ledpin, HIGH); delay(1000); digitalwrite(ledpin, LOW); delay(1000); // ανάβει το LED // περίμενε ένα δευτερόλεπτο // σβήνει το LED // περίμενε ένα δευτερόλεπτο 125

127 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα Εικόνα 11.2 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 126

128 Σχηματικό διάγραμμα Εικόνα 11.3 Αποτελέσματα Μετά την εκτέλεση παρατηρούμε ότι τα 2 LEDs αναβοσβήνουν αυτόματα και κάθε φορά που ανάβει το ένα και σβήνει το άλλο ακούγεται ένα χαρακτηριστικό κλικ. Συμπεράσματα Σε αυτή την άσκηση είδαμε τη χρήση και τη λειτουργία ενός ρελέ. Είδαμε ότι με ένα πολύ απλό πρόγραμμα το ρελέ αυτόματα λειτούργησε σα διακόπτης. Η χρήση του ρελέ, λοιπόν, είναι πολύ σημαντική γιατί μπορεί και αυτοματοποιεί μια διαδικασία. 127

129 12. Liquid Crystal Display-LCD 12.1 Εμφάνιση του Hello World στην οθόνη. Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι η γνωριμία μας με μία νέα βιβλιοθήκη του Arduino, τη Liquid Crystal. Σε αυτή την άσκηση θα χρησιμοποιήσουμε μία οθόνη LCD, θα μάθουμε τη συνδεσμολογία της και τι μπορούμε να κάνουμε με αυτή. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Μία Οθόνη LCD Ένα ποτενσιόμετρο Θεωρητική παρουσίαση Πριν προχωρήσουμε στο πρόγραμμα θα κάνουμε μια εισαγωγή τόσο στη βιβλιοθήκη Liquid Crystal όσο και στη συνδεσμολογία της οθόνης. Η βιβλιοθήκη Liquid Crystal μας επιτρέπει να ελέγχουμε οθόνες LCD που είναι συμβατές με τον οδηγό HD44780 της Hitachi. Υπάρχουν πολλά ήδη οθονών και αυτές μπορούμε να τις ξεχωρίσουμε συνήθως από τη διασύνδεση των 16 pins. Οι οθόνες LCDs έχουν μία παράλληλη διασύνδεση, πράγμα που σημαίνει ότι ο μικροεπεξεργαστής πρέπει να χειριστεί διαφορετικά pins διασύνδεσης με τη μία, ώστε να ελέγχει αυτό που εμφανίζεται. Η διασύνδεση αποτελείται από τα ακόλουθα pins : Ένα pin επιλογής καταχωρητή (RS) που ελέγχει σε ποιο σημείο της μνήμης της LCD θα γράψουμε τα δεδομένα. Μπορούμε να επιλέξουμε είτε τον καταχωρητή δεδομένων, ο οποίος κρατάει αυτά που εμφανίζονται στην οθόνη, είτε έναν καταχωρητή εντολών, ο οποίος είναι εκείνος που ψάχνει ο ελεγκτής της LCD για να βρει οδηγίες για το τι να κάνει μετά. Ένα pin ανάγνωσης/εγγραφής (R/W) που επιλέγει κατάσταση ανάγνωσης ή εγγραφής. Ένα pin εξουσιοδότησης (Enable pin) που επιτρέπει να γίνεται εγγραφή στον καταχωρητή. 8 pins δεδομένων (D0-D7). Οι καταστάσεις αυτών των pins (high ή low) είναι τα bits που γράφουμε στον καταχωρητή κατά την εγγραφή, ή οι τιμές που διαβάζουμε κατά την ανάγνωση. Υπάρχει επίσης, ένα pin αντίθεσης (Vo), τα pins της παροχής ρεύματος (+5V και γείωση), και ένα pin για το Backlight LED της οθόνης(bklt+, Bklt-), τα οποία τα χρησιμοποιούμε για να ελέγξουμε την αντίθεση της οθόνης, την τροφοδοσία της οθόνης, και το άναμμα ή σβήσιμο του backlight LED της οθόνης, αντίστοιχα. Στην εικόνα 12.1 παρακάτω, φαίνεται το σχηματικό μιας LCD 16x2. 128

130 Εικόνα 12.1 Η διαδικασία ελέγχου της οθόνης εμπεριέχει την τοποθέτηση των δεδομένων στους καταχωρητές δεδομένων και μετά την τοποθέτηση εντολών στους καταχωρητές εντολών. Η βιβλιοθήκη Liquid Crystal απλοποιεί αυτή τη διαδικασία και δε χρειάζεται να γνωρίζουμε εντολές χαμηλού επιπέδου. Οι οθόνες LCDs που είναι συμβατές με τη Hitachi μπορούν να χειριστούν σε δύο καταστάσεις : 4-bit ή 9-bit. Η κατάσταση 4-bit απαιτεί 7 pins εισόδου/εξόδου, ενώ η κατάσταση 8-bit απαιτεί 11. Για την εμφάνιση κειμένου στην οθόνη μπορούμε να κάνουμε σχεδόν τα πάντα με τη χρήση 4-bit, έτσι στο παράδειγμα που ακολουθεί φαίνεται πώς μπορούμε να χειριστούμε μία οθόνη διαστάσεων 2x16 σε κατάσταση 4- bit. Πριν προχωρήσουμε θα εξετάσουμε τις εντολές που περιέχει η βιβλιοθήκη Liquid Crystal. #include <LiquidCrystal.h> : Στην αρχή του προγράμματος θα ορίσουμε τη νέα βιβλιοθήκη που θα χρειαζόμαστε. LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7) : Δημιουργεί μία μεταβλητή τύπου Liquid Crystal και ορίζουμε τα pins του Arduino που είναι συνδεδεμένη η οθόνη. Από αυτά το pin rw είναι προαιρετικό και από τα d0-d7 γράφουμε εκείνα που είναι συνδεδεμένα με τον arduino. Τα d0, d1, d2, d3 είναι προαιρετικά και αν παραλειφθούν η LCD θα ελέγχεται μόνο από τα pins d4-d7. lcd.begin(cols, rows) : Η begin() καθορίζει τις διαστάσεις της οθόνης. Οι παράμετροι που δέχεται είναι οι στήλες και μετά οι γραμμές. lcd.setcursor(col, row) : Η setcursor() τοποθετεί τον κέρσορα της LCD στο σημείο που θα ορίσουμε. Σε εκείνο το σημείο θα τυπωθεί το κείμενο που ακολουθεί. lcd.print(data) : Η print() τυπώνει το κείμενο στην LCD. Πηγή : 129

131 Κώδικας /* Example : 21 LiquidCrystal Library - Hello World Τυπώνει Hello World στην οθόνη LCD και μετράει το χρόνο. * το pin LCD RS στο ψηφιακό pin 12 * το pin LCD Enable pin στο ψηφιακό pin 11 * το pin LCD D4 pin στο ψηφιακό pin 5 * το pin LCD D5 pin στο ψηφιακό pin 4 * το pin LCD D6 pin στο ψηφιακό pin 3 * το pin LCD D7 pin στο ψηφιακό pin 2 * το pin LCD R/W pin στη γείωση * η αντίσταση 10K καταλήγει στα +5V και στη γείωση */ // Εισάγω τη βιβλιοθήκη. #include <LiquidCrystal.h> /* Αρχικοποίηση της βιβλιοθήκης με τα pins που συνδέεται η οθόνη με τον Arduino. */ LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); int backlight = 13; //Ορίζω το pin που θα ελέγχει το backlight void setup() { pinmode(backlight, OUTPUT); //Ορίζω το pin 13 ως έξοδο. digitalwrite(backlight, HIGH); // Ανάβω το backlight της οθόνης. // Ορίζω τις στήλες της LCD: lcd.begin(16, 2); // Τυπώνω ένα μήνυμα στην LCD. lcd.print("hello, world!"); void loop() { // Ορίζω τον κέρσορα να είναι στη στήλη 0 και στη γραμμή 1. // (Σημείωση: η γραμμή 1 είναι η δεύτερη, γιατί μετράει από το 0. lcd.setcursor(0, 1); /* Τύπωσε τον αριθμό των δευτερολέπτων από την τελευταία φορά από την επανεκκίνηση του Arduino. */ lcd.print(millis()/1000); 130

132 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα Εικόνα 12.2 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. 131

133 Σχηματικό διάγραμμα Αποτελέσματα Εικόνα 12.3 Αυτό το παράδειγμα τυπώνει Hello World! στην οθόνη και δείχνει την ώρα σε δευτερόλεπτα από την τελευταία φορά που έγινε επανεκκίνηση στον Arduino.Στην αρχή, αρχικοποιεί την οθόνη και τυπώνει το κείμενο. Εφόσον δεν έχουμε ορίσει τον κέρσορα, το κείμενο θα ξεκινήσει να τυπώνεται από το (0,0). Μέσα στο βρόχο ορίζει τον κέρσορα στη δεύτερη γραμμή και στην πρώτη στήλη και εκεί χρησιμοποιώντας τη συνάρτηση millis() τυπώνει τα δευτερόλεπτα που πέρασαν από την τελευταία φορά που έγινε επανεκκίνηση στον Arduino. Επειδή η συνάρτηση millis() επιστρέφει χιλιοστά του δευτερολέπτου, διαιρώντας τη με 1000 παίρνουμε τα δευτερόλεπτα. Τέλος, περιστρέφοντας το ποτενσιόμετρο που συνδέσαμε ρυθμίζουμε την αντίθεση της οθόνης. Συμπεράσματα Σε αυτή την ενότητα γνωρίσαμε μία καινούρια σημαντική βιβλιοθήκη του Arduino και μάθαμε πώς μπορούμε να χρησιμοποιούμε μια LCD οθόνη για να τυπώνουμε κείμενο. Επέκταση Πειραματιστείτε με την LCD οθόνη τυπώνοντας το δικό σας κείμενο και αλλάζοντας θέση στον κέρσορα. 132

134 12.2 Εμφάνιση στην οθόνη ειδικών χαρακτήρων - συμβόλων. Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι να μάθουμε πώς μπορούμε να χρησιμοποιούμε ειδικούς χαρακτήρες που περιέχει η μνήμη της οθόνης μας αλλά και πως μπορούμε να δημιουργήσουμε μόνοι μας σύμβολα και να τα εμφανίζουμε στην οθόνη. Θεωρητική παρουσίαση Ο οδηγός της Hitachi που ακολουθεί η οθόνη μας έχει έναν αριθμό από ειδικούς χαρακτήρες, όπως τα Ω, π,, κ.α. στα οποία μπορούμε να έχουμε πρόσβαση χρησιμοποιώντας έναν κώδικα που λέει στην οθόνη ποιο σύμβολο να εμφανίσει. Η βιβλιοθήκη Liquid Crystal μας επιτρέπει να δημιουργήσουμε μέχρι και οχτώ χαρακτήρες, που μπορούν να τυπωθούν ως κωδικοί χαρακτήρων από το 0 έως το 8. Κάθε χαρακτήρας στην οθόνη σχηματίζεται σε ένα πλέγμα των 5x8 pixels. Για να δημιουργήσουμε εμείς ένα χαρακτήρα, αυτό που χρειάζεται να κάνουμε είναι ένας πίνακας των 8 bytes. Κάθε byte καθορίζει τη γραμμή σε ένα χαρακτήρα. Όταν το γράφουμε ως δυαδικό αριθμό, το 1 υποδεικνύει ότι το pixel είναι αναμμένο, ενώ το 0 ότι δεν είναι. Στην εικόνα δίπλα, φαίνεται το πλέγμα 5x8 στο οποίο είναι σχηματισμένο το σύμβολο του ohm. Στον κώδικα αυτού του συμβόλου, τα γκρι pixels θα σημειώνονται με ένα και τα άσπρα με 0. Στο πρόγραμμά μας θα χρησιμοποιήσουμε μερικές ακόμα νέες εντολές της βιβλιοθήκης Liquid Crystal. lcd.createchar(num, data) : Η εντολή αυτή δημιουργεί το χαρακτήρα. Στην πρώτη παράμετρο δηλώνουμε ποιο χαρακτήρα να δημιουργήσει (από το 0 έως το 7) και στη δεύτερη παράμετρο δηλώνουμε τα δεδομένα με τα pixel του χαρακτήρα. lcd.write(data): Η εντολή αυτή γράφει ένα χαρακτήρα στην οθόνη. Στην παράμετρο ορίζουμε τον που θέλουμε να γραφτεί στην οθόνη (από το 0 έως το 7). lcd.clear() : Η εντολή αυτή καθαρίζει την οθόνη και τοποθετεί τον κέρσορα στο (0,0), δηλαδή στην επάνω αριστερή γωνία. Κώδικας /* Example : 22 Εμφάνιση ειδικών συμβόλων και δημιουργία χαρακτήρων. */ #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11,10, 5, 4, 3, 2); //Σύμβολα που υπάρχουν στον οδηγό της οθόνης μας: byte degree = B ; //Σύμβολο βαθμών κελσίου. byte pi = B ; //Σύυμβολο του π. byte cents = B ; // Σύμβολο cents. byte sqrt = B ; //Σύμβολο τετραγωνικής ρίζας. byte omega = B ; //Σύμβολο μονάδας μέτρησης ohms. byte divide = B ; //Σύμβολο διαίρεσης. byte rgtarrow = B ; //Σύμβολο τόξου δεξιά. 133

135 byte lftarrow = B ; //Σύμβολο τόξου αριστερά. //Βάζουμε τα σύμβολα σε ένα πίνακα. byte symbols[]= {degree, pi, cents, sqrt, omega, divide, rgtarrow, lftarrow; //Σύμβολα που δημιουργούμε εμείς : //Χαρούμενο πρόσωπο. byte happy[] = { B00000, B10001, B00000, B00000, B10001, B01110, B00000, B00000 ; //Λυπημένο πρόσωπο. byte sad[] = { B00000, B10001, B00000, B00000, B01110, B10001, B00000, B00000 ; //Καρδιά. byte heart[] = { B00000, B01010, B11111, B11111, B01110, B00100, B00000, B00000 ; //Ψάρι. byte fish[]={ B10000, B00000, B01000, B10000, B01101, B11110, B01101, B00000 ; //Κλειδαριά. byte lock[]={ B00000, B01110, B10001, B10001, B11111, B11011, B11011, B11111, ; 134

136 //Ανοιχτή κλειδαριά. byte unlock[]={ B00000, B01110, B10001, B10000, B11111, B11011, B11011, B11111 ; //Ευρώ. byte euro[]={ B00011, B00100, B11110, B01000, B11110, B01000, B00111, B00000 ; //Κουδούνι. byte bell[]={ B00100, B01110, B01110, B01110, B11111, B00000, B00100, B00000 ; //Βάζουμε τους χαρακτήρες που δημιουργήσαμε σε έναν άλλο πίνακα. byte* characters[]={happy, sad, heart, fish, lock, unlock, euro, bell; void setup(){ lcd.begin(16,2); //Αρχικοποίηση διαστάσεων οθόνης. pinmode(13, OUTPUT); //Ορίζω το pin 13 ως έξοδο. digitalwrite(13, HIGH); // Ανάβω το backlight της οθόνης. //Τυπώνουμε τα σύμβολα και τους χαρακτήρες. for (int i=0; i<8; i++){ lcd.setcursor(i*2,0); //Στην πρώτη γραμμή τα σύμβολα στη σειρά. lcd.write(symbols[i]);//τυπώνει στην οθόνη. lcd.createchar(i, ((byte*)characters[i])); /*Δημιουργούμε τους χαρακτήρες που φτιάξαμε.*/ lcd.setcursor(i*2,1); /*Στη δεύτερη γραμμή τους χαρακτήρες στη σειρά.*/ lcd.write(i);// Τυπώνει στην οθόνη. /*Μετά από 5 δευτερόλεπτα, στην πρώτη γραμμή εμφανίζεται μια πρόταση.*/ delay(5000); lcd.clear(); lcd.print("i "); lcd.write(2); /*Εμφανίζει το τρίτο κατά σειρά σύμβολο που δημιουργήθηκε.*/ lcd.print(" Arduino! "); 135

137 void loop() { Υλοποίηση άσκησης Η συνδεσμολογία είναι ίδια με της προηγούμενης άσκησης και φαίνεται στην εικόνα Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Αποτελέσματα Αφού τρέξουμε το πρόγραμμα βλέπουμε ότι στην πρώτη γραμμή εμφανίζονται στη σειρά τα σύμβολα που υπάρχουν στη μνήμη της οθόνης μας και στη δεύτερη γραμμή εμφανίζονται τα σύμβολα που δημιουργήσαμε εμείς. Μετά από κάποια δευτερόλεπτα σβήνει ότι υπάρχει στην οθόνη και εμφανίζεται η πρόταση I <3 arduino!. Συμπεράσματα Σε αυτή την άσκηση μάθαμε, λοιπόν, πώς να χρησιμοποιούμε ήδη υπάρχοντα σύμβολα αλλά και να δημιουργούμε νέα. Επέκταση Δοκιμάστε να δημιουργήσετε τα δικά σας σύμβολα και να τα εμφανίσετε στην οθόνη. Μπορείτε να επισκεφτείτε την παρακάτω ιστοσελίδα για να πάρετε κάποιες ιδέες : Επίσης, χρησιμοποιήστε τα πρόσωπα happy-sad για να φτιάξετε ένα animation. Χρησιμοποιήστε μια μικρή καθυστέρηση ώστε να προλαβαίνετε να βλέπετε την εναλλαγή των προσώπων. 136

138 12.3 Blink. Στόχοι αυτής της άσκησης Και σε αυτή την άσκηση θα συνεχίσουμε να αναλύουμε καινούριες εντολές της βιβλιοθήκης Liquid Crystal για να μπορέσουμε να καλύψουμε ένα ευρύ φάσμα των δυνατοτήτων της LCD οθόνης. Θεωρητική παρουσίαση Στην άσκηση αυτή θα δείξουμε πώς μπορούμε να αναβοσβήνουμε τον κέρσορα και να ανάβουμε ή να σβήνουμε την οθόνη μας. Το πρόγραμμα καλεί την blink() και τη noblink(),που είναι συναρτήσεις που περιέχονται στη βιβλιοθήκη Liquid Crystal, για να αναβοσβήσει τον κέρσορα και να σταματήσει να αναβοσβήνει, αντίστοιχα. Ο κώδικας που αναβοσβήνει ολόκληρη την οθόνη είναι μία συνάρτηση που φτιάξαμε η displayblink() η οποία κάνει την οθόνη να αναβοσβήνει για κάποιες καθορισμένες φορές (εδώ 2). Η συνάρτηση αυτή καλεί τη συνάρτηση της βιβλιοθήκης LC lcd.nodisplay() η οποία σβήνει την οθόνη και την lcd.display() που ανοίγει την οθόνη, χωρίς όμως να χάνουν το κείμενο που εμφανίζεται από τη μνήμη. Κώδικας /* Example : 23 Blink */ #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); lcd.print("hello, world!"); //Τυπώνει το κείμενο. void loop() { pinmode(13, OUTPUT); digitalwrite(13, HIGH); lcd.setcursor(0, 1); //Τοποθετεί τον κέρσορα στη δεύτερη σειρά. lcd.print("cursor blink"); //Τυπώνει το κείμενο. lcd.blink(); //Αναβοσβήνει τον κέρσορα. delay(2000); lcd.noblink(); //Σταματά να αναβοσβήνει τον κέρσορα. lcd.print(" noblink"); //Τυπώνει το κείμενο. delay(2000); lcd.clear(); //Καθαρίζει την οθόνη. lcd.print("display off..."); //Τυπώνει το κείμενο. delay(1000); lcd.nodisplay(); //Σβήνει την οθόνη, χωρίς να χάνει το κείμενο. delay(2000); lcd.display(); //Ανοίγει την οθόνη, ανακτώντας το κείμενο. 137

139 lcd.setcursor(0, 0); //Τοποθετεί τον κέρσορα επάνω αριστερά. lcd.print(" display flash!"); displayblink(2, 250); //Καλεί τη συνάρτηση και αναβοσβήνει 2 φορές/ displayblink(2, 500); //Αναβοσβήνει ξανά με μεγαλύτερη διάρκεια. lcd.clear(); //Παράμετροι : πόσες φορές θέλουμε να αναβοσβήσει και διάρκεια. void displayblink(int blinks, int duration) { while(blinks--) { lcd.nodisplay(); delay(duration); lcd.display(); delay(duration); Υλοποίηση άσκησης Η συνδεσμολογία είναι ίδια με της προηγούμενης άσκησης και φαίνεται στην εικόνα Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Αποτελέσματα Παρατηρούμε λοιπόν, ότι αρχικά εμφανίζεται το κείμενο Hello World και από κάτω το κείμενο cursor blink ενώ δίπλα αναβοσβήνει ο κέρσορας. Μετά σταματά να αναβοσβήνει ο κέρσορας και εμφανίζεται το κείμενο no blink. Στη συνέχεια εμφανίζεται το κείμενο Display off.. και σβήνει η οθόνη για 2 δευτερόλεπτα, ενώ μετά ανοίγει και τυπώνει το κείμενο display flash το οποίο αναβοσβήνει 2 φορές γρήγορα και ακόμα 2 φορές με μεγαλύτερη διάρκεια. Συμπεράσματα Είδαμε και με αυτό το παράδειγμα μερικές ακόμα συναρτήσεις της βιβλιοθήκης Liquid Crystal καλύπτοντας ένα ευρύ φάσμα της. Επισκεφτείτε την παρακάτω ιστοσελίδα για να δείτε το σύνολο των εντολών : 138

140 12.4 Αποστολή σειριακών δεδομένων στην LCD. Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα δούμε πώς μπορούμε μέσω της σειριακής επικοινωνίας να στείλουμε δεδομένα στην οθόνη μας. Θεωρητική παρουσίαση Αυτό το παράδειγμα, δέχεται μια σειριακή είσοδο από τον υπολογιστή (π.χ. από την κονσόλα του υπολογιστή μας) και την εμφανίζει στην LCD οθόνη. Κώδικας /* Example : 24 Αποστολή σειριακών δεδομένων στην LCD οθόνη. */ #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11,10, 5, 4, 3, 2); void setup(){ lcd.begin(16, 2); //Αρχικοποίηση διαστάσεων οθόνης. Serial.begin(9600); //Αρχικοποίηση σειριακής επικοινωνίας. void loop() { // Όταν οι χαρακτήρες φράνουν στη σειριακή θύρα.. if (Serial.available()) { // περίμενε μέχρι να φτάσει ολόκληρο το μήνυμα. delay(100); // Καθάρισε την οθόνη. lcd.clear(); // Διάβασε όλους τους διαθέσιμους χαρακτήρες. while (Serial.available() > 0) { // Εμφάνσε κάθε χαρακτήρα στην οθόνη. lcd.write(serial.read()); Υλοποίηση άσκησης Η συνδεσμολογία είναι ίδια με της προηγούμενης άσκησης και φαίνεται στην εικόνα Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε την κονσόλα. 139

141 Αποτελέσματα Αν δοκιμάσουμε να πληκτρολογήσουμε δεδομένα στην κονσόλα του υπολογιστή μας, αυτά μεταφέρονται και εμφανίζονται στην LCD οθόνη. Συμπεράσματα Σε αυτό το παράδειγμα είδαμε πώς μπορούμε να χρησιμοποιήσουμε τη σειριακή επικοινωνία για να εμφανίσουμε δεδομένα στην LCD οθόνη Αποστολή αναλογικών μετρήσεων στην LCD. Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα συνδυάσουμε τις προηγούμενες γνώσεις μας και θα κάνουμε ένα πρόγραμμα που να εμφανίζει τις αναλογικές τιμές του αισθητήρα μας στην LCD οθόνη μαζί με κάποιο σύμβολο. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Μία Οθόνη LCD Ένα ποτενσιόμετρο. Έναν αισθητήρα θερμοκρασίας LM35. Μία αντίσταση στα 18ΚΩ. Θεωρητική παρουσίαση Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε τον κώδικα της ενότητας 7.4 και θα συμπληρώσουμε τις απαραίτητες εντολές ώστε να εμφανιστεί το αποτέλεσμα στην οθόνη LCD. Επίσης, τυπώνει δίπλα στη θερμοκρασία το σύμβολο και την περιγραφή των βαθμών κελσίου. Κώδικας /* Example : 25 Αυτό το πρόγραμμα διαβάζει την αναλογική τιμή από την έξοδο ενός αναλογικού αισθητήρα στη συνέχεια γίνεται σειριακή μεταφορά των δεδομένων στη σειριακή είσοδο του υπολογιστή και το αποτέλεσμα απεικονίζεται στην κονσόλα αλλά και στην οθόνη LCD. */ #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); int backlight = 13; const byte degreesymbol = B ; //Σύμβολο κελσίου. const int analogpin = 3; /*Αυτό είναι το Pin εισόδου του αναλογικού σήματος.*/ int analogin=0; /*Σε αυτόν τον καταχωρητή αποθηκεύεται το αποτέλεσμα της μέτρησης της αναλογικής εισόδου.*/ 140

142 void setup() { analogreference(default); pinmode(backlight, OUTPUT); digitalwrite(backlight, HIGH); lcd.begin(16,2); /*Αρχικοποίηση της οθόνης.*/ Serial.begin(9600); /*Αρχικοποίηση της σειριακής επικοινωνίας.*/ delay(1000); void loop() { analogin = analogread(analogpin); analogin = (5.0 * analogin *100.0)/1024.0; /*Μετατρέπει την αναλογική είσοδο σε θερμοκρασία.*/ /*Στις επόμενες γραμμές γίνεται η σειριακή μετάδοση της μέτρησης*/ Serial.print("Analog value: "); Serial.println(analogIn); Serial.print("\b C\n"); lcd.home(); /*Στις επόμενες γραμμές γίνεται η απεικόνιση στην LCD.*/ lcd.clear(); lcd.setcursor(0,0); lcd.print("analog value: "); lcd.setcursor(0,1); lcd.print(analogin); lcd.setcursor(3,1); showsymbol(degreesymbol, "degrees"); delay(2000); void showsymbol( byte symbol, char * description) { lcd.write(symbol); lcd.print(' '); lcd.print(description); 141

143 Υλοποίηση άσκησης Η συνδεσμολογία είναι ίδια με της προηγούμενης άσκησης και φαίνεται στην εικόνα Εικόνα 12.4 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε την κονσόλα. 142

144 Σχηματικό διάγραμμα Εικόνα

145 Αποτελέσματα Αυτό που παίρνουμε φαίνεται στην παρακάτω εικόνα Επίσης παίρνουμε το ίδιο αποτέλεσμα και στο Monitor του υπολογιστή μας. Εικόνα 12.6 Αποτελέσματα Με αυτή την άσκηση θα κλείσουμε την ενότητα της LCD οθόνης. Σε αυτή την ενότητα μάθαμε πώς να συνδέουμε την LCD οθόνη, να χρησιμοποιούμε τη βιβλιοθήκη Liquid Crystal, να παίρνουμε τα αποτελέσματά μας σε αυτή. Εδώ κλείνουμε, λοιπόν, την ενότητα αυτή. Παίξτε λίγο ακόμα με την οθόνη συνδυάζοντας προηγούμενα παραδείγματα, όπως παρακάτω. Επέκταση Δοκιμάστε με τον ίδιο τρόπο να συνδέσετε αυτή τη φορά μία φωτοαντίσταση, όπως στη ενότητα 7.3, και να εμφανίζεται στην οθόνη την αναλογική τιμή που λαμβάνετε, όπως επίσης, όταν προσπίπτει πολύ φως να εμφανίζεται ένα μήνυμα ότι σβήνουν τα φώτα και να σβήνει το backlight της οθόνης, ενώ όταν προσπίπτει λίγο φως να εμφανίζεται ένα μήνυμα ότι ανάβουν τα φώτα καν να ανάβει το backlight της οθόνης. Τα αποτελέσματα που θα παίρνετε θα πρέπει να είναι κάπως έτσι : Εικόνα 12.7 Εικόνα

146 13. IR remote control 13.1 Λήψη εντολών από ένα τηλεχειριστήριο και εμφάνισή τους σειριακά. Στόχοι αυτής της άσκησης Σε αυτή την ενότητα θα δούμε κάτι διαφορετικό από τα συνηθισμένα και ελπίζω ακόμη πιο ενδιαφέρον. Θα διασυνδέσουμε τον arduino με υπέρυθρο δέκτη (infra-red). Και γιατί να κάνουμε κάτι τέτοιο; Γιατί είναι μία ακόμη μέθοδος να ελέγξουμε τον arduino είναι η χρήση απλών υπέρυθρων τηλεχειριστήριων. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Ένα IR τηλεχειριστήριο. Ένα IR δέκτη. Θεωρητική παρουσίαση Τα τηλεχειριστήρια που χρησιμοποιούμε,για παράδειγμα, στις τηλεοράσεις, εκπέμπουν μία υπέρυθρη ακτίνα η οποία ενεργοποιείται και απενεργοποιείται σε πολύ μεγάλες ταχύτητες (συνήθως στα 38 khz) για να δημιουργήσει bits από σειριακά δεδομένα, τα οποία ερμηνεύονται από τη μονάδα-δέκτη. Εμείς σε αυτή την άσκηση θα χρησιμοποιήσουμε έναν IR δέκτη σαν αυτό που φαίνεται στη διπλανή εικόνα. Ένας IR δέκτης είναι ένα μικροτσίπ με ένα φωτοκύτταρο που ανιχνεύει τις υπέρυθρες ακτίνες. Μέσα σε ένα τηλεχειριστήριο υπάρχει ένα ίδιο IR LED το οποίο εκπέμπει παλμούς που λένε στην τηλεόραση να ανάψει, να σβήσει ή να αλλάξει κανάλι. Το υπέρυθρο φως δεν είναι ορατό από το ανθρώπινο μάτι. Όπως βλέπουμε στην εικόνα ο δέκτης μας έχει τρία ποδαράκια, τα οποία τα συνδέουμε από αριστερά προς τα δεξιά με το pin των δεδομένων, τα 5V, και τη γείωση. Πριν προχωρήσουμε όμως με την εκτέλεση του προγράμματος, θα αναλύσουμε την καινούρια βιβλιοθήκη που θα χρησιμοποιήσουμε. Η βιβλιοθήκη που θα χρησιμοποιήσουμε είναι η IRremote, η οποία δεν εμπεριέχεται στις ήδη υπάρχουσες βιβλιοθήκες του arduino και θα χρειαστεί να την κατεβάσουμε από εδώ : Αποσυμπιέστε το αρχείο και επικολλήστε το μέσα στο φάκελο..\ arduino-1.0\libraries. Θα χρειαστεί να κάνετε και μία μικρή αλλαγή. Ανοίξτε το αρχείο IRRemoteInt.h που βρίσκεται μέσα στο φάκελο της βιβλιοθήκης και στην αρχή του κώδικα αντικαταστήστε αυτή τη γραμμή κώδικα #include <WProgram.h> με την παρακάτω #include <Arduino.h>. Επανεκκινήστε το IDE. Τώρα είμαστε σχεδόν έτοιμοι να τρέξουμε το πρώτο πρόγραμμά μας. Θα δούμε πρώτα τις εντολές που χρησιμοποιεί η βιβλιοθήκη IRremote, οποία περιέχει μετατροπέα σήματος για τους τύπους τηλεχειριστηρίων που έχουν τα εξής πρωτόκολλα : NEC, Sony, Raw, RC5, RC6. #include <IRremote.h> : Εισάγουμε τη βιβλιοθήκη IRremote. 145

147 IRrecv irrecv(receiver) : Δημιουργεί ένα αντικείμενο τύπου IRrecv. decode_results results : Στη results αποθηκεύονται τα δεδομένα που επιστρέφονται από τον αποκωδικοποιητή. irrecv.enableirin() : Αρχίζει η λήψη από το δέκτη. irrecv.decode(&results) : Επιστρέφει 0 αν δεν είναι έτοιμα τα δεδομένα και 1 αν είναι. results.value : Επιστρέφει την τιμή των δεδομένων. irrecv.resume() : Χρησιμοποιείται για να συνεχίσει ο δέκτης να λαμβάνει δεδομένα. Κώδικας /* Example : 26 Λήψη εντολών από το τηλεχειριστήριο και εμφάνισή τους σειριακά στην οθόνη μας. */ #include <IRremote.h> //Χρησιμοποίησε τη βιβλιοθήκη IRremote. int receiver = 11; /* Το pin του IR δέκτη συνδέεται στο ψηφιακό pin 11 του Arduino.*/ IRrecv irrecv(receiver); // Δημιουργεί το αντικείμενο irrecv. decode_results results; void setup() { Serial.begin(9600); // Αρχικοποιεί τη σειριακή επικοινωνία. irrecv.enableirin(); // Αρχίζει τη λήψη. void loop() { if (irrecv.decode(&results)) // Αν δέχτηκε κάποιο IR σήμα.. { Serial.println(results.value, HEX); /* Εμφάνισέ το στο monitor σε δεκαεξαδική μορφή.*/ irrecv.resume(); // Πραγματοποίησε λήψη της επόμενης τιμής. /* Ο βρόγχος μπορεί να κάνει και άλλα πράγματα ενώ περιμένει το IR σήμα. */ 146

148 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα Εικόνα 13.1 Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Δεν είναι απαραίτητο να συνδέσετε εξωτερική πηγή τροφοδοσίας, καθώς τροφοδοσία παρέχεται μέσω της USB θύρας. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε την κονσόλα. Στρέψτε το τηλεχειριστήριο προς τον δέκτη και αρχίστε να πατάτε κουμπιά. 147

149 Αποτελέσματα Τα αποτελέσματα που θα πάρετε μοιάζουν με αυτά της εικόνας 13.2 Εικόνα 13.2 Αυτό που παίρνουμε είναι πολλοί δεκαεξαδικοί αριθμοί. Παρατηρήστε ότι κάθε κουμπί στο τηλεχειριστήριο αντιστοιχεί σε έναν ξεχωριστό δεκαεξαδικό. Ο αριθμός FFFFFFFF σημαίνει ότι κάποιο κουμπί πατιόταν συνέχεια. Επειδή κάθε τηλεχειριστήριο έχει διαφορετικά αποτελέσματα, πατήστε κάποια πλήκτρα και σημειώστε το δεκαεξαδικό τους κώδικα. Θα τον χρειαστούμε στο επόμενο παράδειγμα. Συμπεράσματα Σε αυτή την ενότητα έγινε μια εισαγωγή στη βιβλιοθήκη IRremote και στο πως μπορούμε να συνδέσουμε έναν υπέρυθρο δέκτη στον Arduino μας για να του στέλνουμε απομακρυσμένα σήματα. Στη συνέχεια θα δούμε πώς να χειριζόμαστε αυτά τα σήματα. Πηγή : 148

150 13.2 Blink με ένα τηλεχειριστήριο. Στόχοι αυτής της άσκησης Τώρα που ξέρουμε πώς να μετατρέπουμε την υπέρυθρη μαγεία σε αριθμούς, μπορούμε να δημιουργήσουμε προγράμματα ώστε να κάνουμε τον Arduino να ενεργεί σε συγκεκριμένες εντολές. Θεωρητική παρουσίαση Καθώς η βιβλιοθήκη IR επιστρέφει δεκαεξαδικούς αριθμούς, μπορούμε να χρησιμοποιήσουμε απλές συναρτήσης απόφασης για να ενεργήσουμε. Στο ακόλουθο παράδειγμα, χρησιμοποιούμε τη switch case για να εξετάσουμε τον εισερχόμενο κώδικα από το τηλεχειριστήριο και μετά εκτελεί την αντίστοιχη εντολή. Αντικαταστείτε τις τιμές που πήρατε από το τηλεχειριστήριό σας στο προηγούμενο παράδειγμα. Σε αυτό το παράδειγμα χρησιμοποιήθηκε το τηλεχειριστήριο LG REMOTE CONTROL MKJ Τέλος, πριν χρησιμοποιήσουμε το δεκαεξαδικό κώδικα προηγείται η χρήση των χαρακτήρων 0x. Στον παρακάτω κώδικα αναβοσβήνουμε ένα LED με ένα τηλεχειριστήριο. Κώδικας /* Example : 27 Blink με ένα τηλεχειριστήριο. */ #include <IRremote.h> int receiver = 11; /* Το pin του IR δέκτη συνδέεται στο ψηφιακό pin 11 του Arduino.*/ IRrecv irrecv(receiver); decode_results results; void setup() { pinmode(13, OUTPUT); // Ορισμός pin 13 ως έξοδο. Serial.begin(9600); irrecv.enableirin(); // Έναρξη λήψης. void translateir() // Ενεργεί βάση του IR κώδικα που λαμβάνει. /* Ανάλογα με τον IR κώδικα του τηλεχειριστηρίου λέει στον Arduino πώς να δράσει. */ { switch(results.value) { case 0x20DFC03F: { digitalwrite(13, HIGH); //Άναψε το LED. Serial.println("Lights on!"); break; case 0x20DF40BF : { digitalwrite(13, LOW);//Σβήσε το LED. Serial.println("Lights off!"); break; 149

151 delay(500); void loop() { if (irrecv.decode(&results)) // Αν δέχτηκε κάποιο IR σήμα.. { translateir(); //Κάλεσε τη συνάρτηση translateir(). επαναλαμβανόμενο σήμα.*/ irrecv.resume(); // Κάνε λήψη της επόμενης τιμής. Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης είναι ίδια με την προηγούμενη και φαίνεται στην εικόνα Συνδέστε την πλακέτα του Arduino μέσω της USB θύρας με τον υπολογιστή. Ανοίξτε στον υπολογιστή το περιβάλλον ανάπτυξης Εφαρμογών του Arduino και μέσα στην περιοχή κειμένου που προορίζεται για τη συγγραφή προγραμμάτων γράψτε τον κώδικα του παραδείγματος που παρουσιάσαμε πιο πάνω για το διάβασμα αναλογικής τιμής από τον αισθητήρα. Φορτώστε το πρόγραμμα στην μνήμη προγράμματος του μικροελεγκτή. Το πρόγραμμα αρχίζει να εκτελείτε αμέσως μετά τη φόρτωσή του. Ανοίξτε την κονσόλα. Στρέψτε το τηλεχειριστήριο προς τον δέκτη και αρχίστε να πατάτε κουμπιά. Αποτελέσματα Όταν πατάμε το πρώτο κουμπί που ορίσαμε το LED στο pin 13 ανάβει και στην κονσόλα εμφανίζεται το μήνυμα Lights on!, ενώ όταν πατάμε το δεύτερο κουμπί το LED σβήνει και στην κονσόλα εμφανίζεται το μήνυμα Lights off!. Συμπεράσματα Σκοπός, λοιπόν, αυτής της ενότητας ήταν να δείξει πώς μπορούμε να ενεργήσουμε στις IR εντολές. Στην αρχή μπορεί να φάνηκε κάπως περίπλοκο, αλλά με τα προηγούμενα παραδείγματα η διαδικασία απλουστεύτηκε αρκετά. Οπότε μάθαμε ακόμη έναν χρήσιμο τρόπο να χειριζόμαστε τον Arduino. Επέκταση Συνδέστε μια LCD οθόνη και προσπαθήστε να την ανοίξετε, να ανάψετε το backlight, να εμφανίσετε ένα κείμενο χρησιμοποιώντας το τηλεχειριστήριο. Για κάθε ενέργειαεντολή θα χρησιμοποιείται διαφορετικό κουμπί του τηλεχειριστηρίου. Στη συνέχεια, ανατρέξτε στην ενότητα 8.1 και αυτή τη φορά περιστρέψτε τον σερβοκινητήρα με το τηλεχειριστήριο. Πηγή : 150

152 14. 7Segment 14.1 Counter 0-9. Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι να μάθουμε τη χρήση μιας ακόμη μονάδας απεικόνισης, ενός 7Segment LED. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Ένα 7Segment. 8 αντιστάσεις των 220Ω. Θεωρητική παρουσίαση Το 7Segment είναι μία συσκευή που μπορεί να αναπαραστήσει δεκαδικούς αριθμούς και χρησιμοποιούνται ευρέως σε ηλεκτρονικά ρολόγια, ηλεκτρονικούς μετρητές, ψηφιακές οθόνες και σε πολλές ακόμα εφαρμογές όπου αναπαρίστανται αριθμητικά δεδομένα. Η ιδέα του 7Segment είναι αρκετά παλιά και ξεκίνησε περίπου στις αρχές του 19 ου αιώνα. Το 7Segment έχει 7 τμήματα που μπορούν να ρυθμιστούν ξεχωριστά (ON/OFF) ώστε να εμφανίζουν το επιθυμητό αποτέλεσμα. Οι αριθμοί από 0 έως 9 μπορούν να αναπαρασταθούν χρησιμοποιώντας διαφορετικούς συνδυασμούς των τμημάτων, όπως επίσης, τα γράμματα A έως F. Τα 7 τμήματα είναι τοποθετημένα ώστε να σχηματίζουν ένα τετραγωνισμένο 8 που γέρνει ελαφρώς προς τα δεξιά. Αυτή η κλίση υπάρχει για να είναι πιο ευανάγνωστα. Κάποια 7Segments έχουν μία επιπρόσθετη τελεία η οποία χρησιμοποιείται για δεκαδικούς αριθμούς. Το 7Segment είναι κατασκευασμένο από LEDs. Όταν παρέχουμε ρεύμα σε ένα συγκεκριμένα τμήμα, ανάβει και μπορούμε να εμφανίσουμε το επιθυμητό ψηφίο δίνοντας ρεύμα στον κατάλληλο συνδυασμό των LEDs. Τα 7Segments είναι δύο τύπων : κοινής καθόδου και κοινής ανόδου. Σε ένα 7Segment κοινής καθόδου, η κάθοδος όλων των LED των τμημάτων ενώνονται ως ένα pin κοινής καθόδου και οι ακροδέκτες της ανόδου αφήνονται ως pin εισόδου. Σε αυτή τη σύνθεση η κοινή κάθοδος είναι πάντα συνδεδεμένη με τη γείωση και τα σήματα ελέγχου εφαρμόζονται στις εισόδους (ακροδέκτες ανόδου). Σε ένα 7Segment κοινής ανόδου, οι άνοδοι των LED των τμημάτων ενώνονται ως μία κοινή άνοδο και οι ακροδέκτες της καθόδου αφήνονται ως pin εισόδου. Σε αυτή τη σύνθεση η κοινή άνοδος συνδέεται πάντα σε μία κατάλληλη θετική τάση και τα σήματα ελέγχου εφαρμόζονται στις εισόδους (ακροδέκτες καθόδου). Παρακάτω, εικόνα 14.1, φαίνεται η αντιστοιχία των pin ενός 7Segment κοινής καθόδου. Προσέξτε ότι ένα 7Segment κοινής ανόδου θα είχε αντίστροφη συνδεσμολογία. 151

153 Εικόνα 14.1 Η συνδεσμολογία μεταξύ των pins του 7Segment και του Arduino φαίνεται στην εικόνα 14.2 Εικόνα 14.2 Παρακάτω δίνεται ο κώδικας ενός μετρητή από το 0 έως το 9. Ο κώδικας αυτός είναι για 7Segment κοινής καθόδου. Αν συνδέσουμε 7Segment κοινής ανόδου τότε αλλάζουμε στο πρόγραμμα τα 0 με τα 1 και αντίστροφα καθώς και συνδέουμε το κύκλωμα σε μία θετική τάση αντί της γείωσης. Κώδικας /* Example : 28 7Segment counter. (common cathode) */ void setup() { pinmode(2, OUTPUT); pinmode(3, OUTPUT); pinmode(4, OUTPUT); pinmode(5, OUTPUT); pinmode(6, OUTPUT); pinmode(7, OUTPUT); pinmode(8, OUTPUT); pinmode(9, OUTPUT); 152

154 digitalwrite(9, 0); // Ξεκίνα με την τελεία σβηστή. void loop() { // Γράψε '0' digitalwrite(2, 1); digitalwrite(3, 1); digitalwrite(4, 1); digitalwrite(5, 1); digitalwrite(6, 1); digitalwrite(7, 1); digitalwrite(8, 0); delay(1000); // Γράψε '1' digitalwrite(2, 0); digitalwrite(3, 1); digitalwrite(4, 1); digitalwrite(5, 0); digitalwrite(6, 0); digitalwrite(7, 0); digitalwrite(8, 0); delay(1000); // Γράψε '2' digitalwrite(2, 1); digitalwrite(3, 1); digitalwrite(4, 0); digitalwrite(5, 1); digitalwrite(6, 1); digitalwrite(7, 0); digitalwrite(8, 1); delay(1000); // Γράψε '3' digitalwrite(2, 1); digitalwrite(3, 1); digitalwrite(4, 1); digitalwrite(5, 1); digitalwrite(6, 0); digitalwrite(7, 0); digitalwrite(8, 1); delay(1000); // Γράψε '4' digitalwrite(2, 0); digitalwrite(3, 1); digitalwrite(4, 1); digitalwrite(5, 0); digitalwrite(6, 0); digitalwrite(7, 1); digitalwrite(8, 1); delay(1000); // Γράψε '5' digitalwrite(2, 1); digitalwrite(3, 0); digitalwrite(4, 1); digitalwrite(5, 1); digitalwrite(6, 0); digitalwrite(7, 1); digitalwrite(8, 1); delay(1000); // Γράψε '6' digitalwrite(2, 1); digitalwrite(3, 0); 153

155 digitalwrite(4, 1); digitalwrite(5, 1); digitalwrite(6, 1); digitalwrite(7, 1); digitalwrite(8, 1); delay(1000); // Γράψε '7' digitalwrite(2, 1); digitalwrite(3, 1); digitalwrite(4, 1); digitalwrite(5, 0); digitalwrite(6, 0); digitalwrite(7, 0); digitalwrite(8, 0); delay(1000); // Γράψε '8' digitalwrite(2, 1); digitalwrite(3, 1); digitalwrite(4, 1); digitalwrite(5, 1); digitalwrite(6, 1); digitalwrite(7, 1); digitalwrite(8, 1); delay(1000); // Γράψε '9' digitalwrite(2, 1); digitalwrite(3, 1); digitalwrite(4, 1); digitalwrite(5, 0); digitalwrite(6, 0); digitalwrite(7, 1); digitalwrite(8, 1); delay(4000); Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα 14.. Εικόνα

156 Αποτελέσματα Αυτό που παίρνουμε λοιπόν, είναι ένας μετρητής από το 0 έως το 9. Μόλις φτάσει στο 9 περιμένει κάποια δευτερόλεπτα και ξεκινάει ξανά από την αρχή. Η τελεία είναι σβηστή. Αν θέλουμε να την ανάψουμε βάζουμε στην αρχή του προγράμματος digitalwrite(9, 1). Σχηματικό διάγραμμα Εικόνα 14.4 Συμπεράσματα Σε αυτή την ενότητα είδαμε τη λειτουργία μιας ακόμη μονάδας απεικόνισης, ενός 7Segment Display. Ωστόσο, για τη σύνδεση του 7Segment χρειάστηκε να δεσμεύσουμε 8 pins από την πλακέτα του Arduino. Στην επόμενη άσκηση θα δούμε ένα διαφορετικό τρόπο σύνδεσης του 7Segment που απαιτεί μόνο 4 pins από την πλακέτα του Arduino. Επέκταση Προσθέστε στο κύκλωμα ένα pushbutton και τροποποιήστε τον κώδικα ώστε να αλλάζει ο αριθμός στο 7Segment κάθε φορά που πατάτε το κουμπί και όταν φτάνει στο 9 να μηδενίζει ο μετρητής και να αρχίζει πάλι από το 0. Τέλος, χρησιμοποιήστε ένα 7Segment κοινής ανόδου, τροποποιήστε τον κώδικα και πάρτε τα ίδια αποτελέσματα. 155

157 14.2 Counter 0-9 με χρήση αποκωδικοποιητή. Στόχοι αυτής της άσκησης Σε αυτή την άσκηση θα χρησιμοποιήσουμε έναν αποκωδικοποιητή που θα μας επιτρέψει να ελέγξουμε το 7Segment με τέσσερα μόνο pins από τον Arduino. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Ένα 7Segment κοινής ανόδου. Έναν αποκωδικοποιητή 74LS47. Θεωρητική παρουσίαση Ένας αποκωδικοποιητής 7Segment είναι ένα ψηφιακό κύκλωμα που μπορεί και αποκωδικοποιεί μία ψηφιακή είσοδο στη μορφή του 7Segment, ενώ ταυτόχρονα ελέγχει τα LEDs του 7Segment χρησιμοποιώντας τις αποκωδικοποιημένες πληροφορίες. Αυτό που θα αναπαρασταθεί στο 7Segment είναι το αριθμητικό ισοδύναμο των εισερχόμενων δεδομένων. Για παράδειγμα, ένας αποκωδικοποιητής δεκαδικού δυαδικής κωδικοποίησης (binary coded decimal - BCD) σε 7Segment μπορεί να αποκωδικοποιήσει έναν BCD τεσσάρων ψηφίων σε μορφή 7Segment 8 ψηφίων και μπορεί να ελέγξει τα LEDs με αυτή την πληροφορία. Δηλαδή, αν η είσοδος του BCD είναι 0001, το 7Segment θα απεικονίσει το 1. Στην άσκηση αυτή, θα χρησιμοποιήσουμε τον αποκωδικοποιητή 74LS47, ο οποίος παίρνει σαν είσοδο 4 ψηφία ενός δεκαδικού σε δυαδική κωδικοποίηση και τα μετατρέπει σε μία μορφή ώστε να οδηγήσει το 7Segment να απεικονίσει τα ψηφία από το 0 έως το 9. Στην εικόνα 14.5 παρουσιάζεται η συνδεσμολογία του αποκωδικοποιητή 74LS47. Εικόνα 14.5 Στα pins 9-15 συνδέουμε στον αποκωδικοποιητή το 7Segment. Συμβουλευτείτε την εικόνα 14.1 για την αντιστοίχηση. Τα pins A0, A1, A2, A3 είναι οι είσοδοι του αποκωδικοποιητή που τα συνδέουμε στις ψηφιακές εξόδους του Arduino. Τα pins 16 και 8 είναι για να συνδέσουμε τον αποκωδικοποιητή στην τάση και στη γείωση αντίστοιχα. Έχει επίσης, μία ενσωματωμένη λειτουργία ελέγχου των LEDs που αντιστοιχεί στο pin 3. Όταν το pin 3 είναι στη γείωση τα LEDs του 7Segment θα 156

158 πρέπει να ανάβουν όλα. Τα pins 3,4 και 5 χρησιμοποιούνται για πολύπλεξη όταν χρησιμοποιούμε περισσότερα από ένα 7Segment (δε θα ασχοληθούμε με αυτό εδώ) και θα τα συνδέσουμε στη τάση. Στον παρακάτω πίνακα δίνεται ο πίνακας αληθείας του αποκωδικοποιητή σύμφωνα με τον οποίον απεικονίζονται τα αριθμητικά δεδομένα στο 7Segment. Ο αποκωδικοποιητής είναι αντίστροφης λογικής, δηλαδή, το 0 αντιστοιχεί σε τάση HIGH και το 1 σε LOW. Δεκαδικοί Είσοδοι Έξοδοι A0 A1 A2 A3 a b c d e f g Παρακάτω δίνεται ο κώδικας του παραδείγματος. Χρησιμοποιούμε ένα 7Segment κοινής ανόδου. Διαφορετικά θα πρέπει να χρησιμοποιήσουμε διαφορετικό αποκωδικοποιητή κατάλληλο για 7Segment κοινής ανόδου και να αλλάξουμε στον κώδικα τα 0 με τα 1 και αντίστροφα. Κώδικας /* Example : 29 7Segment counter with a decoder. (common anode) */ void setup() { // Ορίζουμε τα κανάλια εισόδου δεδομένων του αποκωδικοποιητή. pinmode(5, OUTPUT); //A0 pinmode(6, OUTPUT); //A1 pinmode(7, OUTPUT); //A2 pinmode(8, OUTPUT); //A3 void loop() { // Γράψε '0' digitalwrite(5, 0); digitalwrite(6, 0); digitalwrite(7, 0); 157

159 digitalwrite(8, 0); delay(1000); // Γράψε '1' digitalwrite(5, 1); digitalwrite(6, 0); digitalwrite(7, 0); digitalwrite(8, 0); delay(1000); // Γράψε '2' digitalwrite(5, 0); digitalwrite(6, 1); digitalwrite(7, 0); digitalwrite(8, 0); delay(1000); // Γράψε '3' digitalwrite(5, 1); digitalwrite(6, 1); digitalwrite(7, 0); digitalwrite(8, 0); delay(1000); // Γράψε '4' digitalwrite(5, 0); digitalwrite(6, 0); digitalwrite(7, 1); digitalwrite(8, 0); delay(1000); // Γράψε '5' digitalwrite(5, 1); digitalwrite(6, 0); digitalwrite(7, 1); digitalwrite(8, 0); delay(1000); // Γράψε '6' digitalwrite(5, 0); digitalwrite(6, 1); digitalwrite(7, 1); digitalwrite(8, 0); delay(1000); // Γράψε '7' digitalwrite(5, 1); digitalwrite(6, 1); digitalwrite(7, 1); digitalwrite(8, 0); delay(1000); // Γράψε '8' digitalwrite(5, 0); digitalwrite(6, 0); digitalwrite(7, 0); digitalwrite(8, 1); delay(1000); // Γράψε '9' digitalwrite(5, 1); digitalwrite(6, 0); digitalwrite(7, 0); digitalwrite(8, 1); delay(4000); 158

160 Υλοποίηση άσκησης Η συνδεσμολογία της άσκησης φαίνεται στην εικόνα Εικόνα

161 Σχηματικό διάγραμμα Εικόνα 14.7 Αποτελέσματα Το αποτέλεσμα που παίρνουμε είναι ίδιο με αυτό της προηγούμενης άσκησης. Το 7Segment απεικονίζει τους αριθμούς 0 έως 9 και αρχίζει ξανά από την αρχή. Συμπεράσματα Σε αυτό το παράδειγμα είδαμε πώς να χρησιμοποιούμε μία μονάδα απεικόνισης 7Segment συνδέοντάς τη σε ένα αποκωδικοποιητή ώστε να δεσμεύουμε λιγότερα pins από την πλακέτα του arduino. Επέκταση Δοκιμάστε να προσθέσετε στο κύκλωμα ένα κουμπί και να τροποποιήσετε τον κώδικα ώστε να αλλάζει ο μετρητής κάθε φορά που πατάτε το κουμπί. 160

162 15. Κατασκευαά ζουμε τον δικοό μας Arduino 15.1 Βήμα βήμα κατασκευή του κυκλώματος του Arduino. Στόχοι αυτής της άσκησης Στόχος αυτής της άσκησης είναι να κατασκευάσουμε τον δικό μας Arduino εύκολα και γρήγορα με μερικά φθηνά εξαρτήματα και ένα breadboard. Αυτή η ιδέα μας διευκολύνει όταν θέλουμε να πρωτοτυποποιήσουμε νέες ιδέες, ή δεν θέλουμε να αποσυναρμολογούμε το σχέδιό μας κάθε φορά που χρειαζόμαστε τον Arduino. Εξαρτήματα για την υλοποίηση της άσκησης Για την άσκηση αυτή θα χρησιμοποιήσουμε τα ακόλουθα εξαρτήματα : Έναν μικροεπεξεργαστή ATmega328 ή ATmega168. Ένα pushbutton. Δύο LEDs, ένα πράσινο και ένα κόκκινο. Δύο αντιστάσεις 220Ω. Μία αντίσταση 10ΚΩ. Δύο πυκνωτές των 10μF. Έναν ταλαντωτής κρυστάλλου 16MHz. Δύο κεραμικούς πυκνωτές των 22pF. Male headers με 6 pins. Ένας ρυθμιστής τάσης LM7805 1A 5V. Ένα TTL-232R-3V3 USB καλώδιο για σειριακή επικοινωνία. Υλοποίηση άσκησης Το πρώτο πράγμα που πρέπει να κάνετε είναι να εγκαταστήσετε την τροφοδοσία. Ας αρχίσουμε! Σε αυτό το βήμα, εγκαθιστούμε της τροφοδοσία στον Arduino στα 5Volts χρησιμοποιώντας έναν ρυθμιστή τάσης LM7805. Αυτό το βήμα χρειάζεται μόνο αν θέλουμε να λειτουργούμε το κύκλωμα του Arduino αυτόνομα, να είναι δηλαδή ανεξάρτητο από την πλακέτα. Εικόνα 15.1 : Εγκατάσταση ρεύματος με ενδείκτη LED Για να λειτουργήσει ο ρυθμιστής τάσης, χρειάζεται να παρέχουμε περισσότερη τάση από 5Volts. Μία μπαταρία των 9V δουλεύει μια χαρά. Βεβαιωθείτε ότι η παροχή τάσης είναι μεταξύ 7-12V. Τροφοδοτούμε με τάση το breadboard στις υποδοχές που 161

163 φαίνεται το + από το κουτάκι βάζουμε το θετικό της μπαταρίας και το κουτάκι βάζουμε το αρνητικό. Στη συνέχεια προσθέτουμε έναν πυκνωτή των 10μF. Το μακρύτερο ποδαράκι είναι η άνοδος και το κοντότερο η κάθοδος. Οι περισσότεροι πυκνωτές σημειώνονται και με μία λωρίδα στην πλευρά της καθόδου. Για να μεταφέρουμε την τάση από τη μία μεριά του breadboard στην άλλη θα χρειαστεί να συνδέσουμε δύο καλώδια αντικριστά, στο κενό διάστημα του breadboard, το κόκκινο για την άνοδο και το μαύρο για την κάθοδο. Τώρα προσθέτουμε τον ρυθμιστή τάσης LM7805, ο οποίος έχει τρία ποδαράκια. Κοιτώντας τον από μπροστά, το αριστερό πόδι είναι για την τάση, το μεσαίο για τη γείωση και το δεξί είναι για την έξοδο της τάσης. Χρειάζεται να προσθέσετε ένα καλώδιο γείωσης με τη γείωση και το τρίτο πόδι του ρυθμιστή τάσης με τη θετική τάση. Προσθέτουμε τον δεύτερο πυκνωτή των 10μF στην τροχιά του ρεύματος. Δίνουμε προσοχή στη σωστή τοποθέτηση της ανόδου και της καθόδου. Μία καλή ιδέα είναι να προσθέσουμε ένα LED ως φωτεινή ένδειξη της κατάστασης του Arduino που μπορεί να χρησιμοποιηθεί για αντιμετώπιση προβλημάτων. Για να διατηρήσουμε το breadboard οργανωμένο όταν θα συνδέσουμε τα διάφορα εξαρτήματα, είναι καλό να συνδέσουμε τη δεξιά τροχιά του ρεύματος με την αριστερή. Εικόνα 15.2 : Συνδέσεις τροχιών ρεύματος δεξιά και αριστερά. Για το LED ένδειξης κατάστασης, συνδέστε μία αντίσταση των 220Ω από την τάση στην άνοδο του LED και από τη γείωση στην κάθοδό του. Εικόνα 15.3 : Φωτεινή ένδειξη κατάστασης. Μέχρι στιγμής εγκαταστήσαμε το ρεύμα στο breadboard. Συνεχίζουμε στο επόμενο βήμα. Τώρα θα προσθέσουμε στο κύκλωμα τον μικροεπεξεργαστή ATmega168 ή 328. Πριν ξεκινήσουμε, ας ρίξουμε μία ματιά στο τι κάνει το κάθε pin του τσιπ σε σχέση με τις λειτουργίες του Arduino. 162

164 Εικόνα 15.4 Αν κοιτάξετε το φύλλο δεδομένων του μικροεπεξεργαστή θα δείτε διαφορετικές αναφορές στα pin του. Και αυτό γιατί ο Arduino έχει τις δικές του λειτουργίες για αυτά τα pins. Αν θέλετε να μάθετε τις πραγματικές αναφορές των pins του μικροεπεξεργαστή κατεβάστε το datasheet από την ιστοσελίδα Τώρα που γνωρίζουμε τη διάταξη των pins μπορούμε να αρχίσουμε να συνδέουμε τα εξαρτήματα. Για να ξεκινήσουμε, θα χτίσουμε το κύκλωμα από τη μία μεριά του τσιπ και μετά θα κινηθούμε στην άλλη. Το pin 1 στα περισσότερα τσιπ έχει ένα αναγνωριστικό. Κοιτώντας τον ATmega168 ή 328 παρατηρούμε εγκοπή στη μία άκρη και μία μικρή τελεία. Η μικρή τελεία σηματοδοτεί ότι αυτό είναι το pin 1. Εικόνα 15.5 : Υλοποίηση κυκλώματος για τα pins Από τον δίαυλο της γείωσης, προσθέστε ένα καλώδιο προς το pin 22 του μικροεπεξεργαστή. Στη συνέχεια, Από το δίαυλος της θετικής τάσης, προσθέστε ένα καλώδιο προς το pin 20 (AVCC Παροχή τάσης στον μετατροπέα ADC). Χρειάζεται να είναι συνδεδεμένο στην τάση αν ο ADC δε χρησιμοποιείται και στην τάση μέσω ενός φίλτρου χαμηλής διέλευσης αν χρησιμοποιείται. Έπειτα προσθέτουμε ένα 163

165 καλώδιο από την τάση στο pin 21 (το pin αναφοράς τάσης για τον ADC). Στον Arduino το pin 13 είναι το pin του LED. Προσέξτε ότι στο τσιπ το pin του LED είναι το pin 19. Για να τοποθετήσουμε το LED, προσθέτουμε μία αντίσταση των 220Ω από τη γείωση στην κάθοδο του LED. Μετά από την άνοδο του LED προσθέτουμε ένα καλώδιο στο pin 19. Τώρα μπορούμε να προχωρήσουμε στην άλλη πλευρά του τσιπ. Έχουμε σχεδόν τελειώσει! Εικόνα 15.6 : Υλοποίηση κυκλώματος για τα pins Δίπλα στον μικροεπεξεργαστή, από τη μεριά του pin 1, τοποθετούμε ένα μικρό διακόπτη. Αυτός ο διακόπτης χρησιμοποιείται για την επανεκκίνηση του Arduino. Ακριβώς πριν ανεβάσουμε ένα sketch στο τσιπ χρειάζεται να το πατήσουμε. Τώρα, προσθέτουμε ένα μικρό καλώδιο από το pin 1 στο ποδαράκι πάνω αριστερά του διακόπτη και μία αντίσταση των 10ΚΩ από την τάση στο pin 1 του τσιπ. Τέλος, προσθέτουμε ένα καλώδιο από τη γείωση στο πάνω δεξιά πόδι του διακόπτη. Προσθέτουμε καλώδια από την τάση και τη γείωση στα pins 7 (VCC) και 8 (GND), αντίστοιχα. Προσθέτουμε τον ταλαντωτή κρυστάλλου των 16MHz στα pins 9 και 10 και δύο πυκνωτές των 22pF από τα pins 9 και 10 στη γείωση. Το βασικό κύκλωμα του Arduino είναι έτοιμο. Μπορούμε να σταματήσουμε εδώ αν είναι να χρησιμοποιήσουμε ένα ήδη προγραμματισμένο τσιπ από την πλακέτα του Arduino στο breadboard. Διαφορετικά στις επόμενες ενότητες περιγράφεται πώς προγραμματίζουμε ένα τσιπ που δεν έχει το πρόγραμμα εκκίνησης. Εικόνα 15.7 : Ο ολοκληρωμένος breadboard Arduino! Πηγή : 164

166 15.2 Burning the boot loader. Στόχοι αυτής της άσκησης Στην προηγούμενη άσκηση χτίσαμε το κύκλωμα του Arduino. Σε αυτή την άσκηση θα μάθουμε να φορτώνουμε το πρόγραμμα εκκίνησης στον μικροεπεξεργαστή για να μπορούμε να τον προγραμματίζουμε. Υλοποίηση άσκησης Μπορούμε να χρησιμοποιήσουμε έναν μικροεπεξεργαστή που έχει ήδη το πρόγραμμα εκκίνησης (αν τον έχουμε βγάλει από μία πλακέτα Arduino ή αν τον έχουμε παραγγείλει με αυτό). Αν όμως ο μικροεπεξεργαστής μας δεν έχει το πρόγραμμα εκκίνησης, ακολουθούμε τα παρακάτω βήματα. Για να φορτώσουμε το πρόγραμμα εκκίνησης στον μικροεπεξεργαστή, θα χρειαστούμε την πλακέτα του Arduino. Ακολουθούμε τα επόμενα βήματα : Ανοίγουμε το Arduino IDE. Από τα Tools επιλέγουμε το Board και τη σειριακή θύρα που ανταποκρίνονται στην πλακέτα μας. Φορτώνουμε το ArduinoISP sketch, στον μικροεπεξεργαστή της πλακέτας του Arduino, όπως φαίνεται παρακάτω. Εικόνα

167 Συνδέουμε την πλακέτα του Arduino με το Breadboard, όπως φαίνεται στην παρακάτω εικόνα Τα pins 17, 18, 19 από τον μικροεπεξεργαστή με τα pins 11, 12, 13 από την πλακέτα του Arduino, αντίστοιχα. Εικόνα 15.9 Επιλέγουμε Tools-> Burn Bootloader > w/ Arduino as ISP, όπως φαίνεται παρακάτω. Εικόνα

168 Όταν τελειώσει η μπάρα κατάστασης θα εμφανίσει το μήνυμα Done burning bootloader.. Θα χρειαστεί να φορτώσουμε το πρόγραμμα εκκίνησης μόνο μία φορά. Μετά το πέρας της διαδικασίας αποσυνδέουμε τα καλώδια από την πλακέτα του Arduino. Ο μικροεπεξεργαστής είναι έτοιμος να προγραμματιστεί! 15.3 Πώς φορτώνουμε sketches στον μικροεπεξεργαστή. Στόχοι αυτής της άσκησης Είδαμε νωρίτερα πως φορτώνουμε το πρόγραμμα εκκίνησης στον μικροεπεξεργαστή. Τώρα θα δούμε πώς μπορούμε να του φορτώνουμε sketches. Υλοποίηση άσκησης Μπορούμε να φορτώσουμε προγράμματα στον μικροεπεξεργαστή χρησιμοποιώντας τις θύρες 0 και 1 της πλακέτας του Arduino που συνδέονται με το FTDI τσιπ, όπως αναφέρεται στην εισαγωγή. Για να γίνει αυτό, πρέπει απαραιτήτως να αφαιρέσουμε τον μικροεπεξεργαστή από την πλακέτα του Arduino, ώστε το FTDI τσιπ να επικοινωνεί με τον μικροεπεξεργαστή του breadboard αντί αυτόν της πλακέτας. Η εικόνα δείχνει πώς πρέπει να συνδέσουμε τα pins RX και TX της πλακέτας με το breadboard. Έπειτα επιλέγουμε το κατάλληλο board που χρησιμοποιούμε στο Arduino IDE και φορτώνουμε το πρόγραμμα ως συνήθως. Εικόνα

169 Αν αποσυνδέσουμε τα καλώδια με την πλακέτα του Arduino και συνδέσουμε τον breadboard Arduino με μία μπαταρία, μπορεί να λειτουργεί αυτόνομα! Πηγή : 168

170 16. Arduino και Επιχειρηματικοό τητα Μέχρι το έτος 2006, το Arduino είχε πουλήσει μονάδες, μέχρι το , το 2009 βάδιζε στις μονάδες και το Μάιο του 2011 περισσότερες από μονάδες είχαν αγοραστεί. Η ομάδα που ίδρυσε τον Arduino αποτελείται από τους Massimo Banzi και David Cuartielles. Τα σχέδια για την πλακέτα του Arduino τίθενται υπό την άδεια της Creative Commons : μπορεί οποιοσδήποτε να παράγει αντίγραφα της πλακέτας, να την επανασχεδιάσει, ή ακόμα και να πουλήσει αντίγραφα της πλακέτας χωρίς να πληρώνει τέλη άδειας ή να ζητάει άδεια, αρκεί να αποδίδεται η αναγνώριση στην αρχική ομάδα του Arduino και να χρησιμοποιεί την ίδια άδεια CC. Το μόνο κομμάτι πνευματικής ιδιοκτησίας που η ομάδα κρατάει είναι το όνομα του Arduino, που αποτελεί εμπορικό σήμα. Αν κάποιος θέλει να πουλήσει πλακέτες με το όνομα του Arduino, πρέπει να πληρώσει μια μικρή αμοιβή στον Arduino (αυτό γίνεται για να διασφαλιστεί ότι η μάρκα του Arduino δε θα φθαρεί από χαμηλής ποιότητας αντίγραφα). Η πλακέτα του Arduino,λοιπόν, είναι ένα κομμάτι υλικού, ελεύθερο σε όλους για χρήση, για τροποποίηση ή ακόμη και για πώληση. Η ομάδα του Arduino πέρασε ατελείωτες ώρες για την κατασκευή του και πλέον πουλάει τον Arduino σε μία χαμηλή τιμή, ενώ επιτρέπουν σε οποιονδήποτε να κάνει το ίδιο. Από πού λοιπόν, έχουν έσοδα; Αυτή τη στιγμή οι σχεδιαστές ανοιχτού υλικού ακολουθούν δύο οικονομική μοντέλα. Το πρώτο είναι να μην ανησυχούν για τις πωλήσεις του υλικού, αλλά να προσπαθήσουν να πωλήσουν την πείρα τους ως εφευρέτες. Αν οποιοσδήποτε μπορεί να κατασκευάσει μία συσκευή, τότε ο πιο αποδοτικός κατασκευαστής θα το κάνει στην καλύτερη τιμή. Οπότε ας το κάνει. Ωστόσο, η κοινότητα των χρηστών αναπόφευκτα θα συγκεντρωθεί στον εφευρέτη. Η πείρα λοιπόν, που έχει ο εφευρέτης της συσκευής γίνεται και το ατού του που μπορεί να πουλήσει. Με αυτόν τον τρόπο λειτουργεί η ομάδα του Arduino. Μπορεί οι πωλήσεις των πλακετών να τους αποφέρουν λίγα χρήματα, περίπου 30 η πλακέτα, ωστόσο, έχουν μεγάλα εισοδήματα από πελάτες τους που θέλουν να κατασκευάσουν συσκευές βασισμένες στον Arduino και τους προσλαμβάνουν ως συμβούλους σε έργα που βασίζονται στον Arduino. Υπάρχει και το δεύτερο μοντέλο για να βγάλει κάποιος χρήματα από το ανοιχτό υλικό : να πουλήσεις τη συσκευή σου αλλά να έχεις προβάδισμα έναντι των ανταγωνιστών. Για παράδειγμα, την προηγούμενη χρονιά ο Arduino παρατήρησε ότι πωλούνταν on-line μιμήσεις της πλακέτας που κατασκευάζονταν στην Κίνα και στην Ταιβάν. Όμως οι πωλήσεις στο βασικό μαγαζί του Arduino αυξάνονταν δραματικά. Γιατί? Επειδή οι μιμήσεις της πλακέτας ήταν από φτηνά υλικά. Οπότε ο ανταγωνισμός αποδείχθηκε καλός για τις πωλήσεις του βασικού Arduino. Θέλετε να ενταχθείτε στην κοινότητα των προγραμματιστών/κατασκευαστών του Arduino? Αν θέλετε να παράγετε και να πουλήσετε το προϊόν σας, αρχικά πρέπει να απεικονίσετε το κύκλωμα προς εκτύπωση (printed circuit board - PCB) και να το 169

171 στείλετε προς παραγωγή. Αυτό μπορείτε να το κάνετε με το πρόγραμμα Fritzing που έχουμε χρησιμοποιήσει νωρίτερα για να απεικονίσουμε το κύκλωμά μας. Παρακάτω, δίνονται κάποια παραδείγματα. Διαφορετικά, ένας ειδικός ανοιχτού λογισμικού μπορεί να το κάνει αυτό για εσάς, όπως το SparkFun ή το Adafruit, μπορούν να κατασκευάσουν τη συσκευή σας και να την πωλήσουν για εσάς. Προσθέτουν ένα περιθώριο κέρδους και σας πληρώνουν τα τέλη άδειας. Τέλος, μπορείτε να δημοσιεύσετε τα αναθεωρημένα αρχεία με τα σχηματικά και το κύκλωμα ώστε άλλοι να μπορέσουν να τα τροποποιήσουν. Έτσι, ο κύκλος αρχίζει πάλι. Πηγή : PCB shield Συχνά θέλουμε να επεκτείνουμε τη λειτουργικότητα του Arduino. Για να ελαχιστοποιήσουμε τα καλώδια και να μεγιστοποιήσουμε τη λειτουργικότητα, μπορούμε να σχεδιάσουμε μία πλακέτα που αποκαλείται ασπίδα ή shield. Τα shields είναι πλακέτες που προσαρμόζονται πάνω από την πλακέτα του Arduino επεκτείνοντας τις δυνατότητές του. Δημιουργούμε έτσι ένα ρομποτάκι, το οποίο αν του προσθέσουμε ένα εξωτερικό περίβλημα μπορούμε να έχουμε ένα ολοκληρωμένο προϊόν έτοιμο προς πώληση! Στην εικόνα 16.1 φαίνεται το shield της άσκησης 4.3, traffic lights. Το συγκεκριμένο σχεδιάστηκε με το πρόγραμμα Fritzing. Εάν θέλουμε μπορούμε να στείλουμε την εικόνα σε έναν κατασκευαστή και να μας επιστρέψει ένα τυπωμένο κύκλωμα σε μία πλακέτα. Το προσαρμόζουμε στον Arduino χωρίς να χρειάζεται να συνδέουμε κάθε φορά καλώδια ή εξαρτήματα, όπως LEDs, αντιστάσεις, κτλ. Είναι ενός επιπέδου και αποτελείται από τρία LEDs και τις αντιστάσεις. 170

172 Εικόνα 16.1 Στην εικόνα 16.2 φαίνεται το shield της άσκησης 5.2. Είναι δύο επιπέδων και αποτελείται από ένα pushbutton, ένα LED και τις αντιστάσεις. Τα επίπεδα έχουν να κάνουν με τις δύο πλευρές μιας πλακέτας. Στην εικόνα 16.1 όλες οι συνδέσεις γίνονται στη μία μεριά της πλακέτας, ενώ στην εικόνα 16.2 υπάρχουν συνδέσεις και στις δύο πλευρές. Οι διαφορετικές πλευρές φαίνονται με το διαφορετικό χρώμα των καλωδίων. Εικόνα 16.2 Παρακάτω, στις εικόνες 16.3 και 16.4, βλέπουμε τα shields που ανταποκρίνονται στο παράδειγμα της ενότητας 8.3, με τον σερβοκινητήρα. 171

173 Εικόνα 16.3 Εικόνα 16.4 Το shield της εικόνας 16.1 είναι ενός επιπέδου, ενώ το shield της εικόνας 16.2 είναι δύο επιπέδων. Και τα δύο απεικονίζουν το κύκλωμα του παραδείγματος 8.3, ωστόσο η δεύτερη απεικόνιση μας βοηθάει να στήσουμε το κύκλωμα πιο όμορφα ώστε να μην υπάρχουν παρεμβολές μεταξύ των καλωδίων. Στην εικόνα 16.5 φαίνεται το shield της άσκησης 10.2,που απεικονίζει το πιεζοηλεκτρικό στοιχείο αναπαραγωγής και έναν αισθητήρα θερμοκρασίας. 172

174 Εικόνα 16.5 Στην εικόνα 16.6 φαίνεται το shield της άσκησης 11.1 με το εναλλάξ flashing μεταξύ των LEDs με τη βοήθεια ενός ρελέ ως διακόπτη. Εικόνα

175 Στην εικόνα 16.7 είναι το shield του παραδείγματος 14.2, με το 7Segment κοινής ανόδου και τον αποκωδικοποιητή 74LS47. Η πλακέτα είναι δύο επιπέδων. Εικόνα 16.7 Στην εικόνα 16.8 είναι το shield του παραδείγματος 12.5, με την LCD οθόνη, το ποτενσιόμετρο και τον αισθητήρα θερμοκρασίας. Η πλακέτα είναι δύο επιπέδων. Εικόνα

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017)

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017) ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017) Περιγραφή της Άσκησης Ο σκοπός της πρώτης άσκησης είναι κυρίως η εξοικείωση με το περιβάλλον προγραμματισμού του Arduino, γι αυτό και δεν είναι ιδιαίτερα σύνθετη. Αρχικά, θα

Διαβάστε περισσότερα

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές Εισαγωγή στο Arduino Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Τι είναι Μικροελεγκτής; Ηλεκτρονική συσκευή που διαχειρίζεται ηλεκτρονικά

Διαβάστε περισσότερα

Ενσωµατωµένα Συστήµατα

Ενσωµατωµένα Συστήµατα Ενσωµατωµένα Συστήµατα για εφαρµογές πραγµατικού χρόνου Μικροελεγκτής Arduino Ιωάννης Καλόµοιρος Αναπληρωτής Καθηγητής Τµήµα Μηχανικών Πληροφορικής Μάθηµα 7ο Τι είναι το Arduino... Ένα open-hardware σύστηµα

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Σκοπός Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5 Ρυθμίζοντας τη Φορά Περιστροφής DC Κινητήρα. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Βασική δομή ενός προγράμματος στο LabVIEW. Εμπρόσθιο Πλαίσιο (front

Διαβάστε περισσότερα

Εγκατάσταση του Arduino IDE

Εγκατάσταση του Arduino IDE ΑΣΠΑΙΤΕ Συλλογή και Επεξεργασία Δεδομένων Εργαστήριο ΠΕΡΙΕΧΟΜΕΝΑ: Πώς να κατεβάσετε και να εγκαταστήσετε το Ολοκληρωμένο Περιβάλλον Ανάπτυξης (IDE), για το προγραμματισμό του Arduino. Χρησιμοποιώντας το

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοινωνία. Σειριακή Επικοινωνία USB Σύνδεση / Πρωτόκολλο Σκοπός Εντολή επιλογής (if) Εντολή Επανάληψης (while) Πίνακες 1 Μέρος Α : Σκοπός

Διαβάστε περισσότερα

Εφαρμογές Σειριακής Επικοινωνίας

Εφαρμογές Σειριακής Επικοινωνίας Εφαρμογές Σειριακής Επικοινωνίας Εισαγωγή Στο μάθημα αυτό θα μάθουμε πώς να χρησιμοποιούμε την βιβλιοθήκη serial για την επικοινωνία από την πλατφόρμα Arduino πίσω στον υπολογιστή μέσω της θύρας usb. Τι

Διαβάστε περισσότερα

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών Τεχνολογικό Εκπαιδευτικό Ίδρυμα Σερρών Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πληροφορικής & Επικοινωνιών Υλοποίηση δικτύου ασύρματης ραδιοεπικοινωνίας μεταξύ δύο ενσωματωμένων κόμβων (κόμβος ταυτοποίησης

Διαβάστε περισσότερα

Γνωριμία με το Arduino

Γνωριμία με το Arduino Γνωριμία με το Arduino Τι είναι το Arduino; Το arduino είναι ένας μικρός υπολογιστής σε μέγεθος παλάμης που περιλαμβάνει ένα μικροελεγκτή (για εκτέλεση εντολών) και ένα σύνολο εισόδων/εξόδων για επικοινωνία

Διαβάστε περισσότερα

Προγραμματισμο ς σε Arduino

Προγραμματισμο ς σε Arduino Προγραμματισμο ς σε Arduino Arduino UNO & Innoesys Educational Shield www.devobox.com Ηλεκτρονικά Εξαρτήματα & Υλικά Κατασκευής Πρωτοτύπων Λέανδρου 79, 10443, Κολωνός +30 210 51 55 513, info@devobox.com

Διαβάστε περισσότερα

Lab 1: Experimenting on Arduino & AI Sense

Lab 1: Experimenting on Arduino & AI Sense Lab 1: Experimenting on Arduino & AI Sense 1. Εισαγωγή A. Arduino Robokit Το Robokit, όπως και όλες οι πλακέτες τύπου Arduino, λειτουργεί χάρη σε έναν μικροελεγκτή. Ως μικροελεγκτή μπορούμε να φανταστούμε

Διαβάστε περισσότερα

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ

ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ ΕΦΑΡΜΟΓΕΣ ΤΗΛΕΠIΚΟΙΝΩΝΙΑΚΩΝ ΔΙΑΤΑΞΕΩΝ ΟΙΚΟΝOΜΟΥ ΧΑΡΗΣ (6424) ΦΩΚΟΣ ΝΙΚΟΛΑΟΣ(6592) ΚΑΜΒΥΣΗΣ ΝΙΚΟΛΑΟΣ(7178) 2013-2014 ΠΕΡΙΕΧΟΜΕΝΑ Σκοπός της εργασίας Ανάλυση Arduino Uno Δημιουργία πληροφορίας Αποστολή και

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ Σκοπός της άσκησης Οι φοιτητές θα εξοικειωθούν με την πλακέτα του μικροελεγκτή και θα αναγνωρίσουν τα βασικά της στοιχεία. Επίσης θα εξοικειωθούν

Διαβάστε περισσότερα

ΜΙΚΡΟΕΛΕΓΚΤΗΣ PICAXE 18M2

ΜΙΚΡΟΕΛΕΓΚΤΗΣ PICAXE 18M2 ΘΕΜΑ : ΜΙΚΡΟΕΛΕΓΚΤΗΣ PICAXE 18M2 ΔΙΑΡΚΕΙΑ:? περίοδος Οι μικροελεγκτές είναι υπολογιστές χωρίς περιφερειακά, σε ολοκληρωμένα κυκλώματα. Μπορούν να συνδυάσουν αρκετές από τις βασικές λειτουργίες άλλων ειδικών

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 1. Arduino + LabVIEW: Μέτρηση Έντασης Φωτός με Φωτοαντίσταση. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 1. Arduino + LabVIEW: Μέτρηση Έντασης Φωτός με Φωτοαντίσταση. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Σκοπός Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 1 Arduino + LabVIEW: Μέτρηση Έντασης Φωτός με Φωτοαντίσταση. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Βασική δομή ενός προγράμματος στο LabVIEW. Εμπρόσθιο

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ

ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ ΠΛΗΡΟΦΟΡΙΚH ΓΙΑ ΤΗΝ ΤEΧΝΗ Η ΕΞAΜΗΝΟ ΑΜΑΛIΑ ΦΩΚA ΕΠIΚΟΥΡΗ ΚΑΘΗΓHΤΡΙΑ Περιεχόμενο Μαθήματος 2 Arduino Τι είναι το Arduino; 3 μικρή συσκευή (μικροεπεξεργαστής) που συνδέεται με USB στον υπολογιστή μια πλατφόρμα

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 10: ΟΔΗΓΗΣΗ ΚΙΝΗΤΗΡΩΝ

ΕΝΟΤΗΤΑ 10: ΟΔΗΓΗΣΗ ΚΙΝΗΤΗΡΩΝ ΕΝΟΤΗΤΑ 10: ΟΔΗΓΗΣΗ ΚΙΝΗΤΗΡΩΝ Στόχος και Περίγραμμα της Ενότητας 10 Στόχος της παρουσίασης Παρουσίαση της βασικής ιδέα και απλών παραδειγμάτων για την οδήγηση DC και βηματικών κινητήρων με το Arduino.

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 3 Μέτρηση Θερμοκρασίας Σύστημα Ελέγχου Θερμοκρασίας. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 3 Μέτρηση Θερμοκρασίας Σύστημα Ελέγχου Θερμοκρασίας. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 3 Μέτρηση Θερμοκρασίας Σύστημα Ελέγχου Θερμοκρασίας με Θερμοστάτη. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Σκοπός Βασική δομή ενός προγράμματος στο LabVIEW.

Διαβάστε περισσότερα

ΝΟΜΟΣ ΤΟΥ OHM ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: 1 ΣΚΟΠΟΣ 1 2 ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ 1 3 ΕΞΟΠΛΙΣΜΟΣ 5 4 ΕΞΑΡΤΗΜΑΤΑ 5

ΝΟΜΟΣ ΤΟΥ OHM ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: 1 ΣΚΟΠΟΣ 1 2 ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ 1 3 ΕΞΟΠΛΙΣΜΟΣ 5 4 ΕΞΑΡΤΗΜΑΤΑ 5 ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ΝΟΜΟΣ ΤΟΥ OHM ΗΜΕΡΟΜΗΝΙΑ: ΤΡΙΩΡΟ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: Περιεχόμενα 1 ΣΚΟΠΟΣ 1 2 ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ 1 2.1 Η ΓΡΑΜΜΙΚΗ ΣΧΕΣΗ ΡΕΥΜΑΤΟΣ ΚΑΙ ΤΑΣΗΣ 3

Διαβάστε περισσότερα

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2 Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου Ενότητα 2 Τι είναι το PLC ΠΕΡΙΕΧΟΜΕΝΑ 2 Τι είναι το PLC. 2.1 Πλεονεκτήματα των PLC. 2.2 Η δομή ενός PLC. 2.3 Τα PLC της αγοράς. 2.4 Αρχή λειτουργίας ενός PLC.

Διαβάστε περισσότερα

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ 1.1 ΕΙΣΑΓΩΓΗ ΣΤΑ ΑΝΑΛΟΓΙΚΑ ΗΛΕΚΤΡΟΝΙΚΑ 1 1.1.1 Αναλογικά σήματα 1 1.1.2 Οι αντιστάσεις 3 1.1.3 Οι πυκνωτές 7 1.1.4 Τα πηνία 11 1.1.5 Οι δίοδοι 13 1.1.6

Διαβάστε περισσότερα

Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 2. Προγραμματισμός Φυσικών Συστημάτων. Συστήματα Πραγματικών Εφαρμογών. Νέα Ψηφιακά Αντικείμενα

Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 2. Προγραμματισμός Φυσικών Συστημάτων. Συστήματα Πραγματικών Εφαρμογών. Νέα Ψηφιακά Αντικείμενα Σκοπός Ψηφιακά Αντικείμενα Μάθημα 1 Δραστηριότητα 2 ΤΟ ΣΥΣΤΗΜΑ ΣΑΡΩΣΗΣ ΤΟΥ ΟΠΤΙΚΟΥ ΠΕΔΙΟΥ. Ψηφιακά Αντικείμενα Μικροελεγκτής Προγραμματισμός Φυσικών Συστημάτων Συστήματα Πραγματικών Εφαρμογών Νέα Ψηφιακά

Διαβάστε περισσότερα

Workshops. Εισηγητής: Παλιούρας Αριστείδης

Workshops. Εισηγητής: Παλιούρας Αριστείδης Workshops Εισηγητής: Παλιούρας Αριστείδης arispaliouras@gmail.com Ηλεκτρική αντίσταση άνθρακα, 10.000 Ω ή 10kΩ, ανοχή ±5%. Το 10KΩ υπολογίζεται από τα χρώματα: καφέ=1 - μαύρο=0 * πορτοκαλί 10 3 = 10 *

Διαβάστε περισσότερα

LFT169 - LFR169 ΠΟΜΠΟΣ ΚΑΙ ΔΕΚΤΗΣ ΨΗΦΙΑΚΩΝ ΚΑΙ ΑΝΑΛΟΓΙΚΩΝ ΣΗΜΑΤΩΝ

LFT169 - LFR169 ΠΟΜΠΟΣ ΚΑΙ ΔΕΚΤΗΣ ΨΗΦΙΑΚΩΝ ΚΑΙ ΑΝΑΛΟΓΙΚΩΝ ΣΗΜΑΤΩΝ LFT169 - LFR169 ΠΟΜΠΟΣ ΚΑΙ ΔΕΚΤΗΣ ΨΗΦΙΑΚΩΝ ΚΑΙ ΑΝΑΛΟΓΙΚΩΝ ΣΗΜΑΤΩΝ Οδηγίες Παραμετροποίησης Power Electronics Control Ε.Π.Ε. Τύποι Συσκευών: LFT169 - LFR169 Περιγραφή: Πομπός και Δέκτης Τηλεχειρισμού 169MHz

Διαβάστε περισσότερα

Πτυχιακή Εργασία Σχεδίαση κυκλωμάτων επικοινωνίας με απλές οθόνες, με τη γλώσσα VHDL και υλοποίηση στις αναπτυξιακές πλακέτες LP-2900 και DE2.

Πτυχιακή Εργασία Σχεδίαση κυκλωμάτων επικοινωνίας με απλές οθόνες, με τη γλώσσα VHDL και υλοποίηση στις αναπτυξιακές πλακέτες LP-2900 και DE2. ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. Πτυχιακή Εργασία Σχεδίαση κυκλωμάτων επικοινωνίας με απλές οθόνες, με τη γλώσσα VHDL και υλοποίηση στις αναπτυξιακές

Διαβάστε περισσότερα

Η δυναμική του Arduino στο μάθημα της Τεχνολογίας. Φάσουρας Δημήτριος Ηλεκτρολόγος ΠΕ 17,03

Η δυναμική του Arduino στο μάθημα της Τεχνολογίας. Φάσουρας Δημήτριος Ηλεκτρολόγος ΠΕ 17,03 Η δυναμική του Arduino στο μάθημα της Τεχνολογίας Φάσουρας Δημήτριος Ηλεκτρολόγος ΠΕ 17,03 dfasouras@gmail.com Τι είναι το Arduino ; Το Arduino είναι μια απλή μητρική πλακέτα ανοικτού κώδικα. Διαθέτει

Διαβάστε περισσότερα

Δίοδοι Ορισμός της διόδου - αρχή λειτουργίας Η δίοδος είναι μια διάταξη από ημιαγώγιμο υλικό το οποίο επιτρέπει την διέλευση ροής ρεύματος μόνο από

Δίοδοι Ορισμός της διόδου - αρχή λειτουργίας Η δίοδος είναι μια διάταξη από ημιαγώγιμο υλικό το οποίο επιτρέπει την διέλευση ροής ρεύματος μόνο από Δίοδοι Ορισμός της διόδου - αρχή λειτουργίας Η δίοδος είναι μια διάταξη από ημιαγώγιμο υλικό το οποίο επιτρέπει την διέλευση ροής ρεύματος μόνο από την μία κατεύθυνση, ανάλογα με την πόλωσή της. Κατασκευάζεται

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 5 Αναλογικά σήματα

ΕΝΟΤΗΤΑ 5 Αναλογικά σήματα ΕΝΟΤΗΤΑ 5 Αναλογικά σήματα Σκοπός και περίγραμμα της Ενότητας 5 Σκοπός της παρουσίασης Να δώσουμε τις βασικές ιδέες για τα αναλογικά σήματα και την χρήση διαφορετικών ειδών περιφερειακών Σύνοψη Επεξήγηση

Διαβάστε περισσότερα

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ d.fotiadis@kastoria.teikoz.gr

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ d.fotiadis@kastoria.teikoz.gr Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΦΩΤΙΑ ΗΣ Α. ΗΜΗΤΡΗΣ M.Sc. ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ (Σ.Τ.ΕΦ.) ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ d.fotiadis@kastoria.teikoz.gr Ασύγχρονη σειριακή

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO. Υποψήφιος Διδάκτωρ

ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO. Υποψήφιος Διδάκτωρ ΕΙΣΑΓΩΓΗ ΣΤΟ ARDUINO Δημιουργός: Επιβλέπων: Μπακάλη Ιωάννα Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ 1 ΤΙ ΕΙΝΑΙ ΤΟ ARDUINO; Είναι ένας συνδυασμός Υλικού (πλακέτας, μικροελεγκτή, αντιστάσεων κτλ) και Λογισμικού

Διαβάστε περισσότερα

ΘΕΜΑ : ΟΛΟΚΛΗΡΩΜΕΝΑ ΚΥΚΛΩΜΑΤΑ ΔΙΑΡΚΕΙΑ: 1 περιόδος. 24/11/2011 12:09 Όνομα: Λεκάκης Κωνσταντίνος καθ. Τεχνολογίας

ΘΕΜΑ : ΟΛΟΚΛΗΡΩΜΕΝΑ ΚΥΚΛΩΜΑΤΑ ΔΙΑΡΚΕΙΑ: 1 περιόδος. 24/11/2011 12:09 Όνομα: Λεκάκης Κωνσταντίνος καθ. Τεχνολογίας ΘΕΜΑ : ΟΛΟΚΛΗΡΩΜΕΝΑ ΚΥΚΛΩΜΑΤΑ ΔΙΑΡΚΕΙΑ: 1 περιόδος 24/11/2011 12:09 καθ. Τεχνολογίας ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΗΣ Ένας μικροεπεξεργαστής είναι ένα ολοκληρωμένο κύκλωμα που επεξεργάζεται όλες τις πληροφορίες σε ένα

Διαβάστε περισσότερα

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο, 2016-2017 Mηχανοτρονική Το Arduino είναι μια «ανοικτού κώδικα» πλατφόρμα «πρωτοτυποποιημένων» ηλεκτρονικών βασισμένη σε ευέλικτο και εύκολο στη χρήση

Διαβάστε περισσότερα

Παιδιά κάτω των 13 ετών δε θα πρέπει να χρησιμοποιούν το κιτ χωρίς επίβλεψη. Μη συνδέετε την κύρια πλακέτα σε εξωτερική τροφοδοσία μεγάλης ισχύος.

Παιδιά κάτω των 13 ετών δε θα πρέπει να χρησιμοποιούν το κιτ χωρίς επίβλεψη. Μη συνδέετε την κύρια πλακέτα σε εξωτερική τροφοδοσία μεγάλης ισχύος. 2 ΠΕΡΙΕΧΟΜΕΝΑ 01. Robotale (Arduino-Compatible) 02. Ράστερ 830 οπών 03. Κουτί αποθήκευσης 04. Κόκκινα leds (τεμ. 5) 05. Κίτρινα leds (τεμ. 5) 06. Πράσινα leds (τεμ. 5) 07. Αντιστάτες 220 Ohm (τεμ. 8) 08.

Διαβάστε περισσότερα

Μαθαίνοντας το hardware του αναπτυξιακού

Μαθαίνοντας το hardware του αναπτυξιακού 1. ΑΣΚΗΣΗ 1 Μαθαίνοντας το hardware του αναπτυξιακού Προϋποθέσεις Το εργαστήριο αυτό προϋποθέτει το διάβασμα και χρήση των εξής: Αρχείο mcbstr9.chm HTML, που δίδεται με τα υπόλοιπα αρχεία του εργαστηρίου.

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 7 Μέτρηση ωμικής αντίστασης και χαρακτηριστικής καμπύλης διόδου

ΑΣΚΗΣΗ 7 Μέτρηση ωμικής αντίστασης και χαρακτηριστικής καμπύλης διόδου Απαραίτητα όργανα και υλικά ΑΣΚΗΣΗ 7 Μέτρηση ωμικής αντίστασης και χαρακτηριστικής καμπύλης διόδου 7. Απαραίτητα όργανα και υλικά. Τροφοδοτικό DC.. Πολύμετρα (αμπερόμετρο, βολτόμετρο).. Πλακέτα για την

Διαβάστε περισσότερα

Ελληνικά. Εγχειρίδιο χρήσης του BT-02N

Ελληνικά. Εγχειρίδιο χρήσης του BT-02N Ελληνικά Εγχειρίδιο χρήσης του BT-02N 1 Ελληνικά Ευρετήριο 1. Επισκόπηση....3 2. Έναρξη χρήσης...5 3. Σύνδεση του κεφαλόφωνου Bluetooth.....6 4. Χρήση του κεφαλόφωνου Bluetooth... 9 5. Τεχνικές προδιαγραφές.

Διαβάστε περισσότερα

Εξαμηνιαία Εργασία 2013 Προγραμματίζοντας τον Arduino στη C Μέρος Α : Υλικά

Εξαμηνιαία Εργασία 2013 Προγραμματίζοντας τον Arduino στη C Μέρος Α : Υλικά Σκοπός Εξαμηνιαία Εργασία 2013 Προγραμματίζοντας τον Arduino στη C Μέρος Α : Υλικά Μικροελεγκτές Πλακέτα Arduino Προσομοίωση Μικροελεγκτών Προγραμματισμός Μικροελεγκτών στη C. 7.1 ΕΠΙΔΙΩΞΗ ΤΗΣ ΕΡΓΑΣΙΑΣ

Διαβάστε περισσότερα

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά

Πλακέτα Arduino. 1ο ΕΠΑΛ Περάματος - 7ο ΕΚ Πειραιά Πλακέτα Arduino Το 2005 oι Massimo Banzi και David Cueartielles στο Ivrea Δημιουργούν την υπολογιστική πλατφόρμα Arduino. Το Arduino είναι βασισμένο σε μια απλή μητρική πλακέτα ανοικτού κώδικα, με ενσωματωμένο

Διαβάστε περισσότερα

Εφαρμογές Αναλογικών Ε/Ε PWM (pulse Width Modulation)

Εφαρμογές Αναλογικών Ε/Ε PWM (pulse Width Modulation) Εφαρμογές Αναλογικών Ε/Ε PWM (pulse Width Modulation) Εισαγωγή Σε αυτή την ενότητα θα δούμε εφαρμογές που χρησιμοποιούν τις αναλογικές Εισόδους/Εξόδους του Arduino ή την τεχνική PWM. Ψηφιακό vs Αναλογικό

Διαβάστε περισσότερα

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication ΡΟΜΠΟΤΙΚΗ ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication ΜΠΑΝΤΗΣ ΑΝΤΩΝΙΟΣ 533 ΤΣΙΚΤΣΙΡΗΣ ΔΗΜΗΤΡΙΟΣ 551 ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΟΥ ΡΟΜΠΟΤ LEGO NXT Το ρομπότ

Διαβάστε περισσότερα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα 1ο ΕΠΑΛ Περάματος 7ο ΕΚ Πειραιά Πλακέτα Arduino Το 2005 oι Massimo Banzi και David Cueartielles στο Ivrea Δημιουργούν την υπολογιστική πλατφόρμα Arduino.

Διαβάστε περισσότερα

Βασικά χαρακτηριστικά

Βασικά χαρακτηριστικά 1 of 6 10/09/2013 13:34 Ηλεκτρονικός πίνακας ελέγχου (πλακέτα) για ρολλά, τύπου S-2055, της εταιρείας AUTOTECH. Είναι κατάλληλος για ρολλά που τροφοδοτούνται από μονοφασικό εναλλασσόμενο ρεύμα 230 V AC

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ ΕΙΣΑΓΩΓΗ Θέµατα ❸Συστήµατα Η/Υ (αναφορά) ❸Γλώσσα υπολογιστών ❸Γλώσσες προγραµµατισµού (low-high level) ❸Low level VS high level programming ❸Βασικά µέρη Η/Υ ❸Μικροϋπολογιστές (µc µp) ❸Αρχιτεκτονική µικροελεγκτών

Διαβάστε περισσότερα

ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I. Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ

ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I. Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ 1 ARDUINO ΚΑΙ ΗΧΟΣ ΠΕΡΙΕΧΟΜΕΝΑ Εισαγωγή, μηχανές παραγωγής ήχου Χρήση του πιεζοηλεκτρικού

Διαβάστε περισσότερα

Σημειώσεις κεφαλαίου 16 Αρχές επικοινωνίας με ήχο και εικόνα

Σημειώσεις κεφαλαίου 16 Αρχές επικοινωνίας με ήχο και εικόνα Σημειώσεις κεφαλαίου 16 Αρχές επικοινωνίας με ήχο και εικόνα ΠΩΣ ΛΕΙΤΟΥΡΓΟΥΝ ΟΙ ΗΛΕΚΤΡΟΝΙΚΕΣ ΕΠΙΚΟΙΝΩΝΙΕΣ Ένα σύστημα ηλεκτρονικής επικοινωνίας αποτελείται από τον πομπό, το δίαυλο (κανάλι) μετάδοσης και

Διαβάστε περισσότερα

Σχεδιασμός και Υλοποίηση οχήματος ελεγχόμενου μέσω Bluetooth

Σχεδιασμός και Υλοποίηση οχήματος ελεγχόμενου μέσω Bluetooth ΕΚΘΕΣΗ ΑΝΑΦΟΡΑΣ ΕΡΓΑΣΙΑΣ ΕΞΑΜΗΝΟΥ ΜΕ ΘΕΜΑ: Σχεδιασμός και Υλοποίηση οχήματος ελεγχόμενου μέσω Bluetooth Design and Implementation of a remote control vehicle using Bluetooth ΑΝΑΣΤΑΣΙΟΥ ΚΩΝΣΤΑΝΤΙΝΟΣ Επιβλέπων:

Διαβάστε περισσότερα

Ηλεκτρονική Φυσική & Οπτικο-ηλεκτρονική Εισαγωγή

Ηλεκτρονική Φυσική & Οπτικο-ηλεκτρονική Εισαγωγή Ηλεκτρονική Φυσική & Οπτικο-ηλεκτρονική Εισαγωγή Α ΕΞΑΜΗΝΟ ΣΠΟΥΔΩΝ α/α Τίτλος Μαθήματος Ωρες Διδασκαλίας ΣΥΝΟΛΟ Θεωρία Ασκ. Πράξης Εργαστ. 1 Μαθηματικά Ι 4 3 1 0 2 Φυσική 6 3 1 2 3 Η//N Φυσική & Οπτικοηλεκτρονική

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 8 η : ΣΥΣΤΗΜΑΤΑ ΕΙΔΟΠΟΙΗΣΗΣ

ΑΣΚΗΣΗ 8 η : ΣΥΣΤΗΜΑΤΑ ΕΙΔΟΠΟΙΗΣΗΣ Εργαστήριο ΜΕΚ και Τεχνολογίας Αυτοκινήτου Καθηγητής: Χριστολουκάς Δημήτριος ΑΣΚΗΣΗ 8 η : ΣΥΣΤΗΜΑΤΑ ΕΙΔΟΠΟΙΗΣΗΣ Ηχητική ειδοποίηση (κόρνες) Σύμφωνα με τον κανονισμό, ένα όχημα με κινητήρα πρέπει να χρησιμοποιεί

Διαβάστε περισσότερα

ΕΝΟΤΗΤΑ 7: ΑΙΣΘΗΤΗΡΕΣ ΥΠΕΡΥΘΡΩΝ

ΕΝΟΤΗΤΑ 7: ΑΙΣΘΗΤΗΡΕΣ ΥΠΕΡΥΘΡΩΝ ΕΝΟΤΗΤΑ 7: ΑΙΣΘΗΤΗΡΕΣ ΥΠΕΡΥΘΡΩΝ Σκοπός και περίγραμμα της Ενότητας 7 Σκοπός της παρουσίασης ΒΑΣΙΚΕΣ ΓΝΩΣΕΙΣ ΥΠΕΡΥΘΡΟΥ ΦΩΤΟΣ Χρήση αισθητήρα υπέρυθρων για τον εντοπισμό αντικειμένων, εμποδίων, παρουσίας

Διαβάστε περισσότερα

2. Ο νόμος του Ohm. Σύμφωνα με το νόμο του Ohm, η τάση V στα άκρα ενός αγωγού με αντίσταση R που τον διαρρέει ρεύμα I δίνεται από τη σχέση: I R R I

2. Ο νόμος του Ohm. Σύμφωνα με το νόμο του Ohm, η τάση V στα άκρα ενός αγωγού με αντίσταση R που τον διαρρέει ρεύμα I δίνεται από τη σχέση: I R R I 2. Ο νόμος του Ohm 1. ΘΕΩΡΙΑ Σύμφωνα με το νόμο του Ohm, η τάση στα άκρα ενός αγωγού με αντίσταση R που τον διαρρέει ρεύμα δίνεται από τη σχέση: R Ισοδύναμα ο νόμος του Ohm μπορεί να διατυπωθεί και ως:

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 7 ΚΥΚΛΩΜΑ R-L-C: ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΣΥΝΤΟΝΙΣΜΟΣ

ΑΣΚΗΣΗ 7 ΚΥΚΛΩΜΑ R-L-C: ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΣΥΝΤΟΝΙΣΜΟΣ ΑΣΚΗΣΗ 7 ΚΥΚΛΩΜΑ R-L-C: ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΣΥΝΤΟΝΙΣΜΟΣ 1 Σκοπός Στην άσκηση αυτή μελετάται η συμπεριφορά ενός κυκλώματος RLC σε σειρά κατά την εφαρμογή εναλλασσόμενου ρεύματος. Συγκεκριμένα μελετάται η μεταβολή

Διαβάστε περισσότερα

ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: 1 ΣΚΟΠΟΣ 1 2 ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ 1 3 ΕΞΟΠΛΙΣΜΟΣ 7 4 ΕΞΑΡΤΗΜΑΤΑ 7

ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: 1 ΣΚΟΠΟΣ 1 2 ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ 1 3 ΕΞΟΠΛΙΣΜΟΣ 7 4 ΕΞΑΡΤΗΜΑΤΑ 7 ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΗΜΕΡΟΜΗΝΙΑ: ΤΡΙΩΡΟ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: ΕΠΩΝΥΜΟ: ΟΝΟΜΑ: ΑΜ: Περιεχόμενα 1 ΣΚΟΠΟΣ 1 2 ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ 1 2.1 ΑΝΤΙΣΤΑΣΕΙΣ ΣΕ ΣΕΙΡΑ 1 2.2 ΣΥΝΟΛΙΚΗ

Διαβάστε περισσότερα

Bread Online. Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης

Bread Online. Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης Bread Online Σχεδιασμός και μετατροπή μιας απλής οικιακής συσκευής σε επαναπρογραμματιζόμενη συσκευή IP Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών

Διαβάστε περισσότερα

MT-3102 Μίνι ψηφιακή αμπεροτσιμπίδα 3 1/2 2A

MT-3102 Μίνι ψηφιακή αμπεροτσιμπίδα 3 1/2 2A MT-3102 Μίνι ψηφιακή αμπεροτσιμπίδα 3 1/2 2A Εγχειρίδιο χρήσης 1 η Έκδοση 2010 2014 Copyright, Prokit s Industries Co., Ltd. ΕΙΣΑΓΩΓΗ Το μίνι ψηφιακό όργανο MT-3102 3 1/2 είναι μια αμπεροτσιμπίδα 3 1/2

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 1 ΜΙΚΡΟΗΛΕΚΤΡΟΝΙΚΗ ΚΑΙ Η/Υ Ι. Σκοπός της άσκησης η μελέτη βασικών ηλεκτρονικών εξαρτημάτων των Η/Υ και η εισαγωγή στην μικροηλεκτρονική.

ΑΣΚΗΣΗ 1 ΜΙΚΡΟΗΛΕΚΤΡΟΝΙΚΗ ΚΑΙ Η/Υ Ι. Σκοπός της άσκησης η μελέτη βασικών ηλεκτρονικών εξαρτημάτων των Η/Υ και η εισαγωγή στην μικροηλεκτρονική. ΑΣΚΗΣΗ 1 ΜΙΚΡΟΗΛΕΚΤΡΟΝΙΚΗ ΚΑΙ Η/Υ Ι Σκοπός της άσκησης η μελέτη βασικών ηλεκτρονικών εξαρτημάτων των Η/Υ και η εισαγωγή στην μικροηλεκτρονική. Ερωτήσεις-Πειραματικό Μέρος 1. Τι γνωρίζετε για τους ημιαγωγούς.

Διαβάστε περισσότερα

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 1: Εισαγωγή στα ενσωματωμένα συστήματα (embedded systems) Εργαστήριο Αυτομάτου Ελέγχου Ενσωματωμένα συστήματα (Embedded Systems) Ενσωματωμένα συστήματα (Embedded

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 3 Γέφυρα Wheatstone

ΑΣΚΗΣΗ 3 Γέφυρα Wheatstone ΑΣΚΗΣΗ 3 Γέφυρα Wheatstone Απαραίτητα όργανα και υλικά 3. Απαραίτητα όργανα και υλικά. Κιβώτιο ωμικών αντιστάσεων π.χ. 0,Ω έως Ω.. Μεταβλητή ωμική αντίσταση σε μορφή μεταλλικής χορδής που φέρει κινητή

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016) ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016) Περιγραφή της Άσκησης Στόχος της άσκησης είναι η δημιουργία ενός συστήματος διαχείρισης φωτισμού. Μία φωτομεταβαλλόμενη αντίσταση (LDR) θα διαπιστώνει την ποσότητα του φωτός

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 8 Tutorial by TeSLa Συνδεσμολογία κυκλώματος Διαδικασία Προγραμματισμού

ΑΣΚΗΣΗ 8 Tutorial by TeSLa Συνδεσμολογία κυκλώματος Διαδικασία Προγραμματισμού Α.Τ.Ε.Ι. ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΩΝ ΑΣΚΗΣΗ 8 Tutorial by TeSLa Συνδεσμολογία κυκλώματος Διαδικασία Προγραμματισμού Θεσσαλονίκη, Ιανουάριος 2007 Η Άσκηση 8 του εργαστηρίου

Διαβάστε περισσότερα

Άσκηση 10 Στοιχεία ηλεκτρονικής τεχνολογίας

Άσκηση 10 Στοιχεία ηλεκτρονικής τεχνολογίας Άσκηση 10 Στοιχεία ηλεκτρονικής τεχνολογίας ΔΙΟΔΟΣ Οι περισσότερες ηλεκτρονικές συσκευές όπως οι τηλεοράσεις, τα στερεοφωνικά συγκροτήματα και οι υπολογιστές χρειάζονται τάση dc για να λειτουργήσουν σωστά.

Διαβάστε περισσότερα

ΘΕΜΑ : ΗΛΕΚΤΡΟΝΙΚΑ ΔΙΑΡΚΕΙΑ: 2 περιόδους

ΘΕΜΑ : ΗΛΕΚΤΡΟΝΙΚΑ ΔΙΑΡΚΕΙΑ: 2 περιόδους ΘΕΜΑ : ΗΛΕΚΤΡΟΝΙΚΑ ΔΙΑΡΚΕΙΑ: 2 περιόδους 11/10/2011 08:28 καθ. Τεχνολογίας Τι είναι Ηλεκτρισμός Ηλεκτρισμός είναι η κατευθυνόμενη κίνηση των ηλεκτρονίων μέσα σ ένα σώμα το οποίο χαρακτηρίζεται σαν αγωγός

Διαβάστε περισσότερα

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ Πλατφόρμες ενσωματωμένων συστημάτων Διδάσκων: Παναγιώτης Καρκαζής Περίγραμμα - Δίαυλοι επικοινωνίας - Μνήμες -Συσκευές Ι/Ο Timers Counters keyboards Leds 7 segment display

Διαβάστε περισσότερα

Τροφοδοσία : 3,3V, 5V Αυτή η πινακίδα επιτρέπει τη σύνδεση και των 8 απολήξεων (pins) μίας θύρας E- blocks με καλώδια με τη χρήση τερματισμών με

Τροφοδοσία : 3,3V, 5V Αυτή η πινακίδα επιτρέπει τη σύνδεση και των 8 απολήξεων (pins) μίας θύρας E- blocks με καλώδια με τη χρήση τερματισμών με ΠΙΝΑΚΙΔΑ ΤΕΡΜΑΤΙΣΜΩΝ ΕΒ002 Αυτή η πινακίδα επιτρέπει τη σύνδεση και των 8 απολήξεων (pins) μίας θύρας E- blocks με καλώδια με τη χρήση τερματισμών με βίδες. ΠΙΝΑΚΙΔΑ ΑΙΣΘΗΤΗΡΩΝ ΕΒ003 Αυτή η πινακίδα E-block

Διαβάστε περισσότερα

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Κεφάλαιο 1.6: Συσκευές αποθήκευσης Κεφάλαιο 1.6: Συσκευές αποθήκευσης 1.6.1 Συσκευές αποθήκευσης Μνήμη τυχαίας προσπέλασης - RAM Η μνήμη RAM (Random Access Memory Μνήμη Τυχαίας Προσπέλασης), κρατεί όλη την πληροφορία (δεδομένα και εντολές)

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 4. Οδηγώντας έναν DC Κινητήρα. Το κύκλωμα της Λειτουργίας DC Κινητήρα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 4. Οδηγώντας έναν DC Κινητήρα. Το κύκλωμα της Λειτουργίας DC Κινητήρα Σκοπός Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 4 Οδηγώντας έναν DC Κινητήρα. Το κύκλωμα της Λειτουργίας DC Κινητήρα Τρανζίστορ στη Λειτουργία ενός DC Κινητήρα. Η Χρήση της Διόδου. Το Πρόγραμμα που Οδηγεί

Διαβάστε περισσότερα

Εφαρμογές αναλογικών / Ψηφιακών

Εφαρμογές αναλογικών / Ψηφιακών Εφαρμογές αναλογικών / Ψηφιακών 1 ΕΙΣΑΓΩΓΗ Σε αυτήν την ενότητα θα δούμε μερικές ακόμα εφαρμογές ψηφιακών / αναλογικών εισόδων/ εξόδων που μπορούμε να φτιάξουμε με την βοήθεια του Arduino, χρησιμοποιώντας

Διαβάστε περισσότερα

G&K ELECTRONICS AVR ATMEGA DEVELOPMENT BOARD

G&K ELECTRONICS AVR ATMEGA DEVELOPMENT BOARD ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ G&K ELECTRONICS Αυτή η αναπτυξιακή μονάδα (AVR-ATMEGA 28 PIN) είναι σχεδιασμένη να χρησιμοποιηθεί για την εκμάθηση βασικών και προηγμένων δεξιοτήτων που απαιτούνται για τον έλεγχο ενός

Διαβάστε περισσότερα

ΕΝΙΣΧΥΤΗΣ ΤΑΞΗΣ Α ME TO MULTISIM

ΕΝΙΣΧΥΤΗΣ ΤΑΞΗΣ Α ME TO MULTISIM ΜΑΘΗΜΑ : ΕΡΓΑΣΤΗΡΙΟ ΑΝΑΛΟΓΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΕΝΙΣΧΥΤΗΣ ΤΑΞΗΣ Α ME TO MULTISIM Σκοπός: Η Εξέταση λειτουργίας του ενισχυτή κοινού εκπομπού και εντοπισμός βλαβών στο κύκλωμα με τη χρήση του προγράμματος προσομοίωσης

Διαβάστε περισσότερα

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή

Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή Γενικά Στοιχεία Ηλεκτρονικού Υπολογιστή 1. Ηλεκτρονικός Υπολογιστής Ο Ηλεκτρονικός Υπολογιστής είναι μια συσκευή, μεγάλη ή μικρή, που επεξεργάζεται δεδομένα και εκτελεί την εργασία του σύμφωνα με τα παρακάτω

Διαβάστε περισσότερα

Φυσική για Μηχανικούς

Φυσική για Μηχανικούς Φυσική για Μηχανικούς Ρεύμα και Αντίσταση Εικόνα: Οι γραμμές ρεύματος μεταφέρουν ενέργεια από την ηλεκτρική εταιρία στα σπίτια και τις επιχειρήσεις μας. Η ενέργεια μεταφέρεται σε πολύ υψηλές τάσεις, πιθανότατα

Διαβάστε περισσότερα

ΣΗΜΕΙΩΣΕΙΣ ΦΥΣΙΚΗΣ Γ ΓΥΜΝΑΣΙΟΥ

ΣΗΜΕΙΩΣΕΙΣ ΦΥΣΙΚΗΣ Γ ΓΥΜΝΑΣΙΟΥ ΣΗΜΕΙΩΣΕΙΣ ΦΥΣΙΚΗΣ Γ ΓΥΜΝΑΣΙΟΥ Κεφάλαιο 2 - Ηλεκτρικό Ρεύμα Επιμέλεια: Αγκανάκης Παναγιώτης, Φυσικός https://physicscourses.wordpress.com/ Με ποιες θεμελιώδεις έννοιες συνδέεται το ηλεκτρικό ρεύμα; Το

Διαβάστε περισσότερα

Άσκηση 1. Όργανα εργαστηρίου, πηγές συνεχούς τάσης και μετρήσεις

Άσκηση 1. Όργανα εργαστηρίου, πηγές συνεχούς τάσης και μετρήσεις ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. ΗΛΕΚΤΡΟΝΙΚΑ Ι (ΕΡ) Άσκηση 1 Όργανα εργαστηρίου, πηγές συνεχούς τάσης και μετρήσεις Στόχος Η άσκηση είναι εισαγωγική και προσφέρει γνωριμία και εξοικείωση

Διαβάστε περισσότερα

Φύλλο εργασίας 7 - Δημιουργώ τα δικά μου χρώματα με το RGB LED

Φύλλο εργασίας 7 - Δημιουργώ τα δικά μου χρώματα με το RGB LED Φύλλο εργασίας 7 - Δημιουργώ τα δικά μου χρώματα με το RGB LED Στην δραστηριότητα αυτή θα δουλέψουμε με το RGB LED για να παράγουμε μια μεγάλη ποικιλία χρωμάτων. Το RGB LED είναι στην ουσία τρία διαφορετικά

Διαβάστε περισσότερα

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων Εργαστήριο ενσωματωμένων συστημάτων Παρουσίαση 2: Βασικός Προγραμματισμός Arduino (AVR) Εργαστήριο Αυτομάτου Ελέγχου Η πλατφόρμα Arduino UNO Microcontroller: ATmega328 Operating Voltage: 5V Digital I/O

Διαβάστε περισσότερα

Φυσική για Μηχανικούς

Φυσική για Μηχανικούς Φυσική για Μηχανικούς Χωρητικότητα Εικόνα: Όλες οι παραπάνω συσκευές είναι πυκνωτές, οι οποίοι αποθηκεύουν ηλεκτρικό φορτίο και ενέργεια. Ο πυκνωτής είναι ένα είδος κυκλώματος που μπορούμε να συνδυάσουμε

Διαβάστε περισσότερα

Κωνσταντίνος Γκαλονάκης. Arduino: Προγραμματισμός στην πράξη

Κωνσταντίνος Γκαλονάκης. Arduino: Προγραμματισμός στην πράξη Κωνσταντίνος Γκαλονάκης Arduino: Προγραμματισμός στην πράξη 1 Σύνδεση του Arduino με τον Η/Υ και προγραμματισμός αυτού. 1. Εγκατάσταση περιβάλλοντος Arduino IDE Για να προγραμματίσετε τη μονάδα σας θα

Διαβάστε περισσότερα

Μέτρηση Θερμοκρασίας με τον αισθητήρα TMP36. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων. Βασική δομή ενός προγράμματος στο LabVIEW.

Μέτρηση Θερμοκρασίας με τον αισθητήρα TMP36. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων. Βασική δομή ενός προγράμματος στο LabVIEW. Σκοπός Μάθημα 2 Δραστηριότητα 1 Μέτρηση Θερμοκρασίας με τον αισθητήρα TMP36. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Βασική δομή ενός προγράμματος στο LabVIEW. Εμπρόσθιο Πλαίσιο (front panel). Σχεδίαση

Διαβάστε περισσότερα

ΗΜΜΥ 100 Εισαγωγή στην Τεχνολογία

ΗΜΜΥ 100 Εισαγωγή στην Τεχνολογία University of Cyprus ptical Diagnostics ΗΜΜΥ 100 Εισαγωγή στην Τεχνολογία Διάλεξη 9 Σήκω ψυχή μου δώσε ρεύμα! I Ηλεκτρισμός Κίνηση ηλεκτρονίων Αόρατη δύναμη που παρέχει φως, θερμότητα, ήχο, κίνηση... 2

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Αυτοματισμοί και

Διαβάστε περισσότερα

Ενσωματωμένα Συστήματα

Ενσωματωμένα Συστήματα Ενσωματωμένα Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ARDUINO Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2008 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : ΑΥΤΟΜΑΤΙΣΜΟΙ ΚΑΙ

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης Μετατροπέα Τάσης / Φορτιστή Συσσωρευτών

Εγχειρίδιο Χρήσης Μετατροπέα Τάσης / Φορτιστή Συσσωρευτών Εγχειρίδιο Χρήσης Μετατροπέα Τάσης / Φορτιστή Συσσωρευτών ΟΔΗΓΙΕΣ ΑΣΦΑΛΕΙΑΣ ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό το κεφάλαιο περιέχει σημαντικές οδηγίες ασφαλείας και λειτουργίας. Διάβασε και κρατήστε αυτό το εγχειρίδιο

Διαβάστε περισσότερα

ΑΙΣΘΗΤΗΡΑΣ ΣΧΕΤΙΚΗΣ ΥΓΡΑΣΙΑΣ. Η πιο συνηθισμένη έκφραση για την υγρασία του αέρα είναι η σχετική υγρασία (Relative Ηumidity, RH).

ΑΙΣΘΗΤΗΡΑΣ ΣΧΕΤΙΚΗΣ ΥΓΡΑΣΙΑΣ. Η πιο συνηθισμένη έκφραση για την υγρασία του αέρα είναι η σχετική υγρασία (Relative Ηumidity, RH). ΑΙΣΘΗΤΗΡΑΣ ΣΧΕΤΙΚΗΣ ΥΓΡΑΣΙΑΣ Η πιο συνηθισμένη έκφραση για την υγρασία του αέρα είναι η σχετική υγρασία (Relative Ηumidity, RH). Η σχετική υγρασία είναι ο λόγος επί τοις εκατό (%) της μάζας των υδρατμών

Διαβάστε περισσότερα

Μάθημα 1 ΑΙΣΘΗΤΗΡΕΣ Ο Αισθητήρας Δύναμης. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού.

Μάθημα 1 ΑΙΣΘΗΤΗΡΕΣ Ο Αισθητήρας Δύναμης. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού. Σκοπός Σχεδίαση Συστημάτων με τον Arduino Μάθημα 1 ΑΙΣΘΗΤΗΡΕΣ Ο Αισθητήρας Δύναμης. Επανεξέταση των βασικών εννοιών της C και του προγραμματισμού. Κατανόηση των βημάτων στη συστηματική ανάπτυξη ενός προγράμματος.

Διαβάστε περισσότερα

ΦΥΣΙΚΗ Γ ΓΥΜΝΑΣΙΟΥ 2.1 ΤΟ ΗΛΕΚΤΡΙΚΟ ΡΕΥΜΑ

ΦΥΣΙΚΗ Γ ΓΥΜΝΑΣΙΟΥ 2.1 ΤΟ ΗΛΕΚΤΡΙΚΟ ΡΕΥΜΑ ΦΥΣΙΚΗ Γ ΓΥΜΝΑΣΙΟΥ 2Η ΕΝΟΤΗΤΑ ΗΛΕΚΤΡΙΚΟ ΡΕΥΜΑ 2.1 ΤΟ ΗΛΕΚΤΡΙΚΟ ΡΕΥΜΑ Τι είναι ; Ηλεκτρικό ρεύμα ονομάζεται η προσανατολισμένη κίνηση των ηλεκτρονίων ή γενικότερα των φορτισμένων σωματιδίων Που μπορεί να

Διαβάστε περισσότερα

Πανεπιστήµιο Θεσσαλίας

Πανεπιστήµιο Θεσσαλίας Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών ΗΥ 130 : Ψηφιακή σχεδίαση Βόλος 2015 1 Εισαγωγή Το Multisim είναι ένα ολοκληρωμένο περιβάλλον προσομοίωσης της συμπεριφοράς

Διαβάστε περισσότερα

ΗΛΕΚΤΡΙΚΑ ΚΥΚΛΩΜΑΤΑ ΚΑΙ ΜΕΤΡΗΣΕΙΣ ΣΤΗΝ ΒΙΟΪΑΤΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ

ΗΛΕΚΤΡΙΚΑ ΚΥΚΛΩΜΑΤΑ ΚΑΙ ΜΕΤΡΗΣΕΙΣ ΣΤΗΝ ΒΙΟΪΑΤΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΕΙΣΑΓΩΓΗ ΗΛΕΚΤΡΙΚΑ ΚΥΚΛΩΜΑΤΑ ΚΑΙ ΜΕΤΡΗΣΕΙΣ ΣΤΗΝ ΒΙΟΪΑΤΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΥΛΙΚΟ ΜΑΘΗΜΑΤΟΣ Στο eclass του Τμήματος (http://medisp.bme.teiath.gr/eclass/) υπάρχει σχετικό μάθημα με τίτλο Ηλεκτρικά Κυκλώματα και

Διαβάστε περισσότερα

για τις ρυθμίσεις LabView μέσα από το κανάλι και του καλωδίου USB.

για τις ρυθμίσεις LabView μέσα από το κανάλι   και του καλωδίου USB. 1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας Δραστηριότητα: 11 Μάθημα: Εργαστήριο Δικτύων Υπολογιστών Αντικείμενο : Μέτρηση

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Αυτοματισμοί και

Διαβάστε περισσότερα

Φυσική για Μηχανικούς

Φυσική για Μηχανικούς Φυσική για Μηχανικούς Ρεύμα και Αντίσταση Εικόνα: Οι γραμμές ρεύματος μεταφέρουν ενέργεια από την ηλεκτρική εταιρία στα σπίτια και τις επιχειρήσεις μας. Η ενέργεια μεταφέρεται σε πολύ υψηλές τάσεις, πιθανότατα

Διαβάστε περισσότερα

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΗΜΕΡΗΣΙΩΝ ΕΣΠΕΡΙΝΩΝ

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ Γ ΗΜΕΡΗΣΙΩΝ ΕΣΠΕΡΙΝΩΝ ΑΡΧΗ ΗΣ ΣΕΛΙ ΑΣ Γ ΗΜΕΡΗΣΙΩΝ ΕΣΠΕΡΙΝΩΝ ΠΑΝΕΛΛΑΔΙΚΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΚΑΙ Δ ΤΑΞΗΣ ΕΣΠΕΡΙΝΟΥ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΑΡΑΣΚΕΥΗ 6 ΙΟΥΝΙΟΥ 4 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΗΛΕΚΤΡΟΛΟΓΙΑ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ

Διαβάστε περισσότερα

Ηλεκτροκινητήρας Εναλλασσόμενου Ρεύματος τύπου κλωβού. Άσκηση 9. Ηλεκτροκινητήρας εναλλασσόμενου ρεύματος τύπου κλωβού

Ηλεκτροκινητήρας Εναλλασσόμενου Ρεύματος τύπου κλωβού. Άσκηση 9. Ηλεκτροκινητήρας εναλλασσόμενου ρεύματος τύπου κλωβού ANTIKEIMENO: Άσκηση 9 Ηλεκτροκινητήρας εναλλασσόμενου ρεύματος τύπου κλωβού ΣΤΟΧΟΙ ΑΥΤΟΥ ΤΟΥ ΠΕΙΡΑΜΑΤΟΣ: Κατανόηση της λειτουργίας του ηλεκτροκινητήρα εναλλασσόμενου ρεύματος τύπου κλωβού Υπολογισμός μηχανικών

Διαβάστε περισσότερα

Κεφάλαιο 1.5: Τα βασικά μέρη ενός υπολογιστή

Κεφάλαιο 1.5: Τα βασικά μέρη ενός υπολογιστή Κεφάλαιο 1.5: Τα βασικά μέρη ενός υπολογιστή 1.5.1 Ανάλυση των μερών ενός υπολογιστή Μονάδα συστήματος Είναι το κουτί του υπολογιστή το οποίο φαίνεται αρκετά συμπαγές, αλλά στην πραγματικότητα αποτελείται

Διαβάστε περισσότερα

Κανόνες του Εργαστηρίου Ψηφιακών Συστημάτων Βαθμολογία του Εργαστηρίου Υλικά και εξοπλισμός που θα χρησιμοποιηθούν σωστός τρόπος χειρισμού τους και

Κανόνες του Εργαστηρίου Ψηφιακών Συστημάτων Βαθμολογία του Εργαστηρίου Υλικά και εξοπλισμός που θα χρησιμοποιηθούν σωστός τρόπος χειρισμού τους και Κανόνες του Εργαστηρίου Ψηφιακών Συστημάτων Βαθμολογία του Εργαστηρίου Υλικά και εξοπλισμός που θα χρησιμοποιηθούν σωστός τρόπος χειρισμού τους και προβλήματα που μπορεί να συναντηθούν Επιπλέον συμβουλές

Διαβάστε περισσότερα

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΊΔΡΥΜΑ ΑΘΗΝΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΊΔΡΥΜΑ ΑΘΗΝΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΊΔΡΥΜΑ ΑΘΗΝΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΗΛΕΚΤΡΙΚΑ ΚΥΚΛΩΜΑΤΑ ΚΑΙ ΜΕΤΡΗΣΕΙΣ ΣΤΗ ΒΙΟΪΑΤΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 6: ΠΑΡΑΛΛΗΛΗ

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Μικροϋπολογιστές

Διαβάστε περισσότερα

Informer Compact series

Informer Compact series Informer Compact series Line Interactive Ημιτονικής Εξόδου 1kVA/2kVA/3kVA Uninterruptible Power Supply ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΗ ΠΡΟΣΟΧΗ: 1. Διαβάστε το εγχειρίδιο χρήσης προσεκτικά πριν την εγκατάσταση ή τη λειτουργία

Διαβάστε περισσότερα

Έλεγχος κινητήρα συνεχούς ρεύματος με τρανζίστορ και Arduino

Έλεγχος κινητήρα συνεχούς ρεύματος με τρανζίστορ και Arduino Έλεγχος κινητήρα συνεχούς ρεύματος με τρανζίστορ και Arduino Στην κατασκευή αυτή ο σκοπός ήταν να ελέγξουμε την ταχύτητα ενός κινητήρα συνεχούς ρεύματος με τη χρήση ενός τρανζίστορ που θα χρησιμοποιηθεί

Διαβάστε περισσότερα

Άσκηση 3 Η φωτο-εκπέµπουσα δίοδος (Light Emitting Diode)

Άσκηση 3 Η φωτο-εκπέµπουσα δίοδος (Light Emitting Diode) Άσκηση 3 Η φωτο-εκπέµπουσα δίοδος (Light Emitting Diode) Εισαγωγή Στην προηγούµενη εργαστηριακή άσκηση µελετήσαµε την δίοδο ανόρθωσης ένα στοιχείο που σχεδιάστηκε για να λειτουργεί ως µονόδροµος αγωγός.

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 2: Ηλεκτρικό Ρεύμα Μέρος 1 ο

ΚΕΦΑΛΑΙΟ 2: Ηλεκτρικό Ρεύμα Μέρος 1 ο ΚΕΦΑΛΑΙΟ 2: Ηλεκτρικό Ρεύμα Μέρος 1 ο Βασίλης Γαργανουράκης Φυσική ήγ Γυμνασίου Εισαγωγή Στο προηγούμενο κεφάλαιο μελετήσαμε τις αλληλεπιδράσεις των στατικών (ακίνητων) ηλεκτρικών φορτίων. Σε αυτό το κεφάλαιο

Διαβάστε περισσότερα