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



Σχετικά έγγραφα
Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

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

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

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

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ. ΚΕΦΑΛΑΙΟ 4ο ΜΝΗΜΕΣ. (c) Αμπατζόγλου Γιάννης, Ηλεκτρονικός Μηχανικός, καθηγητής ΠΕ17

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

Είναι το πρωτόκολλο RS232 που χρησιμοποιείται στις σειριακές θύρες COM με τη διαφορά ότι εκτελείται σε επίπεδο τάσεων TTL. 2

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

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

12. Διακοπές Interrupts (IRQ)

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

- Εισαγωγή - Επίπεδα μνήμης - Ολοκληρωμένα κυκλώματα μνήμης - Συσκευασίες μνήμης προσωπικών υπολογιστών

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

ΔΙΔΑΚΤΙΚΟ ΣΕΝΑΡΙΟ ΔΗΜΙΟΥΡΓΙΑ ΣΥΣΤΗΜΑΤΟΣ ΔΙΕΞΑΓΩΓΗΣ ΠΑΙΧΝΙΔΙΟΥ ΕΡΩΤΗΣΕΩΝ/ΑΠΑΝΤΗΣΕΩΝ ΜΕ ΧΡΗΣΗ ARDUINO - QUIZ GAME ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 3

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

ΘΕΜΑ : ΗΛΕΚΤΡΟΝΙΚΗ ΜΝΗΜΗ ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΕΣ. ΔΙΑΡΚΕΙΑ: 1 περίοδος

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

5.1 QAA75.. / QAA78 / AVS37..

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

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

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

WDT και Power Up timer

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

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

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

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

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

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

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

Βασικές Έννοιες της Πληροφορικής

10. Πληκτρολόγιο matrix 4x4

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

Ηλεκτρονικός Προγραμματιζόμενος Θερμοστάτης Διπλού Αισθητηρίου

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

10. Πληκτρολόγιο matrix 4x4

Σκοπός. Προγραμματίζοντας τον Arduino ΙΙ Εντολή Εκχώρησης & Εντολές. Συλλογή & Επεξεργασία Δεδομένων. Πρόγραμμα. Εντολές Επεξεργασίας Δεδομένων

ΤΗΛΕΧΕΙΡΙΣΤΗΡΙΟ ΚΛΙΜΑΤΙΣΤΙΚΟΥ ΤΟΙΧΟΥ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΗ

Μονάδα Ελέγχου Καυστήρων Πετρελαίου. Ρύθμιση Επιθυμητής Θερμοκρασίας Νερών Έλεγχος Κυκλοφορητή. Αντιπαγοτική Προστασία

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

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

Εισαγωγή στην επιστήμη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 5ο Οργάνωση υπολογιστών

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

Ενότητα 4. Εισαγωγή στην Πληροφορική. Αναπαράσταση δεδοµένων. Αναπαράσταση πληροφορίας. υαδικοί αριθµοί. Χειµερινό Εξάµηνο

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

Εγχειρίδιο χρήσης (01VS ) Ψηφιακό Διπλό Θερμόμετρο & Διπλός Ελεγκτής για Εφαρμογές Θέρμανσης - Ψύξης

Θερμοστάτης LTC 730. Οδηγίες

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

WIRELESS SENSOR NETWORKS (WSN)

Οργάνωση Υπολογιστών (ΙI)

Εγχειρίδιο λειτουργίας

Κύρια μνήμη. Μοντέλο λειτουργίας μνήμης. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (ΙI)

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

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

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

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

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

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

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

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

Ο πίνακας ελέγχου αποτελείται από οθόνη, τρία σημεία ενδείξεων και τέσσερα πλήκτρα.

Εφαρµογές Πληροφορικής Υπολογιστών. Κεφάλαιο 3 Το υλικό του υπολογιστή

Οργάνωση και Αρχιτεκτονική Υπολογιστών. Κεφάλαιο 7.4

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

Αρχιτεκτονική υπολογιστών

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

ΚΕΦΑΛΑΙΟ 5 ΠΡΟΣΟΜΟΙΩΤΗΣ PLC SIMATIC S7-300

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

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 5: Εξωτερικές διακοπές του 8051

Το υλικό του υπολογιστή

«Σχεδιασμός Ψηφιακών Συστημάτων σε FPGA» Εαρινό εξάμηνο

Οργάνωση Υπολογιστών (IΙI)

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

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

ΤΗΛΕΧΕΙΡΙΣΤΗΡΙΟ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Α Γενικού Λυκείου (Μάθημα Επιλογής)

Σύντομες οδηγίες χρήσης

ΒΑΣΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ. Τίτλος Μαθήματος. Διαλέξεις - Θεωρητική Διδασκαλία, Εποπτευόμενο Εργαστήριο Επίδειξη, Μελέτες (Projects)

Κεφάλαιο Το υπολογιστικό σύστημα Η εξέλιξη του ανθρώπου πραγματοποιήθηκε χάρη στην ικανότητά στον χειρισμό εργαλείων.

Σύντομες οδηγίες χρήσης

(Ιούνιος 2001 ΤΕΕ Ηµερήσιο) Σε κάθε µία από τις παρακάτω περιπτώσεις, να

Πανεπιστήμιο Πατρών Τμήμα Φυσικής Εργαστήριο Ηλεκτρονικής. Ψηφιακά Ηλεκτρονικά. Μονάδες Μνήμης και Διατάξεις Προγραμματιζόμενης Λογικής

ΑΣΚΗΣΕΙΣ ΠΟΛΛΑΠΛΗΣ ΕΠΙΛΟΓΗΣ ΓΙΑ ΤΗ ΘΕΩΡΙΑ

Σύστημα τηλεχειρισμού με χρονοθερμοστάτη για λέβητες αερίου

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

ΨΗΦΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Γ ΕΠΑΛ 14 / 04 / 2019

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

Ψηφιακή Λογική Σχεδίαση

Καταχωρητής STATUS. IRP: Bit επιλογής περιοχής μνήμης (Bank) για την έμμεση διευθυνσιοδότηση 1= Bank2, Bank3 0= Bank0, Bank1

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ AVS XTREAM 6 XTREAM 32 XTREAM 64

ΗΧ-GD30. Οδηγίες χρήσης και προγραμματισμού. Συσκευή τηλεφωνητή μέσω GSM και PSTN. Εγκατάσταση

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

ΟΔΗΓΙΕΣ ΘΕΡΜΟΣΤΑΤΗ/ΧΕΙΡΙΣΤΗΡΙΟΥ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

1 /13. Κοζάνη Αριθμ. Πρωτ ΑΔΑΜ Εγκεκριμένου αιτήματος: 15REQ

Transcript:

ΤΕΙ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΑΥΤΟΜΑΤΟ ΣΥΣΤΗΜΑ ΕΛΕΓΧΟΥ ΕΝΥΔΡΕΙΟΥ ΓΡΗΓΟΡΙΟΥ ΘΩΜΑΣ ΑΕΜ: 1391 ΤΖΙΦΟΠΟΥΛΟΣ ΔΗΜΗΤΡΙΟΣ ΑΕΜ: 1517 ΥΠΕΥΘΥΝΟΣ ΕΠΟΠΤΗΣ ΚΑΘΗΓΗΤΗΣ Δρ. ΠΟΓΑΡΙΔΗΣ ΔΗΜΗΤΡΙΟΣ Καβάλα, Σεπτέμβριος 2012 1

Περίληψη Το αντικείμενο της πτυχιακής εργασίας είναι ο σχεδιασμός και η κατασκευή ενός αυτόματου συστήματος ελέγχου ενυδρείου. Ο σκοπός αυτού του συστήματος είναι αφενός το αυτόματο τάισμα των ψαριών, αφετέρου ο έλεγχος της κατάστασης του ενυδρείου, η οποία περιγράφεται από τρεις βασικές ποσότητες: α) την εσωτερική θερμοκρασία του, β) την στάθμη του νερού σε περίπτωση δυσλειτουργίας και γ) την φωτεινότητα του περιβάλλοντος. Για αυτές τις ποσότητες τίθενται όρια επιτρεπτής λειτουργίας και το σύστημα ελέγχου είναι επιφορτισμένο με το να διορθώνει τις τιμές όταν βγαίνουν εκτός των προαποφασισμένων ορίων και να ενημερώνει σχετικά τον χρήστη στο κινητό του μέσω μηνύματος SMS, και τέλος να προβάλει τις πληροφορίες συστήματος σε μια οθόνη LCD. 2

Πίνακας περιεχομένων Κεφάλαιο 1 Εισαγωγή... 6 Κεφάλαιο 2 Θεωρητική Εισαγωγή... 8 2.1 Κεντρική Μονάδα Επεξεργασίας... 10 2.2 Μνήμες... 12 2.3 Χρονισμός... 13 2.4 Διακοπές και Επανατοποθέτηση... 15 2.5 Σύγχρονη και ασύγχρονη επικοινωνία... 16 2.6 Περιφερειακά συστήματα... 18 2.6.1 Συσκευή τροφής... 18 2.6.2 Συσκευή οξυγόνου... 19 2.6.3 Κινητό τηλέφωνο... 19 2.6.4 Ανεμιστήρες... 19 2.6.5 Τροφοδοτικό... 20 2.6.6 Οθόνη LCD... 20 Κεφάλαιο 3 Ηλεκτρονική Σχεδίαση του Συστήματος... 22 3.1 Πλακέτα ανάπτυξης... 22 3.2 Βοηθητική πλακέτα... 22 3.3 Πλακέτα Ηλεκτρονικής Ταίστρας... 23 3.4 Πλακέτα φώτων... 24 3.5 Μπουτόν... 24 3.6 Αισθητήριο θερμοκρασίας... 25 3.7 Πλακέτα θερμοστάτη... 25 3.8 Αισθητήριο στάθμης... 26 3.9 Πλακέτα κινητού... 26 3.10 Πλακέτα ανεμιστήρων... 27 3

Κεφάλαιο 4 Λογισμική Σχεδίαση του Συστήματος... 29 4.1 Συνάρτηση show_int... 29 4.2 Συνάρτηση show_num... 30 4.3 Συνάρτηση leapyear... 31 4.4 Συνάρτηση lastday... 31 4.5 Συνάρτηση WelcomeScreen... 32 4.6 Συνάρτηση LightCheck... 33 4.7 Συνάρτηση FanCheck... 34 4.8 Συνάρτηση HeatCheck... 35 4.9 Συνάρτηση AllChecks... 35 4.10 Συνάρτηση nextfeed... 36 4.11 Συνάρτηση TimeConf... 37 4.12 Συνάρτηση DateConf... 38 4.13 Συνάρτηση AverTemp... 39 4.14 Συνάρτηση ShowQuant... 40 4.15 Συνάρτηση FeederQuant... 40 4.16 Συνάρτηση FeederConf... 41 4.17 Συνάρτηση Sms... 42 4.18 Συνάρτηση feed... 43 4.19 Κεντρικό πρόγραμμα... 44 Κεφάλαιο 5 Ενιαιοποίηση και Έλεγχος... 46 5.1 Ενιαιοποίηση... 46 5.2 Έλεγχος συστήματος... 48 5.2.1 Έλεγχος μενού... 48 5.2.2 Έλεγχος φωτισμού... 49 5.2.3 Έλεγχος θερμοκρασίας... 49 5.2.4 Έλεγχος στάθμης... 50 4

Κεφάλαιο 6 Αποτελέσματα Προτάσεις... 51 Βιβλιογραφία... 52 ΠΑΡΑΡΤΗΜΑ Ι.... 53 5

Κεφάλαιο 1 Εισαγωγή Σε ερασιτεχνικά ή επαγγελματικά ενυδρεία, το ζήτημα της συντήρησής τους έχει αρκετές παραμέτρους που πρέπει να ληφθούν υπόψη. Είναι σημαντικό η σωστή λειτουργία (οξυγόνωση και θερμοκρασία νερού, τάισμα ψαριών, διατήρηση ph) να εξασφαλίζεται ακόμη και όταν ο κάτοχος του ενυδρείου απουσιάζει αλλά επίσης και να ειδοποιείται έγκαιρα όταν κάποια από τις παραμέτρους του αλλάξει έτσι ώστε αν είναι δυνατόν να προβαίνει στις απαραίτητες διορθωτικές ενέργειες όπως ανανέωση του νερού, προσθήκη τροφής κλπ. Για τον σκοπό αυτό υπάρχουν στην αγορά διάφορες συσκευές όπως οι ηλεκτρονικές ταίστρες για την περιοδική προσθήκη συγκεκριμένης ποσότητας τροφής στο ενυδρείο ή άλλες συσκευές μέτρησης. Παρόλο που η ύπαρξη τέτοιων βοηθητικών συσκευών κάνει πιο εύκολη την συντήρηση ενός ενυδρείου, δεν αλλάζει το γεγονός ότι χρειάζεται ανθρώπινη επίβλεψη, και εκτίμηση των διάφορων μετρήσεων. Ο σκοπός της παρούσας πτυχιακής είναι η δημιουργία ενός αυτόματου συστήματος ελέγχου ενυδρείου. Το σύστημα έχει τον πλήρη έλεγχο των λειτουργιών του ενυδρείου όπως η περιοδική και προγραμματισμένη απελευθέρωση τροφής στο ενυδρείο, αλλά επίσης είναι επιφορτισμένο με την διατήρηση σωστής λειτουργίας του ενυδρείου ελέγχοντας την στάθμη του νερού, την θερμοκρασία, την φωτεινότητα. Με κεντρικό σύστημα ελέγχου τον μικροελεγκτή ATmega8515 της Atmel ο χρήστης μπορεί να ορίσει την επιθυμητή κατάσταση του ενυδρείου και να αποθηκεύσει αυτές τις σταθερές. Ο κεντρικός μικροελεγκτής λαμβάνει πληροφορίες από τα διάφορα αισθητήρια, συγκρίνει τις μετρήσεις τους με τις επιλεγμένες από τον χρήστη τιμές σωστής λειτουργίας και σε περίπτωση που οι μετρήσεις είναι εκτός των επιτρεπών ορίων, κάνει κάποιες ενέργειες. Αυτές είναι τριών ειδών: α) Θερμοκρασία ενυδρείου. Όταν η θερμοκρασία που μετριέται εντός του ενυδρείου ξεπεράσει τα όρια ±6 C από την ιδανική μέση τιμή που έχει εισάγει ο χρήστης, τότε ενεργοποιείται το σύστημα θέρμανσης (θερμοστάτης) ή ψύξης (ανεμιστήρες) για να αυξηθεί ή να μειωθεί η θερμοκρασία αντίστοιχα, με σκοπό το σύστημα να επανέλθει στην θερμοκρασία που έχει ορίσει ο χρήστης. β) Φωτισμός ενυδρείου. Το σύστημα μπορεί αυτόματα να ενεργοποιήσει ή να απενεργοποιήσει τον φωτισμό στο ενυδρείο ανάλογα με το αν υπάρχει φως στο δωμάτιο ή όχι. 6

γ) Στάθμη νερού. Σε κάποιο σημείο εντός του ενυδρείου βρίσκεται ένα αισθητήριο που μετράει την στάθμη. Όταν ενεργοποιηθεί αυτό το αισθητήριο, το σήμα στέλνεται στην κεντρική μονάδα. Για όλες τις παραπάνω λειτουργίες ο χρήστης έχει τη δυνατότητα να ενεργοποιήσει ή να απενεργοποιήσει τα επιμέρους συστήματα χειροκίνητα με την βοήθεια κουμπιών τα οποία βρίσκονται πάνω στην κεντρική μονάδα ελέγχου. Τέλος, υπάρχει δυνατότητα να ενεργοποιηθεί το ενσωματωμένο στο σύστημα κινητό τηλέφωνο και ο χρήστης ειδοποιείται με μήνυμα SMS στο κινητό του όταν κάποια παράμετρος του ενυδρείου (θερμοκρασία ή στάθμη νερού) έχει ξεπεράσει τα επιτρεπτά όρια ακόμα περισσότερο από αυτά που μπορεί να διαχειριστεί το ίδιο το σύστημα, έτσι ώστε ο χρήστης να κάνει τις απαραίτητες ενέργειες επαναφοράς. Η πτυχιακή χωρίζεται ως εξής: Στο δεύτερο Κεφάλαιο γίνεται μια θεωρητική εισαγωγή και περιγράφεται ο μικροεπεξεργαστής AVR ATmega8515 ο οποίος είναι και η βάση του συστήματος που αναπτύχθηκε. Συζητούνται τα κύρια χαρακτηριστικά και οι δυνατότητές του. Στο Κεφάλαιο 3 παρουσιάζεται η ηλεκτρονική σχεδίαση του συστήματος και στο Κεφάλαιο 4 αναλύεται το λογισμικό που αναπτύχθηκε για τις ανάγκες του συστήματος. Στο Κεφάλαιο 5 περιγράφεται το πώς έγινε η ενιαιοποίηση του συστήματος και παρουσιάζονται οι έλεγχοι που έγιναν για να επιβεβαιωθεί η σωστή λειτουργία του. Τέλος, στο Κεφάλαιο 6 γίνεται μια γενική αποτίμηση της πτυχιακής εργασίας και γίνονται προτάσεις για περεταίρω ανάπτυξη και βελτίωση του συστήματος. Στο παράρτημα δίνεται ο κώδικας που γράφτηκε για υλοποιηθούν οι λειτουργίες του συστήματος ελέγχου. 7

Κεφάλαιο 2 Θεωρητική Εισαγωγή Σε αυτό το κεφάλαιο θα γίνει η περιγραφή των βασικών υλικών που χρησιμοποιήθηκαν για την υλοποίηση του αυτόματου συστήματος ελέγχου ενυδρείου. Η βάση του συστήματος είναι ο μικροϋπολογιστής AVR ATmega8515 της Atmel. Αυτή η μονάδα ελέγχει όλα τα υπόλοιπα υποσυστήματα του ενυδρείου. Το σχήμα που ακολουθεί δείχνει την βασική αρχιτεκτονική του μικρουπολογιστή: Σχήμα 2.1: Η αρχιτεκτονική του μικροελεγκτή ATmega8515 8

Ο ATmega8515 είναι ένας μικροελεγκτής 8 bit AVR ο οποίος βασίζεται στην αρχιτεκτονική RISC και συνδυάζει 8KB προγραμματιζόμενης μνήμης flash, 544B εσωτερικής μνήμης, και έως 64KB εξωτερικής SRAM. Συνοπτικά, τα χαρακτηριστικά του μικροεπεξεργαστή παρουσιάζονται στον παρακάτω πίνακα: Επεξεργαστής Μνήμη Παράλληλη και σειριακή επικοινωνία Χρονιστές-μετρητές Αριθμητική Λογική Μονάδα (ALU) συνδεδεμένη με 32 ενεργούς καταχωρητές γενικού σκοπού Μετρητής προγράμματος Καταχωρητής κατάστασης Δείκτης σωρού Καταχωρητής εντολών Μονάδα ελέγχου 8 Kbyte μνήμης (flash memory) προγραμματιζόμενης μέσα στο σύστημα 512 bytes στατικής μνήμης SRAM (Static Random Access Memory) 512 bytes αναπρογραμματιζόμενης μνήμης μόνο για ανάγνωση EEPROM (Electrically Erasable Programmable Read Only Memory) 32 ενεργούς καταχωρητές γενικού σκοπού 35 γραμμές εισόδου-εξόδου γενικού σκοπού Πέντε πόρτες εισόδου-εξόδου πολλαπλών λειτουργιών για παράλληλη επικοινωνία Σειριακό προγραμματιζόμενο USART (Universal Synchronous-Asynchronous Receiver Transmitter) και σειριακή διασύνδεση περιφερειακών SPI (Serial Port Interface) για σειριακή επικοινωνία Δύο χρονιστές μετρητές με μορφές σύγκρισης Προγραμματιζόμενος επιτηρητής χρονιστής 9

Διακοπές Εκοικονόμηση ενέργειας WDT (WatchDog Timer) οδηγούμενο από ταλαντωτή Υποσύστημα διακοπών με δυνατότητα εσωτερικών και εξωτερικών διακοπών Τρεις μορφές εξοικονόμησης ενέργειας Μαζί με τον μικροεπεξεργαστή παρέχεται ένα αναπτυξιακό πακέτο το οποίο περιλαμβάνει την πλακέτα ανάπτυξης και αξιολόγησης καθώς και λογισμικό με διάφορα εργαλεία ανάπτυξης και ελέγχου όπως μεταγλωττιστές, συμβολομεταφραστές, λογισμικό εκσφαλμάτωσης και προσομοιωτές. για την ανάπτυξη και τον έλεγχο εφαρμογών. 2.1 Κεντρική Μονάδα Επεξεργασίας H κεντρική μονάδα επεξεργασίας του ATmega8515 είναι σχεδιασμένη με την αρχιτεκτονική Harvard, δηλαδή χρησιμοποιεί ξεχωριστούς διαύλους και μνήμες για το πρόγραμμα και τα δεδομένα. Είναι υπολογιστής περιορισμένου συνόλου εντολών (RISC) και είναι σχεδιασμένος έτσι ώστε κάθε εντολή να εκτελείται σε έναν κύκλο ρολογιού. Αυτό γίνεται επειδή για κάθε εντολή που εκτελείται, η αμέσως επόμενη καλείται από τη μνήμη προγράμματος με διοχέτευση ενός επιπέδου. Το σχήμα που ακολουθεί απεικονίζει την αρχιτεκτονική της κεντρικής μονάδας έλεγχου. 10

Σχήμα 2.2: Αρχιτεκτονική της κεντρικής μονάδας ελέγχου Στην κεντρική μονάδα ελέγχου βρίσκονται οι 32 καταχωρητές εργασίας οι οποίοι χρησιμοποιούνται για αριθμητικές πράξεις, για διευθυνσιοδότηση, για έλεγχο κατάστασης ή ως δείκτες στοίβας. Στις πράξεις (αριθμητικές, λογικές και εντολές σε επίπεδο ενός bit) της Αριθμητικής και Λογικής Μονάδας (ALU) δύο τελεσταίοι καλούνται από το αρχείο καταχωρητών γρήγορης πρόσβασης, εκτελείται η εντολή και το αποτέλεσμα αποθηκεύεται πάλι στο αρχείο καταχωρητών. Επίσης υπάρχουν και εντολές μεταξύ ενός καταχωρητή και μιας σταθεράς ή και εντολές μονού καταχωρητή. Καθώς το αρχείο γρήγορης πρόσβασης έχει χρόνο πρόσβασης τον ένα κύκλο ρολογιού, αυτό σημαίνει ότι και η ALU έχει χρόνο λειτουργίας τον ένα κύκλο μηχανής για κάθε πράξη. Η ροή του προγράμματος ελέγχεται με εντολές άλματος (είτε υπό συνθήκη είτε χωρίς) και με εντολές κλήσης (jump και call), ικανές να αναφερθούν άμεσα σε όλο το εύρος διευθύνσεων. Οι περισσότερες εντολές έχουν απλή μορφοποίηση λέξης των 16 bits. Κάθε διεύθυνση της μνήμης 11

προγράμματος περιλαμβάνει μια εντολή των 16 ή 32 bits. Στον καταχωρητή κατάστασης (status register) αποθηκεύονται οι πληροφορίες για το αποτέλεσμα της πιο πρόσφατης αριθμητικής εντολής πχ αν το αποτέλεσμα της πράξης ήταν μηδές. Βάσει αυτών των πληροφοριών εκτελούνται οι εντολές άλματος υπό συνθήκη. Από τους 32 συνολικά καταχωρητές, οι τελευταίοι έξι μπορούν να χρηιμοποιηθούν για την καταχώρηση διευθύνσεων αφού αν χρησιμοποιηθούν ως ζεύγη μπορούν να δράσουν ως καταχωρητές έμμεσης διευθυνσιοδότησης 16-bit. Επίσης ένας από τους καταχηρητές αυτούς μπορεί να χρησιμοποιηθεί και σαν δείκτης διεύθυνσης για πίνακες δεδομένων οι οποίοι είκναι αποθηκευμένοι στην εξωτερική μνήμη Flash. O δείκτης στοίβας (stack pointer) χρησιμοποιείται για την αποθήκευση προσωρινών δεδομένων, τοπικών μεταβλητών και διευθύνσεων επιστροφής μετά από διακοπές και υπορουτίνες. 2.2 Μνήμες Όπως αναφέρθηκε στην προηγούμενη ενότητα, ο μικροελεγκτής ATmega8515 χρησιμοποιεί ξεχωριστούς διαύλους για το πρόγραμμα και τα δεδομένα. Η μνήμη προγράμματος συνδέεται με τον καταχωρητή εντολών με έναν δίαυλο εύρους 16-bit και αποτελεί έναν συνεχή χώρο μιας μνήμης flash. Από την άλλη, η μνήμη δεδομένων η οποία έχει εύρος 8-bit, συνδέει τις εσωτερικές περιφερειακές μονάδες με τους καταχωρητές ελέγχου και είναι δύο ειδών: α) η στατική μνήμη δεδομένων (SRAM) και β) η μνήμη δεδομένων EEPROM. Η εσωτερική στατική μνήμη δεδομένων (SRAM) χωρίζεται σε τρία τμήματα: 1. Την ομάδα ομάδα των 32 καταχωρητών εργασίας (8-bit). 2. Τους 64 καταχωρητές εισόδου και εξόδου (8-bits), οι οποίοι χρησιμοποιούνται για τον προγραμματισμό αλλά και την προσπέλαση των δεδομένων που από και προς τα περιφερειακά συστήματα του μικροελεγκτή. Ανάλογα με την χρήση αυτών των καταχωρητών (προγραμματισμό ή προσπέλαση δεδομένων) η προσπέλασή τους γίνεται σε διαφορετικές διευθύνσεις. Για την ευκολία του προγραμματιστή, οι καταχωρητές αυτοί έχουν ένα μνημονικό όνομα και αυτά τα ονόματα και οι διευθύνσεις στις οποίες αντιστοιχούν ορίζονται σε συγκεκριμένο αρχείο, διαφορετικό για κάθε μοντέλο μικροελεγκτή. 12

3. Την εσωτερική στατική μνήμη (SRAM) η οποία χρησιμοποιείται και ως στοίβα (stack) του μικροελεγκτή. Το μέγεθος της μνήμης ποικίλει ανάλογα με το μοντέλο της σειράς μικροελεγκτών. Από την άλλη, η εσωτερική μνήμη EEPROM είναι διαθέσιμη σχεδόν σε όλους τους μικροελεγκτές της σειράς και κυμαίνεται από 64 bytes έως 4 Kbytes. Παρόλο που η EEPROM χρησιμοποιείται από τον μικροελεγκτή ως περιφερειακή μνήμη κανονικά, καταχώρηση ή ανάκτηση δεδομένων όμως δεν επιτρέπονται οι απευθείας προσπελάσεις σε αυτήν την μνήμη για εγγραφή ή για ανάγνωση. Για αυτόν τον σκοπό χρησιμοποιούνται ως ενδιάμεσοι οι καταχωρητές εισόδου-εξόδου. Το επόμενο σχήμα δείχνει τον χάρτη μνήμης του μικροελεγκτή. Σχήμα 2.3: Χάρτης μνήμης (http://www.avr-tutorials.com/) 2.3 Χρονισμός Ο μικροελεγκτής διαθέτει αριθμό ρολογιών για να λειτουργούν τα διάφορα υποσυστήματα: Το ρολόι της CPU (clk CPU ) είναι απαραίτητo για την εκτέλεση γενικών υπολογισμών και λειτουργιών καθώς συνδέεται με βασικά τμήματα του του πυρήνα του AVR όπως για παράαδειγμα οι καταχωρητές στοίβας και κατάστασης. Το ρολόι εισόδου-εξόδου (clk I/O ) χρησιμοποιείται από τις περισσότερες μονάδες εισόδου - εξόδου αλλά και από τη μονάδα εξωτερικών διακοπών 13

(με κάποιες εξαιρέσεις). Άρα κατά κύριο λόγο αυτό το ρολόι είναι απαραίτητο για διαδικασίες εισόδου/εξόδου αλλά και για να είναι ενεργές οι εξωτερικές διακοπές. Το ρολόι Flash (clk FLASH ) χρησιμοποιείται στην διεπαφή Flash και είναι συνήθως ενεργό ταυτόχρονα με το ρολόι της CPU. Στο παρακάτω σχήμα παρουσιάζεται το βασικό σύστημα χρονισμού του AVR καθώς και η διανομή των ρολογιών. Καθώς δεν είναι απαραίτητο όλα τα ρολόγια να είναι ενεργά ανα πάσα στιγμή, υπάρχει δυνατότητα τα ρολόγια που δεν χρησιμοποιούνται να μπαίνουν σ εκατάσταση ύπνου, έτσι ώστε να εξοικονομείται ενέργεια. Σχήμα 2.4: Δημιουργία και κατανομή ρολογιού Υπάρχουν διάφορες εναλλακτικές για εξωτερική πηγή ρολογιού: Εσωτερικός ταλαντωτής RC. Αυτή είναι η προεπιλεγμένη πηγή ρολογιού για τον AVR. Η προεπιλεγμένη συχνότητα είναι 1MHz αλλά μπορεί να αλλαχθεί σε 2, 4 ή 8MHz ανάλογα με το μοντέλο του μικροεπεξεργαστή. 14

Το μειονέχτημα αυτής της πηγής είναι ότι η συχνότητα μεταβάλλεται ανάλογα με την τάση και την θερμοκρασία της συσκευής. Άρα αυτή η λύση δεν είναι κατάλληλη για εφαρμογές όπου χρειάζεται μεγάλη ακρίβεια και σταθερότητα. UART or SPI. Εξωτερικός ταλαντωτής RC. Δεν χρησιμοποιείται συχνά καθώς δεν είναι ακριβής, αλλά και λόγω του ότι υπάρχει ήδη εσωτερικός ταλαντωτής RC. Κρυσταλλικός ταλαντωτής. Αυτή είναι η ενδεδειγμένη πηγή ρολογιού για εφαρμογές που χρειάζονται μεγάλη ακρίβεια στην συχνότητα, όπως για παράδειγμα σύγχρονη επικοινωνία σε μεγάλες ταχύτητες. Για αυτόν τον λόγο ο AVR διαθέτει δύο ακροδέκτες XTAL1 και XTAL2 μεταξύ των οποίων μπορεί να συνδεθεί είτε κρύσταλλος χαλαζία (quartz) είτε κεραμικός συντονιστής (resonator). Η σύνδεση για αυτού του τύπου την πηγή ρολογιού φαίνεται στην παρακάτω εικόνα. Σχήμα 2.5: Οι συνδέσεις του κρυσταλλικού ταλαντωτή. 2.4 Διακοπές και Επανατοποθέτηση Ο AVR υποστηρίζει διάφορες πηγές διακοπών. Σε κάθε μια πηγή αντιστοιχεί ένας ξεχωριστός δείκτης στην μνήμη προγράμματος. Στον κατάλληλο καταχωρητή ελέγχου της πηγής της διακοπής υπάρχει ένα bit που ονομάζεται bit επίτρεψης (enable bit), στο οποίο θα πρέπει να δοθεί η τιμή 1 ώστε να ενεργοποιηθεί η συγκεκριμένη διακοπή, χωρίς να επηρεάζεται η κατάσταση των υπόλοιπων διακοπών. Για να ενεργοποιηθούν ταυτόχρονα όλες οι διακοπές, υπάρχει στον καταχωρητή κατάστασης ένα γενικό bit επίτρεψης διακοπών (Global Interrupt Enable bit). Όι διακοπές έχουν σειρά προτεραιότητας. Η σειρά προτεραιότητας της κάθε διακοπής καθορίζεται από την διεύθυνση του δείκτη της ρουτίνας εξυπηρέτησης των 15

διακοπών, καθώς και της ρουτίνας επανατοποθέτησης (Reset). Όσο πιο καμηλάβρίσκεται ο δείκτης στη μνήμη, τόσο υψηλότερη είναι η προτεραιότητα της διακοπής, με τη μέγιστη προτεραιότητα να την έχει το Reset. Υπάρχουν δύο βασικοί τύποι διακοπών; 1. Οι διακοπές που είναι ακμοπυροδότητες, δηλαδή ενεργοποιούνται τη στιγμή που ένα γεγονός θέτει 1 στη αντίστοιχη σημαία διακοπών (Interrupt Flag), 2. Oι διακοπές κατάστασης, δηλαδή οι διακοπές οι οποίες παραμένουν ενεργοποιημένες όσο ισχύει η συνθήκη διακοπής Όταν συμβαίνει μια διακοπή, το Global Interrupt Enable bit στον καταχωρητή κατάστασης γίνεται 0 και άρα οι διακοπές αυτομάτως απενεργοποιούνται συνολικά. Σε περίπτωση που χρειάζεται οι διακοπές να ενεργοποιηθούν και μετά από μια διακοπή, αυτό πρέπει να γίνει από το πρόγραμμα, θέτοντας 1 στο Global Interrupt Enable bit. Αντίστοιχα όταν εκτελείται μια ρουτίνα εξυπηρέτησης διακοπής, ο προγραμματιστής οφείλει να αποθηκεύσει στον καταχωρητή κατάστασης έτσι ώστε να μπορέσει να τον επαναφέρει κατά την επιστροφή στο κυρίως πρόγραμμα. 2.5 Σύγχρονη και ασύγχρονη επικοινωνία Η προγραμματιζόμενη μονάδα σύγχρονης - ασύγχρονης σειριακής επικοινωνίας (USART - Universal Synchronous & Asynchronous Receiver Transmitter) αποτελείται από τρία βασικά μέρη: την γενήτρια ρολογιού, τον πομπό και τον δέκτη. Το επόμενο διάγραμμα απεικονίζει την γενική δομή της μονάδας. 16

Σχήμα 2.6: Διάγραμμα της USART Η γεννήτρια ρολογιού παράγει το ρολόι βάσης για τον πομπό και τον δέκτη. Υπάρχουν τέσσερις καταστάσεις λειτουργίας του ρολογιού: α) Κανονική Ασύγχρονη, β) Ασύγχρονη Διπλής ταχύτητας, γ) Master Σύγχρονη και δ) Slave Σύγχρονη. Για να ξεκινήσει κάποια διαδικασία επικοινωνίας, πρέπει πρώτα να αρχκικοποιηθεί η USART. Για να γίνει αυτό πρέπει να καθοριστούν όλες οι παράμετροι επικοινωνίας όπως η ταχύτητα μετάδοσης, η μορφή πλαισίου και η ενεργοποίηση του πομπού ή του δέκτη ανάλογα με την λειτουργία αποστολής ή λήψης δεδομένων αντίστοιχα. Η μορφή πλαισίου καθορίζεται από τις αποδεκτές μορφές της USART. Αυτές είναι οι 30 συνδυασμοί των παρακάτω περιπτώσεων 1 bit αρχικοποίησης 5, 6, 7, 8 ή 9 bits δεδομένων μονό, ζυγό ή καθόλου bit ισοτιμίας (parity bit) 1 ή 2 bit τερματισμού 17

Για να ενεργοποιηθεί ο πομπός της USART πρέπει να δοθεί η τιμή 1 στο bit ενεργοποίησης εκπομπής στον καταχωρητή UCSRB (USART Control and Status Register B). Όταν ο πομπός ενεργοποιηθεί, η κανονική λειτουργία του ακροδέκτη PD1 καταργείται και αυτός λειτουργεί ως έξοδος της USART (TxD). Αντίστοιχα, για να ενεργοποιηθεί ο δέκτης της USART πρέπει να δοθεί η τιμή 1 στο bit ενεργοποίησης λήψης στον καταχωρητή UCSRB. Όταν ο δέκτης ενεργοποιηθεί, η κανονική λειτουργία του ακροδέκτη PD0 καταργείται και αυτός λειτουργεί ως είσοδος της USART (RxD). Και στις δύο περιπτώσεις (ενεργοποίηση πομπού ή δέκτη), όταν η επικοινωνία είναι σύγχρονη, το ρολόι στον ακροδέκτη XCK λειτουργεί ως ρολόι. 2.6 Περιφερειακά συστήματα Εκτός από την κεντρική αναπτυξιακή πλακέτα, χρησιμοποιήθηκαν περιφερειακές συσκευές για την υλοποίηση των διάφορων λειτουργιών του συστήματος, και παρουσιάζονται στην συνέχεια. 2.6.1 Συσκευή τροφής Για το αυτόματο τάισμα των ψαριών επιλέχθηκε η συσκευή Eheim 3581. Η συσκευή λειτουργεί με δύο μπαταρίες τύπου ΑΑ και έχει την δυνατότητα να παρέχει τροφή στο ενυδρείο έως 4 φορές την ημέρα σύμφωνα με τον προγραμματισμό που γίνεται μέσω μιας οθόνης LCD. Σχήμα 2.7: Η συσκευή Eheim 3581 18

2.6.2 Συσκευή οξυγόνου Για την παροχή οξυγόνου στο ενυδρείο χρησιμοποιήθηκε η αεραντλία γλυκού νερού Elite 803 της εταιρίας Hagen. Χαρακτηρίζεται από την αθόρυβη λειτουργία της και την χαμηλή κατανάλωση ρεύματος (4 Watt). Σχήμα 2.8: Η αεραντλία Elite 803 2.6.3 Κινητό τηλέφωνο 1100i. Για την αποστολή μηνυμάτων SMS χρησιμοποιήθηκε το κινητό τηλέφωνο Nokia Σχήμα 2.9: Nokia 1100 2.6.4 Ανεμιστήρες Δύο ανεμιστήρες ψύξης XILENCE LED Fan 120mm χρησιμοποιήθηκαν για τους σκοπούς της ψύξης του ενυδρείου. 19

Σχήμα 2.10: Ανεμιστήρας XILENCE 2.6.5 Τροφοδοτικό Η τροφοδοσία του συστήματος εξασφαλίστηκε με το τροφοδοτικό ηλεκτρονικού υπολογιστή JOU JYE Electronic 300 Watt. Σχήμα 2.11: Τροφοδοτικό 300 Watt 2.6.6 Οθόνη LCD Η οθόνη που βρίσκεται στην κεντρική μονάδα χρησιμοποιείται στον προγραμματισμό του ενυδρείου αλλά και για να προβάλλει πληροφορίες του συστήματος όσο είναι σε λειτουργία. Για αυτόν τον σκοπό επιλέχθηκε η οθόνη NHD-0420D3Z-NSW- BBW-V3 της New Haven Display η οποία είναι τεσσάρων γραμμών και είκοσι στηλών, δηλαδή μπορεί να προβάλλει μέχρι και 80 χαρακτήρες ταυτόχρονα 20

Σχήμα 2.12: Η Οθόνη LCD 21

Κεφάλαιο 3 Ηλεκτρονική Σχεδίαση του Συστήματος Σε αυτό το κεφάλαιο περιγράφεται η διαδικασία σχεδίασης του συστήματος και παρατίθενται και αναλύονται τα σχετικά κυκλώματα. 3.1 Πλακέτα ανάπτυξης Η πλακέτα ανάπτυξης STK500 είναι η βάση του συστήματος και όλα τα περιφερειακά κυκλώματα συνδέονται και ελέγχονται από αυτήν μέσω των εισόδων και εξόδων της πλακέτας. Αυτή είναι η αρχιτεκτονική του συστήματος που απεικονίζεται στο παρακάτω σχέδιο. Σχήμα 3.1: Αρχιτεκτονικό σχέδιο του συστήματος 3.2 Βοηθητική πλακέτα Για τις διασυνδέσεις του AVR με συσκευές στα διάφορα επίπεδα της μονάδας ελέγχου, χρησιμοποιήθηκε μια βοηθητική πλακέτα. Η πλακέτα αυτή συνδέεται με καλωδιοταινία σε οποιαδήποτε πόρτα του AVR. Τα πρώτα 8 pins αντιστοιχούν στα pins της πόρτας και τα άλλα 2 στο ρεύμα και στη γείωση. 22

Σχήμα 3.2: Βοηθητική πλακέτα διασύνδεσης 3.3 Πλακέτα Ηλεκτρονικής Ταίστρας Καθώς η ηλεκτρονική ταίστρα έχει διαφορετική τροφοδοσία, χρειάστηκε ξεχωριστή πλακέτα για την σύνδεση της με τον ακροδέκτη 4 της πόρτας D του AVR. Σχήμα 3.3: Πλακέτα ταίστρας 23

3.4 Πλακέτα φώτων Τα φώτα του ενυδρείου είναι ουσιαστικά μια σειρά από LED. Για την διασύνδεση τους με το AVR δημιουργήθηκε πλακέτα έτσι ώστε να υπάρχει η κατάλληλη συνδεσμολογία με τον ακροδέκτη 7 της πόρτας D. Σχήμα 3.4: Πλακέτα φώτων 3.5 Μπουτόν Τα μπουτόν της μονάδας ελέγχου συνδέονται με την πλακέτα ανάπτυξης με τον παρακάτω τρόπο. 24

Σχήμα 3.5: Σύνδεση μπουτόν 3.6 Αισθητήριο θερμοκρασίας Το αισθητήριο θερμοκρασίας συνδέεται με το ΑVR πόρτα Α και συγκεκριμένα στον ακροδέκτη 7. Σχήμα 3.6: Σύνδεση αισθητηρίου θερμοκρασίας 3.7 Πλακέτα θερμοστάτη Το εξωτερικό κύκλωμα του θερμοστάτη δημιουργήθηκε και αυτό σε ξεχωριστή πλακέτα το σχέδιο της οποίας φαίνεται στο επόμενο σχήμα. Ο έλεγχος του θερμοστάτη πραγματοποιείται μέσω του ακροδέκτη 6 της πόρτας D του AVR. 25

Σχήμα 3.10: Πλακέτα θερμοστάτη 3.8 Αισθητήριο στάθμης του AVR. Το σήμα από το αισθητήριο στάθμης μεταφέρεται στον ακροδέκτη 1 της πόρτας V Σχήμα 3.7: Σύνδεση αισθητηρίου στάθμης 3.9 Πλακέτα κινητού 26

Το κινητό συνδέεται στους ακροδέκτες 0-3 της πόρτας D του AVR. Συγκεκριμένα, χρησιμοποιούνται τα κουμπιά Κάτω, OK, Πίσω και ON/OFF του κινητού για να ελεγχθεί η λειτουργία του. Σχήμα 3.8: Πλακέτα σύνδεσης με κινητό 3.10 Πλακέτα ανεμιστήρων Για τους ανεμιστήρες δημιουργήθηκε εξωτερική πλακέτα όπου υπάρχει το κύκλωμα για την σύνδεση τους με την πλακέτα ανάπτυξης και τελικά τον AVR στον ακροδέκτη 5 της πόρτας D. 27

Σχήμα 3.9: Πλακέτα ανεμιστήρων 28

Κεφάλαιο 4 Λογισμική Σχεδίαση του Συστήματος Σε αυτό το κεφάλαιο περιγράφονται οι συναρτήσεις που χρειάστηκαν για την υλοποίηση του λογισμικού του συστήματος. Τα λογικά διαγράμματα δημιουργήθηκαν με το λογισμικό Microsoft Visio. 4.1 Συνάρτηση show_int Εμφάνιση των αριθμών από το 0 έως το 9 στην οθόνη LCD. 29

4.2 Συνάρτηση show_num Εμφανίζει τους αριθμούς στην οθόνη με σωστή μορφή (εκατοντάδες, χιλιάδες, δεκάδες, δεκαδικά ψηφία) 30

4.3 Συνάρτηση leapyear Υπολογισμός δίσεκτων ετών. 4.4 Συνάρτηση lastday Υπολογισμός αριθμού ημερών κάθε μήνα. 31

4.5 Συνάρτηση WelcomeScreen Προβολή μηνύματος καλωσορίσματος στην οθόνη LCD (όνομα εργασίας και ονόματα σπουδαστών). 32

4.6 Συνάρτηση LightCheck Έλεγχος φωτισμού ενυδρείου. 33

4.7 Συνάρτηση FanCheck Έλεγχος ψύξης ενυδρείου. 34

4.8 Συνάρτηση HeatCheck Έλεγχος θέρμανσης ενυδρείου. 4.9 Συνάρτηση AllChecks Εκτέλεση όλων των επιμέρους ελέγχων (φώτα, ανεμιστήρες, θερμοκρασία) 35

4.10 Συνάρτηση nextfeed Υπολογισμός ημερομηνίας και ώρας επόμενου ταίσματος. Αρχικοποίηση ημερομηνίας.ώρας Αύξηση ημέρας κατά δύο ΟΧΙ Είναι η προτελευταία μέρα του μήνα? ΌΧΙ Είναι η τελευταία μέρα του μήνα? ΝΑΙ Η επόμενη ώρα ταίσματος είναι σε περισσότερο από 48 ώρες? ΝΑΙ Αύξηση μήνα Αύξηση μήνα ΟΧΙ Είναι η τελευταία μέρα του μήνα? ΟΧΙ Αύξηση ημέρας κατά μία ΌΧΙ Είναι ο τελευταίος μήνας του έτους? ΝΑΙ Επαναφορά στον πρώτο μήνα του έτους, και αύξηση έτους ΌΧΙ Είναι ο τελευταίος μήνας του έτους? ΝΑΙ Επαναφορά στον πρώτο μήνα του έτους, και αύξηση έτους ΝΑΙ Αύξηση μήνα Είναι ο τελευταίος μήνας του έτους? Αποθήκευση ώρας επόμενου ταίσματος Επαναφορά στην πρώτη μέρα του μήνα Επαναφορά στην δεύτερη μέρα του μήνα ΌΧΙ ΝΑΙ Επαναφορά στον πρώτο μήνα του έτους, και αύξηση έτους Επαναφορά στην πρώτη μέρα του μήνα 36

4.11 Συνάρτηση TimeConf Ρύθμιση ώρας. Προβολή μηνύματος στην οθόνη επιλογής ώρας Προβολή ωρων, λεπτών και δευτερολέπτων στην οθόνη Αναμονή για πάτημα κουμπιού Πάτημα κουμπιού Enter ή δεξιά Πάτημα κουμπιού αριστερά Πάτημα κουμπιού Εscape Πάτημα κουμπιού επάνω Πάτημα κουμπιού κάτω ΝΑΙ ΝΑΙ ΝΑΙ ΝΑΙ ΝΑΙ Επόμενο μενού Προηγούμενο μενού Έξοδος από μενού Αύξηση κατά μια μονάδα δευτερολέπτων, λεπτών ή ωρών Μείωση κατά μία μονάδα δευτερολέπτων, λεπτών ή ωρών 37

4.12 Συνάρτηση DateConf Ρύθμιση ημερομηνίας. Προβολή μηνύματος στην οθόνη επιλογής ημερομηνίας Προβολή ημέρας, μήνα και έτους στην οθόνη Αναμονή για πάτημα κουμπιού Πάτημα κουμπιού Enter ή δεξιά Πάτημα κουμπιού αριστερά Πάτημα κουμπιού Εscape Πάτημα κουμπιού επάνω Πάτημα κουμπιού κάτω ΝΑΙ ΝΑΙ ΝΑΙ ΝΑΙ ΝΑΙ Επόμενο μενού Προηγούμενο μενού Έξοδος από μενού Αύξηση κατά μια μονάδα ημέρας, μήνα και έτους Μείωση κατά μία μονάδα ημέρας, μήνα και έτους Κλήση συνάρτησης TimeConf 38

4.13 Συνάρτηση AverTemp Ρύθμιση επιθυμητής μέσης θερμοκρασίας ενυδρείου. Προβολή μηνύματος στην οθόνη επιλογής θερμοκρασίας Προβολή θερμοκρασίας Αναμονή για πάτημα κουμπιού Πάτημα κουμπιού αριστερά Πάτημα κουμπιού Εscape Πάτημα κουμπιού επάνω Πάτημα κουμπιού κάτω ΝΑΙ ΝΑΙ ΝΑΙ ΝΑΙ Προηγούμενο μενού Έξοδος από μενού Αύξηση κατά μια μονάδα της θερμοκασίας Μείωση κατά μία μονάδα της θερμοκρασίας Διόρθωση ορίων αν η θερμοκρασία που επιλέχθηκε είναι >35 ή <15 Κλήση συνάρτησης DateConf 39

4.14 Συνάρτηση ShowQuant Εμφάνιση κειμένου στο μενού ποσότητας 4.15 Συνάρτηση FeederQuant Ρύθμιση ποσότητας τροφής. 40

4.16 Συνάρτηση FeederConf Ρύθμιση συχνότητας ταίσματος. 41

4.17 Συνάρτηση Sms Αποστολή μηνύματος SMS. 42

4.18 Συνάρτηση feed Ενεργοποίηση ταίσματος. 43

4.19 Κεντρικό πρόγραμμα Το κεντρικό πρόγραμμα που τρέχει το σύστημα. Αρχικοποίηση εισόδων/εξόδων κεντρικής μονάδας Αρχικοποίηση μετρητών Αρχικοποίηση διακοπών Ρύθμιση οθόνης Καθαρισμός οθόνης Προβολή οθόνης καλωσορίσματος Εκτέλεση των ελέγχων συστήματος Υπολογισμός επόμενου ταίσματος Καθαρισμός οθόνης Υπάρχει εξωτερικό φως? ΝΑΙ Ενεργοποίηση λάμπας ενυδρείου ΟΧΙ Αναμονή για πάτημα κουμπιού Α 44

45

Κεφάλαιο 5 Ενιαιοποίηση και Έλεγχος Σε αυτό το κεφάλαιο θα γίνει η περιγραφή της ενιαιοποίησης του συστήματος, της κατασκευής και της εγκατάστασης όλων των υλικών μέχρι να φτάσει στην τελική του μορφή και θα γίνει αναφορά στους ελέγχους που έγιναν για να επιβεβαιωθεί η σωστή λειτουργία του συστήματος. 5.1 Ενιαιοποίηση Το σύστημα αποτελείται από δύο κύρια τμήματα: την γυάλα του ενυδρείου και το κέντρο ελέγχου. Σε αυτά τα δύο τμήματα φιλοξενούνται τόσο η κύρια πλακέτα του AVR όσο και τα επιμέρους υποσυστήματα, αισθητήρια, πλακέτες και οι συνδέσεις μεταξύ τους. Στο πάνω μέρος της γυάλας βρίσκονται οι λάμπες και οι δύο ανεμιστήρες ψύξης. Εσωτερικά της γυάλας τοποθετήθηκαν το αισθητήριο στάθμης, το θερμόμετρο, ο θερμοστάτης, καθώς και το σύστημα φυσαλίδων για την οξυγόνωση του ενυδρείου. Η συναρμολόγηση αυτών των υποσυστημάτων στην τελική του μορφή φαίνεται στο παρακάτω σχήμα: Ανεμιστήρες Βαλβίδα εκτόνωσης αέρα Μέτρηση στάθμης Θερμόμετρο Θερμοστάτης Σχήμα 5.1: Διάταξη υποσυστημάτων στην γυάλα 46

Από την άλλη, το κέντρο ελέγχου εξωτερικά έχει τα κουμπιά για τις διάφορες λειτουργίες και την οθόνη LCD. Στην πάνω πλευρά του πλαισίου βρίσκεται επίσης και ο αισθητήρας φωτός. Τα κουμπιά ελέγχου είναι τα εξής: Κουμπί Escape Κουμπί Enter Κουμπιά ρυθμίσεων (πάνω, κάτω, δεξιά, αριστερά σε διάταξη σταυρού γύρω από το κουμπί Enter) Κουμπιά manual λειτουργίας Παροχή τροφής Κινητό τηλέφωνο Φωτισμός Ανεμιστήρες Γενικός διακόπτης συστήματος Το παρακάτω σχήμα δείχνει εξωτερικά το κέντρο ελέγχου και την διάταξη των κουμπιών και της οθόνης μετά τη συναρμολόγηση: Αισθητήριο φωτός Oθόνη LCD Escape Enter Κινητό Ανεμιστήρες Οn/off συστήματος Tροφή Φωτισμός Σχήμα 5.2 Το κέντρο ελέγχου Το εσωτερικό του κέντρου ελέγχου είναι διαμορφωμένο σε τέσσερα επίπεδα. Στο πρώτο επίπεδο, στην κορυφή, τοποθετήθηκαν η συσκευή παροχής τροφής, η βαλβίδα 47

εκτόνωσης αέρα, το κινητό τηλέφωνο με την πλακέτα με τις συνδέσεις του και η κεντρική πλακέτα του AVR. Στο δεύτερο επίπεδο τοποθετήθηκε το σύστημα ψύξης το οποίο αποτελείται από δύο πλακέτες ρελέ που έχουν ως σκοπό να ρυθμίζουν την χρήση των διάφορων λειτουργιών του ενυδρείου. Σε αυτό το επίπεδο επίσης υπάρχει και ανεμιστήρας έτσι ώστε να εξασφαλίζει την ψύξη του εσωτερικού του κέντρου ελέγχου. Στο τρίτο επίπεδο υπάρχουν πλακέτες με ρελέ και συνδέσμους για τις πόρτες του AVR που χρησιμοποιήθηκαν. Στο τέταρτο επίπεδο είναι τοποθετημένο το τροφοδοτικό, το σύστημα δημιουργίας φυσαλίδων, και ο φορτιστής του κινητού για να τροφοδοτείται το κινητό τηλέφωνο με ρεύμα ανεξάρτητα από το υπόλοιπο σύστημα. 5.2 Έλεγχος συστήματος Με την ενεργοποίηση τους συστήματος στην οθόνη LCD προβάλλεται ο τίτλος της πτυχιακής εργασίας, καθώς και τα ονόματα των φοιτητών. Στη συνέχεια, το ολοκληρωμένο σύστημα είναι προγραμματισμένο να διενεργεί αυτόματα κάποιους βασικούς ελέγχους. Αρχικά, γίνεται έλεγχος του φωτισμού του ενυδρείου, και αυτό γίνεται με το να ανάψουν τα φώτα για κάποια δευτερόλεπτα. Το δεύτερο τεστ είναι ο έλεγχος του θερμοστάτη ο οποίος επίσης ενεργοποιείται για κάποια δευτερόλεπτα. Για τον έλεγχο της σωστής λειτουργίας του συστήματος, διενεργήθηκαν κάποια τεστ στα επιμέρους υποσυστήματα σε διάφορες συνθήκες, έτσι ώστε να εκτιμηθεί αν η αντίδραση του συστήματος ήταν η σωστή. 5.2.1 Έλεγχος μενού Η διαδικασία ελέγχου του μενού είναι βασικά η εισαγωγή των πληροφοριών που ζητούνται και η πλοήγηση στο μενού του συστήματος. Εάν αυτά τα αυτόματα τεστ που περιγράφονται παραπάνω είναι επιτυχημένα, τότε το σύστημα προχωράει, με κατάλληλα μηνύματα στην οθόνη, σε αναμονή πληροφοριών από τον χρήστη. Ξεκινώντας από την συχνότητα ταίσματος και την ποσότητα τροφής, ελέγχθηκε εάν η προβολή των πληροφοριών γίνεται σωστά και με την σωστή σειρά, όπως και απόκριση και αλλαγή δεδομένων στην οθόνη με την χρήση των κουμπιών. Οι ίδιοι έλεγχοι (σειρά εμφάνισης καρτελών και λειτουργία κουμπιών) έγιναν στις επιλογές για την μέση θερμοκρασία και την ώρα. 48

Με την εισαγωγή αυτών των πληροφοριών, επιβεβαιώνεται ότι το σύστημε έρχεται σε κατάσταση αναμονής, και πραγματοποιείται έξοδος από το μενού, με την οθόνη να εμφανίζει τον τίτλο του project, την ημερομηνία, την ώρα και την τρέχουσα θερμοκρασία στο ενυδρείο. Είσοδος εκ νέου στο μενού γίνεται με το πάτημα του κουμπιού Enter. 5.2.2 Έλεγχος φωτισμού Ο έλεγχος φωτισμού έγινε όσο το σύστημα είναι σε κατάσταση κανονικής λειτουργίας. Σε διαφορετικές συνθήκες φωτισμού με τεχνητό ή φυσικό φως ελέγχθηκε εάν ο φωτισμός του ενυδρείου ενεργοποιείται με την απώλεια φωτισμού και αν απενεργοποιείται με την ύπαρξη φωτισμού. Το σύστημα φωτισμού λειτούργησε σωστά όπως αναμενόταν. 5.2.3 Έλεγχος θερμοκρασίας Για τον έλεγχο θερμοκρασίας, ο αισθητήρας τοποθετήθηκε εκτός ενυδρείου, και δοκιμάστηκαν δύο διαφορετικά σενάρια. Και στα δύο σενάρια επιλέχθηκε ως επιθυμητή μέση θερμοκρασία οι 21 C. α) Τοποθέτηση του θερμόμετρου σε ποτήρι με πολύ κρύο νερό. Σε αυτό το σενάριο, η θερμοκρασία άρχισε να πέφτει, και όταν έφτασε να είναι 6 C μικρότερη από την θερμοκρασία που είχε επιλεγεί, τότε ενεργοποιήθηκε ο θερμοστάτης. Διατηρώντας τον θερμοστάτη μέσα στο κρύο νερό, η θερμοκρασία συνέχισε να πέφτει, και όταν έγινε 10 C μικρότερη από την επιθυμητή θερμοκρασία, τότε το σύστημα ενεργοποίησε το κινητό τηλέφωνο και με κατάλληλες επιλογές του μενού στάλθηκε sms μήνυμα σε επιλεγμένο αριθμό. β) Τοποθέτηση του θερμόμετρου σε ποτήρι με ζεστό νερό. Κατ αντιστοιχία με το πρώτο σενάριο, η θερμοκρασία νερού που μετρούσε το σύστημα ανέβαινε συνεχώς μέχρι να φτάσει 6 C πάνω από την επιλεγμένη μέση θερμοκρασία. Όταν συνέβη αυτό, ενεργοποιήθηκαν οι ανεμιστήρες οι οποίοι λειτουργούν ως το σύστημα ψύξης του ενυδρείου. Η θερμοκρασία συνέχισε να ανεβαίνει όταν έφτασε 10 C πάνω από την επιθυμητή μέση θερμοκρασία, το κινητό τηλέφωνο έστειλε κατάλληλο sms. 49

5.2.4 Έλεγχος στάθμης Σε αυτόν τον έλεγχο δοκιμάστηκε η απόκριση του συστήματος όταν το ενυδρείο έχει νερό και όταν δεν έχει. Όταν ο αισθητήρας νερού ανιχνεύσει νερό, τότε συνεχίζεται κανονικά η λειτουργία του ενυδρείου. Για να προσομοιωθεί η απουσία νερού, ο αισθητήρας αφαιρέθηκε από την γυάλα. Αυτό είχε ως αποτέλεσμα να σταλθεί το κατάλληλο σήμα από τον αισθητήρα στην κεντρική μονάδα, να ενεργοποιηθεί το κινητό τηλέφωνο, και να σταλεί σχετικό μήνυμα. 50

Κεφάλαιο 6 Αποτελέσματα Προτάσεις Το αυτόματο σύστημα ελέγχου ενυδρείου που δημιουργήθηκε για τις ανάγκες της πτυχιακής εργασίας ανταποκρίνεται στις απαιτήσεις και στις προδιαγραφές που είχαν τεθεί από την αρχή. Έχοντας σαν βάση του συστήματος την πλακέτα ανάπτυξης του μικροελεγκτή AVR ATmega8515 της ATMEL και τα απαραίτητα περιφερειακά υποσυστήματα και αισθητήρια, δημιουργήθηκε ένα σύστημα με τις παρακάτω δυνατότητες: Αυτόματος έλεγχος ταίσματος Αυτόματη ενεργοποίηση/απενεργοποίηση εσωτερικού φωτισμού ανάλογα με τις συνθήκες φωτισμού του δωματίου Σύστημα ψύξης όταν η θερμοκρασία στο ενυδρείο ξεπερνά κατά 6 C την επιθυμητή μέση θερμοκρασία Σύστημα θέρμανσης όταν η θερμοκρασία στο ενυδρείο είναι μικρότερη κατά 6 C της επιθυμητής μέσης θερμοκρασίας Ειδοποίηση με μήνυμα sms στο κινητό του χρήστη όταν η θερμοκρασία του ενυδρείου είναι 10 C μεγαλύτερη από την μέση θερμοκρασία Ειδοποίηση με μήνυμα sms στο κινητό του χρήστη όταν η θερμοκρασία του ενυδρείου είναι 10 C μικρότερη από την μέση θερμοκρασία Μέτρηση της στάθμης νερού και ειδοποίηση όταν αυτή πέσει κάτω από το επιτρεπτό όριο. Με αυτές τις λειτουργίες καλύπτονται σε μεγάλο ποσοστό οι ανάγκες που μπορεί να έχει η συντήρηση ενός ενυδρείου. Η αυτοματοποίηση κάποιων διαδικασιών οδήγησε στην δημιουργία ενός συστήματος με δύο βασικά πλεονεκτήματα: α) να υπάρχει η μικρότερη δυνατή ανάγκη για επιτόπιο έλεγχο από τον ιδιοκτήτη του ενυδρείου, αλλά και β) να υπάρχει έγκαιρη ειδοποίηση σε περίπτωση δυσλειτουργίας έτσι ώστε να γίνουν έγκαιρα οι απαραίτητες διορθωτικές ενέργειες. 51

Βιβλιογραφία 1) http://www.atmel.com/ 2) http://www.avr-tutorials.com/ 3) http://www.avrfreaks.com/ 4) Πογαρίδης Δ. (2003), «Σχεδίαση Ψηφιακών Συστημάτων», Εκδόσεις Ίων. 5) Πογαρίδης Δ. (2006), «Σχεδίαση Συστημάτων Μικροεπεξεργαστών», Εκδόσεις Γκιούρδας. 6) Αλεβίζος Θ. (2002), «Προγραμματισμός με τη Γλώσσα C++ Μέρος Α», Τ.Ε.Ι Καβάλας. 7) Αλεβίζος Θ. (2000), «Προγραμματισμός με τη Γλώσσα C++ Μέρος Β», Τ.Ε.Ι Καβάλας. 8) Μαρινάγη Α. (2005), «Τεχνολογία Λογισμικού ΙΙ», Τ.Ε.Ι Καβάλας. 9) Νικολαρόπουλος Ε. (2007), «Τεχνολογία Συστημάτων Βασισμένων Σε Υπολογιστές», Τ.Ε.Ι Καβάλας. 52

ΠΑΡΑΡΤΗΜΑ Ι. Σε αυτό το παράρτημα παρατίθεται ο κώδικας του λογισμικού του συστήματος. #include <mega8515.h> // 1 Wire Bus functions #asm.equ w1_port=0x1b ;PORTA.equ w1_bit=7 #endasm #include <1wire.h> // DS1820 Temperature Sensor functions #include <ds18b20.h> // maximum number of DS1820 devices // connected to the 1 Wire bus #define MAX_DEVICES 8 // number of DS1820 devices // connected to the 1 Wire bus // DS1820 devices ROM code storage area, // 9 bytes are used for each device // (see the w1_search function description in the help) unsigned char rom_code[max_devices][9]; // Alphanumeric LCD Module functions #asm.equ lcd_port=0x15 ;PORTC #endasm #include <lcd.h> #include <delay.h> #include <stdio.h> #include <string.h> char lcd_buffer[33]; //emfanizei tous arithmous apo 0-9 stin othoni void show_int(int x) switch (x) case 0: lcd_putsf("o"); break; case 1: lcd_putsf("1"); break; case 2: lcd_putsf("2"); break; case 3: lcd_putsf("3"); break; case 4: lcd_putsf("4"); break; case 5: lcd_putsf("5"); break; case 6: lcd_putsf("6"); break; case 7: lcd_putsf("7"); 53

break; case 8: lcd_putsf("8"); break; case 9: lcd_putsf("9"); break; //emfanizei arithmous mexri kai xiliades kai 1 dekadiko void show_num(float x,short int y) int tmp; unsigned short int tmp2=0; //ean o arithmos pros emfanisei einai arnitikos if (x<0) //kanton thetiko kai emfanise ena "-" stin othoni x=-x; lcd_putsf("-"); //apothikevoume ton arithmo mas se mia prosorini metavliti gia na kratisoume tin timi tou tmp=x; //ean o arithmos einai pano apo xilia if (x>=1000 tmp2==1) //emfanise tis xiliades kai aferese tes apo ton arithmo mas tmp2=1; tmp=tmp/1000; show_int(tmp); tmp=tmp*1000; x=x-tmp; tmp=x; //ean einai panw apo ekato i an eixe xiliades if (x>=100 tmp2==1) //emfanise tis ekatontades kai aferese tes apo ton arithmo mas tmp2=1; tmp=tmp/100; show_int(tmp); tmp=tmp*100; x=x-tmp; tmp=x; //ean einai panw apo deka i an eixe ekatontades i xiliades if ((x>=10 && x<100) tmp2==1) //emfanise tis dekades kai aferese tes apo ton arithmo mas tmp2=1; tmp=tmp/10; show_int(tmp); tmp=tmp*10; x=x-tmp; tmp=x; 54

else //ean den itan apo ena kai panw emfanise 0 show_int(0); if (x<10 tmp2==1) show_int(tmp); //ean theloume na efmanisoume dekadikous arithmous if (y==1) // afairese to akeraio meros tou arithmou x=x-tmp; //ean iparxei dekadikos if (x>0) //emfanise ton lcd_putsf("."); x=x*10; tmp=x; x-=tmp; show_int(tmp); //alliws emfanise to 0 else lcd_putsf("."); show_int(0); //ipologizei tous disektous xronous short int leapyear(int y) return (y%400==0) (y%100!=4 && y%4==0); //ipologizei to poses meres exei o minas unsigned short int lastday (short int y, short int m) short int fv; if (m==1 m==3 m==5 m==7 m==8 m==10 m==12) fv=31; else if (m==4 m==6 m==8 m==11) fv=30; else //ean einai disektos o fevrouarios exei 29 if (leapyear(y)) fv=29; //alliws exei 28 else fv=28; return fv; 55

//counter gia ta defterolepta/2 pou perasan int counter=0,h=23,m=0,s,counter2=0,hpf=0,tmphpf,tmpavtmp=20,avtmp=20,tmph=0,tmpm=0,tmps=0,nfh=0; //counter : o metritis twn defteroleptwn/2 //hpf : ana poses wres tha taizei ta psaria //tmphpf : prosorini metavliti gia to ana poses wres tha taizei ta psaria etsi // wste na min pirazoume tin kanoniki mexri na apothikefsoume tis allages //avtmp : mesi thermokrasia pou theloume to enidrio mas //tmpavtmp : prosorini metavliti gia tin mesi thermokrasia pou theloume to enidrio mas //npf : i epomeni wra taismatos unsigned short int year=2011,month=12,day=30,tmpyear=2011,tmpmonth=1,tmpday=1,nfday,nfmonth,nfyear,tmpquan,quan; //nfday : i epomeni mera taismatos //nfmonth : o epomenos minas taismatos //nfyear : o epomenos xronos taismatos //quan : i posotita taismatos //minima kaloswrismatos xristi void WelcomeScreen() lcd_gotoxy(5,0); lcd_putsf("welcome to"); lcd_gotoxy(1,2); lcd_putsf("*** AquaSenses ***"); delay_ms(6000); lcd_clear(); lcd_gotoxy(5,1); lcd_putsf("a project"); lcd_gotoxy(5,2); lcd_putsf("made by :"); delay_ms(2000); lcd_clear(); lcd_gotoxy(2,1); lcd_putsf("grigoriou Thomas"); lcd_gotoxy(5,2); lcd_putsf("aem : 1391"); delay_ms(3000); lcd_clear(); lcd_gotoxy(0,1); lcd_putsf("tzifopoulos Dimitris"); lcd_gotoxy(5,2); lcd_putsf("aem : 1517"); delay_ms(3000); //elegxos fwtismou enidriou void LightCheck(short int x) 56

lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("check :"); lcd_gotoxy(0,2); lcd_putsf("light check"); //anavoume gia 5" to fws kai to svinoume PORTD.7=1; if (x!=2) delay_ms(1000); lcd_putsf("."); delay_ms(1000); lcd_putsf("."); delay_ms(1000); lcd_putsf("."); delay_ms(1000); x++; if (x==1) LightCheck(2); if (x==1) lcd_gotoxy(0,3); lcd_putsf("ok"); delay_ms(1000); PORTD.7=0; //elegxos psiksis enidriou void FanCheck(short int x) lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("check :"); lcd_gotoxy(0,2); lcd_putsf("fan check"); //anavoume gia 5" ta anemistirakia kai ta svinoume PORTD.5=1; if (x!=2) delay_ms(1000); lcd_putsf("."); delay_ms(1000); lcd_putsf("."); delay_ms(1000); lcd_putsf("."); delay_ms(1000); x++; if (x==1) FanCheck(2); if (x==1) lcd_gotoxy(0,3); lcd_putsf("ok"); delay_ms(1000); PORTD.5=0; 57

//elegxos thermansis enidriou void HeatCheck(short int x) lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("check :"); lcd_gotoxy(0,2); lcd_putsf("heater check"); //anavoume gia 5" ton thermostati kai ton svinoume PORTD.6=1; if (x!=2) delay_ms(1000); lcd_putsf("."); delay_ms(1000); lcd_putsf("."); delay_ms(1000); lcd_putsf("."); delay_ms(1000); x++; if (x==1) HeatCheck(2); if (x==1) lcd_gotoxy(0,3); lcd_putsf("ok"); delay_ms(1000); PORTD.6=0; //ektelei olous tous elegxous void AllChecks() LightCheck(0); FanCheck(0); HeatCheck(0); //ipologizei tin wra kai tin imerominia tou epomenou taismatos void nextfeed() int temph; temph=h+hpf; nfday=day; nfmonth=month; nfyear=year; //ean i epomeni wra taismatos einai panw apo 48 wres if (temph>48) //ean eimaste stin teleftaia mera tou mina if (lastday(nfyear,nfmonth)==nfday) //pame ston epomeno mina month++; //ean eimastan ston teleftaio mina if (month==13) 58

//pame ston prwto mina kai stin epomeni xronia month=1; year++; //pame stin defteri mera tou mina day=2; //alliws ean eimaste stin proteleftaia mera tou mina else if (lastday(nfyear,nfmonth)==nfday+1) //pame ston epomeno mina nfmonth++; //ean eimastan ston teleftaio mina if (nfmonth==13) //pame ston prwto mina kai stin epomeni xronia nfmonth=1; nfyear++; //pame stin prwti mera tou mina nfday=1; //alliws pame stin methepomeni mera else nfday=nfday+2; //afairoume 48wres apo tis wres tou epomenou taismatos nfh=temph-48; //alliws ean i epomeni wra taismatos einai panw apo 24 wres else if (temph>24) //ean eimaste stin teleftaia mera tou mina if (lastday(nfyear,nfmonth)==nfday) //pame ston epomeno mina nfmonth++; //ean eimastan ston teleftaio mina if (nfmonth==13) //pame ston prwto mina kai stin epomeni xronia nfmonth=1; nfyear++; //pame stin prwti mera tou mina nfday=1; //alliws pame stin epomeni mera else nfday++; //afairoume 24 wres apo tis wres tou epomenou taismatos nfh=temph-24; else //apothikevoume tin wra epomenou taismatos 59

nfh=temph; //rithmisi wras short int TimeConf() int tmp=1,tmp2=1; short int rv=1; while (tmp2<4) lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("time Manage :"); lcd_gotoxy(0,2); lcd_putsf("select Time :"); lcd_gotoxy(0,3); //ean epilegoume defterolepta if (tmp2==3) lcd_putsf("seconds :"); //ean epilegoume lepta else if (tmp2==2) lcd_putsf("minutes :"); //ean epilegoume wres else if (tmp2==1) lcd_putsf("hours :"); show_num(tmph,0); lcd_putsf(":"); show_num(tmpm,0); lcd_putsf(":"); show_num(tmps,0); tmp=counter+1; while (tmp>counter) //ean patithei enter i deksia if ( PINA.0==0 PINA.5==0 ) //pame sto epomeno menu delay_ms(500); tmp2++; //ean patithei to velaki aristera if ( PINA.3==0 ) //pame ena menu pisw delay_ms(500); if (tmp2>1) tmp2--; else delay_ms(500); lcd_clear(); return 1; 60

//ean patithei esc vgainoume teleiws apo to menu if ( PINA.4==0 ) delay_ms(500); lcd_clear(); return 2; defterolepto defterolepto //ean patithei to panw if ( PINA.1==0) delay_ms(500); //ean eimaste sta defterolepta prosthetoume ena if (tmp2==3) //ean ftasame ta 60 midenizoume ton metriti tmps++; if (tmps>=60) tmps=0; //ean eimaste sta lepta prosthetoume ena lepto if (tmp2==2) //ean ftasame ta 60 midenizoume ton metriti tmpm++; if (tmpm>=60) tmpm=0; //ean eimaste stis wres prosthetoume mia wra if (tmp2==1) //ean ftasame tis 24 midenizoume ton metriti tmph++; if (tmph>=24) tmph=0; //ean patithei to katw if ( PINA.2==0) delay_ms(500); //ean eimaste sta defterolepta afairoume ena if (tmp2==3) //ean ftasame sto 0 kanoume 59 ton metriti tmps--; if (tmps<0) tmps=59; //ean eimaste sta lepta afairoume ena lepto if (tmp2==2) //ean ftasame sto 0 kanoume 59 ton metriti tmpm--; if (tmpm<0) tmpm=59; 61

return 0; //ean eimaste stis wres afairoume mia wra if (tmp2==1) //ean ftasame sto 0 kanoume 23 ton metriti tmph--; if (tmph<0) tmph=23; delay_ms(100); lcd_gotoxy(10,3); rithmisi imerominias short int DateConf() int tmp=1,tmp2=1; short int rv=1; //gia oso den exoume oloklirwsei tin rithmisi imerominias while (rv==1) //gia 3 epanalipseis(mia gia tin mera mia gia ton mina mia gia tin xronia) while (tmp2<4) lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("date Manage :"); lcd_gotoxy(0,2); lcd_putsf("select Date :"); lcd_gotoxy(0,3); //ean epilegoume xronia if (tmp2==1) lcd_putsf("year :"); else //ean epilegoume mina if (tmp2==2) lcd_putsf("month :"); else //ean epilegoume mera if (tmp2==3) lcd_putsf("day :"); show_num(tmpday,0); lcd_putsf(":"); show_num(tmpmonth,0); lcd_putsf(":"); show_num(tmpyear,0); tmp=counter+1; while (tmp>counter) //ean patithei enter i deksia if ( PINA.0==0 PINA.5==0 ) 62

prwti //pame sto epomeno menu delay_ms(500); tmp2++; //ean patithei to velaki aristera if ( PINA.3==0 ) //pame ena menu pisw delay_ms(500); if (tmp2>1) tmp2--; else delay_ms(500); lcd_clear(); return 1; //ean patithei esc vgainoume teleiws apo to menu if ( PINA.4==0 ) delay_ms(500); lcd_clear(); return 2; //ean patithei to panw if ( PINA.1==0) delay_ms(500); //ean eimaste stin mera prosthetoume mia mera if (tmp2==3) tmpday++; //ean eimaste stin teleftaia tou mina pame stin if (tmpday-1==lastday(tmpyear,tmpmonth)) tmpday=0; //ean eimaste ston mina prosthetoume ena mina if (tmp2==2) tmpmonth++; //ean eimaste ston teleftaio pame ston prwto if (tmpmonth>=12) tmpmonth=0; //ean eimaste stin xronia prosthetoume mia xronia if (tmp2==1) tmpyear++; //ean patithei to katw if ( PINA.2==0) delay_ms(500); //ean eimaste stin mera afairoume mia mera if (tmp2==3) tmpday--; 63

teleftaia //an eimaste stin prwti tou mina, pame stin if (tmpday<=0) tmpday=lastday(tmpyear,tmpmonth); //ean eimaste ston mina afairoume ena mina if (tmp2==2) tmpmonth--; //ean eimaste ston prwto pame ston teleftaio if (tmpmonth<=0) tmpmonth=12; //ean eimaste stin xronia afairoume mia xronia if (tmp2==1) tmpyear--; delay_ms(100); lcd_gotoxy(10,3); delay_ms(500); //kaloume tin sinartisi rithmisis wra rv=timeconf(); //an mas epistrepsei -1 ksanarithizoume xronia if (rv==1) tmp2--; //ean mas epistrepsei 2 vgainoume teleios apo to menou xwris na apothikefsoume tipota if (rv==2) return 2; //s=counter*2; return 0; short int AverTemp() int tmp=1; short int rv=1; //mexri na ginoun oi rithmiseis while (rv==1) //mexri na patithei enter i deksia while (PINA.0==1 && PINA.5==1) //rithmizoume tin mesi thermokrasia lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("auto Temp :"); lcd_gotoxy(0,2); 64

lcd_putsf("select Average :"); lcd_gotoxy(0,3); lcd_putsf("temperature :"); show_num(tmpavtmp,0); tipota tmp=counter+1; while (tmp>counter) //ean patithei to velaki aristera if ( PINA.3==0 ) //pame ena vima pisw sto menu delay_ms(500); lcd_clear(); return 1; //ean patithei to esc if ( PINA.4==0 ) //vgainoume apo to menu xwris na apothikefsoume delay_ms(500); lcd_clear(); return 2; //ean patithei to epanw velaki if ( PINA.1==0) //prosthetoume 1 stin thermokrasia delay_ms(500); tmpavtmp++; //ean patithei to katw velaki if ( PINA.2==0) //afairoume 1 stin thermokrasia delay_ms(500); tmpavtmp--; //dinoume oria apo 15-35 vathmous if (tmpavtmp>35) tmpavtmp=35; if (tmpavtmp<15) tmpavtmp=15; delay_ms(100); lcd_gotoxy(10,3); delay_ms(100); delay_ms(500); //kaloume tin rithmisi imerominias rv=dateconf(); //ean epistrepsei 2 den apothikevoume tipota kai vgainoume apo to menu if (rv==2) return 2; return 0; 65

//emfanisei keimenou menu posotitas void ShowQuant(int x) if (x==1) lcd_putsf("low"); else if (x==2) lcd_putsf("medium"); else if (x==3) lcd_putsf("high"); short int FeederQuant() int tmp; short int rv=1; tmpquan=1; while (rv==1) while (PINA.0==1 && PINA.5==1 ) lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("automatic Feeder :"); lcd_gotoxy(0,2); lcd_putsf("select Quantity :"); lcd_gotoxy(0,3); lcd_putsf("quantity :"); ShowQuant(tmpquan); tipota tipota tmp=counter+1; while (tmp>counter) //ean patithei to velaki aristera if ( PINA.3==0 ) //vgainoume apo to menu xwris na apothikefsoume delay_ms(500); lcd_clear(); return 1; //ean patithei to esc if ( PINA.4==0 ) //vgainoume apo to menu xwris na apothikefsoume delay_ms(500); lcd_clear(); return 2; //ean patithei to epanw velaki if ( PINA.1==0) //prosthetoume 1 stin posotita taismatos 66

delay_ms(500); tmpquan++; //ean patithei to epanw velaki if ( PINA.2==0) //afairoume 1 apo tin posotita taismatos delay_ms(500); tmpquan--; //dinoume oria apo 1-3 fores if (tmpquan>3) tmpquan=3; if (tmpquan<1) tmpquan=1; delay_ms(100); lcd_gotoxy(10,3); delay_ms(100); delay_ms(500); //kaloume tin rithmisi mesis thermokrasias rv=avertemp(); //ean epistrepsei 2 den apothikevoume tipota kai vgainoume apo to menu if (rv==2) return 2; counter=0; return 0; //menu ana poses wres taisma short int FeederConf() int tmp; short int rv=1; tmphpf=0; while (rv==1) lcd_clear(); lcd_gotoxy(1,0); lcd_putsf("*** AquaSenses ***"); lcd_gotoxy(0,1); lcd_putsf("automatic Feeder :"); lcd_gotoxy(0,2); lcd_putsf("select Hours/Feed :"); lcd_gotoxy(0,3); lcd_putsf("hours : "); //mexri na patithei enter i deksia while (PINA.0==1 && PINA.5 ==1 ) show_num(tmphpf,0); tmp=counter+1; 67

while (tmp>counter) //ean patithei aristera i esc if (PINA.3==0 PINA.4==0) //prosthetoume stin wra mas tin wra pou den metrousame oso eimastan sto menu (defterolepta,lepta,wres,meres,mines kai xronia) m+=(counter/2)/60; if (m>60) h++; if (h>23) if (day==lastday(year,month)) day=0; if (month==12) month=0; year++; else day++; m-=60; counter=counter%120; return; delay_ms(500); return; //ean patithei to panw velaki if ( PINA.1==0) //prosthetoume mia wra sto ana poses wres tha taizei delay_ms(500); tmphpf++; //ean patithei to katw velaki if ( PINA.2==0) //afairoume mia wra sto ana poses wres tha taizei delay_ms(500); tmphpf--; //vazoume oria 0-48 wres if (tmphpf>48) tmphpf=0; if (tmphpf<0) tmphpf=48; delay_ms(100); lcd_gotoxy(8,3); delay_ms(500); //kaloume tin rithisi posotitas taismatos 68