Πίνακας περιεχομένων:

GPS Tracking 3D χάρτης: 9 βήματα
GPS Tracking 3D χάρτης: 9 βήματα

Βίντεο: GPS Tracking 3D χάρτης: 9 βήματα

Βίντεο: GPS Tracking 3D χάρτης: 9 βήματα
Βίντεο: Improve Google Maps GPS Accuracy by turning this settings on! #googlemaps #gps #maps #wifi #shorts 2024, Νοέμβριος
Anonim
GPS Tracking 3D χάρτης
GPS Tracking 3D χάρτης
GPS Tracking 3D χάρτης
GPS Tracking 3D χάρτης

Αυτό το έργο είναι ένας τρισδιάστατος εκτυπωμένος τρισδιάστατος χάρτης, με δρόμους, ποτάμια και πόλεις, με φάρους LED που δείχνουν τη θέση των μελών της οικογένειας. Μπορεί να δείξει εάν ένα παιδί πηγαίνει στο σχολείο ή όχι, ή απλώς η τοποθεσία και των δύο γονέων. Μπορούμε επίσης να το χρησιμοποιήσουμε για να προβλέψουμε ποια ώρα θα επιστρέψουν οι γονείς στο σπίτι, έτσι ώστε το δείπνο να γίνει για τη σωστή ώρα. Είναι επίσης απλώς ένα γενικά δροσερό έργο για επίδειξη και εμφάνιση στην οικογένεια και τους φίλους.

Ελπίζω να σας αρέσει να κάνετε αυτό το Instructable ή να απολαμβάνετε να μαθαίνετε για ένα έργο που έχω κάνει

Βήμα 1: Λήψη τρισδιάστατου χάρτη

Για να πάρετε έναν τρισδιάστατο χάρτη της περιοχής σας, έχω γράψει ένα ξεχωριστό οδηγό για να σας καθοδηγήσω στη διαδικασία κατασκευής του. Ο σύνδεσμος προς το διδακτικό είναι εδώ:

www.instructables.com/id/Making-a-3D-Print…

Βήμα 2: Προετοιμασία του χάρτη για ένθετα LED

Τώρα που έχετε έναν τρισδιάστατο χάρτη, με δρόμους, πόλεις και ποτάμια, χρειαζόμαστε έναν τρόπο να υποδείξουμε πού βρίσκεται ένα άτομο στο χάρτη. Χρησιμοποίησα δίχρωμα LED RG 3mm, γιατί ο κύριος σκοπός του χάρτη είναι να δείξει πού βρίσκονται οι δύο γονείς. Σε ορισμένα σημεία χρησιμοποίησα ένα LED RGB, για να μου επιτρέψει να δείξω πού ήταν το μεγαλύτερο παιδί. Υπάρχει ένα όριο 28 ακίδων για έξοδο στο Raspberry Pi, οπότε επιλέξτε τις θέσεις των LED με σύνεση. Κατέληξα να χρησιμοποιώ περίπου 24 από αυτά, οπότε θα πρέπει να είσαι καλά.

Για να τρυπήσω PLA, βρήκα ότι ένα κανονικό ξύλινο τρυπάνι λειτούργησε καλά και το αντιμετώπισα όπως θα αντιμετώπιζα το ξύλο.

Σε μέρη, όπου ο χάρτης ήταν πολύ παχύς, τρυπούσα το βασικό στρώμα με ένα μεγάλο τρυπάνι και στη συνέχεια το ορατό παραπάνω στρώμα με το σωστό τρυπάνι 3mm.

Βήμα 3: Τοποθετήστε τα LED

Τοποθετήστε τα LED
Τοποθετήστε τα LED

Τώρα που έχουμε τρύπες για να καθίσουν οι λυχνίες LED, μπορούμε να τις κολλήσουμε. Το PVA ή το Superglue λειτουργεί καλά για αυτό, διαπίστωσα ότι το PVA έτρεχε γύρω του σφραγίζοντάς το στη θέση του και το superglue επίσης λειτούργησε πολύ καλά. Βεβαιωθείτε ότι με κάθε LED, κολλάνε μόνο στην ορατή πλευρά κατά μερικά χιλιοστά, διότι τα LED που εμφανίζονται σε όλη τη διαδρομή φαίνονται λίγο ακατάστατα. Μην ανησυχείτε για τα πόδια στο πίσω μέρος, μπορούμε να τα διπλώσουμε μόλις κολλήσουν.

Βήμα 4: Συνδέστε τις λυχνίες LED στο Raspberry Pi

Συγκόλλησα απευθείας τα LED στο Raspberry Pi, ωστόσο, εάν έχετε ένα με προ-συγκολλημένη κεφαλίδα ή θέλετε να μπορείτε να χρησιμοποιήσετε το pi για κάτι άλλο, τότε θα πρότεινα να χρησιμοποιήσετε καλώδια jumper για κάθε LED, πράγμα που σημαίνει ότι το Pi είναι αφαιρούμενο. Μπορείτε να δείτε ότι μόλις συγκολλήσα το LED, δίπλωσα τα πόδια προς τα κάτω, ώστε να μην κολλήσουν στο πίσω μέρος.

Βήμα 5: Δοκιμάστε τα LED

Δοκιμάστε τα LED
Δοκιμάστε τα LED

Για να βεβαιωθώ ότι λειτουργούν όλες οι λυχνίες LED, έτρεξα ένα σενάριο που περνάει από κάθε πιθανή ακίδα και τα ανάβει, ένα κάθε φορά, το οποίο περνάει στο επόμενο όταν κάνω κλικ στο enter. Αυτό μου επέτρεψε να σημειώσω ποιος αριθμός καρφίτσα έκανε ποια τοποθεσία, η οποία ήρθε πολύ χρήσιμη.

εισαγωγή RPi. GPIO ως GPIO

χρόνος εισαγωγής GPIO.setmode (GPIO. BCM) για i σε εύρος (0, 28): GPIO.setup (i, GPIO. OUT) για i σε εύρος (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0,3) GPIO.output (i, GPIO. LOW) εκτύπωση ("Αυτό ήταν:" + str (i)) z = raw_input ("Next?")

Ενώ αυτό συνέβαινε, θα σημειώσω ένα αρχείο κειμένου ποια καρφίτσα έκανε ποια τοποθεσία και ποιο χρώμα. Πρέπει να το κάνετε αυτό, καθώς είναι πολύ χρήσιμο στο επόμενο βήμα.

Βήμα 6: Κωδικοποιήστε για να ενεργοποιήσετε το LED όταν σας ζητηθεί

Ο τρόπος με τον οποίο έχω κάνει αυτό το έργο περιλαμβάνει ένα Raspberry Pi Zero W, με έναν βασικό ιστότοπο που σας επιτρέπει να ενεργοποιήσετε μια καρφίτσα. Αυτό σήμαινε ότι το κύριο Pi 4, το οποίο είναι συνήθως ενεργοποιημένο και λειτουργεί, μπορεί να κάνει την επεξεργασία και στη συνέχεια το μικρό Pi 0 πρέπει μόνο να ενεργοποιήσει μια καρφίτσα, κάνοντας τα πράγματα λίγο πιο περίπλοκα. Το έκανα επειδή ταιριάζει στη ρύθμιση μου και επίσης ένιωσα ότι το Pi 0 μπορεί να είναι λίγο αργό για αυτό που θα κάνουμε αργότερα.

εισαγωγή RPi. GPIO ως GPIO

χρόνος εισαγωγής από εισαγωγή φιάλης Φιάλη, render_template, αίτημα, jsonify εισαγωγή os app = Φιάλη (_ όνομα_) p = GPIO.setmode (GPIO. BCM) για i σε εύρος (0, 28): GPIO.setup (i, GPIO. OUT) @app.route ('/') def index (): return request.remote_addr @app.route ("/off/") def turn_off (pin): GPIO.output (int (pin), GPIO. LOW) επιστροφή "Off" @app.route ("/off/all") def alloff (): για i στην περιοχή (0, 28): GPIO.output (i, GPIO. LOW) return "off" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) return "On" if _name_ == '_main_': app.run (debug = True, host = '0.0 0,0 ')

Ο τρόπος με τον οποίο λειτουργεί αυτό είναι ότι περιμένει το url της διεύθυνσης IP του pi και στη συνέχεια ένα on ή off και στη συνέχεια τον αριθμό pin.

αποθηκεύστε αυτόν τον κωδικό στον αρχικό κατάλογο του Raspberry Pi και ονομάστε τον "pin_website.py"

Θα χρειαστεί να το ρυθμίσετε ώστε να εκτελείται αυτόματα, για να το κάνετε αυτό, στον τύπο τερματικού: sudo nano /etc /profile

Στο κάτω μέρος αυτού του αρχείου, προσθέστε "python3 pin_website.py &"

Το "&" είναι απαραίτητο, καθώς το κάνει να εκτελείται στο παρασκήνιο και επομένως επιτρέπει την εκκίνηση να συνεχιστεί

Βήμα 7: Πώς να λάβετε τοποθεσία

Πώς να λάβετε τοποθεσία
Πώς να λάβετε τοποθεσία

Χρησιμοποιώντας το IFTTT, μπορείτε να ρυθμίσετε μια υπηρεσία έτσι ώστε όταν το τηλέφωνο εισέλθει σε μια συγκεκριμένη τοποθεσία, να μπορεί να σας στείλει email, ή να στείλει μια διεύθυνση ιστού ή να σας στείλει μήνυμα στο τηλεγράφημα.

Βήμα 8: Πώς λειτουργεί όλο αυτό

Η ρύθμιση που έχω είναι ένας διακομιστής Pi, ο οποίος φιλοξενεί τον ιστότοπό μου, με προώθηση θυρών και ένα στατικό DNS χρησιμοποιώντας την υπηρεσία που παρέχει η https://freedns.afraid.org/. Πολλά από αυτά είναι αρκετά περίπλοκα και πρέπει να έχετε μια κατανόηση της προώθησης λιμένων. Mightσως σας δώσω έναν οδηγό πώς να το κάνετε αυτό το κομμάτι μια άλλη φορά.

Ένας άλλος τρόπος που μπορείτε να το κάνετε είναι να χρησιμοποιήσετε το τηλεγράφημα για να λάβετε μηνύματα στο pi, ή πιθανώς ο ευκολότερος, είναι να δημιουργήσετε έναν αναγνώστη ηλεκτρονικού ταχυδρομείου που διαβάζει τα μηνύματα ηλεκτρονικού ταχυδρομείου και λαμβάνει ενημερώσεις τοποθεσίας μέσω αυτού.

Δεν έχω δοκιμάσει το Telegram bot ή έναν αναγνώστη email, αλλά υπάρχουν πολλά σεμινάρια εκεί έξω που θα σας δείξουν πώς να το κάνετε.

Εδώ είναι ο κώδικας μου Flask / Python, ο οποίος στη συνέχεια ζητείται από webhooks χρησιμοποιώντας το IFTTT:

από φιάλη εισαγωγής Φιάλη, render_template, αίτημα, jsonify

εισαγωγή os από datetime εισαγωγή datetime από χάρτη import * app = Flask (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (τοποθεσία): mum.current_loc (τοποθεσία) επιστροφή "Ευχαριστώ για την ενημέρωση, μαμά!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) return "Thanks For The Update, Dad!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) επιστροφή "Hey, Me" @app.route ('/mum/exit/') def mume (τοποθεσία): mum.offline (τοποθεσία) επιστροφή "Ευχαριστώ για την ενημέρωση, μαμά!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "Thanks For The Update, Dad!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) επιστροφή "Hey, Me" @app.route ("/reset") def redo (): setup () return "Επαναφορά!" εάν _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

και map.py:

εισαγωγή http.client, urllib.request, urllib.parse, urllib.error, base64

import ast, json time import import threading import os params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('freedns.afraid.org') conn.request ("GET", str ("/dynamic/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) respond = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1) "GET", str ("/off/all")) respond = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = άνοιγμα ("pind", "w") f.write (str (-1)) f.close () f = open ("pinm", "w") f.write (str (-1)) f.close () mum class: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "τέσσερις σταυροί": 18, "llandrinio": 25, "welshpool": 27} f = open ("pin", "w") f.write (str (-1)) f.close () time. sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (last_loc)) respond = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/on/") + str (locs [l])) respond = conn.getresponse () last_loc = locs [l] def offline (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13," τέσσερις σταυροί ": 18," llandrinio ": 25," welshpool ": 27} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request (" GET ", str (" /off/") + str (last_loc)) respond = conn.getresponse () f = open (" pin "," w ") f.write (str (locs [l])) f.close () os.system ("python3 flash.py &") class dad: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "τέσσερις σταυροί": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," τέσσερις σταυροί ": 15} f = open (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.reques t ("GET", str ("/off/") + str (dlast_loc)) respond = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/on/") + str (locs [l])) respond = conn.getresponse () dlast_loc = locs [l] def offline (l): global dlast_loc locs = {"welshpool": 3, "lynclys ": 1," σπίτι ": 23," shrewsbury ": 0," llanymynech ": 6," τέσσερις σταυροί ": 15," llandrinio ": 10} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (dlast_loc)) respond = conn.getresponse () f = open ("pind", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") class me: def current_loc (l): global mlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} f = open ("pinm", "w") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000 ') conn.request ("GET", str ("/off/") + str (mlast_loc)) respond = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("GET", str ("/on/") + str (βλ cs [l])) respond = conn.getresponse () mlast_loc = locs [l] def offline (l): global dlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (mlast_loc)) respond = conn.getresponse () f = open ("pinm", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

Βήμα 9: Δημιουργήστε το δικό σας από την έμπνευση από το έργο μου

Γνωρίζω λοιπόν ότι το προηγούμενο βήμα θα είναι πολύ δύσκολο να κατανοηθεί, οπότε θα το αφήσω να σας δείξει πώς να φτιάξετε τον χάρτη και να έχετε ένα βατόμουρο pi που ανάβει και σβήνει τα LED. Τώρα πρέπει να δημιουργήσετε ένα σενάριο python το οποίο, χρησιμοποιώντας το IFTTT, σας στέλνει μηνύματα ηλεκτρονικού ταχυδρομείου. Στη συνέχεια, πρέπει να βρείτε ένα κομμάτι κώδικα ανάγνωσης email, το οποίο είναι αρκετά εύκολο (google it). Στη συνέχεια, μόλις διαβάσετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου και βρείτε την τοποθεσία ενός γονέα, χρησιμοποιήστε τις δηλώσεις "εάν" για να βρείτε ποια καρφίτσα θα ενεργοποιήσετε.

Στον χάρτη, μια λυχνία που αναβοσβήνει σημαίνει ότι μόλις έχουν φύγει από την περιοχή

Ο τρόπος ενεργοποίησης των LED σε άλλο pi από python είναι ο παρακάτω:

εισαγωγή http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #αλλαγή αυτό με τη διεύθυνση IP του χάρτη του βατόμουρου pi conn.request ("GET", str ("/off /2 ")) # αυτό απενεργοποιεί τον αριθμό pin 2 reply = conn.getresponse () # ζητά τη διεύθυνση URL και, στη συνέχεια, ο χάρτης pi το διαβάζει αυτό και απενεργοποιεί τον αριθμό pin 2

Βασικά, ελπίζω ότι μπορείτε να χρησιμοποιήσετε αυτό που έχω κάνει με τον τρισδιάστατο χάρτη μου ως έμπνευση για να φτιάξετε τον δικό σας χάρτη παρακολούθησης GPS.

Συνιστάται: