Inhoudsopgave:

GPS-tracking 3D-kaart: 9 stappen
GPS-tracking 3D-kaart: 9 stappen

Video: GPS-tracking 3D-kaart: 9 stappen

Video: GPS-tracking 3D-kaart: 9 stappen
Video: ПРАВИЛЬНОЕ ОХЛАЖДЕНИЕ КОМПЬЮТЕРА - КАК ПРАВИЛЬНО УСТАНОВИТЬ ВЕНТИЛЯТОРЫ - НА ВДУВ ИЛИ ВЫДУВ? 2024, Juli-
Anonim
GPS-tracking 3D-kaart
GPS-tracking 3D-kaart
GPS-tracking 3D-kaart
GPS-tracking 3D-kaart

Dit project is een 3D-geprinte 3D-kaart, met wegen, rivieren en steden, met LED-bakens om de locatie van leden van het gezin te tonen. Het kan laten zien of een kind al dan niet op school is, of alleen de locatie van beide ouders. We kunnen het ook gebruiken om te voorspellen hoe laat de ouders thuiskomen, zodat er op het juiste moment gegeten kan worden. Het is ook gewoon een over het algemeen cool project om te pronken en te laten zien aan familie en vrienden.

Ik hoop dat je geniet van het maken van dit Instructable, of geniet van het vinden van een project dat ik heb gemaakt

Stap 1: Een 3D-kaart verkrijgen

Om een 3D-kaart van uw gebied te krijgen, heb ik een aparte instructable geschreven om u te helpen bij het maken van een kaart. De link naar de instructable is hier:

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

Stap 2: De kaart voorbereiden voor LED-invoegingen

Nu je een 3D-kaart hebt, met wegen, steden en rivieren, hebben we een manier nodig om aan te geven waar een persoon zich op de kaart bevindt. Ik heb tweekleurige RG-leds van 3 mm gebruikt, omdat het belangrijkste doel van de kaart is om te laten zien waar de twee ouders zijn. Op bepaalde plekken heb ik een RGB-led gebruikt, zodat ik kon laten zien waar het oudste kind was. Er is een limiet van 28 pinnen om uit te voeren op de Raspberry Pi, dus kies verstandig de locaties van de LED's. Uiteindelijk heb ik er ongeveer 24 gebruikt, dus het zou goed moeten komen.

Om PLA te boren, ontdekte ik dat een normale houtboor goed werkte, en ik behandelde het zoals ik hout zou behandelen.

Op plaatsen waar de kaart te dik was, zou ik de basislaag uitboren met een grote boor, en dan de zichtbare bovenlaag met de juiste boor van 3 mm.

Stap 3: Plaats de LED's

Plaats de LED's
Plaats de LED's

Nu we gaten hebben waar de LED's in kunnen zitten, kunnen we ze erin lijmen. PVA of superlijm werkt hier goed voor, ik ontdekte dat PVA eromheen liep en het op zijn plaats verzegelde, en superlijm werkte ook heel goed. Zorg ervoor dat ze bij elke LED slechts een paar mm uitsteken aan de zichtbare kant, want het lijkt een beetje rommelig om de LED's helemaal uit te steken. Maak je geen zorgen over de pootjes aan de achterkant, deze kunnen we omvouwen zodra ze gesoldeerd zijn.

Stap 4: Sluit de LED's aan op de Raspberry Pi

Ik heb de LED's rechtstreeks aan de Raspberry Pi gesoldeerd, maar als je er een hebt met een voorgesoldeerde header, of als je de pi voor iets anders wilt gebruiken, dan raad ik aan om voor elke LED jumperdraden te gebruiken, wat betekent dat de Pi is verwijderbaar. Je kunt zien dat ik, toen ik de LED had gesoldeerd, de pootjes naar beneden vouwde zodat ze niet aan de achterkant bleven plakken.

Stap 5: Test de LED's

Test de LED's
Test de LED's

Om er zeker van te zijn dat alle LED's werken, heb ik een script uitgevoerd dat door elke mogelijke pin gaat en ze één voor één oplicht, die naar de volgende gaat als ik op enter klik. Hierdoor kon ik noteren welke pincode op welke locatie deed, wat erg handig was.

importeer RPi. GPIO als GPIO

importtijd GPIO.setmode(GPIO. BCM) voor i binnen bereik (0, 28): GPIO.setup(i, GPIO. OUT) voor i binnen bereik (0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("Dat was: " + str(i)) z = raw_input("Volgende?")

Terwijl dit gebeurde, noteerde ik in een tekstbestand welke pin op welke locatie stond en welke kleur. U moet dit doen, omdat het erg handig is in de volgende stap.

Stap 6: Code om de LED in te schakelen wanneer daarom wordt gevraagd

De manier waarop ik dit project heb gedaan, omvat een Raspberry Pi Zero W, met een eenvoudige website waarmee je een pin kunt inschakelen. Dit betekende dat de belangrijkste Pi 4, die meestal aan staat en draait, de verwerking kan doen, en dat de kleine Pi 0 dan alleen een pin hoeft aan te zetten, wat de zaken iets gecompliceerder maakt. Ik deed dit omdat het bij mijn setup past, en ik voelde ook dat de Pi 0 een beetje traag kan zijn voor wat we later zullen doen.

importeer RPi. GPIO als GPIO

import tijd uit kolf import kolf, render_template, verzoek, jsonify import os app = kolf(_name_) p = GPIO.setmode(GPIO. BCM) voor i binnen bereik (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) return "On" if _name_ == '_main_': app.run(debug=True, host='0.0. 0,0')

De manier waarop dit werkt, is dat het wacht op de url van het IP-adres van de pi en vervolgens een aan of uit en vervolgens het pinnummer.

sla deze code op in de homedirectory van de Raspberry Pi en noem deze "pin_website.py"

U moet dit zo instellen dat het automatisch wordt uitgevoerd, dus om dit te doen, in het terminaltype: sudo nano /etc/profile

Voeg onderaan dit bestand "python3 pin_website.py &" toe

De "&" is essentieel, omdat het ervoor zorgt dat het op de achtergrond wordt uitgevoerd en daarom het opstarten mogelijk maakt

Stap 7: Locatie ontvangen?

Locatie ontvangen
Locatie ontvangen

Met IFTTT kunt u een service instellen zodat wanneer de telefoon een bepaalde locatie binnenkomt, deze u kan e-mailen, een webadres kan pingen of u een telegram kan sturen.

Stap 8: Hoe dit allemaal werkt

De setup die ik heb is een Server Pi, die mijn website host, met port forwarding en een statische DNS met behulp van de service van https://freedns.afraid.org/. Veel hiervan is vrij complex, en je moet een goed begrip hebben van port forwarding, ik zou een instructie kunnen maken over hoe je dit onderdeel een andere keer kunt doen.

Een andere manier om dit te doen, is door telegram te gebruiken om berichten naar de pi te krijgen, of misschien wel de gemakkelijkste, door een e-maillezer in te stellen die de e-mails leest en via die locatie updates ontvangt.

Ik heb de Telegram-bot of een e-maillezer niet geprobeerd, maar er zijn genoeg tutorials die je laten zien hoe je dat moet doen.

Hier is mijn Flask / Python-code die vervolgens wordt aangevraagd door webhooks met IFTTT:

from flask import 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(locatie): mum.current_loc(locatie) return "Bedankt voor de update, mama!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "Bedankt voor de update, pap!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "Hey, Me" @app.route('/mum/exit/') def mume(location): mum.offline(locatie) return "Bedankt voor de update, mama!" @app.route("/dad/exit/") def dade(l): dad.offline(l) return "Bedankt voor de update, pap!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "Hey, Me" @app.route("/reset") def redo(): setup() return "Resetten!" if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

en map.py:

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

import ast, json import tijd 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")) response = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000() conn.request' "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 kruisen": 18, "llandrinio": 25, "welshpool": 27 } f = open("pin", "w") f.write(str(-1)) f.close() tijd. 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 kruisen": 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 &") klasse vader: locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "four crosses": 15, "llandrinio": 10, "welshpool": 24 } def current_loc(l): global dlast_loc locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech": 6, "four crosses": 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, "four crosses": 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 &")

Stap 9: Bouw je eigen van inspiratie uit mijn project

Dus ik weet dat de vorige stap heel moeilijk te begrijpen zal zijn, dus ik zal het laten om je te laten zien hoe je de kaart maakt, en in staat zijn om een Raspberry Pi te hebben die de LED's in- en uitschakelt. U moet nu een python-script maken dat u met IFTTT e-mailt. Dan moet je een e-mail lezend stukje code vinden, wat vrij eenvoudig is (google het). Zodra je een e-mail hebt gelezen en de locatie van een ouder hebt gevonden, gebruik je 'if'-instructies om te zien welke pin moet worden ingeschakeld.

Op de kaart betekent een knipperend licht dat ze net het gebied hebben verlaten

De manier om de LED's op een andere pi van python in te schakelen, is als volgt:

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

params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #wijzig dit met het IP-adres van de raspberry pi's conn.request("GET", str("/off /2")) # dit zet pin nummer 2 uit response = conn.getresponse() # dit vraagt om de URL, en dan leest de kaart pi dit en zet pin nummer 2 uit

Kortom, ik hoop dat je wat ik heb gedaan met mijn 3D-kaart als inspiratie kunt gebruiken om je eigen GPS-trackingkaart te maken.

Aanbevolen: