Innholdsfortegnelse:

GPS -sporing 3D -kart: 9 trinn
GPS -sporing 3D -kart: 9 trinn

Video: GPS -sporing 3D -kart: 9 trinn

Video: GPS -sporing 3D -kart: 9 trinn
Video: plate tectonics 2024, November
Anonim
GPS -sporing 3D -kart
GPS -sporing 3D -kart
GPS -sporing 3D -kart
GPS -sporing 3D -kart

Dette prosjektet er et 3D -trykt 3D -kart, med veier, elver og byer, med LED -beacons for å vise plasseringen av familiemedlemmer. Det kan vise om et barn er på skolen eller ikke, eller bare hvor begge foreldrene befinner seg. Vi kan også bruke den til å forutsi hvilken tid foreldrene kommer hjem, slik at middagen kan lages til rett tid. Det er også bare et generelt kult prosjekt å vise frem og vise til familie og venner.

Jeg håper du liker å lage denne Instructable, eller liker å finne ut om et prosjekt jeg har laget

Trinn 1: Få et 3D -kart

FOR å få et 3D -kart over området ditt, har jeg skrevet en egen instruks som kan hjelpe deg med å lage et. Lenken til det instruerbare er her:

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

Trinn 2: Forberede kartet for LED -innlegg

Nå som du har et 3D -kart, med veier, byer og elver, trenger vi en måte å indikere hvor en person er på kartet. Jeg brukte 3-fargede 3 mm RG-lysdioder, fordi hovedformålet med kartet er å vise hvor de to foreldrene er. Noen steder brukte jeg en RGB -LED, slik at jeg kunne vise hvor det eldste barnet var. Det er en grense på 28 pinner for utdata på Raspberry Pi, så velg plasseringene til lysdiodene med omhu. Jeg endte opp med å bruke rundt 24 av dem, så du burde ha det bra.

For å bore PLA fant jeg at en vanlig trebor fungerte bra, og jeg behandlet er som jeg ville behandlet tre.

På steder der kartet var for tykt, ville jeg bore ut grunnlaget med en stor borekrone, og deretter det synlige laget over med riktig 3 mm bor.

Trinn 3: Sett inn lysdiodene

Sett inn lysdiodene
Sett inn lysdiodene

Nå som vi har hull for lysdiodene å sitte i, kan vi lime dem inn. PVA eller Superlim fungerer godt for dette, jeg fant ut at PVA løp rundt det og forseglet det på plass, og superlim fungerte også veldig bra. Sørg for at de for hver LED bare stikker ut på den synlige siden med noen få mm, fordi det ser litt rotete ut når lysdiodene stikker ut hele veien. Ikke bekymre deg om beina på ryggen, vi kan brette dem over når de er loddet.

Trinn 4: Koble lysdiodene til Raspberry Pi

Jeg loddet LED-lampene direkte til Raspberry Pi, men hvis du har en med en forhåndsloddet overskrift, eller du vil kunne bruke pi til noe annet, vil jeg foreslå å bruke jumper-ledninger for hver LED, noe som betyr at Pi er avtagbar. Du kan se at når jeg hadde loddet LED -en, brettet jeg bena ned slik at de ikke festet seg på ryggen.

Trinn 5: Test lysdiodene

Test lysdiodene
Test lysdiodene

For å være sikker på at alle lysdiodene fungerer, kjørte jeg et skript som går gjennom hver mulig pin, og lyser dem opp, en om gangen, som går over til den neste når jeg klikker enter. Dette tillot meg å notere hvilket PIN -nummer som gjorde hvilket sted, noe som kom veldig nyttig.

importer RPi. GPIO som GPIO

importtid GPIO.setmode (GPIO. BCM) for i i området (0, 28): GPIO.setup (i, GPIO. OUT) for i i området (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("That Was:" + str (i)) z = raw_input ("Next?")

Mens dette skjedde, ville jeg notere ned en tekstfil som pin gjorde hvilken plassering og hvilken farge. Du må gjøre dette, da det er veldig nyttig i neste trinn.

Trinn 6: Kode for å slå på lysdioden når du blir bedt om det

Måten jeg har gjort dette prosjektet involverer en Raspberry Pi Zero W, med et grunnleggende nettsted som lar deg slå på en pin. Dette betydde at hoved Pi 4, som vanligvis er på, og kjører, kan utføre behandlingen, og da må den lille Pi 0 bare slå på en pinne, noe som gjør ting litt mer kompliserte. Jeg gjorde dette fordi det passer mitt oppsett, og jeg følte også at Pi 0 kan være litt treg for det vi skal gjøre senere.

importer RPi. GPIO som GPIO

importtid fra kolbeimportflaske, render_template, request, jsonify import os app = Flask (_ navn_) p = GPIO.setmode (GPIO. BCM) for i i område (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) returner "Av" @app.route ("/av/alle") def alloff (): for i i området (0, 28): GPIO.output (i, GPIO. LOW) returnerer "av" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) returnerer "On" if _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Måten dette fungerer på, venter på url -en til Pi -IP -adressen og deretter på eller av og deretter pin -nummeret.

lagre denne koden i hjemmekatalogen til Raspberry Pi, og gi den navnet "pin_website.py"

Du må sette dette til å kjøre automatisk, så for å gjøre dette, i terminaltypen: sudo nano /etc /profile

Legg til "python3 pin_website.py &" nederst i denne filen

"&" Er avgjørende, ettersom den får den til å kjøre i bakgrunnen, og derfor lar oppstarten fortsette

Trinn 7: Slik mottar du plassering

Slik mottar du plassering
Slik mottar du plassering

Ved å bruke IFTTT kan du konfigurere en tjeneste slik at når telefonen går inn på et bestemt sted, kan den sende deg en e -post, eller pinge en nettadresse, eller sende deg en melding på telegram.

Trinn 8: Hvordan alt dette fungerer

Oppsettet jeg har er en Server Pi, som er vert for nettstedet mitt, med portvideresending og en statisk DNS ved hjelp av tjenesten levert av https://freedns.afraid.org/. Mye av dette er ganske komplekst, og du må ha forståelse for portvideresending. Jeg kan lage en instruksjon om hvordan du gjør denne delen en annen gang.

En annen måte du kan gjøre det på er å bruke telegram for å få meldinger til pi, eller muligens den enkleste, er å sette opp en e -postleser som leser e -postene og mottar posisjonsoppdateringer via det.

Jeg har ikke prøvd Telegram -boten eller en e -postleser, men det er mange opplæringsprogrammer der ute som viser deg hvordan du gjør det.

Her er min Flask / Python -kode som deretter blir forespurt av webhooks som bruker IFTTT:

fra kolbeimport Flaske, render_template, request, jsonify

import os fra datetime import datetime fra kartimport * app = kolbe (_ navn_) l = 0 oppsett () @app.route ('/') def index (): return request.remote_addr @app.route ('/mamma/enter /') def mu (plassering): mum.current_loc (location) returnerer "Takk for oppdateringen, mamma!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) returnerer "Takk for oppdateringen, pappa!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) returner "Hei, meg" @app.route ('/mamma/exit/') def mume (plassering): mum.offline (plassering) returnerer "Takk for oppdateringen, mamma!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) returner "Thanks For The Update, Dad!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) returner "Hei, meg" @app.route ("/reset") def redo (): setup () return "Nullstille!" hvis _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

og map.py:

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

import ast, json import time 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. "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 () klasse mamma: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "fire kryss": 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," fire kryss ": 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 pappa: 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. HTTP -tilkobling ('192.168.1.251:5000') tilkoblinger 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 &") klasse meg: 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 &")

Trinn 9: Bygg din egen inspirasjon fra prosjektet mitt

Så jeg vet at det forrige trinnet vil være veldig vanskelig å forstå, så jeg vil la det stå som å vise deg hvordan du lager kartet, og kunne ha en bringebærpi som slår av og på lysdiodene. Du må nå lage et python -skript som ved hjelp av IFTTT sender deg en e -post. Deretter må du finne en kodebit som er ganske enkel å lese (google den). Så når du leser en e -post og finner plasseringen til en forelder, bruker du 'if' -setninger for å finne hvilken pin du vil slå på.

På kartet betyr Et blinkende lys at de nettopp har forlatt området

Måten å slå på lysdiodene på en annen pi fra python er som nedenfor:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #endre dette med bringebær Pi -kartets IP -adresse conn.request ("GET", str ("/off) /2 ")) # dette slår av pin -nummer 2 -respons = conn.getresponse () # dette ber om URL -en, og deretter leser kart -pi dette og slår av pin -nummer 2

I utgangspunktet håper jeg at du kan bruke det jeg har gjort med 3D -kartet mitt som inspirasjon til å lage ditt eget GPS -sporingskart.

Anbefalt: