Smart and Autonomous parking.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

398 lines
26 KiB

5 years ago
= Smart & Autonomous Parking
5 years ago
5 years ago
*_Authors_*
|===
| Ουλής Ευάγγελος | cs151051@uniwa.gr
| Ουλής Νικόλαος | cs161079@uniwa.gr
| Κατσίμπρας Δρόσος| cs131110@uniwa.gr
|===
5 years ago
// Metadata:
5 years ago
:description: IoT Εφαρμογή Smart & Autonomous parking
5 years ago
:keywords: IoT, parking, smart-parking, autonomous parking
:data-uri:
:toc: right
:toc-title: Πίνακας Περιεχομένων
:toclevels: 4
:source-highlighter: highlight
:icons: font
:sectnums:
5 years ago
== Smart Parking
5 years ago
Το "Smart Parking" Έξυπνο πάρκινγκ βασίζεται στη ιδέα όπου η κατάσταση του πάρκινγκ κοινοποιείται
μέσω ενός συνόλου hardware και software στο διαδίκτυο έτσι ώστε να πετύχουμε η κατάσταση του να είναι διαθέσιμη
5 years ago
"accesable" από το διαδίκτυο. Αυτό το χαρακτηριστικό κάνει αυτό το αντικειμένο μέρος του διαδικτύου και του κόσμου του IoT.
5 years ago
*Η υλοποίηση του Smart Parking χωρίζεται σε 4 βασικά μέρη:*
5 years ago
5 years ago
* Το 1~ο~ μέρος αποτελείται από ένα σύνολο αισθητήρων (ultrasonic) που εγκαθιστούνται σε κάθε θέση parking (sensor) και
5 years ago
έναν μικροελεγκτή (Arduino Uno), έτσι ώστε να ανιχνεύει και να κωδικοποιεί για μία συγκεκριμένη θέση έαν υπάρχει
κάποιο όχημα ή όχι.
5 years ago
5 years ago
.Φάκελος Κώδικα
[NOTE]
====
https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/sensorNode/sensorNode.ino
====
5 years ago
* Το 2~ο~ μέρος αποτελείται από τον συσκευή gateway σε Raspberry Pi1, η οποία διαβάζει στη σειριακή του
τη πληροφορία από το Arduino Uno, που κάνει "sense" μία θέση parking, και στέλνει αυτή την πληροφορία
σε έναν web server με χρήση REST API.
5 years ago
.Φάκελος Κώδικα
[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
====
5 years ago
5 years ago
* Το 4~o~ μέρος αποτελείται από την διεπαφή χρήστη (Interface), η οποία μέσω WEB σελίδας βλέπει κανείς την κατάσταση
5 years ago
του parking, δηλαδή πόσες και ποιές θέσεις μέσα στον χώρο είναι ελεύθερες.
5 years ago
.Φάκελος Κώδικα
[NOTE]
====
https://git.swarmlab.io:3000/cs151051/smartParking/src/branch/master/webInterface
====
5 years ago
=== Parking Sensor Node (1~ο~ μέρος)
==== Υλικά Κόμβου
* 1 x Arduino Uno
* 1 x Red led
* 1 x Blue led
* 8 x links
* 1 x Ultrasonic Sensor
==== Υλοποίηση του Parking Sensor
5 years ago
Σε κάθε θέση parking υπάρχει ένας κόμβος που αποτελείται από ένα Arduino Uno και έναν αισθητήρα
5 years ago
απόστασης (ultrasonic) εγκατεστημένο πάνω σε μικροελεγκτή Arduino Uno. Η λειτουργία αυτού βασίζεται στην
ανίχνευση ύπαρξης οχήματος στην αντίστοιχη θέση μέσω μέτρησης της απόστασης από τον αισθητήρα μέχρι
κάποιο αντικείμενο (πιθανό αυτοκίνητο) που εμποδίσει τη θέση του parking, καθώς και την εξαγωγή της
5 years ago
κατάστασης της αντίστοιχης θέσης στη σειριακή θύρα του Arduino.
[.float-group]
--
[.left]
.Ο κόμβος αντιλαμβάνεται παρουσία οχήματος στη θέση.
image::Photos/arduino1.jpg[300,200]
.Ο κόμβος αντιλαμβάνεται κενή θέση.
[.right]
image::Photos/arduino2.jpg[300,200]
--
Ο κόμβος διαθέτει επιπλέον δύο leds ένα κόκκινο και ένα μπλε, σαν έξοδο της κατάστασης
5 years ago
της θέσης του parking για τον οποίο είναι υπεύθυνος. Με κόκκινο χαρακτηρίζεται η θέση που είναι
δεσμευμένη από ένα όχημα και με μπλε η ελεύθερη θέση, όπως φαίνεται στις παραπάνω εικόνες.
5 years ago
==== Προγραμματισμός Κόμβου
5 years ago
Για τον προγραμματισμό του Arduino Uno χρησιμοποιήσαμε μία σειριακή σύνδεση του μικροελεγκτή με τον
υπολογιστή μας ο οποίος έφερε εγκατεστημένο το IDE του Arduino στον οποίο υπήρχαν όλες οι απαραίτητες
βιβλιοθήκες για την υλοποίηση του. Η διαδικασία "καψίματος" ενός μικροελεγκτή Arduino είναι πολύ απλή.
5 years ago
Το μόνο που χρειάζεται να κάνει κανείς είναι να δώσει δικαιώματα γραψήματος και ανάγνωσης στην συσκευή
ttyACM0 που βρίσκεται στο directory (/dev/ στα linux) και λίγες γνώσεις από κώδικα.
Η γλώσσα του Arduino είναι γλώσσα που μοιάζει πάρα πολύ με τη C.
==== Λειτουργία του Parking Sensor
Κάθε κόμβος στέλνει στην σειριακή του τον κωδικό της θέσης, με τον οποίο έχει προγραμματιστεί το Arduino,
και την κατάσταση του parking, κωδικοποιημένα με τον διαχωριστή "#". Για την κατάσταση του parking ορίζουμε
με "1" ότι η θέση είναι ελεύθεση και με "0" ότι η θέση είναι δεσμευμένη. Ο έλεγχος του sensor γίνεται κάθε
5 years ago
500ms. Η έξοδος στη σειριακή γίνεται με την μορφή μίας συμβολοσειράς "string".
5 years ago
<κωδικός θέσης>#<διαθεσιμότητα 0 ή 1>
==== Διασύνδεση Κόμβου
Ο κόμβος αυτός συνδέεται με ένας "Gateway" κόμβο (βασισμένος σε Raspberry Pi) ο οποίος είναι υπεύθυνος για την
5 years ago
μετάδοση της πληροφορίας στο διαδίκτυο. Η πληροφορία αυτή λαμβάνεται στον "Gateway" κόμβο ο οποίος στη συνέχεια
την αποκωδικοποιεί με βάση το πρότυπο <κωδικός θέσης>#<διαθεσιμότητα> και την αποστέλει σε έναν WEB server μέσω του διαδικτύου.
5 years ago
=== Gateway Node (2~ο~ μέρος)
==== Υλικά Κόμβου
* 1 x Raspberry Pi 1
* 1 x Serial Link (Connects to Arduino)
* 1 x Power Link (Micro Usb)
* 1 x micro SD (Loaded with Raspbian OS)
5 years ago
* 1 x Ethernet Link (Connects to nearest Network) or WiFi adapter
5 years ago
==== Υλοποίηση Gateway Κόμβου
5 years ago
Η υλοποίηση αποτελείται από την εγκατάσταση του Raspbian OS (light version) στο Raspberry και τη δημιουργία ενός proccess
σε γλώσσα Python (v3). Το process αυτό διαβάζει από την σειριακή θύρα του την πληροφορία που λαμβάνει από ένα Arduino Uno με
5 years ago
την μορφή <κωδικός θέσης>#<διαθεσιμότητα 0 ή 1>. Ύστερα αποκωδικοποιεί αυτή την πληροφορία, η οποία περιγράφει τον κωδικό της θέσης
5 years ago
και την διαθεσιμότητα της, και την αποστέλει μέσω ενός REST API με την μέθοδο POST σε έναν WEB Server. Για να αποσταλεί η πληροφορία
5 years ago
στον WEB Server πρέπει να πάρει την μορφή JSON (JavaScript Object Notation) και να έχει αυθεντικοποιηθεί από αυτό (** βλέπε παρακάτω).
5 years ago
5 years ago
Η μέθοδος του [POST] γίνεται στην περίπτωσή που η κατάσταση του Parking μεταβληθεί. Σε αντίθετη περίπτωση ο Server δεν ενημερώνεται.
5 years ago
5 years ago
Στον ίδιο φάκελο του κώδικα βρίσκεται ένα configuration αρχείο το οποίο περιέχει κάποιες ρυθμίσεις του κόμβουσε μορφή JSON.
Οι ρυθμίσεις αυτές αφορούν ουσιαστικά την IP και την πόρτα του WEB Server που ένας τέτοιος κόμβος θα πρέπει να επικοινωνεί,
τα στοιχεία αυθεντικοποίησής του καθώς και τον κωδικό της θέσης του parking που εξυπηρετεί. Το αρχείο θα έχει τη μορφή:
5 years ago
[source, JSON]
----
{
"ip": "iot-smart-parking.herokuapp.com",
5 years ago
"port": "443",
"username": "root",
"password": "root",
"device": 1
5 years ago
}
----
5 years ago
==== Προγραμματισμός Κόμβου
Ο επικοινωνία και ο προγραμματισμός του κόμβου αυτού, που είναι βασισμένος σε ένα Raspberry Pi 1, έγινε με σύνδεση (ssh)
έχοντας βέβαια και οι δύο (Raspberry και εμείς) πρόσβαση στο ίδιο δίκτυο. Η γλώσσα που χρησιμοποιήσαμε για τον έλεγχο
της σειριακής θύρας και την επικοινωνία του με ένα REST WEB Server ήταν η Python (version 3).
==== Διασύνδεηση στο Διαδίκτυο
Ο κόμβος Gateway έχει διασύνδεση με το διαδίκτυο μέσω ενός καλωδίου Ethernet (UTP) έτσι ώστε να μπορέσει
5 years ago
να στείλει την πληροφορία που παράγει από τα δεδομένα του μικροελεγκτή Arduino (sensor) στο διαδίκτυο, δηλαδή
5 years ago
στον REST WEB Server. Από την άλλη επικοινωνεί με το Arduino με μία σειριακή σύνδεση.
5 years ago
5 years ago
=== Server Node (3~ο~ μέρος - Κεντρικός Server όπου κρατά την κατάσταση της κάθε θέσης του Parking)
5 years ago
Ο κόμβος αυτός υλοποιεί ένα process γραμμένο σε γλώσσα προγραμματισμού Python (v3). Αυτό το process υλοποιεί ένα
REST API έτσι ώστε να μπορούν να επικοινωνούν εύκολα οι Gateway κόμβοι μας με αυτόν. Στην είσοδό του και στην έξοδό του
η πληροφορία έχει την μορφή JSON.
5 years ago
Ο Server αποθηκεύει όλα τα απαραίτητα δεδομένα σε μία σχεσιακή βάση δεδομένων MySQL, η οποία διαθέτει έναν πίνακα.
5 years ago
Ο πίνακας κρατά όλα τα απαραίτητα πεδία που είναι:
* Τον κωδικό της θέσης parking
* Την διαθεσιμότητά της αντίστοιχης θέση (0 ή 1)
5 years ago
5 years ago
Ακόμα υπάρχει και ένας δεύτερος πίνακας σε αυτή που έχει καταχωρημένα στοιχεία αυθεντικοποίησης που μπορεί να
χρησιμοποιήσει ένας κόμβος (Gateway Node) για να μπορεί να ενημερώνει την κατάσταση μίας θέσης Parking. Ο πίνακας
αυτός έχει τα απαραίτητα πεδία:
* Τον κωδικό του χρήστη.
* Το όνομα χρήστη (username).
* Έναν κωδικό πρόσβασης (password).
[source, sql]
----
CREATE TABLE IF NOT EXISTS PARKING (
PARKING_CODE INT(4) NOT NULL UNIQUE,
PARKING_STATUS BOOLEAN NOT NULL
);
CREATE TABLE IF NOT EXISTS USERS (
USER_NO INT(4) AUTO_INCREMENT,
USER_NAME VARCHAR(40) NOT NULL UNIQUE,
USER_PASS VARCHAR(40) NOT NULL,
PRIMARY KEY(USER_NO)
);
----
==== Υλοποίηση Κόμβου
Για τον προγραμματισμό του κόμβου επιλέχθηκε η γλώσσα προγραμματισμού Python (version 3). Για την υλοποίηση του WEB Server
χρησιμοποιήσαμε ένα WSGI και συγκεκριμένα το FLASK module της Python. Για την εκτέλεσή του έχουμε δύο υλοποιήσεις. Τη μία
που είναι με το FLASK όπου η εκτέλεση θα πραγματοποιηθεί σε έναν από τους υπολογιστές μας και η άλλη που είναι με gunicorn-
WEB Server στη Python όπου η εκτέλεση θα πραγματοποιηθεί σε μία υπηρεσία του Heroku.
==== Προγραμματισμός REST API WEB Server
Το REST API ενεργοποιεί δύο (τρεις) υπηρεσίες. Αυτές είναι:
* / [GET]: επιστρέφει ένα Array από JSON objects, ένα JSON για κάθε θέση του parking αν είναι διαθέσιμη ή όχι κωδικοποιημένα με 0 ή 1.
Τα δεδομένα που επιστρέφει γίνονται fetch από τη βάση δεδομένων.
Για παράδειγμα:
[source, json]
----
[{"no": 1, "status": false}, {"no": 2, "status": false}, {"no": 3, "status": false}, {"no": 4, "status": true}, {"no": 5, "status": false}, {"no": 6, "status": false}, {"no": 7, "status": false}, {"no": 8, "status": false}]
----
* /parkingStatus [POST] (content-type = "application/json"): που μας επιτρέπει να αλλάξουμε την κατάσταση μίας θέσης parking. Στο POST τα δεδομένα
ορίζονται στο body σε αναπαράσταση JSON, έτσι ώστε ο Server να είναι ικανός να τα επεξεργαστεί και να τα αποθηκεύσει
στη βάση δεδομένων που χρησιμοποιούμε.
Για παράδειγμα:
[source, json]
----
{"no": 2, "status": false}
----
Ακόμα το REST API υλοποιεί μηχανιμσό αυθεντικοποίησης έτσι ώστε οι μεταβολές-ενημερώσεις των θέσεων του parking
να γίνονται μόνο από τους εξουσιοδοτημένους κόμβους του συστήματος. Αυτό επιτυγχάνεται με την ενεργοποίηση μίας
υπηρεσίας όπως περιγράφεται παρακάτω:
* /authentication [POST] (content-type = "application/json): Η υπηρεσία αυτή κάνει register ένα Session σε κάθε
εξουσιοδοτημένο κόμβο ο οποίος αυθεντικοποιείται από τον Server με username και password. Όταν ο server αυθεντικοποιήσει
έναν κόμβο τότε ορίζει για αυτόν ένα χαρακτηριστικό που είναι ο κωδικός της θέσης που βρίσκεται, και ο Server του γυρνάει
ένα Session_id. Με βάση αυτό το κλειδί μπορεί ο κάθε (εξουσιοδοτημένος) κόμβος να χρησιμοποιήσει μία τέτοια υπηρεσία
όπως αυτή της καταχώρησης της διαθεσιμότητας κάθε θέσης από τους κόμβους αντίστοιχα.
==== Εκτέλεση του Process στο Cloud
5 years ago
Για την εκτέλεση του process χρησιμοποιούμε μία πλατφόρμα IAAS (Infrastructure as a Service) -
5 years ago
link:++https://www.heroku.com/platform++[Heroku], για την οποιά μπορούμε να βρούμε περεταίρω πληροφορίες στον σύνδεσμο
παραπάνω.
5 years ago
Η πλατφόρμα μας επιτρέπει να ανεβάσουμε τον κώδικα του Server μας (Python) και να τον εκτελέσουμε στο Cloud.
5 years ago
Στην δωρεάν έκδοσή του δεν έχουμε περιορισμούς στο τμήμα του HTTP service που εκτελούμε, ενώ στη βάση δεδομένων
5 years ago
υπάρχουν περιοριμοί στις συνδέδεις που μπορούν να γίνουν ανα κάποιο χρονικό διάστημα (περίπου 10 συνδέσει ανα 1 ώρα) και ένας
αριθμός Query (~3500) ανά 1~2 ώρες.
Στα πλαίσια της άσκησης δεν θα δημιουργηθεί κάποιο πρόβλημα όσων αφορά την εκτέλεση του κεντρικού Server στο Cloud.
5 years ago
5 years ago
[.float-group]
--
[.center]
.Describe Infrastructure as a Service as an example.
image::Photos/itops-pizza_as_a_service.png[1000,800]
--
5 years ago
Για το deployment εκτελούμε ένα σύνολο βημάτων τα οποία αποτελούνται από την ανάρτηση του κώδικα
σε ένα repository του link:++https://github.com/oulievancs/serverNode++[GitHub] και την δημιουργία ενός project στην πλατφόρμα Heroku.
, link:++https://stackabuse.com/deploying-a-flask-application-to-heroku/++[περισσότερα για το deployment εδώ]. Ακόμα
5 years ago
εγκαθισούμε στο project που μόλις φτιάξαμε μία MySQL βάση δεδομένων για να μπορούμε να αποθηκεύσουμε τα δεδομένα μας.
5 years ago
5 years ago
==== Deployment
5 years ago
* Το πρώτο πράγμα που χρειαζόμαστε είναι όλες οι απαραίτητες βιβλιοθήκες που χρησιμοποιεί ο κώδικας, έτσι ώστε να γνωρίζει
το Heroku τι να μας προσφέρει. Αυτό επιτυγχάνεται με την αρχειοθέτηση αυτών σε ένα αρχείο με όνομα requirements.txt .
5 years ago
5 years ago
Το αρχείο που περιέχει όλα τα απαραίτητα modules για τον κώδικά μας είναι:
[source, text]
----
flask
flask_restful
flask_cors
gunicorn==19.9.0
mysql-connector
----
5 years ago
* Έπειτα την δημιουργία ενός αρχείου που περιγράφει το που βρίσκεται η κύρια συνάρτηση μας (main) για την
5 years ago
έναρξη του process. Αυτό το αρχείο ονομάζεται Procfile . Στο αρχείο αυτό αναφέτεται ένα gunicorn module.
5 years ago
Το gunicorn είναι ένα Python HTTP WEB server. Αυτό ουσιαστικά είναι ο πυρήνας για την εκτέλεση του REST API μας.
5 years ago
5 years ago
* Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης γίνονται στο Heroku,
5 years ago
πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση.
5 years ago
5 years ago
* Τέλος το αρχείο Procfile το οποίο περιέχει το αρχείο το οποίο φορτώσει το gunicorn το οποίο έχει τη μορφή:
5 years ago
[source, conf]
----
web: gunicorn serv:app --preload --timeout 150000
----
.Gunicorn
[NOTE]
====
Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for UNIX. It's a pre-fork worker model. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resources, and fairly speedy.
Source: https://gunicorn.org
====
* Έπειτα με μια απομακρυσμένη σύνδεση στη βάση μας της οποίας τα στοιχεία πρόσβασης δίνονται από Heroku,
πραγματοποιούμε μία σύνδεση και δημιουργούμε τον πίνακά μας για την αποθήκευση των δεδομένων.
5 years ago
5 years ago
==== Σε άλλη περίπτωση Deployment στο Localhost
Στην περίπτωση όπου η πλατφόρμα Heroku μας περιορίζει στα ερωτήματα στη βάση δεδομένων που χρησιμοποιούμε
κάνουμε deploy της εφαρμογής στον localhost. Για να το επιτύχουμε αυτό θα εκτελέσουμε τις εξής εντολές στο
terminal.
[source, script]
----
export FLASK_APP=serv
export FLASK_DEBUG=1
flask run --host=[IP-v4] --port=8080
----
5 years ago
5 years ago
=== Διεπαφή Χρήστη (4~ο~ μέρος)
==== Η διεπαφή του χρήστη
Η διεπαφή του χρήστη αποτελείται από μία HTML σελίδα η οποία ενσωματώνει δύο JavaScript Processes.
Σκοπός αυτής είναι η αναπαράσταση της κατάστασης του Parking σε ένα γραφικό, φιλικό προς τον χρήστη περιβάλλον.
Η σελίδα λοιπόν επεικονίζει για κάθε θέση parking με χρώμα κόκκινο την "μη ελεύθεση" και με πράσινο την "ελεύθερη".
5 years ago
5 years ago
Ένα παράδειγμα μέσω στιγμιοτύπου παρουσιάζεται παρακάτω.
5 years ago
5 years ago
[.float-group]
--
[.center]
.Στιγμιότυπο παραδείγματος εκτέλεσης της διεπαφής χρήστη.
image::Photos/screenshot_web_ui.png[1000,800]
--
5 years ago
5 years ago
== Autonomous Parking
5 years ago
Το αυτόνομο παρκάριμα αποτελείται από το όχημα με εγκατεστημένους τους απαραίτητους αισθητήρες και ελεγκτές
καθώς & έναν μικροελεγκτή (Arduino) για τον έλεγχο αυτών των ελεγκτών και ένα Raspberry Pi1. Σκοπός είναι το όχημα να μπορεί
5 years ago
να μάθει μέσω του διαδικτύου το "Status" του parking και να παρκάρει στην 1η διαθέσιμη θέση εφ' όσων
5 years ago
υπάρχει μία τουλάχιστoν διαθέσιμη θέση στον χώρο στάθμευσης.
5 years ago
5 years ago
*Η υλοποίηση του αυτόνομου parking χωρίζεται σε δύο βασικά μέρη.*
5 years ago
5 years ago
* Το 1~ο~ μέρος αποτελείται από τον μικροελεγκτή για τον έλεγχο των αισθητήρων και των κινητήρων του οχήματος και
5 years ago
εκτελώντας τα απαραίτητα βήματα, να μπορέσει να παρκάρει το όχημα.
5 years ago
* Το 2~ο~ μέρος αποτείται από τον κόμβο ο οποίος θα έχει πρόσβαση στο διαδίκτυο, όπου αφού ελέγξει αν υπάρχει
5 years ago
διαθέσιμη θέση και γνωρίζει ποια είναι η πρώτη ελεύθερη θέση, να δώσει εντολή στον μικροελεγκτή να παρκάρει σε αυτή.
5 years ago
=== Microcotroller and Car (1~ο~ Μέρος)
5 years ago
==== Υλικά Κόμβου
* 1 x Arduino Uno
* 1 x Servo Motor
* 1 x Motor Driver
* 4 x Moter για τους 4 τροχούς
* 1 x Ultrasonic
* 1 x 9V Battery
* 1 x 4,8V Battery
* 1 x Car
* 1 x Raspberry Pi
5 years ago
==== Υλοποίηση Microcontroller on Car
5 years ago
Ο motor driver, το Servo motor καθώς και ο Ultrasonic αισθητήρας κουμπώνουν στον μικροελεγκτή Arduino Uno που χρησιμοποιούμε,
τον οποίο τον εγκαθηστούμε πάνω στο καλούπι του οχήματος το οποίο έχει εγκατεστημένα 4 τροχούς. Οι τροχοί οδηοούνται από 4 moters
5 years ago
τα οποία τροφοδοτούνται από τον motor driver.
Η συνδεσμολογία έχει την διάταξη που παρουσιάζεται παρακάτω:
[.float-group]
--
[.center]
.Συνδεσμολογία moter, motor driver, arduino, ultrasonic sensor και servo motor.
image::Photos/diagram.png[1000,800]
--
5 years ago
=== Gateway Κόμβος (2~ο~ Μέρος)
Ο Gateway κόμβος του αυτόνομου οχήματος που θα έρθει στην θέση να παρκάρει μόνο του στο parking (ΙοΤ), είναι υπεύθυνος
για την διασύνδεση του οχήματος με το διαδίκτυο. Γι' αυτό το λόγο το process που σχεδιάσαμε να τρέχει σε αυτό το σημείο
είναι υπεύθυνο για την αναζήτηση της πληροφορίας ποια είναι η πρώτη ελεύθερη για να παρκάρει το όχημα και στη συνέχεια
να αποστέλει τον αριθμό της θέσης στον μικροελεγκτή Arduino ο οποίος είναι υπεύθυνος να πάρει αυτή την τιμή και να κατευθύνει
το όχημα.
.Reminder
[NOTE]
5 years ago
SLOW SUCCESS BUILDS CHARACTER, FAST SUCCESS BUILDS EGO.