From d9124f16951b9907d0cd36d710185b45d4ab519e Mon Sep 17 00:00:00 2001 From: Evangelos Oulis Date: Tue, 21 Jan 2020 09:13:13 +0200 Subject: [PATCH] Update v1.3 --- autonomousCar/autonomousCar.ino | 1 + project.adoc | 94 +++++++++++++++++++++++---------- project.html | 21 +++++--- 3 files changed, 81 insertions(+), 35 deletions(-) diff --git a/autonomousCar/autonomousCar.ino b/autonomousCar/autonomousCar.ino index 37c1700..36b2a25 100644 --- a/autonomousCar/autonomousCar.ino +++ b/autonomousCar/autonomousCar.ino @@ -291,6 +291,7 @@ void park(int parkingNo) { int Serial_Input() { int number; + while (!Serial.available()) ; if (Serial.available() > 0) { number = Serial.parseInt(); while (number <= 0) { diff --git a/project.adoc b/project.adoc index 7357774..2ae05a7 100644 --- a/project.adoc +++ b/project.adoc @@ -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 diff --git a/project.html b/project.html index 699247a..f8462d3 100644 --- a/project.html +++ b/project.html @@ -482,7 +482,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b