Πίνακας περιεχομένων:
- Βήμα 1: Απαιτήσεις
- Βήμα 2: Δημιουργία και αναβοσβήνει το υλικολογισμικό του αισθητήρα
- Βήμα 3: Ρύθμιση του σύννεφου
- Βήμα 4: Ρύθμιση του AWS Lambda
- Βήμα 5: Ρύθμιση ροής δεδομένων AWS Kinesis Firehose
- Βήμα 6: Ρύθμιση του ρόλου IAM για το Kinesis
- Βήμα 7: Ρύθμιση του AWS EC2
- Βήμα 8: Ρύθμιση του ρόλου ασφαλείας IAM για το EC2
- Βήμα 9: Πρόσβαση στην παρουσία σας EC2
- Βήμα 10: Ανάκτηση API Χαρτών Google
- Βήμα 11: Εκκίνηση διακομιστή
- Βήμα 12: Εκτελέστε ενσωμάτωση HTTP στο Things Network
- Βήμα 13: Επεξεργασία δεδομένων
- Βήμα 14: Οπτικοποίηση
- Βήμα 15: Πιστώσεις και εξωτερικοί σύνδεσμοι
Βίντεο: Παρακολούθηση Δρόμου: 15 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Σήμερα θα σας δείξουμε πώς δημιουργούμε ένα σύστημα παρακολούθησης ανωμαλιών δρόμου βασισμένο σε επιταχυνσιόμετρα, LoRaWAN, Amazon Web Services και Google Cloud API.
Βήμα 1: Απαιτήσεις
- Πλακέτα DISCO-L072CZ-LRWAN1
- Μονάδα επέκτασης X-NUCLEO-IKS01A2 (για το επιταχυνσιόμετρο)
- X-NUCLEO-GNSS1A1 (για τον εντοπισμό)
- Ένας λογαριασμός AWS
- Λογαριασμός Google Cloud Platform
Βήμα 2: Δημιουργία και αναβοσβήνει το υλικολογισμικό του αισθητήρα
Συνδέστε τα IKS01A2 και GNSS1A1 στο πάνω μέρος της πλακέτας μέσω των ακίδων GPIO. Κατεβάστε τον κώδικα του υλικολογισμικού από το GitHub. Δημιουργήστε (αν δεν έχετε ήδη) έναν λογαριασμό στο ARM Mbed και εισαγάγετε τον κωδικό στο repo στον διαδικτυακό μεταγλωττιστή. Ορίστε την πλατφόρμα-στόχο στο DISCO-L072CZ-LRWAN1 και αποθηκεύστε το έργο. Τώρα κατευθυνθείτε στο The Things Network και δημιουργήστε έναν λογαριασμό αν δεν τον έχετε ήδη. Δημιουργήστε μια εφαρμογή, δημιουργήστε μια νέα συσκευή μέσα στην εφαρμογή και ορίστε τη λειτουργία σύνδεσης σε OTAA. Πιάστε τις κατάλληλες παραμέτρους για να συμπληρώσετε τα ακόλουθα πεδία στο αρχείο mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".
Ο αισθητήρας θα καταγράφει περιοδικά δεδομένα επιταχυνσιόμετρου και GNSS και θα τα στέλνει μέσω της σύνδεσης LoRa στην πλησιέστερη πύλη, η οποία θα τα προωθήσει στην εφαρμογή μας στο The Things Network. Το επόμενο βήμα είναι να ρυθμίσετε έναν διακομιστή cloud και μια ενσωμάτωση HTTP στο TTN.
Βήμα 3: Ρύθμιση του σύννεφου
Τώρα είμαστε έτοιμοι να δημιουργήσουμε την υποδομή cloud που θα συλλέγει και θα συγκεντρώνει τα δεδομένα από όλους τους ανεπτυγμένους πίνακες. Αυτή η υποδομή φαίνεται στο παρακάτω σχήμα και αποτελείται από:
- Kinesis, για τη διαχείριση της εισερχόμενης ροής δεδομένων.
- Lambda, για να φιλτράρετε και να επεξεργαστείτε τα δεδομένα πριν τα αποθηκεύσετε.
- S3, για να αποθηκεύσετε όλα τα δεδομένα.
- EC2, για την ανάλυση δεδομένων και τη φιλοξενία του front-end μας.
Βήμα 4: Ρύθμιση του AWS Lambda
Θα παρουσιάσουμε τα απαραίτητα βήματα για τη δημιουργία αυτής της υποδομής, ξεκινώντας από τη Λάμδα.
- Συνδεθείτε με τον λογαριασμό σας AWS και από την κύρια σελίδα της κονσόλας και μεταβείτε στη Λάμδα
- Κάντε κλικ στο Δημιουργία συνάρτησης
- Στο επάνω μέρος της σελίδας θα πρέπει να επιλεγεί Συγγραφέας από το Scratch. Στη συνέχεια, συμπληρώστε τα άλλα πεδία όπως στην εικόνα και, στη συνέχεια, κάντε κλικ στην επιλογή Δημιουργία συνάρτησης
- Τώρα που δημιουργήσατε μια συνάρτηση AWS Lambda, μεταβείτε στη διεύθυνση https://github.com/roadteam/data-server και αντιγράψτε το περιεχόμενο του αρχείου aws_lambda.py στον επεξεργαστή που βρίσκετε στο δεύτερο μισό της σελίδας. Η λειτουργία Λάμδα είναι τώρα έτοιμη:)
Βήμα 5: Ρύθμιση ροής δεδομένων AWS Kinesis Firehose
- Επιστρέψτε τώρα στην κύρια σελίδα της κονσόλας AWS και μεταβείτε στις Υπηρεσίες στο Kinesis
- Τώρα βρίσκεστε στην κεντρική σελίδα του Kinesis. Στα δεξιά της σελίδας, στην ενότητα «Ροές παράδοσης Kinesis Firehose», επιλέξτε «Δημιουργία νέας ροής παράδοσης»
- Στο «Όνομα ροής παράδοσης» γράψτε «ροή παρακολούθησης-ροής». Αφήστε τα άλλα πεδία στην προεπιλογή και κάντε κλικ στο επόμενο
- Τώρα, στην ενότητα "Μετασχηματισμός εγγραφών πηγής με AWS Lambda", επιλέξτε Enabled (Ενεργοποίηση) και, ως λειτουργία Lambda, κάντε κλικ στο νεοδημιουργημένο "road-monitoring-lambda". Μην ανησυχείτε εάν εμφανιστεί μια προειδοποίηση σχετικά με το χρονικό όριο λειτουργίας, καθώς η λειτουργία που κάνουμε δεν είναι υπολογιστικά δαπανηρή. Αφήστε τα άλλα πεδία στην προεπιλογή και κάντε κλικ στο επόμενο
- Ως προορισμός επιλέξτε Amazon S3 και ως προορισμό S3 επιλέξτε Δημιουργία νέου. Ως όνομα κάδου εισάγετε το "road-monitoring-bucket" και μετά πηγαίνετε. Τώρα αφήστε τα άλλα πεδία στην προεπιλογή και κάντε κλικ στο Επόμενο
- Μπορεί να θέλετε να ορίσετε το μέγεθος Buffer σε 1MB και το διάστημα Buffer στα 60 δευτερόλεπτα. Το buffer θα ξεπλυθεί στο S3 όποτε πληρούται μία από τις δύο προϋποθέσεις. Μην φύγετε από τη σελίδα, δείτε το επόμενο βήμα
Βήμα 6: Ρύθμιση του ρόλου IAM για το Kinesis
Τώρα ρυθμίζουμε τα δικαιώματα ασφαλείας για το Kinesis, αφού πρέπει να καλέσει τη λειτουργία Lambda για προεπεξεργασία και στη συνέχεια θα γράψει στο S3
- Στο κάτω μέρος της σελίδας που βρίσκεστε σε «ρόλο IAM» επιλέξτε «Δημιουργία νέας επιλογής», δημιουργήστε έναν νέο ρόλο IAM όπως στην εικόνα και κάντε κλικ στο Allow
- Τώρα επιστρέφετε στην προηγούμενη σελίδα, κάντε κλικ στο επόμενο. Τώρα μπορεί να θέλετε να ελέγξετε ξανά όλες τις παραμέτρους. Όταν τελειώσετε, κάντε κλικ στο «Δημιουργία ροής παράδοσης»
Ο αγωγός Kinesis-Lambda-S3 είναι σε λειτουργία!
Βήμα 7: Ρύθμιση του AWS EC2
Τώρα θα δημιουργήσουμε ένα παράδειγμα EC2 με ορισμένα API που θα μας επιτρέψουν να πιέσουμε και να τραβήξουμε δεδομένα από το σύννεφο AWS και επίσης τον διακομιστή που θα φιλοξενήσει το frontend της εφαρμογής μας. Σε περιβάλλον παραγωγής, μπορεί να θέλετε να δημοσιεύσετε API χρησιμοποιώντας το πιο κλιμακούμενο AWS API Gateway.
- Από την κύρια σελίδα της κονσόλας AWS, μεταβείτε στην υπηρεσία EC2
- Κάντε κλικ στο Launch Instance
- Στην επάνω γραμμή αναζήτησης επικολλήστε αυτόν τον κωδικό: ‘ami-08935252a36e25f85’, αυτός είναι ο κωδικός αναγνώρισης της προκαθορισμένης εικονικής μηχανής για χρήση. Κάντε κλικ στην επιλογή Επιλογή στα δεξιά
- Επιλέξτε t2.micro από τη στήλη "Τύπος" και κάντε κλικ στην επιλογή "Έλεγχος και εκκίνηση". Μην ξεκινήσετε ακόμα την παρουσία, προχωρήστε στο επόμενο βήμα
Βήμα 8: Ρύθμιση του ρόλου ασφαλείας IAM για το EC2
- Πριν ξεκινήσουμε, θέλουμε να τροποποιήσουμε την ομάδα ασφαλείας της παρουσίας μας. Για να το κάνετε αυτό, στην άκρη δεξιά της ενότητας "Ομάδες ασφαλείας" κάντε κλικ στην επιλογή "Επεξεργασία ομάδων ασφαλείας" Δημιουργήστε μια νέα ομάδα ασφαλείας ως εξής. Αυτό βασικά ρυθμίζει το τείχος προστασίας της παρουσίας σας που εκθέτει τη θύρα 22 για σύνδεση SSH και τη θύρα 80 για τις υπηρεσίες
- Κάντε ξανά κλικ στην επιλογή "Επανεξέταση και εκκίνηση". Τώρα ελέγξτε ότι έχουν οριστεί όλες οι παράμετροι. Όταν τελειώσετε κάντε κλικ στο κουμπί Εκκίνηση
- Με κλικ, θα εμφανιστεί ένα νέο παράθυρο για να ρυθμίσετε ένα ζεύγος κλειδιών για σύνδεση ssh με την παρουσία. Επιλέξτε «Δημιουργία νέου ζεύγους κλειδιών» και ως όνομα πληκτρολογήστε «ec2-road-monitoring». Κάντε κλικ στην επιλογή Λήψη ζεύγους κλειδιών. Είναι εξαιρετικά σημαντικό αυτό το αρχείο να χαθεί ή (χειρότερα) να αποθηκευτεί με ασφάλεια: δεν θα μπορείτε να κατεβάσετε ξανά το κλειδί. Μετά τη λήψη του κλειδιού.pem η παρουσία είναι έτοιμη για εκκίνηση
Βήμα 9: Πρόσβαση στην παρουσία σας EC2
Η νέα σας παρουσίαση EC2 εμφανίζεται στο σύννεφο AWS. Μπορείτε να συνδεθείτε με το αρχείο κλειδιού που έχετε κατεβάσει πριν (για αυτό το σεμινάριο υποθέτουμε ότι γνωρίζετε τα βασικά του ssh). Μπορείτε να ανακτήσετε την IP της παρουσίας επιλέγοντάς την στον πίνακα ελέγχου στην ενότητα "Περιγραφή" ως εξής: Μπορείτε να χρησιμοποιήσετε τόσο τη δημόσια IP όσο και το δημόσιο DNS σας είναι το ίδιο. Με έναν πελάτη ssh τώρα εισάγετε την εντολή:
ssh -i ec2-road-monitoring.pem ec2-user@YOUR-IP-ADDR-OR-DNS
όπου το ec2-road-monitoring.pem είναι το κλειδί σας που δημιουργήθηκε πριν.
Τώρα συνεχίστε να τραβάτε τον κωδικό από την πλευρά του διακομιστή
git clone --recursive
Βήμα 10: Ανάκτηση API Χαρτών Google
Σχεδόν τελειώσαμε. Τώρα πρέπει να ρυθμίσουμε το API των χαρτών google στη σελίδα html για να εμφανιστεί ο χάρτης με τα σημεία πορείας στον χρήστη:
- Συνδεθείτε στον Λογαριασμό σας Google και μεταβείτε στη διεύθυνση
- Κάντε κλικ στο «Ξεκινήστε» στα αριστερά της σελίδας
- Επιλέξτε "Χάρτες" στο μενού και, στη συνέχεια, κάντε κλικ στο κουμπί Συνέχεια
- Ως όνομα έργου, πληκτρολογήστε «παρακολούθηση δρόμου» και κάντε κλικ στο Επόμενο
- Εισαγάγετε τα στοιχεία χρέωσής σας και κάντε κλικ στο κουμπί Συνέχεια
- Τώρα το έργο σας είναι έτοιμο και θα λάβουμε το κλειδί API κάνοντας κλικ στα API και υπηρεσίες -> Διαπιστευτήρια
Βήμα 11: Εκκίνηση διακομιστή
Και εκεί είναι το κλειδί API. Το τελευταίο πράγμα που πρέπει να κάνετε είναι να μεταβείτε στο data_visualization/anomalies_map.html και να αντιγράψετε το κλειδί σας στο τέλος του αρχείου, αντικαθιστώντας το «YOUR-KEY-HERE»
Τώρα όλα είναι έτοιμα και έτοιμα! Για να ξεκινήσει να εκτελείται στην παρουσίαση EC2: ‘cd data-server’ ‘python flask_app.py’
Εισαγάγετε στο πρόγραμμα περιήγησής σας τη διεύθυνση ip ή dns της παρουσίας σας EC2, θα πρέπει να δείτε τον χάρτη των ανωμαλιών με μερικά εικονικά δεδομένα
Βήμα 12: Εκτελέστε ενσωμάτωση HTTP στο Things Network
Τώρα που έχουμε όλη την υποδομή backend σε λειτουργία, μπορούμε να επεξεργαστούμε για να πραγματοποιήσουμε την ενσωμάτωση
- Δημιουργήστε μια νέα εφαρμογή και καταχωρήστε τη συσκευή σας. Υποθέτουμε βασικές γνώσεις TTN, αν όχι ανατρέξτε στον οδηγό γρήγορης εκκίνησης
- Στο μενού της εφαρμογής σας επιλέξτε «Ενσωματώσεις» και μετά «προσθήκη ενσωμάτωσης»
- Επιλέξτε ενσωμάτωση
- Εισαγάγετε τα πεδία που ακολουθούν την εικόνα και αντικαθιστάτε με το EC2 ip ή το δημόσιο DNS
Βήμα 13: Επεξεργασία δεδομένων
Για κάθε πλειάδα δεδομένων T που συλλέγονται από τον αισθητήρα πρέπει να εκτελέσετε τα ακόλουθα βήματα:
- Αποκτήστε το σύνολο των πλειάδων που έχουν συντεταγμένες GPS που πέφτουν στην περιοχή του Τ. Η τοπική περιοχή είναι όλες οι πλειάδες που βρίσκονται 100 μέτρα γύρω από το Τ.
- Για κάθε πλησιέστερη πλειάδα Ν υπολογίστε την τετραγωνική μέση τιμή του άξονα Z του επιταχυνσιόμετρου στο Ν. Σε ψευδοκώδικα: μέσο = άθροισμα ([x. Z_accel ** 2 για x σε κοντινό]) / κοντά στο μέγεθος
- Υπολογίστε την τετραγωνική τυπική απόκλιση. Σε ψευδοκώδικα: std = άθροισμα ([(x. Z_accel ** 2 - μέσο) ** 2 για x σε κοντινή απόσταση])
- Έξοδος σε αυτήν τη μορφή: lat, long, Z_accel ** 2, mean, std
Για να υπολογίσετε την τοπική περιοχή, χρησιμοποιήστε την απόσταση GPS σε μέτρα. Σε C ++:
#define D2R (M_PI / 180.0)
#define EARTH_RAY 6371 διπλή απόσταση (διπλό lat1, διπλό long1, διπλό lat2, διπλό long2) {διπλό dlong = (long2 - long1) * D2R; διπλό dlat = (lat2 - lat1) * D2R; διπλό a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); διπλό c = 2 * atan2 (sqrt (a), sqrt (1-a));
Τώρα, χρησιμοποιώντας τα ενδιάμεσα δεδομένα που δημιουργήθηκαν στο προηγούμενο βήμα, εντοπίστε τις ανωμαλίες και κάντε μια αφελή ταξινόμηση χρησιμοποιώντας αυτό το απόσπασμα που εφαρμόζεται σε κάθε γραμμή:
γραμμή = χάρτης (float, line.split (","))
v = γραμμή [2] μέση = γραμμή [3] std = γραμμή [4] εάν v (μέση τιμή + std*3): εάν v (μέσος όρος + std*2): εάν v (μέσος όρος + std): o.append ([1, γραμμή [0], γραμμή [1]) άλλο: o.append ([2, line [0], line [1]) else: o.append ([3, line [0], line [1])
Οι ανωμαλίες ταξινομούνται χρησιμοποιώντας τον κανόνα 68–95–99,7
Τώρα έχετε μια συλλογή με αυτήν τη μορφή [τύπος, lat, long].
Η σημασία του τύπου είναι η ακόλουθη:
- Μικρή ανωμαλία, μάλλον άσχετη
- Μεσαία ανωμαλία
- Κρίσιμη ανωμαλία
Βήμα 14: Οπτικοποίηση
Για να κατανοήσουμε και ίσως να αλλάξουμε το τμήμα απεικόνισης, πρέπει να μάθουμε πώς να χρησιμοποιούμε προσαρμοσμένους δείκτες, ένα χαρακτηριστικό του API των Χαρτών Google
Πρώτον, ο χάρτης πρέπει να προετοιμαστεί σε μια επανάκληση:
συνάρτηση initMap () {
data = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); παρατήρηση(); }
Καθορίστε το όνομα αυτής της επανάκλησης στο url (εισαγάγαμε εδώ πριν από το κλειδί API) σε μια ετικέτα HTML:
script async defer src = "https://maps.googleapis.com/maps/api/js?key= [KEY]&callback=initMap"
Ένας δείκτης μπορεί να εισαχθεί στο χάρτη όταν δημιουργηθεί το αντικείμενο:
new google.maps. Marker ({position: {lat: LATITUDE, lng: LONGITUDE}, map: map, icon: “/path/to/icon.png”})
Μπορείτε να δείτε στον κώδικα ότι για κάθε δεδομένα στο σύνολο δεδομένων των ανωμαλιών εισάγεται ένας δείκτης (δείτε τη συνάρτηση παρατήρησης ()) και το εικονίδιο βασίζεται στην κλάση της ανωμαλίας. Όταν εκτελείται αυτό στο πρόγραμμα περιήγησης, μπορούμε να εξερευνήσουμε έναν χάρτη στον οποίο οι ανωμαλίες μπορούν να φιλτραριστούν χρησιμοποιώντας πλαίσια ελέγχου, όπως φαίνεται στην εικόνα.
Βήμα 15: Πιστώσεις και εξωτερικοί σύνδεσμοι
Αυτό το έργο έγινε από τους Giovanni De Luca, Andrea Fioraldi και Pietro Spadaccino, πρώτου έτους MSc in Engineering in Computer Science φοιτητές στο Πανεπιστήμιο Sapienza της Ρώμης.
-
Διαφάνειες που χρησιμοποίησαν οι συγγραφείς για να παρουσιάσουν αυτήν την απόδειξη της έννοιας:
www.slideshare.net/PietroSpadaccino/road-m…
-
GitHub repos με όλο τον κώδικα:
github.com/roadteam
Συνιστάται:
Αυτόματα φώτα του δρόμου με χρήση αισθητήρα υπερήχων: 3 βήματα
Αυτόματα φώτα του δρόμου με χρήση αισθητήρα υπερήχων: Σκεφτήκατε ποτέ ότι πώς τα φώτα του δρόμου ανάβουν αυτόματα τη νύχτα και σβήνουν αυτόματα το πρωί; Υπάρχει κάποιος που μπαίνει στο ON/OFF αυτά τα φώτα; Υπάρχουν διάφοροι τρόποι για να ανάψετε τα φώτα του δρόμου, αλλά οι παρακάτω γ
Αυτόματος φωτισμός δρόμου DIY Solar Powered: 3 βήματα
Αυτόματος φωτισμός δρόμου DIY Solar Powered: Το σπίτι μου βρίσκεται σε αγροτική περιοχή, οπότε ο δρόμος μπροστά από το σπίτι μου είναι εντελώς σκοτεινός όταν δεν υπάρχει καθόλου φως. Εδώ λοιπόν έφτιαξα ένα ηλιακό φωτιστικό που ανάβει αυτόματα κατά το ηλιοβασίλεμα και σβήνει με την ανατολή. Χρησιμοποιεί το ηλιακό πάνελ ως
Ενεργειακά αποδοτική κίνηση Φώτα δρόμου: 8 βήματα
Energy Efficient Motion Activated Street Lights: Ο στόχος μας με αυτό το έργο ήταν να δημιουργήσουμε κάτι που θα εξοικονομούσε ενέργεια και οικονομικούς πόρους από τις κοινότητες. Τα φώτα του δρόμου που ενεργοποιούνται με κίνηση θα κάνουν και τα δύο αυτά πράγματα. Σε όλη τη χώρα η ενέργεια σπαταλάται στα φώτα των δρόμων που φωτίζουν τους δρόμους
Πώς να φτιάξετε αυτόματο φωτισμό δρόμου χρησιμοποιώντας το LM555 IC: 8 βήματα
Πώς να φτιάξετε αυτόματο φωτισμό δρόμου χρησιμοποιώντας το LM555 IC: Γεια σου φίλε, σήμερα θα κάνω ένα κύκλωμα αυτόματου φωτισμού δρόμου χρησιμοποιώντας το LM555 IC. Αυτό το κύκλωμα λειτουργεί έτσι Όταν το φως θα πέσει στο LDR (την ημέρα) τότε το LED δεν θα ανάψει και όταν το φως δεν είναι αναμμένο στο LDR, τότε το LED θα ανάψει αυτόματα
Πώς να φτιάξετε αυτόματο φωτισμό δρόμου: 7 βήματα
Πώς να φτιάξετε αυτόματο φωτισμό δρόμου: Γεια σου φίλε, σήμερα θα κάνω ένα κύκλωμα αυτόματου φωτισμού δρόμου. Αυτό το κύκλωμα θα λειτουργήσει αυτόματα. Το πρωινό φως θα κλείσει αυτόματα. Αυτό το κύκλωμα λειτουργεί με το LDR. Ας ξεκινήσουμε