|
|
@ -24,8 +24,8 @@ |
|
|
|
:sectnums: |
|
|
|
|
|
|
|
== Smart Parking |
|
|
|
Το "Smart Parking" Έξυπνο πάρκινγκ βασίζεται στη διαδικασία όπου η κατάσταση του πάρκινγκ κοινοποιείται |
|
|
|
μέσω ενός συνόλου hardware και software στο διαδίκτυο έτσι ώστε να πετυχουμε η κατάσταση του να είναι διαθέσιμη |
|
|
|
Το "Smart Parking" Έξυπνο πάρκινγκ βασίζεται στη ιδέα όπου η κατάσταση του πάρκινγκ κοινοποιείται |
|
|
|
μέσω ενός συνόλου hardware και software στο διαδίκτυο έτσι ώστε να πετύχουμε η κατάσταση του να είναι διαθέσιμη |
|
|
|
"accesable" από το διαδίκτυο. Αυτό το χαρακτηριστικό κάνει αυτό το αντικειμένο μέρος του διαδικτύου και του κόσμου του IoT. |
|
|
|
|
|
|
|
*Η υλοποίηση του Smart Parking χωρίζεται σε 4 βασικά μέρη:* |
|
|
@ -34,17 +34,41 @@ |
|
|
|
έναν μικροελεγκτή (Arduino Uno), έτσι ώστε να ανιχνεύει και να κωδικοποιεί για μία συγκεκριμένη θέση έαν υπάρχει |
|
|
|
κάποιο όχημα ή όχι. |
|
|
|
|
|
|
|
.Φάκελος Κώδικα |
|
|
|
[NOTE] |
|
|
|
==== |
|
|
|
https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/sensorNode/sensorNode.ino |
|
|
|
==== |
|
|
|
|
|
|
|
* Το 2~ο~ μέρος αποτελείται από τον συσκευή gateway σε Raspberry Pi1, η οποία διαβάζει στη σειριακή του |
|
|
|
τη πληροφορία από το Arduino Uno, που κάνει "sense" μία θέση parking, και στέλνει αυτή την πληροφορία |
|
|
|
σε έναν web server με χρήση REST API. |
|
|
|
|
|
|
|
* To 3~o~ μέρος αποτελείται από τον WEB Server ο οποίος αποτελείται από ένα process γραμμένο σε python. Το proccess αυτό υλοποιεί |
|
|
|
έναν REST API WEB Server έτσι ώστε να μπορεί να αποθηκεύει την κατάσταση κάθε θέσης parking σε μία δομή λίστας με χαρακτηριστικό |
|
|
|
κλειδί τον κωδικό κάθε θέσης parking. |
|
|
|
.Φάκελος Κώδικα |
|
|
|
[NOTE] |
|
|
|
==== |
|
|
|
https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/gatewayNode |
|
|
|
==== |
|
|
|
|
|
|
|
* To 3~o~ μέρος αποτελείται από τον WEB Server ο οποίος αποτελείται από ένα process υλοποιημένο σε γλώσσα προγραμματιμού python. |
|
|
|
Το proccess αυτό υλοποιεί έναν REST API WEB Server έτσι ώστε να μπορεί να αποθηκεύει την κατάσταση κάθε θέσης parking σε μία βάση |
|
|
|
δεδομένων δύο δομή λίστας με χαρακτηριστικό κλειδί τον κωδικό κάθε θέσης parking. |
|
|
|
|
|
|
|
.Φάκελος Κώδικα |
|
|
|
[NOTE] |
|
|
|
==== |
|
|
|
https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/serverNode |
|
|
|
==== |
|
|
|
|
|
|
|
* Το 4~o~ μέρος αποτελείται από την διεπαφή χρήστη (Interface), η οποία μέσω WEB σελίδας βλέπει κανείς την κατάσταση |
|
|
|
του parking, δηλαδή πόσες και ποιές θέσεις μέσα στον χώρο είναι ελεύθερες. |
|
|
|
|
|
|
|
.Φάκελος Κώδικα |
|
|
|
[NOTE] |
|
|
|
==== |
|
|
|
https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/webInterface |
|
|
|
==== |
|
|
|
|
|
|
|
=== Parking Sensor Node (1~ο~ μέρος) |
|
|
|
|
|
|
|
==== Υλικά Κόμβου |
|
|
@ -56,9 +80,10 @@ |
|
|
|
|
|
|
|
==== Υλοποίηση του Parking Sensor |
|
|
|
Σε κάθε θέση parking υπάρχει ένας κόμβος που αποτελείται από ένα Arduino Uno και έναν αισθητήρα |
|
|
|
απόστασης (ultrasonic) εγκατεστημένος πάνω σε μικροελεγκτή Arduino Uno. Η λειτουργία αυτού βασίζεται στη |
|
|
|
μέτρηση της απόστασης από τον κόμβο μέχρι κάποιο αντικείμενο (πιθανό αυτοκίνητο) που εμποδίζει τη θέση του parking, |
|
|
|
καθώς και την εξαγωγή της κατάσταασης αντίστοιχης θέσης στη σειριακή θύρα του Arduino. |
|
|
|
απόστασης (ultrasonic) εγκατεστημένο πάνω σε μικροελεγκτή Arduino Uno. Η λειτουργία αυτού βασίζεται στην |
|
|
|
ανίχνευση ύπαρξης οχήματος στην αντίστοιχη θέση μέσω μέτρησης της απόστασης από τον αισθητήρα μέχρι |
|
|
|
κάποιο αντικείμενο (πιθανό αυτοκίνητο) που εμποδίσει τη θέση του parking, καθώς και την εξαγωγή της |
|
|
|
κατάσταασης αντίστοιχης θέσης στη σειριακή θύρα του Arduino. |
|
|
|
|
|
|
|
[.float-group] |
|
|
|
-- |
|
|
@ -79,14 +104,14 @@ image::Photos/arduino2.jpg[300,200] |
|
|
|
Κάθε κόμβος στέλνει στην σειριακή του τον κωδικό της θέσης, με τον οποίο έχει προγραμματιστεί το Arduino, |
|
|
|
και την κατάσταση του parking, κωδικοποιημένα με τον διαχωριστή "#". Για την κατάσταση του parking ορίζουμε |
|
|
|
με "1" ότι η θέση είναι ελεύθεση και με "0" ότι η θέση είναι δεσμευμένη. Ο έλεγχος του sensor γίνεται κάθε |
|
|
|
500ms. Η έξοδος στη σειριακή γίνεται με την μορφή ενός string. |
|
|
|
500ms. Η έξοδος στη σειριακή γίνεται με την μορφή μίας συμβολοσειράς "string". |
|
|
|
|
|
|
|
<κωδικός θέσης>#<διαθεσιμότητα 0 ή 1> |
|
|
|
|
|
|
|
==== Διασύνδεση Κόμβου |
|
|
|
Ο κόμβος αυτός συνδέεται με ένας "Gateway" κόμβο (βασισμένος σε Raspberry Pi) ο οποίος είναι υπεύθυνος για την |
|
|
|
μετάδοση της πληροφορίας που αφορά την διαθεσιμότητα της θέσης του parking στο διαδίκτυο. Η πληροφορία αυτή |
|
|
|
λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια την αποκωδικοποιεί και την αποστέλει στον WEB server μέσω του διαδικτύου. |
|
|
|
μετάδοση της πληροφορίας στο διαδίκτυο. Η πληροφορία αυτή λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια |
|
|
|
την αποκωδικοποιεί με βάση το πρότυπο <κωδικός θέσης>#<διαθεσιμότητα> και την αποστέλει σε έναν WEB server μέσω του διαδικτύου. |
|
|
|
|
|
|
|
|
|
|
|
=== Gateway Node (2~ο~ μέρος) |
|
|
@ -96,36 +121,54 @@ image::Photos/arduino2.jpg[300,200] |
|
|
|
* 1 x Serial Link (Connects to Arduino) |
|
|
|
* 1 x Power Link (Micro Usb) |
|
|
|
* 1 x micro SD (Loaded with Raspbian OS) |
|
|
|
* 1 x Ethernet Link (Connects to nearest Network) |
|
|
|
* 1 x Ethernet Link (Connects to nearest Network) or WiFi adapter |
|
|
|
|
|
|
|
==== Υλοποίηση και Προγραμματισμός |
|
|
|
Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS στο Raspberry και τη δημιουργία ενός proccess |
|
|
|
σε γλώσσα Python. Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από το αντίστοιχο Arduino Uno με |
|
|
|
την μορφή <κωδικός θέσης>#<διαθεσιμότητα 0 ή 1>. Ύστερα αποκωδικοποιεί αυτή την πληροφορία η οποία περιγράφει τον κωδικό της θέσης |
|
|
|
και την διαθεσιμότητα της και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Τα δεδομέμα μας σε αυτήν |
|
|
|
την επικοινωνία παίρνουν μία μορφή JSON (JavaScript Object Notation). |
|
|
|
Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS (light version) στο Raspberry και τη δημιουργία ενός proccess |
|
|
|
σε γλώσσα Python (v3). Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από ένα Arduino Uno με |
|
|
|
την μορφή <κωδικός θέσης>#<διαθεσιμότητα 0 ή 1>. Ύστερα αποκωδικοποιεί την πληροφορία η οποία περιγράφει τον κωδικό της θέσης |
|
|
|
και την διαθεσιμότητα της, και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Για να αποσταλεί η πληροφορία |
|
|
|
στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation). |
|
|
|
|
|
|
|
Η μέθοδος του POST γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται. |
|
|
|
|
|
|
|
Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει ένα JSON με την μορφή: |
|
|
|
|
|
|
|
[source, JSON] |
|
|
|
---- |
|
|
|
{ |
|
|
|
"ip": "iot-smart-parking.herokuapp.com", |
|
|
|
"port": "443" |
|
|
|
} |
|
|
|
---- |
|
|
|
|
|
|
|
Το αρχείο αυτό περιέχει ρυθμίσεις που αφορά τη σύνδεσή του με τον WEB Server την διευθυνδή του δηλαδή και την πόρτα |
|
|
|
που ακούει. |
|
|
|
|
|
|
|
==== Διασύνδεηση στο Διαδίκτυο |
|
|
|
Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει |
|
|
|
να στείλει την πληροφορία στο διαδίκτυο. |
|
|
|
να στείλει την πληροφορία στο διαδίκτυο, δηλαδή στον WEB Server. |
|
|
|
|
|
|
|
|
|
|
|
== Server Node (3~ο~ μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking) |
|
|
|
Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python 3. Αυτό το process εκτελεί ένα |
|
|
|
REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα πολλοί Gateway κόμβοι. Στην είσοδό του και στην έξοδό του |
|
|
|
τα δεδομένα μας έχουν την μορφή JSON. |
|
|
|
Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python (v3). Αυτό το process υλοποιεί ένα |
|
|
|
REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα οι Gateway κόμβοι μας με αυτόν. Στην είσοδό του και στην έξοδό του |
|
|
|
η πληροφορία έχει την μορφή JSON. |
|
|
|
|
|
|
|
Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία Βάση δεδομένων MySQL, η οποία διαθέτει ένα πίνακα. |
|
|
|
Ο server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα. |
|
|
|
Ο πίνακας κρατά όλα τα απαραίτητα πεδία που είναι: |
|
|
|
|
|
|
|
* Τον κωδικό της θέσης parking |
|
|
|
* Την διαθεσιμότητά της αντίστοιχης θέση (0 ή 1) |
|
|
|
|
|
|
|
=== Εκτέλεση του Process στο Cloud |
|
|
|
Για την εκτέλεση του process χρησιμοποιούμε μία πλατφόρμα IAAS (Infrastructure as a Service) ονόματι |
|
|
|
Για την εκτέλεση του process χρησιμοποιούμε μία πλατφόρμα IAAS (Infrastructure as a Service) - |
|
|
|
link:++https://www.heroku.com/platform++[Heroku], για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο |
|
|
|
παραπάνω. |
|
|
|
|
|
|
|
Στην δωρεάν έκδοσή του δεν έχουμε περιορισμούς στο τμήμα του HTTP service που εκτελούμε, ενώ στη βάση δεδομένων |
|
|
|
υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα). |
|
|
|
|
|
|
|
[.float-group] |
|
|
|
-- |
|
|
|
[.center] |
|
|
@ -162,13 +205,10 @@ image::Photos/itops-pizza_as_a_service.png[1000,800] |
|
|
|
|
|
|
|
|
|
|
|
== Διεπαφή Χρήστη (4~ο~ μέρος) |
|
|
|
<<<<<<< HEAD |
|
|
|
Η διεπαφή του χρήστη |
|
|
|
======= |
|
|
|
=== Η διεπαφή του χρήστη |
|
|
|
Η διεπαφή του χρήστη αποτελείται από μία HTML σελίδα η οποία ενσωματώνει και δύο JavaScript Processes. |
|
|
|
Σκοπός αυτής είναι η ανααπαράσταση της κατάστασης του Parking. Η σελίδα λοιπόν ενσωματώνει για κάθε θέση |
|
|
|
parking |
|
|
|
>>>>>>> a4925739363f066457a17d4c039bbe93c0311576 |
|
|
|
|
|
|
|
|
|
|
|
== Autonomous Parking |
|
|
|