Περιεόμενα
1 Θέμα 1
1.1 Γενική Περιραφή Θέματος . . . 1
2 Υικά 1 2.1 Εξαρτήματα και Τενοοίες . . . 1
2.2 Συνδεσμοοία . . . 2
3 Arduino 5 3.1 Μικροεεκτής - η καρδιά του Arduino . . . 8
3.2 Είσοδοι - Έξοδοι . . . 8
3.3 Τροφοδοσία . . . 10
3.4 Ενσματμένα κουμπιά και LED . . . 11
3.5 Arduino IDE και σύνδεση με τον υποοιστή . . . 11
3.6 Γώσσα προραμματισμού . . . 12
3.7 Shields . . . 13
4 Λειτουρία Μικροεπεξεραστή 15 4.1 Αόριμος Λήψης Απόφασης . . . 15
4.2 Χειροκίνητη Λειτουρία . . . 16
5 Κώδικας Arduino 18 5.1 Αποστοή μηνύματος . . . 18
5.2 Ενεροποιήση GPRS και άντηση μετεροοικών μετρήσεν . . . 18
5.3 Έεος ια εισερόμενα SMS . . . 21
6 Εφαρμοή Android 22 6.1 Γενική Λειτουρία . . . 22
6.2 Επεξήηση ασικότερν τμημάτν του κώδικα . . . 23
6.2.1 Αρικοποιήση εφαρμοής . . . 23
6.2.2 Αποστοή μηνύματος . . . 24
6.2.3 Λήψη και εμφάνιση μετρήσεν . . . 24
7 Hardware 26 7.1 Έεος του DC κινητήρα . . . 26
7.1.1 Μικροεεκτής . . . 26
7.1.2 Οοκηρμένο κύκμα ια την οδήηση του κινητήρα . . . 26
7.1.3 Δίοδοι . . . 27
7.1.4 Κινητήρας . . . 27
7.2 Στήνοντας το σύστημα εέου του κινητήρα . . . 27
8 Μακέτα 30
9 Όος ο κώδικας του Arduino 35
10 Όος ο κώδικας του Android 42
10.1 Application . . . 42
10.2 MainActivity . . . 43
10.3 Broadcast Receivers . . . 44
10.4 PreferenceAcitivity and other Java classes . . . 46
11 Arduino Manual 53 11.1 Overview . . . 53
11.2 Power . . . 53
11.3 Memory . . . 54
11.4 EEPROM Library . . . 54
11.5 Input and Output . . . 54
11.6 Communication . . . 56
11.7 Programming . . . 57
11.8 Automatic (Software) Reset . . . 57
11.9 USB Overcurrent Protection . . . 58
11.10Physical Characteristics . . . 58
12 HTTP Requests 59 12.1 What’s an HTTP request . . . 59
12.2 Analysis . . . 59
12.3 Summary . . . 59
13 Οδηίες Χρήσης - Εκατάστασης 61
14 Οδηίες Εκατάστασης εφαρμοής σε κινητό Android 62
15 Συμπεράσματα - Μεοντική ρήση 63
Περίηψη
Στο παίσιο αυτής της πτυιακής ερασίας δημιουρήηκε ένα σύστημα εέου κι- νητήρα τέντας καώς και μία μακέτα ια την προσομοίση αυτής. Το σύστημα εέ-
ου αποτεείται από επεξεραστή Arduino Uno, Arduino GSM module, ερμίστορ και φτοαντίσταση. Στόος του είναι να παίρνει αν τακτά ρονικά διαστήματα μετρήσεις
ερμοκρασίας και φτεινότητας ια την κοντινή περιοή της τέντας καώς και άες μετεροοικές προέψεις ια την ευρύτερη περιοή μέσ server και άσει αυτών να
αμάνει αποφάσεις ια την έση της τέντας. Το σύστημα ενημερώνει τον κάτοο της τέντας ια τις καιρικές συνήκες μέσ android εφαρμοής και του δίνει τη δυνατότητα να ορίσει την κατάσταση της τέντας.
Summary
As a part of the current thesis, a motor control system of an awning was developed, as well as a model in order to simulate the system. The control system is consisted of an AVR microprocessor on an Arduino Uno board, an Arduino GSM module, a thermistor and a photoresistor. The goal of this system is to measure, at regular intervals, the temperature and the luminosity near the awning and, also, receive the weather forecast for the surrounding area via a server in order to make decisions about the position of the awning. This system can also inform the holder of the awning about the weather conditions through an android application and also gives him the ability to set the desired awning’s position.
1 Θέμα
Έεος τεντών κατοικίας με ρήση Arduino μέσ GSM με εφαρμοή Android σε κινητό τηέφνο.
1.1 Γενική Περιραφή Θέματος
Σε μια εποή που η τενοοία έει μπει ια τα καά στην ζή μας, εμφανίζονται οο- ένα και περισσότερες ανάκες οι οποίες διευκούνουν και ανεάζουν το ιτικό επίπεδο του ανρώπου. Η έννοια του ”έξυπνου σπιτιού” είναι μια από αυτές τις τενοοίες που προσπαεί να εξοικονομήσει ενέρεια, ρήματα και ενικά να διευκούνει το νοικοκυριό.
Στα παίσια του έξυπνου σπιτιού η ερασία αυτή παρουσιάζει μια ύση ια τον έεο τέντας από απόσταση, με την ρήση GSM/GPRS τενοοίας, Arduino και smartphone με οισμικό Android.
Μια ενική εικόνα του συστήματος είναι η ειτουρία του Arduino ς το κεντρικό σύστημα εέου. Δηαδή, το Arduino αμάνει τις κιματοοικές συνήκες που επι- κρατούν στην περιοή και αναός αποφασίζει εάν η τέντα πρέπει να παραμείνει ανοι- κτή ή κειστή. Το Arduino απο μόνο του δεν διαέτει την τενοοία GSM/GPRS και
ι’αυτό συνδέεται πάν του ένα modem κινητής τηεφνίας το οποίο αποκαείται και GSM shield. Τώρα που ο κεντρικός εεκτής έει την δυνατότητα να επικοιννεί με το δίκτυο κινητής τηεφνίας και άρα και με το Internet αμάνει τις πηροφορίες ια τις κιματοοικές συνήκες από εκεί. Ωστόσο, στο Arduino προστέηκαν και δύο αιση- τήρες ερμοκρασίας και φτεινότητας ια μια καύτερη εκτίμηση τν καιρικών συνηκών που επικρατούν τοπικά. Η εφαρμοή ια κινητό Android παρέει στον ρήστη της την δυνατότητα παρακοούησης της έσης της τέντας και τν καιρικών συνηκών με άση τα οποία πήρε ο εεκτής την απόφαση. Επίσης του δίνει την ευκαιρία να ανεάσει/κατεά- σει την τέντα παρακάμπτντας το σύστημα εέου. Το Arduino εέει έναν οδηητή κινητήρα ια το άνοιμα/κείσιμο της τέντας.
2 Υικά
Αν και παραπάν αναφέρονται αρκετά από τα υικά και τις τενοοίες που ρησιμο- ποιήηκαν, παρακάτ ακοουεί μια αναυτική περιραφή του κάε υικού.
2.1 Εξαρτήματα και Τενοοίες
Arduino Είναι μια οικοένεια πακετών ανάπτυξης με επεξεραστή Atmel AVR. Στη ερασία αυτή ρησιμοποιήηκε το Arduino Uno με επεξεραστή ATmega328, 32kB flash memory, 2kB RAM, 1kB EEPROM. To Arduino διαέτει ένα περιάον ανάπτυξης οισμικού και η προραμματιστική ώσσα που ρησιμοποιείται είναι ένας συνδιασμός C/C++.
GSM Shield Για την οικοένεια πακετών ανάπτυξης Arduino έουν δημιουρηεί ποά περιφερειακά σε μορφή έτοιμης πακέτας και τα ονομάζουνε shield. Αυτά, προσφέ-
ρουν διάφορες ειτουρικότητες και σε αυτή την περίπτση σύνδεση με το δίκτυο κινητής τηεφνίας. Το GSM shield προσφέρει σύνδεση σε GSM/GPRS δίκτυο και στην ερασία αυτή ρησιμοποιείται ια να συνδέεται στο Internet και ια να
αμάνει/στένει SMS από/πρός την εφαρμοή Android.
Motor Στην αηινό σενάριο α έπρεπε να είναι ένας κινητήρας διαστασιοοημένος στο να μπορεί να κινήσει την τέντα. Ωστόσο, σε επίπεδο προσομοίσης ρησιμοποιήηκε ένα μικρό DC κινητηράκι με ονομαστική τάση 5V και ονομαστικό ρεύμα κανονικής
ειτουρίας 0.4Α.
L293d Είναι ένα τσιπάκι της εταιρίας Texas Instruments και ειτουρεί σαν οδηητής
ια DC κινητήρες με αρακτηριστικά όμοια με αυτά που περιράφονται παραπάν.
Το τσιπάκι δίνει την δυνατότητα εέου της φοράς περιστροφής του κινητήρα.
Δίοδος Χρησιμοποιούνται σε συνδεσμοοία έφυρας ια τον έεο του κινητήρα.
Αισητήρας Φτεινότητας Είναι μια απή αά φτοευαίσητη αντίσταση. Η τιμή της αάζει όταν εκτεεί στο φς.
Αισητήρας ερμοκρασίας Είναι ένα ραμμικό αισητήριο ερμοκρασίας που ρησιμο- ποιείται ια την μέτρηση περιαοντικών ερμοκρασιών.
Smartphone Android Έξυπνο κινητό τηέφνο με οισμικό Android. To Android είναι ένα οισμικό τύπου ανοικτού κώδικα και παρέει δρεάν περιάον ανά- πτυξης οισμικού καώς και η ώσσα προραμματισμού είναι η Java με κάποιες
ιιοήκες που απευύνονται στο Android.
Raster Μια πακέτα ανάπτυξης ηεκτρικών/ηεκτρονικών κυκμάτν. Δίνει την δυ- νατότητα στο ηεκτροόο μηανικό να πειραματιστεί και να τεστάρει το σύστημα του.
Μακέτα Με σκοπό τον έεο της εύρυμης ειτουρίας του συστήματος σεδιάστηκε μια μακέτα σε μικρή κίμακα και προσομοιώνει την κανονική ειτουρία του συ- στήματος εέου της τέντας.
2.2 Συνδεσμοοία
Στο σήμα 2 φαίνεται το οικό διάραμμα του συστήματος. Η ραμμή που ενώνει δύο
οικά μποκ δείνει την δίοδο επικοιννίας μεταξύ τν δύο μποκ.
Στο σήμα 3 φαίνεται η πραματική συνδεσμοοία πάν στο Raster.
Σήμα 1: Arduino με GSM Shield
Σήμα 2: Λοικό μποκ
Σήμα 3: Συνδεσμοοία σε Raster (ρίς τον Arduino)
(αʹ) Δίοδος (ʹ) Φτορεσίστορ (μέτρηση φ- τεινότητας)
(ʹ) Συσκευή Android
Σήμα 4: Εξαρτήματα
Σήμα 5: Arduino
3 Arduino
Όπς το περιράφει ο δημιουρός του, το Arduino είναι μια ανοικτού κώδικα πατ- φόρμα πρτοτυποποίησης ηεκτρονικών ασισμένη σε ευέικτο και εύκοο στη ρήση hardware και software που προορίζεται ια οποιονδήποτε έει ίη προραμματιστική εμπειρία, στοιειώδεις νώσεις ηεκτρονικών και ενδιαφέρεται να δημιουρήσει διαδρα- στικά αντικείμενα ή περιάοντα.
Το Arduino Duemilanove, όπς προδίδει και το όνομά του (που στα ιταικά είναι ο αριμός 2009 οοράφς), είναι η πιο πρόσφατη ασική έκδοση του Arduino.Στην ουσία, πρόκειται ια ένα ηεκτρονικό κύκμα που ασίζεται στον μικροεεκτή ATmega της Atmel και του οποίου όα τα σέδια, καώς και το software που ρειάζεται ια την
ειτουρία του, διανέμονται εεύερα και δρεάν ώστε να μπορεί να κατασκευαστεί από τον καένα (απ’ όπου και ο περίερος -ια hardware- αρακτηρισμός ανοικτού κώδικα).
Αφού κατασκευαστεί, μπορεί να συμπεριφερεί σαν ένας μικροσκοπικός υποοιστής, αφού ο ρήστης μπορεί να συνδέσει επάν του ποαπές μονάδες εισόδου/εξόδου και να προραμματίσει τον μικροεεκτή να δέεται δεδομένα από τις μονάδες εισόδου, να τα επεξεράζεται και να στένει κατάηες εντοές στις μονάδες εξόδου. Μάιστα κάποιος α μπορούσε να ισυριστεί - και α ήταν ένας αρκετά πετυημένος παραηισμός - ότι ειτουρικά το Arduino μοιάζει πού με το NXT Brick τν Lego Mindstorms NXT. Άστε η ρομποτική είναι μια από τις ποές εφαρμοές στις οποίες το Arduino διαπρέπει.
Το Arduino έαια, δεν είναι ούτε ο μοναδικός, ούτε και ο καύτερος δυνατός τρόπος
ια την δημιουρία μιας οποιασδήποτε διαδραστικής ηεκτρονικής συσκευής. Όμς το κύριο πεονέκτημά του είναι η τεράστια κοινότητα που το υποστηρίζει και η οποία έει δημιουρήσει, συντηρεί και επεκτείνει μια ανάοου μεέους online νσιακή άση.
Έτσι, παρότι ένας έμπειρος ηεκτρονικός μπορεί να προτιμήσει διαφορετική πατφόρμα ή εξαρτήματα ανάοα με την εφαρμοή που έει στον νου του, το Arduino, με το εκτενές documentation, καταφέρνει να κερδίσει όους αυτούς τν οποίν οι νώσεις στα ηεκτρονικά περιορίζονται στα όσα ία έμααν στο σοείο.
Η αορά ενός πήρους Starter Kit, όπς αυτό της εικόνας, συνιστάται έντονα -αντί μιας σκέτης πακέτας Arduino- αν αυτή είναι η πρώτη σας επαφή με ηεκτρονικά.Ακριώς επειδή απευύνεται κυρίς σε αράριους τν ηεκτρονικών και επειδή, παρά τις αναυτι- κότατες οδηίες που υπάρουν, δεν έουν όοι τις νώσεις και τα μέσα να κατασκευάσουν μια ηεκτρονική πακέτα, κυκοφορούν έτοιμες, προκατασκευασμένες πακέτες Arduino που μπορείτε να προμηευτείτε ια περίπου €25. Με ία ρήματα παραπάν μάιστα, οι περισσότεροι προμηευτές διαέτουν Arduino Starter Kit, τα οποία, εκτός από το ίδιο το Arduino, περιέουν διάφορα άα εξαρτήματα και εραεία που μπορεί να ρειαστείτε
ια τις πρώτες σας εφαρμοές (όπς το απαραίτητο καώδιο USB ια την σύνδεση με τον υποοιστή, ράστερ, καώδια, LED, διακόπτες, ποτενσιόμετρα, αντιστάσεις, διόδους, τρανζίστορ κ.π.).
Μπορείτε να ρείτε μια ίστα με προμηευτές του Arduino σε όο τον κόσμο, κάνοντας κικ στον σύνδεσμο Buy στον επίσημο ιστοτόπο του Arduino. Στην ίστα δεν υπάρ-
ει έηνας προμηευτής αά ποά καταστήματα του εξτερικού στένουν και στην Εάδα με αρκετά οικά μεταφορικά κόστη. Αν πάι έετε οπσδήποτε να το προμη-
ευτείτε από την Εάδα, το εηνικό ηεκτρονικό κατάστημα BuyARobot διαέτει το Arduino αά δεν διαέτει Starter Kit ή συνοδευτικά shield (α διαάσετε ια αυτά σε σετικό παίσιο στην συνέεια).
Το LilyPad είναι μια από τις ποές εκδόσεις Arduino που κυκοφορούν. Όσο τρεό και αν ακούεται, προορίζεται ια διαδραστικές εφαρμοές πάν στα ρούα σας! Ράεται πάν σε αυτά, επικοιννεί μέσ ειδικής αώιμης κστής με ανάοους αισητήρες που είναι ραμμένοι σε διαφορετικά σημεία και είναι ασφαές ακόμα και… στο πύσιμο!Αυτό που μπορεί να σας μπερδέψει ψάνοντας να αοράσετε το Arduino σε αυτά τα καταστή- ματα είναι οι διαφορετικές εκδόσεις στις οποίες κυκοφορεί, επίσημες και ανεπίσημες.
Από τις επίσημες εκδόσεις (Duemilanove, Diecimila, Nano, Mega, Bluetooth, LilyPad, Mini, Mini USB, Pro, Pro Mini, Serial και Serial SS) συνιστάται κυρίς η αορά του Arduino Duemilanove ή τουάιστον τν Diecimila ή Mega επειδή διαέτουν υποδοή USB και είναι συματές με τα shield. Για τους ίδιους όους, από τις ανεπίσημες εκδό- σεις (Freeduino, Boarduino, Sanguino, Seeeduino, BBB, RBBB κ.α.) συνιστάται μόνο το Freeduino v1.16 και το Seeeduino. Δείτε το σετικό παίσιο με τις κυριότερες διαφο- ρές ανάμεσα στις εκδόσεις που προτείνονται εδώ.
Εκτός και αν επισημανεί διαφορετικά, όσα α αναφερούν παρακάτ αφορούν την πέον πρόσφατη ασική έκδοση του Arduino, δηαδή το Arduino Duemilanove.
Σήμα 6: Βασικά υικά ια τη ειτουρία ενός Arduino
Σήμα 7: Είσοδοι & Έξοδοι Arduino
3.1 Μικροεεκτής - η καρδιά του Arduino
Το Arduino ασίζεται στον ATmega328, έναν 8-bit RISC μικροεεκτή, τον οποίο
ρονίζει στα 16MHz. Ο ATmega328 διαέτει ενσματμένη μνήμη τριών τύπν:
• 2Kb μνήμης SRAM που είναι η φέιμη μνήμη που μπορούν να ρησιμοποιήσουν τα προράμματά σας ια να αποηκεύουν μεταητές, πίνακες κ.π. κατά το runtime.
Όπς και σε έναν υποοιστή, αυτή η μνήμη άνει τα δεδομένα της όταν η παροή ρεύματος στο Arduino σταματήσει ή αν ίνει reset.
• 1Kb μνήμης EEPROM η οποία μπορεί να ρησιμοποιηεί ια μή εραφή/α- νάνση δεδομένν (ρίς datatype) ανά byte από τα προράμματά σας κατά το runtime. Σε αντίεση με την SRAM, η EEPROM δεν άνει τα περιεόμενά της με απώεια τροφοδοσίας ή reset οπότε είναι το ανάοο του σκηρού δίσκου.
• 32Kb μνήμης Flash, από τα οποία τα 2Kb ρησιμοποιούνται από το firmware του Arduino που έει εκαταστήσει ήδη ο κατασκευαστής του. Το firmware αυτό που στην οροοία του Arduino ονομάζεται bootloader είναι ανακαίο ια την εκα- τάσταση τν δικών σας προραμμάτν στον μικροεεκτή μέσ της ύρας USB,
ρίς δηαδή να ρειάζεται εξτερικός hardware programmer. Τα υπόοιπα 30Kb της μνήμης Flash ρησιμοποιούνται ια την αποήκευση αυτών ακριώς τν προ-
ραμμάτν, αφού πρώτα μεταττιστούν στον υποοιστή σας. Η μνήμη Flash, όπς και η EEPROM δεν άνει τα περιεόμενά της με απώεια τροφοδοσίας ή reset. Επίσης, ενώ η μνήμη Flash υπό κανονικές συνήκες δεν προορίζεται ια
ρήση runtime μέσα από τα προράμματά σας, ό της μικρής συνοικής μνή- μης που είναι διαέσιμη σε αυτά (2Kb SRAM + 1Kb EEPROM), έει σεδιαστεί μια ιιοήκη που επιτρέπει την ρήση όσου ώρου περισσεύει (30Kb μείον το μέεος του προράμματός σας σε μεταττισμένη μορφή).
3.2 Είσοδοι - Έξοδοι
Καταρήν το Arduino διαέτει σειριακό interface. Ο μικροεεκτής ATmega υποστη- ρίζει σειριακή επικοιννία, την οποία το Arduino προεί μέσα από έναν εεκτή Serial- over-USB ώστε να συνδέεται με τον υποοιστή μέσ USB. Η σύνδεση αυτή ρησιμο- ποιείται ια την μεταφορά τν προραμμάτν που σεδιάζονται από τον υποοιστή στο Arduino αά και ια αμφίδρομη επικοιννία του Arduino με τον υποοιστή μέσα από το πρόραμμα την ώρα που εκτεείται. Η ανατομία ενός Arduino Duemilanove.Επιπέον, στην πάν πευρά του Arduino ρίσκονται 14 ηυκά pin, αριμημένα από 0 ς 13, που μπορούν να ειτουρήσουν ς ψηφιακές είσοδοι και έξοδοι. Λειτουρούν στα 5V και καένα μπορεί να παρέει ή να δετεί το πού 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 σε κάποιο από αυτά τα 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 αντίστοια.
3.3 Τροφοδοσία
Το Arduino μπορεί να τροφοδοτηεί με ρεύμα είτε από τον υποοιστή μέσ της σύνδεσης USB, είτε από εξτερική τροφοδοσία που παρέεται μέσ μιας υποδοής φις τν 2.1mm (ετικός πόος στο κέντρο) και ρίσκεται στην κάτ-αριστερή νία του Arduino.
Για εφαρμοές μακριά από τον υποοιστή α ρειαστείτε ένα μετασηματιστή -σαν αυτό της εικόνας- ια να τροφοδοτήσετε το Arduino με ρεύμα. Μπορείτε να ρησιμο- ποιήσετε ένα παιό φορτιστή ή ένα τροφοδοτικό που σας έει περισσέψει από κάποια άη συσκευή, αρκεί να παρέει από 7 ς 12 Volt.Αν πάι έετε μια εντεώς αυτόνομη εφαρμοή που δεν εξαρτάται ούτε από πρίζα, μια κοινή μπαταρία τν 9 Volt συνδεδε- μένη όπς στην εικόνα είναι η ιδανική τροφοδοσία. Για να μην υπάρουν προήματα, η εξτερική τροφοδοσία πρέπει να είναι από 7 ς 12V και μπορεί να προέρεται από ένα κοινό μετασηματιστή του εμπορίου, από μπαταρίες ή οποιαδήποτε άη πηή DC. Δίπα από τα pin αναοικής εισόδου, υπάρει μια ακόμα συστοιία από 6 pin με την σήμανση POWER. Η ειτουρία του καενός έει ς εξής:
• Το πρώτο, με την ένδειξη 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.
3.4 Ενσματμένα κουμπιά και LED
Πάν στην πακέτα του Arduino υπάρει ένας διακόπτης micro-switch και 4 μικρο- σκοπικά LED επιφανειακής στήριξης. Η ειτουρία του διακόπτη (που έει την σήμανση RESET) και του ενός LED με την σήμανση POWER είναι μάον προφανής. Τα δύο LED με τις σημάνσεις TX και RX, ρησιμοποιούνται ς ένδειξη ειτουρίας του σειρια- κού interface, καώς ανάουν όταν το Arduino στένει ή αμάνει (αντίστοια) δεδομένα μέσ USB. Σημειώστε ότι τα LED αυτά εέονται από τον εεκτή Serial-over-USB και συνεπώς δεν ειτουρούν όταν η σειριακή επικοιννία ίνεται αποκειστικά μέσ
τν ψηφιακών pin 0 και 1. Τέος, υπάρει το LED με την σήμανση L. Η ασική δοκιμή
ειτουρίας του Arduino είναι να του αναέσετε να αναοσήνει ένα LED (α το δείτε αυτό στην συνέεια όταν α φτιάξετε την πρώτη εφαρμοή σας). Για να μπορείτε να το κάνετε αυτό από την πρώτη στιμή, ρίς να συνδέσετε τίποτα πάν στο Arduino, οι κατασκευαστές του σκέφτηκαν να ενσματώσουν ένα LED στην πακέτα, το οποίο σύνδεσαν στο ψηφιακό pin 13. Έτσι, ακόμα και αν δεν έετε συνδέσει τίποτα πάν στο φυσικό pin 13, αναέτοντάς του την τιμή HIGH μέσα από το πρόραμμά σας, α ανάψει αυτό το ενσματμένο LED.
3.5 Arduino IDE και σύνδεση με τον υποοιστή
Ότι ρειάζεστε ια την διαείριση του Arduino από τον υποοιστή σας το παρέει το Arduino IDE, την τεευταία έκδοση του οποίου μπορείτε να κατεάσετε από το επίσημο site ια καένα από τα τρία δημοφιέστερα ειτουρικά συστήματα.
Το Arduino IDE είναι ασισμένο σε Java και συκεκριμένα παρέει:Το κεντρικό πα- ράυρο του Arduino IDE ρίζεται σε δύο μέρη. Στο πάν μέρος ράφετε τα sketch σας και στο κάτ μέρος εμφανίζονται πιανά άη κατά την διαδικασία της μεταώττισης.
Αμέσς μετά την πρώτη του εκτέεση, δηώστε την έκδοση του Arduino σας (όπς φαίνεται στην εικόνα) και την εικονική σειριακή που ρησιμοποιεί.
ένα πρακτικό περιάον ια την συραφή τν προραμμάτν σας (τα οποία ονομά- ζονται sketch στην οροοία του Arduino) με συντακτική ρματική σήμανση, αρκετά έτοιμα παραδείματα, μερικές έτοιμες ιιοήκες ια προέκταση της ώσσας και ια να
ειρίζεστε εύκοα μέσα από τον κώδικά σας τα εξαρτήματα που συνδέετε στο Arduino, τον compiler ια την μεταώττιση τν sketch σας, ένα serial monitor που παρακοουεί τις επικοιννίες της σειριακής (USB), ανααμάνει να στείει αφαριμητικά της επιο-
ής σας στο Arduino μέσ αυτής και είναι ιδιαίτερα ρήσιμο ια το debugging τν sketch σας και την επιοή να ανεάσετε το μεταττισμένο sketch στο Arduino.
Για τα δύο τεευταία αρακτηριστικά έαια, το Arduino πρέπει να έει συνδεεί σε μια από τις ύρες USB του υποοιστή και, ό του εεκτή Serial-over-USB, α πρέπει να ανανριστεί από το ειτουρικό σας σύστημα ς εικονική σειριακή ύρα. Αν ο οδηός του εεκτή Serial-over-USB είναι σστά εκατεστημένος στα Windows, το Arduino
α ανανρίζεται από τον Device Manager όπς στην εικόνα. Εκεί μπορείτε να δείτε και τον αριμό της εικονικής σειριακής ύρας που του ανατέηκε.Για την σύνδεση α
ρειαστείτε ένα καώδιο 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). Επιέξτε αυτή την εικονική ύρα και στην συνέεια επιέξτε τον τύπο του Arduino σας (Arduino Duemilanove w/ ATmega328) από το μενού Tools –> Board. Το Arduino είναι πέον έτοιμο να δετεί τα sketch σας.
Αν εμφανίστηκε οποιοδήποτε πρόημα διαάστε τις αναυτικές οδηίες εκατάστασης
ια κάε ειτουρικό σύστημα στη διεύυνση http://arduino.cc/en/Guide/HomePage.
3.6 Γώσσα προραμματισμού
Η ώσσα του Arduino ασίζεται στη ώσσα Wiring, μια παρααή C/C++ ια μικροεεκτές αριτεκτονικής AVR όπς ο ATmega, και υποστηρίζει όες τις ασικές δομές της C καώς και μερικά αρακτηριστικά της C++. Για compiler ρησιμοποιείται ο AVR gcc και ς ασική ιιοήκη C ρησιμοποιείται η AVR libc. Λό της καταής της από την C, στην ώσσα του Arduino μπορείτε να ρησιμοποιήσετε ουσιαστικά τις ίδιες ασικές εντοές και συναρτήσεις, με την ίδια σύνταξη, τους ίδιους τύπν δεδομένν και τους ίδιους τεεστές όπς και στην C. Πέρα από αυτές όμς, υπάρουν κάποιες ειδικές εντοές, συναρτήσεις και σταερές που οηούν ια την διαείριση του ειδικού hardware του Arduino.
Επιπέον, στην ώσσα του Arduino κάε πρόραμμα αποτεείται από δύο ασικές ρουτίνες ώστε να έει την ενική δομή: // Ενσματώσεις ιιοηκών, δηώσεις μετα-
ητών...
void setup() {
// ...
}
void loop() {
// ...
}
// Υπόοιπεςσυναρτήσεις...
Η ασική ρουτίνα setup() εκτεείται μια φορά μόνο κατά την εκκίνηση του προράμ- ματος ενώ η ασική ρουτίνα loop() περιέει τον ασικό κορμό του προράμματος και η εκτέεσή της επανααμάνεται συνέεια σαν ένας ρόος while(true). Αν και πρόκειται μόνο ια τις πιο ασικές ειτουρίες της ώσσας του Arduino, με αυτές και με ίες α- σικές νώσεις C α μπορέσετε να δημιουρήσετε το sketch ακόμα και ια κάποιο αρκετά περίποκο project (όπς αυτά που α ακοουήσουν σε επόμενα τεύη). Για το πήρες
reference πάντς, επισκεφτείτε την σετική σείδα ενώ ακόμα περισσότερες πηροφορίες μπορείτε να ρείτε στο site της Wiring καώς και στο εειρίδιο της ιιοήκης AVR Libc.
3.7 Shields
Τα 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.
Τα 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 σας.
Τα shield σας ύνουν τα έρια όταν έετε να δημιουρήσετε εύκοα ένα πραματικά πρακτικό project. Αυτός είναι και ο όος που δεν συνιστάται η αορά κάποιας έκδοσης του Arduino που δεν είναι 100% συματή με τα shield.
4 Λειτουρία Μικροεπεξεραστή
Σε αυτήν την ενότητα α περιραφεί ο αόριμος που ρησιμοποιήηκε, τεικά, ια τη
ήψη απόφασης από τον μικρο-εεκτή συναρτήσει τν τιμών τν δεδομένν που ανα-
νώσηκαν είτε από τοπικές μετρητικές διατάξεις, είτε από τοAPI τουOpenWeatherMap.
4.1 Αόριμος Λήψης Απόφασης
Η οική σε μορφή σεδιαράμματος φαίνεται στο σήμα 8.
Σήμα 8: Αόριμος ήψης απόφασης σε μορφή σεδιαράμματος
Επιπέον, ο αντίστοιος κώδικας ια την υοποίηση του παραπάν αορίμου, είναι ο ακόουος:
boolean decisionMaking(){
if (wind>=10.5){
return false;
}else{
if (temperature<=273){
return false;
}else{
if (precipitation==true){
return true;
}else{
if (humidity>=80){
return true;
}else{
if (luminosity<20000){
return false;
}else{
return true;
} } } } } }
Έτσι, αρικά κοιτάμε αν ο αέρας είναι μεαύτερος του 10.5m/s (που αντιστοιεί σε περισσότερο από 6 μποφόρ) και αν ισύει δεν την ανοίουμε. Στη συνέεια, αν η ερμο- κρασία είναι μικρότερη τν 273 Kelvin (δηαδή 0◦ Celcius), τότε και πάι δεν ανοίει η τέντα, καώς υπάρει κίνδυνος πάου. Έπειτα, αν ρέει ανοίει, ενώ, στην αντίετη περίπτση, αν η σετική υρασία είναι μεαύτερη από 80 ανοίει (επειδή υπάρει μεάη πιανότητα ροής) και, τέος, αν η φτεινότητα είναι μεαύτερη από 20000 lux τότε και πάι ανοίει (ό έντονης ηιοφάνειας).
Έτσι η τέντα ρησιμοποιείται μόνο όταν ρειάζεται και ταυτόρονα προστατεύεται από δυσμενείς δυσμενείς καιρικές συνήκες που α μπορούσαν να την καταστρέψουν.
Οι μετρήσεις της ροής (precipitation), της υρασίας (humidity) και του αέρα (wind)
αμάνονται από το site OpenWeatherMap.
Οι υπόοιπες δύο μετρήσεις (φτεινότητα -luminosity και ερμοκρασία - temperature) διαάζονται από διατάξεις που είναι εκατεστημένες τοπικά.
4.2 Χειροκίνητη Λειτουρία
Ο παραπάν αόριμος ρησιμοποιείται μόνο στην περίπτση που ο ρήστης έει δηώσει ότι έει να ίνεται αυτόματα ο έεος της τέντας. Σε αντίετη περίπτση είναι δυνατή η παράκαμψή του, ώστε να επιέει ο ρήστης την εκάστοτε επιυμητή κατάσταση της τέντας.
Η παραπάν ειτουρία έει υοποιηεί ς μέρος μίας εφαρμοής Android, ώστε όταν ο ρήστης αποστείει αίτηση ια ανέασμα(Up) ή κατέασμα(Down) της τέντας, να
ειτουρεί πέον ειροκίνητα η συσκευή.
Αντίστοια, ο ρήστης μπορεί από το κινητό να στείει αίτηση ια Auto, ώστε να επιστρέψει η συσκευή σε αυτόματη ειτουρία1.
Στη συνέεια φαίνεται ο κώδικας που είναι υπεύυνος ια την ανάνση τν εντοών απόAndroid και ια την την κατάηη επιοή της επιυμητής κατάστασης.
void checkSms(){
char c;
String command;
// If there are any SMSs available()
1Κατά την επανεκκίνηση της συσκευής, η αρική μέοδος ειτουρίας είναι η αυτόματη.
if (sms.available()) {
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(remoteNumber2, 20);
Serial.println(remoteNumber2);
// This is just an example of message disposal // Messages starting with # should be discarded if(sms.peek()=='#')
{
Serial.println("Discarded SMS");
sms.flush();
}
// Read message bytes and print them int j=0;
while(c=sms.read()) {
command.concat(c);
}
Serial.println(command);
if(command.equals("up")){
statusAuto = false;
Serial.println("up-if");
digitalWrite(led, LOW);
if (digitalRead(top)==HIGH){
motor_right();
while(digitalRead(top)==HIGH){
}
sendSms("closed");
stop_motor();
} }
if(command.equals("down")){
statusAuto = false;
Serial.println("down-if");
digitalWrite(led, HIGH);
if (digitalRead(bottom)==HIGH){
motor_left();
while(digitalRead(bottom)==HIGH){
}
sendSms("open");
stop_motor();
} }
if (command.equals("auto")){
statusAuto = true;
}
// delete message from modem memory sms.flush();
Serial.println("MESSAGE DELETED");
} }
Στον παραπάν αόριμο ρησιμοποιούνται διάφορες συναρτήσεις (όπς ηsendSms() και η stop_motor()) που δεν επεξηούνται εδώ, καώς ρίσκονται στον πηαίο κώδικα και δεν έουν σέση με τον συκεκριμένο αόριμο.
5 Κώδικας Arduino
5.1 Αποστοή μηνύματος
void sendSms(String m){
Serial.print("Sending sms");
// send the message
sms.beginSMS(REMOTENUMBER);
sms.print(m);
sms.println();
sms.endSMS();
Serial.println("\nCOMPLETE!\n");
}
Χρησιμοποιώντας τον παραπάν κώδικα της ιιοήκης του Arduino GSM Module έουμε την δυνατότητα να στένουμε sms. Το αντικείμενο sms του παραπάν κώδικα είναι τύπου GSM_SMS και στη μετάητή REMOTENUMBER α πρέπει να ορίσουμε τον αριμό του παραήπτη.
5.2 Ενεροποιήση GPRS και άντηση μετεροοικών μετρήσεν
void connectGPRS(){
// initialize serial communications
Serial.println("Starting Arduino web client.");
// connection state
boolean notConnected = true;
// Start GSM shield
// pass the PIN of your SIM as a parameter of gsmAccess.begin() while(notConnected)
{
if((gsmAccess.begin(PINNUMBER)==GSM_READY) &&
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD)==GPRS_READY)) notConnected = false;
else {
Serial.println("Not connected");
delay(1000);
} } }
Με την συνάρτηση gsmAccess.begin(PINNUMBER) προσπαούμε να συνδεούμε με το gsm module σε περίπτση που η σύνδεση έπεσε σε sleep. Με την gprs.attachGPRS (GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) προσπαούμε να ενεροποιή- σουμε το gprs του gsm μας. Οι τιμές τν ορισμάτν εξαρτώνται από τον εκάστοτε πάροο κινητής τηεφνίας. Στην περίπτσή μας είναι οι τιμές της Cosmote.
GPRS_APN "internet"
GPRS_LOGIN ""
GPRS_PASSWORD ""
void getWeatherInfo(){
Serial.println("connecting...");
// if you get a connection, report back via serial:
if (client.connect(server, port)) {
Serial.println("connected");
// Make a HTTP request:
client.print("GET ");
client.print(path);
client.println(" HTTP/1.0");
client.println();
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
// if there are incoming bytes available
// from the server, read them and print them:
long init_time=millis();
while((millis()-init_time)<6000){
if (client.available()) {
if (client.find("<temperature value=")) {
temperature = client.parseFloat();
Serial.println("Found Temperature");
Serial.println(temperature);
}
if (client.find("<humidity value=")) {
humidity = client.parseInt();
Serial.println("Found Humidity");
Serial.println(humidity);
}
if (client.find("<speed value=")) {
wind = client.parseFloat();
Serial.println("Found Wind speed");
Serial.println(wind);
}
if (client.find("<precipitation value=")) {
precipitation_vol = client.parseFloat();
Serial.println("Found precipitation volume");
Serial.println(precipitation_vol);
precipitation=true;
}else{
precipitation_vol = 0;
precipitation=false;
Serial.println("precipitation volume not found");
} } }
disconnectGPRS();
}
Με την συνάρτηση getWeatherInfo() αντούμε τις μετρήσεις από το open API της openweathermap.org. Σύμφνα με το documentation του API ο server μας παρέει τις πηροφορίες έπειτα από http request στο api.openweathermap.org/data/2.5/weather με ορίσματα q=”Τόπος Ενδιαφέροντος” και mode=”μορφη απάντησης”. Στην περίπτσή μας στο q δώσαμε την τιμή Kavala και στο mode την τιμή xml. Μία τυπική απάντηση σε ένα http request με url api.openweathermap.org/data/2.5/weather?q=Kavala&mode=xml είναι:
<current>
<city id="735861" name="Kavala">
<coord lon="24.4" lat="40.94"/>
<country>GR</country>
<sun rise="2014-09-24T04:12:15" set="2014-09-24T16:16:18"/></city>
<temperature value="293.07" min="292.15" max="293.71" unit="kelvin"/>
<humidity value="68" unit="%"/>
<pressure value="1016" unit="hPa"/>
<wind><speed value="3.1" name="Light breeze"/>
<direction value="240" code="WSW" name="West-southwest"/>
</wind>
<clouds value="20" name="few clouds"/><visibility/>
<precipitation mode="no"/>
<weather number="801" value="few clouds" icon="02n"/>
<lastupdate value="2014-09-24T16:20:00"/>
</current>
Εμείς με την ρήση της εντοής client.find(”LABEL”) όπου στην τιμή LABEL α δώσουμε το όνομα της μέτρησης που επιυμούμε να εξάουμε από το xml αρειό. Π.
client.find(”humidity value=”) μας δίνει το ποσοστό υρασίας.
Δεδομένου ότι η άντηση πηροφοριών από τον server α ίνεται κάε 30 επτά και ότι το gprs μειώνει την απόδοση του gsm module σε άες ειτουρίες, επιέουμε να κάνουμε disconnect μετά το τέος ροής της πηροφορίας από τον server. Η αποσύνδεση
ίνεται σταματώντας τον client τύπου GSMClient με την εντοή client.stop().
5.3 Έεος ια εισερόμενα SMS
void checkSms(){
char c;
String command;
// If there are any SMSs available() if (sms.available())
{
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(remoteNumber2, 20);
Serial.println(remoteNumber2);
// This is just an example of message disposal // Messages starting with # should be discarded if(sms.peek()=='#')
{
Serial.println("Discarded SMS");
sms.flush();
}
// Read message bytes and print them int j=0;
while(c=sms.read()) {
command.concat(c);
}
Με το παραπάν κομμάτι κώδικα αμάνουμε τα sms που στάηκαν στην SIM κάρτα που τοποετήσαμε στο gsm module. Στην μεταητή remotenumber2 περιέεται ο απο- στοέας του μηνύματος και με τον ρόο
while(c=sms.read()) {
command.concat(c);
}
έουμε την δυνατότητα να αμάνουμε όο το μήνυμα και όι μόνο το μήκος τν bytes που ρούν στο buffer.
6 Εφαρμοή Android
Για τη διαείριση της συσκευής από απόσταση, υοποιήηκε αντίστοιη εφαρμοή Android τόσο ια την αποστοή αιτήσεν στη συσκευή, όσο και ια την ανάνση τν μετρήσεν από απόσταση (ια ενημέρση του ρήστη ια την τρέουσα κατάσταση).
6.1 Γενική Λειτουρία
Η εφαρμοή Android που αναπτύηκε είε ς σκοπό την ευρηστία, ειτουρικότητα και την φερευότητα. Για αυτό το όο αποτεείτε από μία κύρια οόνη που καύπτει όα τα σενάρια ρήσης της.
Στην εικόνα 9(αʹ) έπετε την κύρια οόνη στην οποία διακρίνονται τέσσερις ειτουρ-
ίες.
• UP
• DOWN
• AUTO
• INFO
Όες οι εντοές στένονται στον Arduino μέσ SMS. Για αυτό το όο είναι δυνατή η εισαή του αριμού της SIM του Arduino στις ρυμίσεις της εφαρμοής, όπς φαίνεται στην εικόνα 9(ʹ).
(αʹ) Αρική εικόνα (ʹ) Ρύμιση κινητού τηεφώνου
Σήμα 9: Εικόνες εφαρμοής Android
Το κουμπί UP στένει εντοή στον Arduino να σηκώσει τη τέντα, ενώ το κουμπί DOWN να την κατεάσει. Οι εντοές αυτές είναι απαραίτητες ια τον manual ειρισμό της τέντας. Το κουμπί AUTO αφήνει την τέντα να αποφασίζει μόνη της ια το πότε πρέπει να σηκεί ή είναι ασφαές να κατέει. Τέος, με το κουμπί INFO η εφαρμοή
αμάνει όες τις πηροφορίες της τέντας. Αυτές περιαμάνουν τα εξής:
1. Θερμοκρασία σε ◦C 2. Υρασία σε %
3. Ταύτητα αέρα σε m/s
4. Κατάσταση ροής (αν ρέει δείνει και τα εκατοστά ροής) 5. Φτεινότητα σε lux
6. Κατάσταση τέντας, UP ή DOWN
Όες αυτές οι πηροφορίες φαίνονται στο κάτ μέρος της κύριας οόνης και ανανεώ- νονται αυτόματα αφού ηφούν οι νέες τιμές από το Arduino μέσ SMS.
6.2 Επεξήηση ασικότερν τμημάτν του κώδικα
6.2.1 Αρικοποιήση εφαρμοής
Κάε οόνη της εφαρμοής αντιστοιεί σε ένα αντικείμενο τύπου Activity. Το ασι- κότερο κομμάτι μίας Activity είναι αυτό της αρικοποίησής της, το οποίο πρέπει να ίνει κατά την εκτέεση της συνάρτησης onCreate(). Η συνάρτηση αυτή καείται αυτόματα κατά την εκκίνηση της εκάστοτε Activity. Η onCreate() της εφαρμοής μας φαίνεται παρακάτ:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
tentControl = (TentControl) getApplication();
messageTextView = (TextView) findViewById(R.id.message_text_view);
messageTextView.setText(Measurements.getMeasurements());
progressBar = (ProgressBar) findViewById(R.id.progress_bar);
upButton = (Button) findView