Inhaltsverzeichnis:

GPS-Tracking-3D-Karte - Gunook
GPS-Tracking-3D-Karte - Gunook

Video: GPS-Tracking-3D-Karte - Gunook

Video: GPS-Tracking-3D-Karte - Gunook
Video: Our Best 3D Maps Yet Come to Android 2024, November
Anonim
GPS-Tracking 3D-Karte
GPS-Tracking 3D-Karte
GPS-Tracking 3D-Karte
GPS-Tracking 3D-Karte

Dieses Projekt ist eine 3D-gedruckte 3D-Karte mit Straßen, Flüssen und Städten mit LED-Leuchtfeuern, um den Standort der Familienmitglieder anzuzeigen. Es kann zeigen, ob ein Kind in der Schule ist oder nicht, oder nur der Standort beider Elternteile. Wir können damit auch vorhersagen, wann die Eltern nach Hause kommen, damit das Abendessen zur richtigen Zeit zubereitet werden kann. Es ist auch einfach ein generell cooles Projekt, das man Familie und Freunden vorführen und zeigen kann.

Ich hoffe, Sie genießen es, dieses Instructable zu machen, oder genießen Sie es, etwas über ein Projekt herauszufinden, das ich gemacht habe

Schritt 1: Erhalten einer 3D-Karte

Um eine 3D-Karte Ihrer Region zu erhalten, habe ich eine separate Anleitung geschrieben, die Sie durch den Prozess der Herstellung führt. Der Link zum instructable ist hier:

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

Schritt 2: Vorbereiten der Karte für LED-Einsätze

Da Sie nun eine 3D-Karte mit Straßen, Städten und Flüssen haben, benötigen wir eine Möglichkeit, um anzuzeigen, wo sich eine Person auf der Karte befindet. Ich habe zweifarbige 3mm RG-LEDs verwendet, da der Hauptzweck der Karte darin besteht, zu zeigen, wo sich die beiden Elternteile befinden. An bestimmten Stellen habe ich eine RGB-LED verwendet, um zu zeigen, wo das älteste Kind war. Es gibt eine Grenze von 28 Pins für die Ausgabe auf dem Raspberry Pi. Wählen Sie also die Positionen der LEDs mit Bedacht aus. Am Ende habe ich ungefähr 24 davon verwendet, also sollte es Ihnen gut gehen.

Um PLA zu bohren, fand ich einen normalen Holzbohrer, der gut funktionierte, und ich behandelte ihn so, wie ich Holz behandeln würde.

An Stellen, an denen die Karte zu dick war, bohrte ich die Grundschicht mit einem großen Bohrer aus und dann die sichtbare darüberliegende Schicht mit dem richtigen 3mm-Bohrer.

Schritt 3: Setzen Sie die LEDs ein

Setzen Sie die LEDs ein
Setzen Sie die LEDs ein

Jetzt, da wir Löcher für die LEDs haben, um darin zu sitzen, können wir sie einkleben. PVA oder Sekundenkleber funktioniert dafür gut, ich fand, dass PVA um ihn herum lief, um ihn zu versiegeln, und Sekundenkleber funktionierte auch sehr gut. Achten Sie darauf, dass bei jeder LED diese nur auf der sichtbaren Seite um wenige mm herausragen, denn wenn die LEDs ganz herausragen sieht es etwas unordentlich aus. Machen Sie sich keine Sorgen um die Beine auf der Rückseite, wir können diese nach dem Löten umklappen.

Schritt 4: Verbinden Sie die LEDs mit dem Raspberry Pi

Ich habe die LEDs jedoch direkt an den Raspberry Pi gelötet, wenn Sie jedoch einen mit einem vorgelöteten Header haben oder den Pi für etwas anderes verwenden möchten, würde ich vorschlagen, für jede LED Überbrückungsdrähte zu verwenden, was bedeutet, dass der Pi ist abnehmbar. Sie können sehen, dass ich, nachdem ich die LED gelötet hatte, die Beine nach unten gefaltet habe, damit sie nicht auf der Rückseite klebten.

Schritt 5: Testen Sie die LEDs

Testen Sie die LEDs
Testen Sie die LEDs

Um sicherzustellen, dass alle LEDs funktionieren, habe ich ein Skript ausgeführt, das jeden möglichen Pin durchläuft und sie nacheinander aufleuchtet, was zum nächsten übergeht, wenn ich auf die Eingabetaste klicke. Dadurch konnte ich notieren, welche PIN-Nummer welche Position hat, was sehr nützlich war.

RPi. GPIO als GPIO importieren

Importzeit GPIO.setmode(GPIO. BCM) für i im Bereich(0, 28): GPIO.setup(i, GPIO. OUT) für i im Bereich(0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("Das war: " + str(i)) z = raw_input("Next?")

Während dies geschah, notierte ich in einer Textdatei, welcher Pin welche Position und welche Farbe hatte. Sie müssen dies tun, da es im nächsten Schritt sehr nützlich ist.

Schritt 6: Code zum Einschalten der LED auf Anfrage

Die Art und Weise, wie ich dieses Projekt durchgeführt habe, beinhaltet einen Raspberry Pi Zero W mit einer einfachen Website, auf der Sie einen Pin einschalten können. Dies bedeutete, dass der Haupt-Pi 4, der normalerweise eingeschaltet ist und läuft, die Verarbeitung übernehmen kann, und dann muss der kleine Pi 0 nur einen Stift einschalten, was die Sache etwas komplizierter macht. Ich habe dies getan, weil es zu meinem Setup passt, und ich hatte auch das Gefühl, dass der Pi 0 etwas langsam sein kann für das, was wir später tun werden.

RPi. GPIO als GPIO importieren

Importzeit aus Kolben importieren Flask, render_template, request, jsonify import os app = Flask(_name_) p = GPIO.setmode(GPIO. BCM) für i in range(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) return "Off" @app.route("/off/all") def alloff(): for i in range(0, 28): GPIO.output(i, GPIO. LOW) return "off" @app.route("/on/") def turn_on(pin): GPIO.output(int(pin), GPIO. HIGH) gibt "On" zurück wenn _name_ == '_main_': app.run(debug=True, host='0.0. 0.0')

Dies funktioniert so, dass es auf die URL der IP-Adresse des Pi wartet und dann auf ein oder aus und dann auf die PIN-Nummer.

Speichern Sie diesen Code im Home-Verzeichnis des Raspberry Pi und nennen Sie ihn "pin_website.py".

Sie müssen dies so einstellen, dass es automatisch ausgeführt wird, also im Terminal-Typ: sudo nano /etc/profile

Fügen Sie am Ende dieser Datei "python3 pin_website.py &" hinzu.

Das "&" ist wichtig, da es im Hintergrund ausgeführt wird und somit das Booten fortgesetzt werden kann

Schritt 7: So erhalten Sie den Standort

So erhalten Sie den Standort
So erhalten Sie den Standort

Mit IFTTT können Sie einen Dienst einrichten, der Ihnen beim Betreten eines bestimmten Standorts eine E-Mail senden, eine Webadresse anpingen oder Ihnen per Telegramm eine Nachricht senden kann.

Schritt 8: Wie das alles funktioniert

Das Setup, das ich habe, ist ein Server Pi, der meine Website hostet, mit Portweiterleitung und einem statischen DNS, der den Dienst von https://freedns.afraid.org/ verwendet. Vieles davon ist ziemlich komplex, und Sie müssen ein Verständnis für die Portweiterleitung haben, ich könnte eine Anleitung dazu machen, wie man diesen Teil ein anderes Mal macht.

Eine andere Möglichkeit besteht darin, Telegramme zu verwenden, um Nachrichten an den Pi zu senden, oder möglicherweise am einfachsten, indem Sie einen E-Mail-Reader einrichten, der die E-Mails liest und darüber Standortaktualisierungen empfängt.

Ich habe weder den Telegram-Bot noch einen E-Mail-Reader ausprobiert, aber es gibt viele Tutorials, die Ihnen zeigen, wie es geht.

Hier ist mein Flask / Python-Code, der dann von Webhooks mit IFTTT angefordert wird:

aus Kolbenimport Flask, render_template, request, jsonify

import os from datetime import datetime from map import * app = Flask(_name_) l = 0 setup() @app.route('/') def index(): return request.remote_addr @app.route('/mum/enter /') def mu(location): mum.current_loc(location) return "Danke für das Update, Mama!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "Danke für das Update, Dad!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "Hey, Me" @app.route('/mum/exit/') def mume(location): mum.offline(location) return "Danke für das Update, Mama!" @app.route("/dad/exit/") def dade(l): dad.offline(l) return "Danke für das Update, Papa!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "Hey, Me" @app.route("/reset") def redo(): setup() return "Zurücksetzen!" if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

und map.py:

import http.client, urllib.request, urllib.parse, urllib.error, base64

import ast, json import time 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")) response = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251.5000' "GET", str("/off/all")) response = conn.getresponse() f = open("pin", "w") f.write(str(-1)) f.close() f = open("pind", "w") f.write(str(-1)) f.close() f = open("pinm", "w") f.write(str(-1)) f.close () class mum: def current_loc(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "vier Kreuze": 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)) response = conn.getrespons e() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) response = 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, "vier Kreuze": 18, "llandrinio": 25, "welshpool": 27 } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str(" /off/") + str(last_loc)) response = 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, "vier Kreuze": 15, "llandrinio": 10, "welshpool": 24 } def current_loc(l): global dlast_loc locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech": 6, "vier Kreuze": 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)) response = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) response = conn.getresponse() dlast_loc = locs[l] def offline(l): global dlast_loc locs = { "welshpool": 3, "lynclys ": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "vier Kreuze": 15, "llandrinio": 10 } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/") + str(dlast_loc)) response = 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)) response = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request ("GET", str("/on/") + str(lo cs[l])) response = 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)) response = conn.getresponse() f = open("pinm", "w") f.write(str(locs[l])) f.close() os.system("python3 flashm.py &")

Schritt 9: Erstellen Sie Ihre eigene Inspiration aus meinem Projekt

Ich weiß also, dass der vorherige Schritt sehr schwer zu verstehen sein wird, also belasse ich es, Ihnen zu zeigen, wie Sie die Karte erstellen und ein Himbeer-Pi haben, das die LEDs ein- und ausschaltet. Sie müssen nun ein Python-Skript erstellen, das Ihnen mit IFTTT eine E-Mail sendet. Dann müssen Sie einen E-Mail-Lesecode finden, was ganz einfach ist (google it). Wenn Sie dann eine E-Mail gelesen und den Standort eines Elternteils gefunden haben, verwenden Sie 'if'-Anweisungen, um herauszufinden, welcher Pin aktiviert werden soll.

Auf der Karte bedeutet ein blinkendes Licht, dass sie das Gebiet gerade verlassen haben

So schalten Sie die LEDs auf einem anderen Pi von Python aus wie folgt ein:

import http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #ändere dies mit der IP-Adresse der Karte des Himbeer-Pi conn.request("GET", str("/off /2")) # dies schaltet Pin Nummer 2 aus response = conn.getresponse() # dies fordert die URL an, und dann liest das Map pi diese und schaltet Pin Nummer 2 aus

Grundsätzlich hoffe ich, dass Sie das, was ich mit meiner 3D-Karte gemacht habe, als Inspiration verwenden können, um Ihre eigene GPS-Tracking-Karte zu erstellen.

Empfohlen: