ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΏΝ ΕΦΑΡΜΟΓΏΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ CHECK IN TANK PUMPING THROUGH GSM Επιβλέπων Καθηγητής: Κόγιας Παναγιώτης Επιβλέπουσα Καθηγήτρια: Κόγια Φωτεινή ΚΑΒΑΛΑ, ΦΕΒΡΟΥΑΡΙΟΣ 2014
ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ Πρόλογος...4 Περίληψη...5 Abstract...5 Κεφάλαιο 1 ο - Επιτήρηση στάθμης δεξαμενών σε αντλιοστάσια εφαρμογές 6 1.1 Αυτοματισμοί διαχείρισης νερού...6 1.2 Συστήματα κεντρικού ελέγχου και διαχείρισης δικτύων...8 Κεφάλαιο 2 ο ARDUINO...10 2.1 Περιγραφή και λειτουργία του ARDUINO...10 2.2 Ο μικροελεγκτής του ARDUINO...13 2.3 Είσοδοι Έξοδοι του ARDUINO...15 2.4 Τροφοδοσία κουμπιά και LED του ARDUINO...17 2.5 Τα δημοφιλέστερα SHIELDS του ARDUINO....20 Κεφάλαιο 3 ο - Λογισμικό εποπτείας του συστήματος - Προγραμματισμός...21 3.1 ARDUINO IDE SOFTWARE...21 3.2 Εντολές - Παράδειγμα...24 3.3 Προγραμματισμός μέσω ICSP......34 4646 2
ΠΕΡΙΕΧΟΜΕΝΑ Κεφάλαιο 4 ο - Επιτηρητής στάθμης...36 4.1 Εισαγωγή...36 4.2 Σημειακή μέτρηση της στάθμης «4.2.1-4.2.5» «4.3.1-4.3.3»...36 4.3 Συνεχής μέτρηση της στάθμης...40 4.4 Ο αισθητήρας της εφαρμογής...42 Κεφάλαιο 5 ο - Περιγραφή της εφαρμογής...43 5.1 Σκοπός...43 5.2 Υλικά...43 5.3 Λειτουργία της εφαρμογής...46 5.4 Περιγραφή του αυτοματισμού...57 5.4.1 Είσοδοι του αυτοματισμού...47 5.4.2 Έξοδοι του αυτοματισμού...48 5.5 Tranzistor TIP31C Λειτουργία στην εφαρμογή μας.48 5.6 Φωτογραφίες του αυτοματισμού και της μακέτας...49 Κεφάλαιο 6 ο - Περιγραφή του προγράμματος του Arduino της εφαρμογής...52 6.1 Εισαγωγή...52 6.2 Περιγραφή του προγράμματος μας βήμα - βήμα...53 Συμπεράσματα Προτάσεις...65 Βιβλιογραφία.....66 3
ΠΡΟΛΟΓΟΣ Πρόλογος Η παρούσα εργασία είχε ως στόχο την κατασκευή ενός ολοκληρωμένου συστήματος ελέγχου της στάθμης νερού σε δεξαμενή. Την επιτήρηση της μέσω ενός αισθητήριου Sonar την επίβλεψη του αλλά και την ενημέρωση μαζί με τον έλεγχο της μέσω δικτύου GSM. Η εργασία για την κατασκευή ξεκίνησε τον Ιούνιο του 2013 και τελείωσε τον Φεβρουάριο του 2014 μαζί με την παρουσίαση της. Από την μεριά μου θέλω να ευχαριστήσω τους επιβλέποντες καθηγητές Κ. Κόγια Παναγιώτη και την Κα. Κόγια Φωτεινή που μου έδωσαν την ευκαιρία αλλά και την δυνατότητα να ασχοληθώ με το συγκεκριμένο θέμα. Επίσης θέλω να ευχαριστήσω θερμά τους Γονείς μου που με βοήθησαν ψυχολογικά αλλά και οικονομικά για την πραγματοποίηση της παρούσας εργασίας και όποιον φίλο βοήθησε στο παρόν Project. 4646 4
ΠΕΡΙΛΗΨΗ Περίληψη Σκοπός της παρούσας εργασίας είναι η κατασκευή ενός ολοκληρωμένου συστήματος ελέγχου της στάθμης νερού σε δεξαμενή. Την επιτήρηση της μέσω ενός αισθητήριου Sonar, την επίβλεψη της αλλά και την ενημέρωση μας μαζί με τον έλεγχο της, μέσω δικτύου GSM. Η επίβλεψη της όλης κατασκευής, για να ενημερωνόμαστε ανά πάσα στιγμή, γίνεται μέσω ηλεκτρονικού υπολογιστή και συγκεκριμένα μέσω του monitor από το ARDUINO IDE SOFTWARE. Έχει την δυνατότητα να μας ενημερώνει με την βοήθεια του module αλλά και του δικτύου GSM σε τι επίπεδο στάθμης βρίσκεται το νερό στη δεξαμενή μας. Γίνεται λεπτομερής αναφορά στους τρόπους και τις επιλογές μέτρησης της στάθμης. Το παρόν αποτελεί ένα εκπαιδευτικό μοντέλο, φιλικό προς τον εκάστοτε χρήστη. Abstract The purpose of the present project is the construction of a completed control of level water in reservoir. In addition its surveillance through a sensor Sonar, its supervision and also with the aid of the GSM network we can have full update and control of this specific system. The supervision of the system, so we can have a full update in any time, becomes through a computer and in specific via the monitor of the ARDUINO IDE SOFTWARE. Also it has the capability to update us with the help of the module and furthermore through the GSM network it allows us to know in what level the water is in the reservoir. A detailed report on ways and options level measurement showed to us in the book. The current system constitutes an educational model, friendly to every user. 4646 5
ΚΕΦΑΛΑΙΟ 1 Ο - ΕΠΙΤΗΡΗΣΗ ΣΤΑΘΜΗΣ ΔΕΞΑΜΕΝΩΝ ΣΕ ΑΝΤΛΙΟΣΤΑΣΙΑ ΕΦΑΡΜΟΓΕΣ Κεφάλαιο 1 ο Επιτήρηση στάθμης δεξαμενών σε αντλιοστάσια εφαρμογές 1.1 Αυτοματισμοί διαχείρισης νερού Η σωστή διαχείριση των υδάτινων πόρων αποτελεί στη σημερινή εποχή επιτακτική ανάγκη διότι τα προβλήματα από την έλλειψη του νερού αλλά και από την υποβαθμισμένη ποιότητα του εντείνονται συνεχώς. Ο ρόλος των αυτοματισμών στον τομέα αυτό μεγαλώνει αφού η εφαρμογή τους στα εξωτερικά και εσωτερικά δίκτυα των χωριών αλλά και των πόλεων έχει πολλά ευεργετικά αποτελέσματα όπως: Εξοικονόμηση νερού μέσω μείωσης των διαρροών. Συγκέντρωση και καταγραφή πολλών στατιστικών δεδομένων. Εξοικονόμηση ηλεκτρικής ενέργειας. Διατήρηση ή επαναφορά της ποιότητας του νερού στα επιθυμητά επίπεδα. Η εφαρμογή των αυτοματισμών επιφέρει: Αποφυγή πληγμάτων πίεσης. Αποφυγή βλαβών στους σωλήνες και στις αντλίες. Αποφυγή της επισφαλούς ενσύρματης επικοινωνίας αντλιοστασίων δεξαμενών. Υλοποίηση σύνθετων αυτοματισμών. Απλοποίηση ηλεκτρικών πινάκων. Ευκολία χειρισμών. Άμεση ενημέρωση σε περιπτώσεις σφαλμάτων. 4646 6
ΚΕΦΑΛΑΙΟ 1 Ο - ΕΠΙΤΗΡΗΣΗ ΣΤΑΘΜΗΣ ΔΕΞΑΜΕΝΩΝ ΣΕ ΑΝΤΛΙΟΣΤΑΣΙΑ ΕΦΑΡΜΟΓΕΣ Οι αυτοματισμοί αυτού του είδους εφαρμόζονται σε: Γεωτρήσεις. Αντλιοστάσια. Δεξαμενές. Μονάδες επεξεργασίας νερού. Φρεάτια παρακολούθησης και ελέγχου. Πήγες υδρομαστεύσεις. Σταθμούς κεντρικού ελέγχου. Μεταξύ άλλων περιλαμβάνουν: Εκκίνηση στάση αντλιών. Επιτήρηση στάθμης υδροφόρου ορίζοντα πηγών. Επιτήρηση δικτύου ΔΕΗ. Επιτήρηση καταθλιπτικών αγωγών. Έλεγχο στάθμης δεξαμενών. Διατήρηση πίεσης ή και παροχής. Παρακολούθηση παραμέτρων όπως πίεση και χλώριο κ.λπ. 7
ΚΕΦΑΛΑΙΟ 1 Ο - ΕΠΙΤΗΡΗΣΗ ΣΤΑΘΜΗΣ ΔΕΞΑΜΕΝΩΝ ΣΕ ΑΝΤΛΙΟΣΤΑΣΙΑ ΕΦΑΡΜΟΓΕΣ 1.2 Συστήματα κεντρικού ελέγχου και διαχείρισης δικτύων Συστήματα κεντρικού ελέγχου και διαχείρισης δικτύων είναι η απεικόνιση σε πραγματικό χρόνο μέσω ηλεκτρονικού υπολογιστή όλων των πληροφοριών ενός δικτύου ύδρευσης και η δυνατότητα επέμβασης στη λειτουργία του. Ο κεντρικός έλεγχος ενός δικτύου ύδρευσης αποτελούσε ζητούμενο εδώ και πολλά χρόνια. Σήμερα με την πρόοδο που έχει επιτευχθεί στην ηλεκτρονική και κατ επέκταση στις τηλεπικοινωνίες αυτό είναι πλέον εφικτό αλλά και οικονομικά προσιτό. Οι πληροφορίες που μπορούν να εμφανίζονται είναι: Λειτουργική κατάσταση αντλιών ( on off ). Σφάλματα ( θερμικά, σπασίματα αγωγών, ελλείψεις τάσεων κ.λπ. ). Ώρες λειτουργίας αντλιών. Στάθμες δεξαμενών. Πέσεις αγωγών. Παροχές. Κατάσταση ηλεκτροβαλβίδων ρύθμισης. Παράμετροι συστημάτων χλωρίωσης. Ιστορικά στοιχεία ( Όλων των παραπάνω ). Ποιοι χειρισμοί μπορούν να γίνουν: Έλεγχος αντλιών. Αλλαγή ορίων σταθμών δεξαμενών. Αλλαγή παραμέτρου χλωρίωσης. Καθορισμός πορείας νερού. Καθορισμός παροχών. 8
ΚΕΦΑΛΑΙΟ 1 Ο - ΕΠΙΤΗΡΗΣΗ ΣΤΑΘΜΗΣ ΔΕΞΑΜΕΝΩΝ ΣΕ ΑΝΤΛΙΟΣΤΑΣΙΑ ΕΦΑΡΜΟΓΕΣ Αποτελείται από: Τον κεντρικό σταθμό ελέγχου. Τους επιμέρους τοπικούς σταθμούς. Ο εξοπλισμός που μπορεί να χρησιμοποιηθεί είναι: ARDUINO ή PLC ή PID. Ηλεκτροβάνες. Αισθητήρες μέτρησης. Ασύρματες επικοινωνίες. Ενσύρματες επικοινωνίες. Ειδικό λογισμικό. Ηλεκτρονικός υπολογιστής. Ο κεντρικός υπολογιστής μπορεί να είναι σε δίκτυο ώστε να είναι προσβάσιμος από τους μηχανικούς, το χημείο, τους προϊσταμένους και με το Internet. Τα πλεονεκτήματα του είναι: Μείωση απωλειών νερού. Μείωση προβλημάτων στο δίκτυο. Ταχύτητα εντοπισμού τυχόν προβλημάτων. Μειωμένη απαίτηση επισκέψεων στο δίκτυο. Καλύτερη διαχείριση υδάτινων πόρων. 9
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO ΚΕΦΑΛΑΙΟ 2 ο ARDUINO 2.1 Περιγραφή και λειτουργία του ARDUINO Όπως το περιγράφει ο δημιουργός του, το Arduino είναι μια «ανοικτού κώδικα» πλατφόρμα «προτυποποίησης» ηλεκτρονικών βασισμένη σε ευέλικτο και εύκολο στη χρήση hardware και software που προορίζεται για οποιονδήποτε έχει λίγη προγραμματιστική εμπειρία, στοιχειώδεις γνώσεις ηλεκτρονικών και ενδιαφέρεται να δημιουργήσει διαδραστικά αντικείμενα ή περιβάλλοντα. Εικόνα 1: Arduino Duemilanove Στην ουσία, πρόκειται για ένα ηλεκτρονικό κύκλωμα που βασίζεται στον μικροελεγκτή ATmega της Atmel και του οποίου όλα τα σχέδια, καθώς και το software που χρειάζεται για την λειτουργία του, διανέμονται ελεύθερα και δωρεάν ώστε να μπορεί να κατασκευαστεί από τον καθένα ( απ όπου και ο περίεργος - για hardware - χαρακτηρισμός «ανοικτού κώδικα» ). Αφού κατασκευαστεί, μπορεί να συμπεριφερθεί σαν ένας μικροσκοπικός υπολογιστής, αφού ο χρήστης μπορεί να συνδέσει επάνω του πολλαπλές μονάδες εισόδου/εξόδου και να προγραμματίσει τον μικροελεγκτή να δέχεται δεδομένα από τις μονάδες εισόδου, να τα επεξεργάζεται και να στέλνει κατάλληλες εντολές στις μονάδες εξόδου. Μάλιστα κάποιος θα 4646 10
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO μπορούσε να ισχυριστεί - και θα ήταν ένας αρκετά πετυχημένος παραλληλισμός - ότι λειτουργικά το Arduino μοιάζει πολύ με το NXT Brick των Lego Mindstorms NXT. Άλλωστε η ρομποτική είναι μια από τις πολλές εφαρμογές στις οποίες το Arduino διαπρέπει. Το Arduino βέβαια, δεν είναι ούτε ο μοναδικός, ούτε και ο καλύτερος δυνατός τρόπος για την δημιουργία μιας οποιασδήποτε διαδραστικής ηλεκτρονικής συσκευής. Όμως το κύριο πλεονέκτημά του είναι η τεράστια κοινότητα που το υποστηρίζει και η οποία έχει δημιουργήσει, συντηρεί και επεκτείνει μια ανάλογου μεγέθους online γνωσιακή βάση. Έτσι, παρότι ένας έμπειρος ηλεκτρονικός μπορεί να προτιμήσει διαφορετική πλατφόρμα ή εξαρτήματα ανάλογα με την εφαρμογή που έχει στον νου του, το Arduino, με το εκτενές documentation, καταφέρνει να κερδίσει όλους αυτούς των οποίων οι γνώσεις στα ηλεκτρονικά περιορίζονται στα όσα λίγα έμαθαν στο σχολείο. Εικόνα 2: Arduino Starter Kit 11
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Ακριβώς επειδή απευθύνεται κυρίως σε αρχάριους των ηλεκτρονικών και επειδή, παρά τις αναλυτικότατες οδηγίες που υπάρχουν, δεν έχουν όλοι τις γνώσεις και τα μέσα να κατασκευάσουν μια ηλεκτρονική πλακέτα, κυκλοφορούν έτοιμες, προκατασκευασμένες πλακέτες Arduino που μπορείτε να προμηθευτείτε για περίπου 25. Με λίγα χρήματα παραπάνω μάλιστα, οι περισσότεροι προμηθευτές διαθέτουν Arduino Starter Kit, τα οποία, εκτός από το ίδιο το Arduino, περιέχουν διάφορα άλλα εξαρτήματα και εργαλεία που μπορεί να χρειαστείτε για τις πρώτες σας εφαρμογές (όπως το απαραίτητο καλώδιο USB για την σύνδεση με τον υπολογιστή, ράστερ, καλώδια, LED, διακόπτες, ποτενσιόμετρα, αντιστάσεις, διόδους, τρανζίστορ κ.λπ.). Αν θέλει καποιος να το προμηθευτεί από την Ελλάδα, το ελληνικό ηλεκτρονικό κατάστημα Grobotronics διαθέτει το Arduino και πολλά άλλα. Εικόνα 3: Arduino Lilypad Αυτό που μπορεί να μας μπερδέψει ψάχνοντας να αγοράσουμε το Arduino σε αυτά τα καταστήματα είναι οι διαφορετικές εκδόσεις στις οποίες κυκλοφορεί, επίσημες και ανεπίσημες. 12
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Από τις επίσημες εκδόσεις (Duemilanove, Diecimila, Nano, Mega, Uno, Bluetooth, LilyPad, Mini, Mini USB, Pro, Pro Mini, Serial και Serial SS) συνιστάται κυρίως η αγορά του Arduino Uno και Arduino Duemilanove ή τουλάχιστον των Diecimila ή Mega επειδή διαθέτουν υποδοχή USB και είναι συμβατές με τα shield. Για τους ίδιους λόγους, από τις ανεπίσημες εκδόσεις (Freeduino, Boarduino, Sanguino, Seeeduino κ.α.) συνιστάται μόνο το Freeduino v1.16 και το Seeeduino. 2.2 Ο μικροελεγκτής του ARDUINO Το Arduino βασίζεται στον ATmega328, έναν 8-bit RISC μικροελεγκτή, τον οποίο χρονίζει στα 16 MHz. Ο ATmega328 διαθέτει ενσωματωμένη μνήμη τριών τύπων: 2 Kb μνήμης SRAM που είναι η ωφέλιμη μνήμη που μπορούν να χρησιμοποιήσουν τα προγράμματά μας για να αποθηκεύουν μεταβλητές, πίνακες κ.λπ. κατά την εκτέλεση τους. Όπως και σε έναν υπολογιστή, αυτή η μνήμη χάνει τα δεδομένα της όταν η παροχή ρεύματος στο Arduino σταματήσει ή αν γίνει reset. 1 Kb μνήμης EEPROM η οποία μπορεί να χρησιμοποιηθεί για «ωμή» εγγραφή/ανάγνωση δεδομένων (χωρίς datatype) ανά byte από τα προγράμματά μας κατά την εκτέλεση τους. Σε αντίθεση με την SRAM, η EEPROM δεν χάνει τα περιεχόμενά της με απώλεια τροφοδοσίας ή reset οπότε είναι το ανάλογο του σκληρού δίσκου. 32 Kb μνήμης Flash, από τα οποία τα 2 Kb χρησιμοποιούνται από το firmware του Arduino που έχει εγκαταστήσει ήδη ο κατασκευαστής του. Το firmware αυτό που στην ορολογία του Arduino ονομάζεται bootloader είναι αναγκαίο για την εγκατάσταση των δικών σας προγραμμάτων στον μικροελεγκτή μέσω της θύρας USB, χωρίς δηλαδή να χρειάζεται εξωτερικός hardware programmer. Τα υπόλοιπα 30 Kb της μνήμης Flash χρησιμοποιούνται για την αποθήκευση αυτών ακριβώς των προγραμμάτων, αφού πρώτα μεταγλωττιστούν στον υπολογιστή σας. Η μνήμη Flash, όπως και η EEPROM δεν χάνει τα περιεχόμενά της με απώλεια τροφοδοσίας ή reset. Επίσης, ενώ η μνήμη Flash υπό κανονικές συνθήκες δεν προορίζεται για χρήση runtime μέσα από τα προγράμματά μας, λόγω της μικρής συνολικής μνήμης που είναι διαθέσιμη σε αυτά (2 Kb SRAM + 1 Kb EEPROM), έχει σχεδιαστεί μια βιβλιοθήκη που 13
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO επιτρέπει την χρήση όσου χώρου περισσεύει (30 Kb μείον το μέγεθος του προγράμματός μας σε μεταγλωττισμένη μορφή). Εικόνα 4: Εκδόσεις Arduino Διαφορές στις προτεινόμενες εκδόσεις του Arduino: Το Arduino Diecimila έχει ουσιαστικά δύο βασικές διαφορές με το Duemilanove: Βασίζεται στον μικροελεγκτή ATmega168, ο οποίος διαθέτει ακριβώς την μισή μνήμη από τον ATmega328, δηλαδή 1Kb SRAM, 512bytes EEPROM και 16Kb Flash (14 ελεύθερα λόγω του bootloader). Δεν επιλέγει αυτόματα μεταξύ της εξωτερικής τροφοδοσίας και της τροφοδοσίας μέσω της θύρας USB. Το Diecimila διαθέτει ειδικό jumper με το οποίο μπορείτε να επιλέξετε χειροκίνητα την πηγή τροφοδοσίας. Το Arduino Mega είναι η πιο εξελιγμένη έκδοση με τον μικροελεγκτή ATmega1280 και αρκετά μεγαλύτερο μέγεθος. Οι διαφορές του από το Duemilanove είναι: Τετραπλάσια μνήμη (8Kb SRAM, 4Kb EEPROM, 128Kb Flash). 40 επιπλέον ψηφιακά pin εισόδου/εξόδου (σύνολο 54) 10 επιπλέον pin αναλογικής εισόδου (σύνολο 16) Υποστήριξη ψευδοαναλογικής εξόδου PWM σε 8 ακόμα ψηφιακά pin (σύνολο 14 PWM pin) Υποστήριξη εξωτερικού interrupt σε 4 ακόμα ψηφιακά pin (σύνολο 6 interrupt) 3 επιπλέον σειριακά interface (σύνολο 4) από τα οποία το ένα προωθείται στον ελεγκτή Serial-Over-USB όπως στο Duemilanove για σύνδεση με τον υπολογιστή. 14
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Σημειώστε ότι το Arduino Mega είναι συμβατό με τα περισσότερα shield που έχουν κυκλοφορήσει για το Arduino αλλά όχι με το Ethernet Shield, το οποίο είναι ένα αρκετά σημαντικό μειονέκτημα για όσους θέλουν να φτιάξουν εφαρμογές με πρόσβαση στο internet ή σε κάποιο άλλο δίκτυο. Από τις ανεπίσημες εκδόσεις, το Freeduino 1.16 και το Seeeduino βασίζονται στο Diecimila οπότε ισχύουν οι ίδιες διαφορές που έχει αυτό με το Duemilanove. Το Freeduino είναι ακριβής κλώνος του Diecimila, ενώ το Seeeduino είναι μια βελτιωμένη έκδοση του Diecimila με κύρια διαφορά την προσθήκη 2 επιπλέον pin αναλογικής εισόδου. 2.3 Είσοδοι Έξοδοι του ARDUINO Καταρχήν το Arduino διαθέτει σειριακό interface. Ο μικροελεγκτής ATmega υποστηρίζει σειριακή επικοινωνία, την οποία το Arduino προωθεί μέσα από έναν ελεγκτή Serial-over- USB ώστε να συνδέεται με τον υπολογιστή μέσω USB. Η σύνδεση αυτή χρησιμοποιείται για την μεταφορά των προγραμμάτων που σχεδιάζονται από τον υπολογιστή στο Arduino αλλά και για αμφίδρομη επικοινωνία του Arduino με τον υπολογιστή μέσα από το πρόγραμμα την ώρα που εκτελείται. Εικόνα 5: Είσοδοι - Έξοδοι & Pin του Arduino 15
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Επιπλέον, στην πάνω πλευρά του Arduino βρίσκονται 14 θηλυκά pin, αριθμημένα από 0 ως 13, που μπορούν να λειτουργήσουν ως ψηφιακές είσοδοι και έξοδοι. Λειτουργούν στα 5 V και καθένα μπορεί να παρέχει ή να δεχτεί το πολύ 40mA. Ως ψηφιακή έξοδος, ένα από αυτά τα pin μπορεί να τεθεί από το πρόγραμμά σας σε κατάσταση «HIGH» ή «LOW», οπότε το Arduino θα ξέρει αν πρέπει να διοχετεύσει ή όχι ρεύμα στο συγκεκριμένο pin. Με αυτόν τον τρόπο μπορούμε λόγου χάρη να ανάψουμε και να σβήσουμε ένα LED που έχουμε συνδέσει στο συγκεκριμένο pin. Αν πάλι ρυθμίσουμε ένα από αυτά τα pin ως ψηφιακή είσοδο μέσα από το πρόγραμμά μας, μπορούμε με την κατάλληλη εντολή να διαβάσουμε την κατάστασή του (HIGH ή LOW) ανάλογα με το αν η εξωτερική συσκευή που έχουμε συνδέσει σε αυτό το pin διοχετεύει ή όχι ρεύμα στο pin (με αυτόν τον τρόπο λόγου χάρη μπορουμε να «διαβάζουμε» την κατάσταση ενός διακόπτη). Μερικά από αυτά τα 14 pin, εκτός από ψηφιακές είσοδοι/έξοδοι έχουν και δεύτερη λειτουργία. Συγκεκριμένα: Τα pin 0 και 1 λειτουργούν ως RX και TX της σειριακής όταν το πρόγραμμά μας ενεργοποιεί την σειριακή θύρα. Έτσι, όταν λόγου χάρη το πρόγραμμά μας στέλνει δεδομένα στην σειριακή, αυτά προωθούνται και στην θύρα USB μέσω του ελεγκτή Serial-Over-USB αλλά και στο pin 0 για να τα διαβάσει ενδεχομένως μια άλλη συσκευή (π.χ. ένα δεύτερο Arduino στο δικό του pin 1). Αυτό φυσικά σημαίνει ότι αν στο πρόγραμμά μας ενεργοποιήσετε το σειριακό interface, χάνετε 2 ψηφιακές εισόδους/εξόδους. Τα pin 2 και 3 λειτουργούν και ως εξωτερικά interrupt (interrupt 0 και 1 αντίστοιχα). Με άλλα λόγια, μπορούμε να τα ρυθμίσουμε μέσα από το πρόγραμμά μας ώστε να λειτουργούν αποκλειστικά ως ψηφιακές είσοδοι στις οποίες όταν συμβαίνουν συγκεκριμένες αλλαγές, η κανονική ροή του προγράμματος σταματάει *άμεσα* και εκτελείται μια συγκεκριμένη συνάρτηση. Τα εξωτερικά interrupt είναι ιδιαίτερα χρήσιμα σε εφαρμογές που απαιτούν συγχρονισμό μεγάλης ακρίβειας. Τα pin 3, 5, 6, 9, 10 και 11 μπορούν να λειτουργήσουν και ως ψευδοαναλογικές έξοδοι με το σύστημα PWM (Pulse Width Modulation), δηλαδή το ίδιο σύστημα που διαθέτουν οι μητρικές των υπολογιστών για να ελέγχουν τις ταχύτητες των ανεμιστήρων. Έτσι, μπορείτε να συνδέσουμε λόγου χάρη ένα LED σε κάποιο από 16
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO αυτά τα pin και να ελέγξετε πλήρως την φωτεινότητά του με ανάλυση 8bit (256 καταστάσεις από 0-σβηστό ως 255-πλήρως αναμμένο) αντί να έχουμε απλά την δυνατότητα αναμμένο-σβηστό που παρέχουν οι υπόλοιπές ψηφιακές έξοδοι. Είναι σημαντικό να καταλάβουμε ότι το PWM δεν είναι πραγματικά αναλογικό σύστημα και ότι θέτοντας στην έξοδο την τιμή 127, δεν σημαίνει ότι η έξοδος θα δίνει 2.5V αντί της κανονικής τιμής των 5V, αλλά ότι θα δίνει ένα παλμό που θα εναλλάσσεται με μεγάλη συχνότητα και για ίσους χρόνους μεταξύ των τιμών 0 και 5V. Στην κάτω πλευρά του Arduino, με τη σήμανση ANALOG IN, θα βρείτε μια ακόμη σειρά από 6 pin, αριθμημένα από το 0 ως το 5. Το καθένα από αυτά λειτουργεί ως αναλογική είσοδος κάνοντας χρήση του ADC (Analog to Digital Converter) που είναι ενσωματωμένο στον μικροελεγκτή. Για παράδειγμα, μπορούμε να τροφοδοτήσουμε ένα από αυτά με μια τάση την οποία μπορουμε να κυμάνουμε με ένα ποτενσιόμετρο από 0V ως μια τάση αναφοράς Vref η οποία, αν δεν κάνουμε κάποια αλλαγή είναι προρυθμισμένη στα 5V.Τότε, μέσα από το πρόγραμμά μας μπορούμε να «διαβάσουμε» την τιμή του pin ως ένα ακέραιο αριθμό ανάλυσης 10- bit, από 0 (όταν η τάση στο pin είναι 0V) μέχρι 1023 (όταν η τάση στο pin είναι 5V). Η τάση αναφοράς μπορεί να ρυθμιστεί με μια εντολή στο 1.1V, ή σε όποια τάση επιθυμούμε (μεταξύ 2 και 5V) τροφοδοτώντας εξωτερικά με αυτή την τάση το pin με την σήμανση AREF που βρίσκεται στην απέναντι πλευρά της πλακέτας. Έτσι, αν τροφοδοτήσουμε το pin AREF με 3.3V και στην συνέχεια δοκιμάσουμε να διαβάσουμε κάποιο pin αναλογικής εισόδου στο οποίο εφαρμόζετε τάση 1.65V, το Arduino θα μας επιστρέψει την τιμή 512. Τέλος, καθένα από τα 6 αυτά pin, με κατάλληλη εντολή μέσα από το πρόγραμμα μπορεί να μετατραπεί σε ψηφιακό pin εισόδου/εξόδου όπως τα 14 που βρίσκονται στην απέναντι πλευρά και τα οποία περιγράφηκαν πριν. Σε αυτή την περίπτωση τα pin μετονομάζονται από 0~5 σε 14~19 αντίστοιχα. 2.4 Τροφοδοσία κουμπία και LED του ARDUINO Το Arduino μπορεί να τροφοδοτηθεί με ρεύμα είτε από τον υπολογιστή μέσω της σύνδεσης USB, είτε από εξωτερική τροφοδοσία που παρέχεται μέσω μιας υποδοχής φις των 2.1mm (θετικός πόλος στο κέντρο) και βρίσκεται στην κάτω-αριστερή γωνία του Arduino. 17
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Εικόνα 6: Τροφοδοσία μέσω εξωτερικού μετασχηματιστή Εικόνα 7: Τροφοδοσία μέσω μπαταρίας Για να μην υπάρχουν προβλήματα, η εξωτερική τροφοδοσία πρέπει να είναι από 7 ως 12V και μπορεί να προέρχεται από ένα κοινό μετασχηματιστή του εμπορίου, από μπαταρίες ή οποιαδήποτε άλλη πηγή DC. Δίπλα από τα pin αναλογικής εισόδου, υπάρχει μια ακόμα συστοιχία από 6 pin με την σήμανση POWER. 18
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Η λειτουργία του καθενός έχει ως εξής: Το πρώτο, με την ένδειξη RESET, όταν γειωθεί (σε οποιοδήποτε από τα 3 pin με την ένδειξη GND που υπάρχουν στο Arduino) έχει ως αποτέλεσμα την επανεκκίνηση του Arduino. Το δεύτερο, με την ένδειξη 3.3V, μπορεί να τροφοδοτήσει τα εξαρτήματά σας με τάση 3.3V. Η τάση αυτή δεν προέρχεται από την εξωτερική τροφοδοσία αλλά παράγεται από τον ελεγκτή Serial-over-USB και έτσι η μέγιστη ένταση που μπορεί να παρέχει είναι μόλις 50mA. Το τρίτο, με την ένδειξη 5V, μπορεί να τροφοδοτήσει τα εξαρτήματά μας με τάση 5V. Ανάλογα με τον τρόπο τροφοδοσίας του ίδιου του Arduino, η τάση αυτή προέρχεται είτε άμεσα από την θύρα USB (που ούτως ή άλλως λειτουργεί στα 5V), είτε από την εξωτερική τροφοδοσία αφού αυτή περάσει από ένα ρυθμιστή τάσης για να την «φέρει» στα 5V. Το τέταρτο και το πέμπτο pin, με την ένδειξη GND, είναι φυσικά γειώσεις. Το έκτο και τελευταίο pin, με την ένδειξη Vin έχει διπλό ρόλο. Σε συνδυασμό με το pin γείωσης δίπλα του, μπορεί να λειτουργήσει ως μέθοδος εξωτερικής τροφοδοσίας του Arduino, στην περίπτωση που δεν μας βολεύει να χρησιμοποιήσουμε την υποδοχή του φις των 2.1mm. Αν όμως έχετε ήδη συνδεδεμένη εξωτερική τροφοδοσία μέσω του φις, μπορούμε να χρησιμοποιήσουμε αυτό το pin για να τροφοδοτήσουμε εξαρτήματα με την πλήρη τάση της εξωτερικής τροφοδοσίας (7~12V), πριν αυτή περάσει από τον ρυθμιστή τάσης όπως γίνεται με το pin των 5V. Πάνω στην πλακέτα του Arduino υπάρχει ένας διακόπτης micro-switch και 4 μικροσκοπικά LED επιφανειακής στήριξης. Η λειτουργία του διακόπτη (που έχει την σήμανση RESET) και του ενός LED με την σήμανση POWER είναι μάλλον προφανής. Τα δύο LED με τις σημάνσεις TX και RX, χρησιμοποιούνται ως ένδειξη λειτουργίας του σειριακού interface, καθώς ανάβουν όταν το Arduino στέλνει ή λαμβάνει (αντίστοιχα) δεδομένα μέσω USB. Σημειώστε ότι τα LED αυτά ελέγχονται από τον ελεγκτή Serial-over-USB και συνεπώς δεν λειτουργούν όταν η σειριακή επικοινωνία γίνεται αποκλειστικά μέσω των ψηφιακών pin 0 και 1. 19
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Τέλος, υπάρχει το LED με την σήμανση L. Η βασική δοκιμή λειτουργίας του Arduino είναι να του αναθέσουμε να αναβοσβήνει ένα LED (θα το δούμε αυτό στην συνέχεια). Για να μπορούμε να το κάνούμε αυτό από την πρώτη στιγμή, χωρίς να συνδέσουμε τίποτα πάνω στο Arduino, οι κατασκευαστές του σκέφτηκαν να ενσωματώσουν ένα LED στην πλακέτα, το οποίο σύνδεσαν στο ψηφιακό pin 13. Έτσι, ακόμα και αν δεν έχουμε συνδέσει τίποτα πάνω στο φυσικό pin 13, αναθέτοντας του την τιμή HIGH μέσα από το πρόγραμμά μας, θα ανάψει αυτό το ενσωματωμένο LED. 2.5 Τα δημοφιλέστερα SHIELDS του ARDUINO Τα shield είναι ολοκληρωμένες πλακέτες που είναι σχεδιασμένες ώστε να κουμπώνουν πάνω στο Arduino προεκτείνοντας την λειτουργικότητά του. Είναι η hardware αντίστοιχη έννοια των plugin, addon και extension που υπάρχουν στο software. Μερικά από τα πιο δημοφιλή shield που κυκλοφορούν στο εμπόριο για το Arduino είναι: Ethernet shield: Δίνει στο Arduino την δυνατότητα να δικτυωθεί σε ένα LAN ή στο internet μέσω ενός τυπικού καλωδίου Ethernet. WiFi shield: Όμοιο με το Ethernet shield, χωρίς φυσικά το καλώδιο. Διάφορα shield οθόνης: Προσθέτουν οθόνη στο Arduino. Κυκλοφορούν από απλές οθόνες τύπου calculator μέχρι OLED touchscreen υψηλής ανάλυσης τύπου iphone. Wave shield: Δίνει στο Arduino την δυνατότητα να παίζει ήχους/μουσική από κάρτες SD. GPS shield: Προσθέτει GPS δυνατότητες στο Arduino (εντοπισμό στίγματος). Διάφορα Motor Shields: Σας επιτρέπουν να οδηγήσετε εύκολα μοτέρ διάφορων τύπων (απλά DC, servo, stepper κ.λπ.) από το Arduino. ProtoShield: Μια προσχεδιασμένη πλακέτα πρωτοτυποποίησης, συμβατή στις διαστάσεις του Arduino και χωρίς εξαρτήματα για να φτιάξετε το δικό σας shield. 20
ΚΕΦΑΛΑΙΟ 2 Ο - ARDUINO Εικόνα 8: Aduino Shields Τα shield είναι σχεδιασμένα ώστε αφού κουμπωθούν πάνω στο Arduino να προωθούν τις υποδοχές του, ώστε να μπορείτε να συνδέσουμε επιπλέον τα δικά σας εξαρτήματα ή να κουμπώσουμε και επόμενο shield. Φυσικά, το κάθε shield χρησιμοποιεί ορισμένους από τους πόρους συνδεσιμότητας του Arduino και έτσι δεν μπορούμε να συνδέσουμε απεριόριστα shield. Μάλιστα κάποια shield μπορεί να μην είναι συμβατά μεταξύ τους γιατί χρησιμοποιούν τα ίδια pin του Arduino για επικοινωνία με αυτό. Επίσης, επειδή κάποια shield δεν προωθούν τις συνδέσεις του Arduino (όπως π.χ. οι οθόνες οι οποίες δεν έχουν νόημα αν τις καλύψουμε από πάνω με ένα επόμενο shield), υπάρχουν ειδικά extender shield που κουμπώνουν στο Arduino και δίνουν την δυνατότητα σε δύο άλλα shield να κουμπώσουν πάνω τους, λειτουργώντας σαν πολύπριζα. Όπως και για το ίδιο το Arduino, το βασικό πλεονέκτημα των shield δεν είναι τόσο το προφανές πλεονέκτημα του έτοιμου hardware όσο ότι συνοδεύονται συνήθως από έτοιμες βιβλιοθήκες που σας επιτρέπουν να προγραμματίζουμε τα sketch μας σε high level. Έτσι, λόγου χάρη, δεν χρειάζεται να διαβάζουμε datasheet ή να γίνουμε ηλεκτρονικοί για να συνδέσουμε και να λειτουργήσουμε ένα GPS module πάνω στο Arduino. Απλά συνδέουμε το shield, εγκαθιστούμε τη βιβλιοθήκη που το συνοδεύει και χρησιμοποιούμε μια έτοιμη συνάρτηση του «στυλ getlocation» για να πάρουμε το γεωγραφικό στίγμα και να το επεξεργαστούμε περαιτέρω στο sketch μας. 21
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΕΦΑΛΑΙΟ 3 ο Λογισμικό εποπτείας και ελέγχου του συστήματος - Προγραμματισμός 3.1 ARDUINO IDE SOFTWARE Ότι χρειάζομαστε για την διαχείριση του Arduino από τον υπολογιστή μας το παρέχει το Arduino IDE, την τελευταία έκδοση του οποίου μπορούμε να κατεβάσουμε από το επίσημο site για καθένα από τα τρία δημοφιλέστερα λειτουργικά συστήματα. Εικόνα 9: Arduino Ide Software Το Arduino IDE είναι βασισμένο σε Java και συγκεκριμένα παρέχει: Ενα πρακτικό περιβάλλον για την συγγραφή των προγραμμάτων μας (τα οποία ονομάζονται sketch στην ορολογία του Arduino) με συντακτική χρωματική σήμανση, αρκετά έτοιμα 4646 22
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ παραδείγματα, μερικές έτοιμες βιβλιοθήκες για προέκταση της γλώσσας και για να χειρίστουμε εύκολα μέσα από τον κώδικά μας τα εξαρτήματα που συνδέουμε στο Arduino, τον compiler για την μεταγλώττιση των sketch μας,ένα serial monitor που παρακολουθεί τις επικοινωνίες της σειριακής (USB), αναλαμβάνει να στείλει αλφαριθμητικά της επιλογής μας στο Arduino μέσω αυτής και είναι ιδιαίτερα χρήσιμο για το debugging των sketch μας και την επιλογή να ανεβάσουμε το μεταγλωττισμένο sketch στο Arduino. Για τα δύο τελευταία χαρακτηριστικά βέβαια, το Arduino πρέπει να έχει συνδεθεί σε μια από τις θύρες USB του υπολογιστή και, λόγω του ελεγκτή Serial-over-USB, θα πρέπει να αναγνωριστεί από το λειτουργικό μας σύστημα ως εικονική σειριακή θύρα. Εικόνα 10: Αναγνώριση Arduino στη διαχείρηση συσκευών Για την σύνδεση θα χρειαστούμε ένα καλώδιο USB από Type A σε Type B, όπως αυτό των εκτυπωτών. Για την αναγνώριση από το λειτουργικό θα χρειαστεί να εγκαταστήσουμε τον οδηγό του FTDI chip (δηλαδή του ελεγκτή Serial-over-USB) ο οποίος υπάρχει στον φάκελο drivers του Arduino IDE που κατεβάσουμε. Την τελευταία έκδοση αυτού του οδηγού μπορούμε επίσης να κατεβάσετε για κάθε λειτουργικό σύστημα από το site της FTDI. Σημειώνεται ότι στους τελευταίους πυρήνες του Linux υπάρχει εγγενής υποστήριξη του συγκεκριμένου ελεγκτή. Αν όλα έγιναν σωστά, το κεντρικό παράθυρο του Arduino IDE θα εμφανιστεί όταν το εκτελέσουμε και στο μενού Tools Serial Port θα πρέπει να εμφανίζεται η εικονική σειριακή θύρα ( συνήθως COM# για τα Windows, /dev/ttyusbserial## για το MacOS και /dev/ttyusb## για το Linux ). Επιλέξτε αυτή την εικονική θύρα και στην συνέχεια επιλέξτε 23
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ τον τύπο του Arduino σας (Arduino Duemilanove w/ ATmega328) από το μενού Tools Board. Το Arduino είναι πλέον έτοιμο να δεχτεί τα sketch σας. Αν εμφανίστηκε οποιοδήποτε πρόβλημα διαβάστε τις αναλυτικές οδηγίες εγκατάστασης για κάθε λειτουργικό σύστημα στη διεύθυνση http://arduino.cc/en/guide/homepage. 3.2 Εντολές - Παραδείγματα Όρισμα Είδος Τύπος Παράμετροι Περιγραφή LOW Σταθερά int - Έχει την τιμή 0 και είναι αντίστοιχη του λογικού false. HIGH Σταθερά int - Έχει την τιμή 1 και είναι αντίστοιχη του λογικού true. INPUT Σταθερά int - Έχει την τιμή 0 και είναι αντίστοιχη του λογικού false. OUTPUT Σταθερά int - Έχει την τιμή 1 και είναι αντίστοιχη του λογικού true. pinmode Εντολή - (pin, mode) digitalwrite Εντολή - (pin,pinstatus) Καθορίζει αν το συγκεκριμένο ψηφιακό pin θα είναι pin εισόδου ή pin εξόδου ανάλογα με την τιμή που δίνεται στην παράμετρο mode (INPUT ή OUTPUT αντίστοιχα). Θέτει την κατάσταση pinstatus (HIGH ή LOW) στο συγκεκριμένο ψηφιακό pin. digitalread Συνάρτηση int (pin) Επιστρέφει την κατάσταση του συγκεκριμένου ψηφιακού pin (0 για LOW και 1 για HIGH) εφόσον αυτό είναι pin εισόδου. 24
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ analogreference Εντολή - (type) Δέχεται τις τιμές DEFAULT, INTERNAL ή EXTERNAL στην παράμετρο type για να καθορίσει την τάση αναφοράς (Vref) των αναλογικών εισόδων (5V, 1.1V ή η εξωτερική τάση με την οποία τροφοδοτείται το pin AREF αντίστοιχα) analogread Συνάρτηση int (pin) analogwrite Εντολή - (pin, value) unsig millis Συνάρτηση ned () long Επιστρέφει έναν ακέραιο από 0 εώς 1023, ανάλογα με την τάση που τροφοδοτείται το συγκεκριμένο pin αναλογικής εισόδου στην κλίμακα 0 ως Vref. Θέτει το συγκεκριμένο ψηφιακό pin σε κατάσταση ψευδοαναλογικής εξόδου (PWM). Η παράμετρος value καθορίζει το πλάτος του παλμού σε σχέση με την περίοδο του παραγόμενου σήματος στην κλίμακα από 0 ως 255 (π.χ. με value127, το πλάτος του παλμού είναι ίσο με μισή περίοδο). Μετρητής που επιστρέφει το χρονικό διάστημα σε ms από την στιγμή που άρχισε η εκτέλεση του προγράμματος. Λάβετε υπόψη ότι λόγω του τύπου μεταβλητής (unsigned long δηλ. 32bit) θα γίνει overflow σε 2^32ms δηλαδή περίπου σε 50 μέρες, οπότε ο μετρητής θα ξεκινήσει πάλι από το μηδέν. 25
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Σταματά προσωρινά την ροή του delay Εντολή - (time) προγράμματος για time ms. Η παράμετρος time είναι unsigned long (από 0 ως 2^32). Σημειώστε ότι παρά την προσωρινή παύση, συναρτήσεις των οποίων η εκτέλεση ενεργοποιείται από interrupt θα εκτελεστούν κανονικά κατά την διάρκεια μιας delay. Θέτει σε λειτουργία το συγκεκριμένο interrupt, ώστε να ενεργοποιεί την attachinterrupt Εντολή - συνάρτηση function, κάθε φορά που ικανοποιείται η συνθήκη που ορίζεται από την παράμετρο triggermode: interrupt γίνει LOW) RISING (όταν από LOW γίνει HIGH) FALLING (όταν από HIGH γίνει LOW) (interrupt,functi LOW (ενεργοποίηση όταν η κατάσταση on,triggermode) του pin που αντιστοιχεί στο συγκεκριμένο CHANGE (όταν αλλάξει κατάσταση γενικά) detachinterrupt Εντολή - (interrupt) Απενεργοποιεί το συγκεκριμένο interrupt. nointerrupts Εντολή - () Σταματά προσωρινά την λειτουργία όλων των interrupt interrupts Εντολή - () Επαναφέρει την λειτουργία των interrupt που διακόπηκε προσωρινά από μια εντολή nointerrupts. Serial.begin Μέθοδος Θέτει τον ρυθμό μεταφοράς δεδομένων - (datarate) κλάσης του σειριακού interface (σε baud) 26
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Διοχετεύει τα δεδομένα data για αποστολή Serial.println Μέθοδος κλάσης - (data) μέσω του σειριακού interface. Η παράμετρος data μπορεί να είναι είτε αριθμός είτε αλφαριθμητικό. Επιπλέον, στην γλώσσα του Arduino κάθε πρόγραμμα αποτελείται από δύο βασικές ρουτίνες ώστε να έχει την γενική δομή: 1. // Ενσωματώσεις βιβλιοθηκών, δηλώσεις μεταβλητών... 2. void setup() 3. { 4. //... 5. } 6. void loop() 7. { 8. //... 9. } 10. // Υπόλοιπες συναρτήσεις... Η βασική ρουτίνα setup() εκτελείται μια φορά μόνο κατά την εκκίνηση του προγράμματος ενώ η βασική ρουτίνα loop() περιέχει τον βασικό κορμό του προγράμματος και η εκτέλεσή της επαναλαμβάνεται συνέχεια σαν ένας βρόγχος while (true). Hello World! Το πρώτο παράδειγμα που θα δημιουργήσουμε, θα εξάγει το μήνυμα «Hello World». Βέβαια -μέχρι να προσθέσουμε μια- το Arduino δεν διαθέτει οθόνη ώστε να εμφανίσει κάποιο μήνυμα. Η μόνη συσκευή εξόδου που είναι ενσωματωμένη στην πλακέτα του Arduino είναι το LED του pin 13. Έτσι, το Arduino σας θα χαιρετίσει την οικουμένη αναβοσβήνοντας απλά το LED του. 27
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Ανοίξτε το IDE του Arduino και -για να μην πληκτρολογούμε- επιλέξτε File Sketchbook Examples Digital Blink. Ανοίγουμε ένα sketch με τον παρακάτω κώδικα: 1. int ledpin = 13; 2. void setup() 3. { 4. pinmode(ledpin, OUTPUT); 5. } 6. void loop() 7. { 8. digitalwrite(ledpin, HIGH); 9. delay(1000); 10. digitalwrite(ledpin, LOW); 11. delay(1000); 12. } Αρχικά, στην ρουτίνα setup() ρυθμίζουμε το pin στο οποίο είναι συνδεδεμένο το LED ως pin εξόδου (γραμμή 4). Στην συνέχεια η κύρια ρουτίνα loop(), η εκτέλεση της οποίας επαναλαμβάνεται συνέχεια, ανάβει το LED (γραμμή 8) και στην συνέχεια το σβήνει (γραμμή 10). Δύο εντολές delay ρυθμίζουν τον χρόνο που το LED θα μένει αναμμένο ή σβηστό στις γραμμές 9 και 11 (1000ms δηλαδή 1 δευτερόλεπτο). Για να δούμε το πρόγραμμα στην πράξη, εφόσον έχουμε ήδη συνδέσει το Arduino με τον υπολογιστή επιλέγουμε File > Upload to I/O Board (εναλλακτικά πατάμε Ctrl-U ή κάντε κλικ στο ανάλογο εικονίδιο της toolbar). Με αυτή την ενέργεια, το sketch θα μεταγλωττιστεί και θα σταλεί αυτόματα στο Arduino, γεγονός που μπορείτε να επαληθεύσετε από την δραστηριότητα των TX και RX LED πάνω στην πλακέτα του Arduino. Τα προγράμματα που «ανεβάζουμε» στο Arduino εκτελούνται αυτόματα από τον bootloader αμέσως μετά την λήψη τους και έτσι, χωρίς καθυστέρηση, θα πρέπει να δείτε το LED με τη σήμανση 13 να ανάβει και να σβήνει συνεχόμενα με περίοδο 2 δευτερολέπτων, δηλαδή όπως ακριβώς ορίζει το sketch. 28
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Αν επιμένετε ότι ένα LED που αναβοσβήνει δεν αποτελεί πρέπον χαιρετισμό και θέλετε σώνει και καλά να δείτε το Hello World γραμμένο, υπάρχει μια λύση. Μπορείτε να το στείλετε μέσω της σειριακής (USB) στον υπολογιστή και να το δείτε στην οθόνη σας. Και σαν bonus, το Arduino θα στέλνει και την κατάσταση του LED στον υπολογιστή. Προσθέστε απλά τις γραμμές: Serial.begin(9600); Serial.println("Hello World! - Are you happy now?"); αμέσως μετά την γραμμή με την εντολή «pinmode» και πριν κλείσει το άγκιστρο της ρουτίνας setup(). Επίσης, προσθέστε την γραμμή: Serial.println("ON ); και την γραμμή: Serial.println("OFF ); αμέσως μετά την πρώτη και την δεύτερη digitalwrite αντίστοιχα. 29
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εικόνα 11: Λογισμικό προγραμματισμού Αφού κάνετε τις αλλαγές επιλέξτε όπως και πριν το Upload to I/O Board από το IDE για να γίνει ξανά μεταγλώττιση και να ανέβει το νέο binary στο Arduino. Αμέσως μετά, κάντε κλικ στο τελευταίο κουμπί της toolbar με επεξήγηση Serial Monitor για να μετατρέψετε το κάτω τμήμα του παραθύρου του IDE σε σειριακή κονσόλα και σύντομα θα δείτε το Arduino να σας στέλνει τα μηνύματά του. 30
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εικόνα 12: Σύνδεση led με τα Pin του Arduino 3.3 Προγραμματισμός μέσω ICSP Πάνω στην πλακέτα του Arduino υπάρχει μια θύρα επικοινωνίας που ονομάζεται ICSP. Για να μπορέσουμε να προγραμματίσουμε μέσω αυτής πρέπει να έχουμε την πλακέτα μας εκτός τροφοδοσίας. Πρέπει απαραίτητα να διαθέτουμε έναν εξωτερικό προγραμματιστή όπως π.χ. STK 500, AVRISP ή AVR Dragon ή οτιδήποτε άλλο έχει σχέση με ICSP 6 Pin. Εάν πρόκειται να προγραμματιστή μέσω ICSP θα παρακάμψει τον bootloader του Arduino. Μπορούμε να χρησιμοποιήσουμε την STK 500 με το AVR Studio για να ανεβασουμε απευθείας το λογισμικό στον μικροελεγκτή μας. Αυτό σημαίνει ότι θα χρησιμοποιηθεί μόνο C και βιβλιοθήκες του AVR. 31
ΚΕΦΑΛΑΙΟ 3 Ο - ΛΟΓΙΣΜΙΚΟ ΕΠΟΠΤΕΙΑΣ ΚΑΙ ΕΛΕΓΧΟΥ ΤΟΥ ΣΥΣΤΗΜΑΤΟΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εικόνα 13: Κονσόλα προγραμματισμού STK 500 32
ΚΕΦΑΛΑΙΟ 4 Ο - ΕΠΙΤΗΡΗΤΕΣ ΣΤΑΘΜΗΣ Κεφάλαιο 4 ο Επιτηρητές στάθμης 4.1 Εισαγωγή Μαζί με την θερμοκρασία και την πίεση η μέτρηση στάθμης βρίσκεται στην κορυφή των μετρητικών αναγκών στην βιομηχανία, ναυτιλία αλλά και στην καθημερινή μας ζωή. Θα μπορούσαμε να πούμε ότι αποτελεί τη βάση για τη διαχείριση και τον έλεγχο στην χημική βιομηχανία, περιβαλλοντικές εφαρμογές και άλλες σχετιζόμενες βιομηχανίες. Με την πάροδο των ετών η πληθώρα των εφαρμογών και η πολυπλοκότητα των συστημάτων επίβλεψης, αυξήθηκε τόσο που οδηγεί την κοινότητα των τεχνικών σε συνεχή έρευνα, επέκταση και βελτίωση των εφαρμοζόμενων αρχών μέτρησης στάθμης. Ας δούμε αρχικά μερικούς βασικούς ορισμούς στην μέτρηση στάθμης : Στάθμη: Η απόσταση της επιφάνειας του μετρούμενου υλικού από ένα σημείο αναφοράς. Ελάχιστο (min): Η ελάχιστη αποδεκτή στάθμη Μέγιστο (max): Η υψηλότερη αποδεκτή στάθμη Η μέτρηση της στάθμης κατηγοριοποιείται σε: Σημειακή μέτρηση: Η ανίχνευση συγκεκριμένης στάθμης ή εάν έχει επιτευχθεί ή ξεπεραστεί ένα προκαθορισμένο όριο στάθμης Συνεχής μέτρηση: Μέτρηση της ακριβούς τιμής εντός μιας συγκεκριμένης περιοχής μέτρησης 4.2 Σημειακή μέτρηση της στάθμης 4.2.1. Δονητικός διακόπτης (Vibrator) Αρχή μέτρησης: Το μετρούμενο φυσικό μέγεθος είναι η ολίσθηση συχνότητας. Ένα δίχαλο ή βέργα δονείται ηλεκτρονικά με συγκεκριμένη συχνότητα από πιεζοκεραμικό κρύσταλλο ή 4646 33
ΚΕΦΑΛΑΙΟ 4 Ο - ΕΠΙΤΗΡΗΤΕΣ ΣΤΑΘΜΗΣ αντίστοιχο. Όταν έλθει σε επαφή με το μετρούμενο μέσο, αυτή η συχνότητα μειώνεται. Το ηλεκτρολογικό μέρος της συσκευής αναγνωρίζει την αλλαγή της συχνότητας και δημιουργεί σήμα εξόδου βάση αυτής της αλλαγής. Πλεονεκτήματα: Πρόκειται για όργανο εύκολο και απλό στη χρήση. Χωρίς ιδιαίτερες ή καθόλου ρυθμίσεις χωρίς κινούμενα μέρη, χωρίς περιορισμό στην εγκατάσταση, ανεπηρέαστο από τα φυσικά χαρακτηριστικά του μετρούμενου μέσου, δυνατότητα τεστ ορθής λειτουργίας. Μειονεκτήματα: Υλικά παχύρρευστα ή κολλώδη μπορούν να δημιουργήσουν πρόβλημα, καθώς και στερεά με μεγάλη κοκομετρία μπορούν να φράξουν το δίχαλο (και τα δύο αυτά μειονεκτήματα ελαχιστοποιούνται με τη χρήση δονητικού διακόπτη τύπου βέργας). 4.2.2. Χωρητικός διακόπτης (Capacitive) Αρχή Μέτρησης: Το μετρούμενο φυσικό μέγεθος είναι η χωρητικότητα. Ο αισθητήρας (probe) με το μεταλλικό τοίχωμα της δεξαμενής δημιουργεί ένα πυκνωτή που μεταβάλλει τη τιμή του καθώς προσθφαιρείται υλικό στην δεξαμενή. Πλεονεκτήματα: Αποτελεί μέθοδο γενικής χρήσης, χωρίς κινούμενα μέρη και με αρκετά καλή ακρίβεια. Είναι όργανα κατάλληλα και για στερεά υλικά. Μειονεκτήματα: Τα κολλώδη υλικά μπορούν να δημιουργήσουν πρόβλημα. Η εγκατάσταση μπορεί να είναι δύσκολη λόγω εξωτερικών παραμέτρων όπως το υλικό της δεξαμενής, επιρροή του καλωδίου (π.χ. χωρητικότητα). Η διηλεκτρική σταθερά (Εν) του προς μέτρηση υλικού πρέπει να είναι περίπου μεγαλύτερη από 1,4 (Εν>1,4) Μερικές τιμές Εν: Τσιμέντο (1,5 4), Αλεύρι (4,5), Οινόπνευμα (3), Βενζίνη (1,3 3), Νερό (80), Λάδι (2,1). Ο χωρητικος Συναντά εφαρμογές σε υγρά και στερεά, αγώγιμα και μη αγώγιμα. Καλύπτουν ευρεία γκάμα εφαρμογών σημειακής μέτρησης. 34
ΚΕΦΑΛΑΙΟ 4 Ο - ΕΠΙΤΗΡΗΤΕΣ ΣΤΑΘΜΗΣ Σχήμα 1: Χωρητικός διακόπτης 4.2.3. Ηλεκτρόδια αγωγιμότητας (Conductive Electrodes) Αρχή Μέτρησης: Ένα ή περισσότερα ηλεκτρόδια διαμορφώνουν ένα probe (στέλεχος μέτρησης) και έχουν διαφορετικά μήκη. Τοποθετούνται σε δοχεία με αγώγιμο υγρό. Εάν η στάθμη του υλικού ανέβει έως το ηλεκτρόδιο «κλείνει» κύκλωμα μεταξύ δύο ηλεκτροδίων και δημιουργία σήματος εξόδου. Εφαρμογές: Συναντά εφαρμογές στον έλεγχο στάθμης, έλεγχο ελάχιστου-μέγιστου για εύκολες και χαμηλού κόστους λύσεις. Σχήμα 2: Ηλεκτρόδια αγωγιμότητας 35
ΚΕΦΑΛΑΙΟ 4 Ο - ΕΠΙΤΗΡΗΤΕΣ ΣΤΑΘΜΗΣ 4.2.4. Μαγνητικός αισθητήρας (Magnetic Immersion Probe) Αρχή Μέτρησης: Το μέσο μέτρησης είναι ένας οδηγούμενος πλωτήρας που φέρει ενσωματωμένο μαγνήτη. Καθώς ο πλωτήρας κινείται βάση της στάθμης επάνω σε μία βέργα, ο μόνιμος μαγνήτης που περιέχεται μέσα στο πλωτήρα, ενεργοποιεί επαφές reed τοποθετημένες εντός της βέργας, με αποτέλεσμα αντίστοιχες ενεργοποιήσεις εξόδων. Πλεονεκτήματα: Πρόκειται για απλή μέθοδο, εύκολη στην εγκατάσταση, χωρίς ανάγκες συντήρησης και με μεγάλη αξιοπιστία μετρήσεων. Μειονεκτήματα: Η πλευστότητα εξαρτάται από το μέγεθος του πλωτήρα (float), τα μήκη δεν ξεπερνούν τα 3 με 5 m. Η πυκνότητα του υλικού θα πρέπει να είναι συνήθως μεγαλύτερη από 0.6 με 0.7 g/cm3. Εφαρμογές : Συναντά εφαρμογές ευρείας γκάμας σε σημειακή μέτρηση στάθμης σε υγρά. 4.2.5. Πλωτήρες (Float Switches) Η κίνηση /θέση του πλωτήρα καθώς βυθίζεται και ανυψώνεται βάσει της στάθμης του υγρού, ανιχνεύεται από ένα ενσωματωμένο διακόπτη που δίνει σήμα εξόδου. Εφαρμογές: Συναντά εφαρμογές στον έλεγχο αντλιών, σε βιολογικούς καθαρισμους και αποτελεί γενικά απλή και οικονομική λύση για σημειακή μέτρηση στάθμης. Έχουν αναπτυχθεί και ειδικές μέθοδοι για ιδιάζουσες εφαρμογές όπως: διακόπτες υπερήχων, ραδιομετρικός διακόπτης στάθμης, φωτοαισθητήρια στάθμης, διακόπτης πτερωτής κ.λπ. Σχήμα 3: Πλωτήρες 36
ΚΕΦΑΛΑΙΟ 4 Ο - ΕΠΙΤΗΡΗΤΕΣ ΣΤΑΘΜΗΣ 4.3 Συνεχής μέτρηση στάθμης Είναι η συνεχής μέτρηση της τρέχουσας της στάθμης υγρών ή στερεών καθώς αυτή αυξομειώνεται. Χρησιμοποιείται συνήθως για την συνεχή επίβλεψη, διαμόρφωση στρατηγικού ελέγχου, έλεγχο διεργασιών, εξαγωγή στατιστικών και πληροφοριών σχετικών με την κατανάλωση, αποφυγή απωλειών κ.λπ. Οι βασικές μέθοδοι και πλέον διαδεδομένες για την συνεχή μέτρηση στάθμης είναι: 4.3.1. Αισθητήρας μικροκυμάτων (Guided Microwave or Radar) Αρχή Μέτρησης: Η φυσική παράμετρος που μετράται είναι οι παλμοί οδηγούμενων μικροκυμάτων. Ο εκπεμπόμενος παλμός μικροκυμάτων κινείται επάνω στην μεταλλική βέργα και ανακλάται πίσω, επάνω στην επιφάνεια του υλικού. Η στάθμη του υλικού υπολογίζεται από την ηλεκτρονική μονάδα και βασίζεται στον συνολικό χρόνο αποστολήςλήψης του παλμού. Πλεονεκτήματα: Η βαθμονόμηση μπορεί να γίνει και χωρίς να έχει τοποθετηθεί. Δεν έχει κινούμενα μέρη. Κατάλληλο και για στερεά υλικά (σε μορφή πούδρας, σκόνης, κόκκων). Υψηλή ακρίβεια μέτρησης. Ανεπηρέαστο από τη θερμοκρασία, πίεση. Μειονεκτήματα: Κολλώδη υλικά μπορεί να δημιουργήσουν πρόβλημα. Η διηλεκτρική σταθερά του μετρούμενου υλικού θα πρέπει να είναι μικρότερη από 1,8 (Εν<1,8). Δεν ισχύει αυτός ο περιορισμός για τα radar sensors. Η αρχή του radar είναι αντίστοιχη με την αναφερθείσα, μόνο που η εκπομπή γίνεται στον αέρα και όχι επάνω σε βέργα μεταλλική. 4.3.2. Αισθητήρας πίεσης (Hydrostatic Pressure) Αρχή Μέτρησης: Η μετρούμενη φυσική παράμετρος είναι η πίεση (μέσω κεραμικού χωρητικού αισθητήρα ή αντίστοιχου) του υγρού η οποία μεταβάλλεται σε σχέση με τη στάθμη. Το σήμα εξόδου του μεταδότη είναι ανάλογο της στάθμης του προς μέτρηση υγρού. 37
ΚΕΦΑΛΑΙΟ 4 Ο - ΕΠΙΤΗΡΗΤΕΣ ΣΤΑΘΜΗΣ Πλεονεκτήματα: Προσφέρει μεγάλη ακρίβεια στη μέτρηση. Δεν έχει κινούμενα μέρη, δεν απαιτεί συντήρηση, κατάλληλο για μέτρηση σε απόβλητα, παχύρρευστα υλικά κ.λ.π. Μειονεκτήματα: Η αντιστάθμιση της θερμοκρασίας είναι απαραίτητη για τη μεταβολή της πυκνότητας. Σε κλειστά δοχεία πρέπει να γίνεται αντιστάθμιση της πίεσης του αερίου επάνω από τη στάθμη του υγρού. Μεταβολές της πυκνότητας μπορεί να οδηγήσουν σε εσφαλμένη μέτρηση. Εφαρμογές: Συναντά εφαρμογές σε μετρήσεις σε υγρά και παχύρρευστα υγρά, δεξαμενές αποβλήτων κ.λπ. Σχήμα 4: Αισθητήρας πίεσης 4.3.3. Μαγνητικός αισθητήρας (Magnetic Immersion Probe) Αρχή Μέτρησης: Οδηγούμενος πλωτήρας. Καθώς ο πλωτήρας κινείται ανάλογα με τη στάθμη του υγρού, επάνω σε μία βέργα, ο μόνιμος μαγνήτης που περιέχεται μέσα στο πλωτήρα, ενεργοποιεί επαφές reed τοποθετημένες εντός της βέργας που μεταβάλλουν την συνολική αντίσταση (μέσω των ανοιγο-κλεισιμάτων των reed διακοπτών). Αυτή η συνολική αντίσταση μετατρέπεται από την ηλεκτρονική μονάδα σε σήμα εξόδου ανάλογο της στάθμης υγρού. Σχετικά με τα πλεονεκτήματα και μειονεκτήματα ισχύει ότι και για τους μαγνητικούς αισθητήρες για σημειακή μέτρηση στάθμης. Υπάρχουν ακόμη χωρητικοί αισθητήρες για συνεχή μέτρηση, μεταδότες συνεχούς μέτρησης μέσω ραδιοϊσοτόπων (ραδιομέτρηση), ηλεκτρομηχανικοί μέθοδοι (Υο-Υο) κ.τ.λ. 38
ΚΕΦΑΛΑΙΟ 4 Ο - ΕΠΙΤΗΡΗΤΕΣ ΣΤΑΘΜΗΣ 4.4 Ο αισθητήρας της εφαρμογής μου Αισθητήρας υπερήχων (Ultrasonic) Αρχή Μέτρησης: Ο αισθητήρας μετρά το χρόνο που χρειάζεται το κύμα υπερήχου για να ταξιδέψει από τον αισθητήρα έως την επιφάνεια του υλικού και να ανακλαστεί πίσω στον αισθητήρα. Ο χρόνος αυτός έχει άμεση σχέση με την απόσταση και άρα τη στάθμη του υλικού. Η ηλεκτρονική μονάδα της συσκευής μεταφράζει αυτή τη τιμή σε αναλογικό σήμα. Πλεονεκτήματα: Ο αισθητήρας δεν έρχεται σε επαφή με το μετρούμενο υλικό. Η μέτρηση είναι ανεξάρτητη από την πυκνότητα του υλικού. Δεν έχει κινητά μέρη, έχει στιβαρή κατασκευή. Μειονεκτήματα: Η ταχύτητα του ήχου εξαρτάται κατά πολύ από τη θερμοκρασία και πίεση. Ο σχηματισμός αερίου επάνω από την επιφάνεια του υλικού μπορεί να επηρεάσει τη ταχύτητα του ήχου, ύπαρξη αφρού απορροφά μεγάλο μέρος των υπερήχων. Μηχανικά μέρη στην δεξαμενή ( π.χ. άλλα εσωτερικά αισθητήρια, αναδευτήρες, προεξοχές κ.α ) μπορούν να παρεμποδίσουν το σήμα. Οι σύγχρονοι αισθητήρες διαθέτουν συστήματα αντιστάθμισης θερμοκρασίας, υπολογισμού απορρόφησης σήματος, καθώς και απόρριψης ζωνών μέτρησης για να μειωθούν οι πιθανότητες εσφαλμένης μέτρησης. Εφαρμογές: Συναντά εφαρμογές σε μετρήσεις στάθμης σε υγρά και στερεά υλικά. Μεγάλο πεδίο εφαρμογών σε βιολογικούς καθαρισμούς, σιλό δημητριακών, άμμο, τσιμέντο, δεξαμενές υγρών κ.λπ. Σχήμα 5: Αισθητήρας υπερήχων 39
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Κεφάλαιο 5 ο Περιγραφή της εφαρμογής 5.1 Σκοπός Ο σκοπός της εφαρμογης μας είναι να κατασκευάσουμε ένα αυτοματισμό ο οποίος θα μπορεί να ελέγξει τις διαφορες μετρησης που θα παίρνουμε από τα όποια αισθητήρια έχουμε εφαρμόσει και να μας τις εμφανίζει στο μονιτορ μας μέσω του Ηλεκτρονικού Υπολογιστή. Στη συνέχεια θα μπορουμε να επεξεργαστούμε τις μετρήσης μας και να προβούμε στις όποιες επόμενες κινήσεις θέλουμε. Ο έλεγχος που θα μπορούμε να κανουμε θα γίνεται μέσω του δικτύου κινητής τηλεφωνίας (GSM) και συγκεκριμένα μεσω γραπτων μυνημάτων (SMS). Το module που θα χρησιμοποιήσουμε είναι το Arduino gsm shiled της SimCom με πλακέτα την Sim900. 5.2 Υλικά Τα υλικά της εφαρμογής μας είναι αυτά που φαινονται στις εικόνες 14 19: Εικόνα 14: Arduino Uno 4646 40
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Εικόνα 15: Arduino Gsm Shield SimCom Sim900 Εικόνα 16: Sonar Ultrasonic Module HC-SR04 41
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Εικόνα 17: DC 12V Mini Brushless Water Pump JT180A Javtop Εικόνα 18: Tranzistor TIP31C 42
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Εικόνα 19: 2 Channel Relay Module 5.3 Λειτουργία της εφαρμογής Για να αποφύγουμε τη συνεχή παροχή νερού στη δεξαμενή της οποίας τη στάθμη θέλουμε να ελέγχουμε, χρησιμοποίησα δύο ίδιες δεξαμενές, μία για να ελέγχω τη στάθμη της (δεξαμενής ελέγχου) και μία δεύτερη για να τροφοδοτεί την πρώτη με νερό και να λειτουργεί επίσης και σαν «φορτίο» κατανάλωση (δεξαμενή παροχής). Ουσιαστικά το νερό πραγματοποιεί κυκλική διαδρομή, αφού μέσω των σωληνώσεων και της αντλίας επιστρέφει ξανά στη δεξαμενή παροχής. Η εφαρμογή που υλοποίησα έχει της εξής λειτουργίες: Έλεγχος της στάθμης μέσω του δικτύου GSM. Έλεγχος της ηλεκτροβάνας μέσω του δικτύου GSM Εφαρμογή με το GSM για τον έλεγχο της στάθμης. Καθώς θα παίρνουμε τις διάφορες μετρήσεις μας μεσω του αισθητηρίου μας (SONAR) θα μας αποστελωνται από το Gsm Module διάφορα μηνύματα όπως εμείς τα έχουμε ορίσει μέσα από το πρόγραμμα ώστε να ενημερωνόμαστε σε ποια κατάσταση βρίσκεται η στάθμη της δεξαμενής μας «low mid high». 43
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Εφόσον μας έρθει κάποιο μήνυμα (στον αριθμό τηλεφώνου που του έχουμε ορίσει) θα προβαίνουμε στης όποιες ενέργειες θέλουμε για να ξεκινήσουμε, «start» ή να σταματήσουμε, «stop» την λειτουργία της αντλίας και κατά συνέπεια το άδειασμα ή το γέμισμα της δεξαμενής μας. Για να ξεκινήσουμε την αντλία μας όταν θα βρίσκεται η στάθμη της σε επίπεδα «low» στέλνουμε στον αριθμό τηλεφώνου της κάρτας που έχουμε περασμένη στο Gsm Module «start» αλλιώς αν είναι σε κατάσταση «high» στέλνουμε «stop». Υπάρχουν ακόμα δυο κατάστασης από τις οποίες η μια είναι καθαρά ενημερωτική «κατάσταση mid» και η άλλη λειτουργεί ως όριο ασφαλείας αφού διακόπτεται από μόνη της η αντλία σε περίπτωση που δεν την σταματήσουμε εμείς μέσω του μηνύματος για την αποφυγή υπερχείλισης. Εφαρμογή με το GSM για τον έλεγχο της ηλεκτροβάνας. Την ηλεκτροβάνα την έχουμε εφαρμόσει στην σωλήνα όπου θα τροφοδοτεί τα σπίτια στην μακέτα μας και στην συνέχεια θα καταλήγει στην δεξαμενή παροχής. Σκοπός της είναι να σταματάμε την ροή του νερού προς τα σπίτια μέσω μηνυμάτων για να λύσουμε όποιο πρόβλημα υπάρχει στο δίκτυο ύδρευσης. Έτσι για να μην μακρηγορούμε στέλνοντας «evclose» θα κλείνουμε την ηλεκτράβανα και έτσι θα μπορούμε να διορθώσουμε το πρόβλημα στο δίκτυο μας. Στην συνέχεια στέλνοντας «evopen» ανοίγουμε ξανά την ροή του νερού προς τα σπίτια. 5.4 Περιγραφή του αυτοματισμού 5.4.1 Είσοδοι του Arduino Ως είσοδοι του Arduino ορίζονται εκείνες οι επαφές (pins) οι οποίες δέχονται μετρήσεις σήματα από τα αλλά modules. Αυτά τα modules είναι το αισθητήριο μας Sonar το οποίο θα στέλνει τις διαφορες μετρήσεις που παίρνει και το Gsm module το οποίο θα παραδίδει τα διάφορα μηνύματα που του έχουμε στείλει ώστε να προβεί το Arduino στις λειτουργίες που του έχουμε ορίσει. 44
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ 5.4.2 Έξοδοι του Arduino Ως έξοδοι του Arduino ορίζονται εκείνες οι επαφές (pins) οι οποίες στέλνουν σήμα (τάση) ώστε να προβούν στις διάφορες λειτουργίες τα modules. Αυτά είναι η διακοπή ή η ενεργοποίηση της αντλίας μας και η αποστολή μηνυμάτων (SMS) από το Gsm. 5.5 Tranzistor TIP31C Λειτουργία στην εφαρμογή μας Για την εκκίνηση της αντλίας μας έγινε η χρήση του Tranzistor TIP31C το οποίο θα μπορούσαμε να πούμε ότι λειτουργεί σαν διακόπτης ο οποίος ανοίγει και κλείνει μέσω εντολής. Ο λόγος ο οποίος έγινε η χρήση του τρανζίστορ είναι ότι δεν μπορούμε να εκκινήσουμε την αντλία απευθείας από το Arduino γιατί έχει την δυνατότητα να εφαρμόσει στα άκρα μιας συσκευής μόνο 5 volt. Η αντλία μας για να λειτουργήσει χρειάζεται 12 Volt και 420 ma. Έτσι για να εκκινήσουμε την αντλία θέτουμε από το τροφοδοτικό του Arduino τον θετικό πόλο στην θετική επαφή της αντλίας, την αρνητική επαφή της αντλίας την συνδέουμε με τον συλέκτη του τρανζίστορ, τον αρνητικό πόλο του τροφοδοτικού στον εκπομπό του τρανζίστορ και στην γείωση του Arduino και την βάση του τρανζίστορ με το pin από το οποίο έχουμε ορίσει μέσα από το πρόγραμμα του Arduino να στέλνει την εντολή ( 5 volt ) για την εκκίνηση της αντλίας. Σχήμα 6:Σύνδεση TIP31C με το Arduino 45
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ 5.6 Φωτογραφίες του αυτοματισμού και της μακέτας Εικόνα 20: Φωτογραφία μακέτας 1 Εικόνα 21: Φωτογραφία μακέτας 2 46
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Εικόνα 22: Φωτογραφία μακέτας 3 Εικόνα 23: Φωτογραφία μακέτας 4 47
ΚΕΦΑΛΑΙΟ 5 Ο - ΠΕΡΙΓΡΑΦΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ Εικόνα 24: Φωτογραφία μακέτας 5 48
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Κεφάλαιο 6 ο Περιγραφή του προγράμματος του Arduino μας 6.1 Εισαγωγή Ο μικροελεγκτής μας και κατ επέκταση και το Arduino μας διαθέτουν δυο τρόπους προγραμματισμού. Τους τρόπους αυτούς τους περιγράψαμε και σε προηγούμενο κεφάλαιο και είναι με το ARDUINO IDE SOFTWARE και μέσω του ICSP με βοήθεια του AVR STUDIO και του προγραμματιστή STK 500. Εμείς για την εφαρμογή μας χρησιμοποιήσαμε το ARDUINO IDE SOFTWARE. Εικόνα 25: Παράδειγμα προγράμματος Blink 4646 49
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ 6.2 Περιγραφή του προγράμματος μας Βήμα Βήμα Η συγκεκριμένη εφαρμογή αποτελείται αρχικά από τη δήλωση των βιβλιοθηκών και την ενσωμάτωση αυτών στο πρόγραμμα και τη δήλωση των μεταβλητών. Στην συνέχεια μπαίνουμε στην void setup () οπού είναι το πρόγραμμα που θα τρέξει μια φορά για να ετοιμάσει όλα τα περιφερειακά μας όπως αισθητήρες, GSM κ.α. Μετά μπαίνουμε στην void loop () οπού εκεί θα γραφεί το πρόγραμμα που θα επαναλαμβάνεται μέχρι να του πούμε εμείς ή επ άπειρων. Και έτσι για το τέλος μας μένει η δήλωση λοιπών συναρτήσεων που θα χρειαστούμε. Ας τα πάρουμε όμως βήμα βήμα όπου στην αρχή έχουμε την δήλωση τριών βιβλιοθηκών: της SIM 900, της SoftwareSerial και της sms.στην συνέχεια έχουμε την δήλωση των μεταβλητών μας οπού αυτές είναι η incoming char που είναι τύπου χαρακτήρα αλλά και η smsbuffer, n, pos, phone_num, sms_text πάλι του ιδίου τύπου. Μετά έχουμε της ακέραιες μεταβλητές και αυτές είναι cm, ledpin, ledpin2, ledpin3, lastresult, smsindex, inputvalue και την numdata. Στην συνέχεια έχουμε της σταθερές «const» τύπου int (ακέραιου) όπου αυτές είναι η trigpin και η echopin αλλά και την μεταβλητή started όπου είναι Boolean δηλαδή τύπος δεδομένων αλήθειας. 50
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Εικόνα 26: Ο κώδικας μου «Βιβλιοθήκες, Μεταβλητές» Εφόσον έχουμε δηλώσει της βιβλιοθήκες και της μεταβλητές μας μπαίνουμε στην πρώτη βασική ρουτίνα την void setup () περίπτωση. Αρχικά δηλώνω το (ledpin3, OUTPUT) και στη συνέχεια την κάνω για 3 δευτερόλεπτα «LOW» και μετά την κάνω «HIGH» αυτό μας βοηθάει έτσι ώστε να ενεργοποιείτε αυτόματα το GSM MODULE. 51
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Οι εντολές είναι αντίστροφες γιατί το relay που έχω συνδέσει είναι pull-down και λειτουργεί όταν δέχεται το λογικό μηδέν. Παρακάτω όπως φαίνεται και στην εικόνα έχουμε σύνδεση της σειριακής μας στα 9600 (baud rate-ρυθμός Μετάδοσης Συμβόλων).δηλαδή η μετάδοση κάποιων σημάτων από ένα κανάλι σε κάποιο χρονικό διάστημα. Στην συνέχεια ξεκινάει να τρέχει κάποιες AT commands έτσι ώστε να ερευνήσει αν το GSM μας λειτουργεί σωστά. Αν μετά από όλο αυτό τον έλεγχο διαπίστωση ότι λειτουργούν όλα σωστά τότε μας εμφανίζεται στο monitor το μήνυμα READY και συνεχίζει παρακάτω αλλιώς μας εμφανίζει το μήνυμα IDLE. Παρακάτω του λέμε να ελέγξει μέσω μιας if ότι αν είναι έτοιμο «READY» να ξεκινήσει «started» και τότε μας στέλνει ένα μήνυμα το Arduino: Hello user και εφόσον το στείλει και παραδοθεί τότε εμφανίζει στο monitor sent OK. Τέλος έχουμε να ρυθμίσουμε κάποια PINS (ledpin, pin 12) και (ledpin2, pin 11) της πλακέτας μας (ARDUINO) έτσι ώστε να είναι έξοδοι (OUTPUT) και να μπορούμε να στέλνουμε σήμα προς την αντλία μας αλλά και την ηλεκτροβάνα μας για να ακολουθούν τις λειτουργίες έτσι όπως τις έχουμε ορίσει. 52
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Εικόνα 27: Ο κώδικας μου «Ρουτίνα void setup()» 53
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Τώρα καθώς έχουμε φύγει από το κομμάτι της void setup () μπαίνουμε στην δεύτερη βασική ρουτίνα η οποία είναι η void loop () και στην ουσία η λειτουργία της είναι να εκτελεί επαναλήψεις. Αρχικά μέσα στην Loop ελέγχουμε μέσω μιας «if» αν ξεκινάει «started» και εφόσον το γνωρίζουμε από πριν ότι είναι «READY» προχωράει παρακάτω. Στην συνέχεια δηλώνουμε ακόμα μια μεταβλητή την pos η οποία είναι τύπου integer (ακέραια) και στην οποία αποθηκεύονται τα αδιάβαστα μηνύματα. Μετά αφού την καλέσουμε μεσω της «if» πάλι, της λεμέ να διαβάσει τα αδιάβαστα εισερχόμενα μηνύματα «sms.getsms(pos, phone_num, sms_text, 100);» και εφόσον το κάνει τα τυπώνει στο monitor στον ηλεκτρονικό υπολογιστή. Για να συνεχίσουμε την ροή του προγράμματος ελέγχουμε ξανά με μια «if» το τη μήνυμα μας ηρθε. Αν το μήνυμα είναι «start» τότε του λέμε μέσω της εντολής digitalwrite να γίνει η επαφή (ledpin, HIGH) δηλαδή να στείλει σήμα (5 Volt) από την επαφή 12 στην δική μας περίπτωση. Αν πάλι τώρα το μήνυμα είναι «stop» γίνεται η ακριβώς αντίθετη διαδικασία δηλαδή σταματάει να στέλνει σήμα (0 Volt) από την επαφή pin 12 (ledpin, LOW). Στη συνέχεια αν μας έρθει το μήνυμα «evopen», η επαφή Pin 11 (ledpin2, LOW) και αν μας έρθει «evclose» τότε (ledpin2, HIGH). Πάρακάτω ελέγχουμε ότι αν μας σταλεί το μήνυμα «check» να μας απαντήσει το GSM και να μας αναφέρει σε ποιο ύψος βρίσκεται η στάθμη στην δεξαμενή ελέγχου. 54
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Εικόνα 28: Ο κώδικας μου «Ρουτίνα void loop()» Προχωρώντας μέσα στην void loop () έχουμε την δήλωση ακόμα μιας μεταβλητής της «cm» η οποία είναι και αυτή τύπου integer (ακέραια). Στην συνεχεία λέμε στο πρόγραμμα να μας τυπώσει της μετρήσης του sonar «cm» στο monitor. Εφόσον έχουν γίνει όλα τα παραπάνω ελέγχουμε μια σειρά από «if» τα «cm» δηλαδή την στάθμη του νερού στην δεξαμενή. 55
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Έτσι λέμε ότι αν η στάθμη είναι (cm <= 2) τότε να σταματήσει να στέλνει σήμα από την επαφή pin 12 του Arduino (digitalwrite (ledpin, LOW);). Μετά αν είναι (cm <= 4) τότε να μας γίνεται πάλι η ίδια λειτουργία. Στην συνέχεια αν είναι (cm >= 15) τότε να ξεκινήσει να στέλνει σήμα από την επαφή pin 12 του Arduino (digitalwrite (ledpin, HIGH);). Μετά πάλι μέσω μιας σειράς «if» καθορίζουμε σε ποια στάθμη θα μας σταλεί μήνυμα, δηλαδή όταν (cm <= 4) να μας στέλνεται το (smsindex = 2;). Αν πάλι εχουμε την παρακάτω στάθμη (cm >= 9 && cm <= 11) τότε να μας στέλνεται το (smsindex = 1;) και στη συνέχεια αν έχουμε (cm >= 15) τότε να μας στείλει το (smsindex = 0;) Καθώς έχουμε τελειώσει με την παραπάνω σειρά από εργασίες, κανουμε ένα έλεγχο έτσι ώστε να αποφύγουμε την αποστολή συνεχόμενων μηνυμάτων από το GSM. Έτσι θα μας έρχεται νέο μήνυμα μόνο όταν αλλάζει η κατάσταση της στάθμης της δεξαμενής εντολή (lastresult). 56
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Εικόνα 29: Ο κώδικας μου «Ρουτίνα void loop()» 57
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Στην συνέχεια ακολουθούν οι λοιπές συναρτήσεις όπως η void SIM900power () που είναι για να ξεκινήσει το GSM μας να δουλεύει αυτόματα χωρίς να το ανοίξουμε εμείς μέσω του power button, η συνάρτηση για το sonar οπού ακολουθεί μιας σειρά από εντολές για να πάρει 58
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ τις μετρήσεις της αλλά και να μετατρέψει το χρόνο που ταξιδέψε το ηχητικό κύμα σε απόσταση «cm» μέσω κάποιων μαθηματικών πράξεων. Τέλος μας μένει η void sendsms όπου είναι αυτή η ρουτίνα που δίνουμε ξανά τον αριθμό που θα αποστέλλονται τα μηνύματα αλλά και η επιλογή του περιεχομένου του μηνύματος που είναι «low, mid, high» αλλά και το «buffer» δηλαδή να μας στέλνει τα «cm» της στάθμης της δεξαμενής εκείνη τη στιγμή. Εικόνα 30: Ο κώδικας μου «Λοιπές ρουτίνες και Συναρτήσεις» 59
ΚΕΦΑΛΑΙΟ 6 Ο - ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΤΟΥ ARDUINO ΜΑΣ Εικόνα 31: Ο κώδικας μου «Λοιπές ρουτίνες και Συναρτήσεις» 60