Indholdsfortegnelse:

GPS -sporing 3D -kort: 9 trin
GPS -sporing 3D -kort: 9 trin

Video: GPS -sporing 3D -kort: 9 trin

Video: GPS -sporing 3D -kort: 9 trin
Video: Making A New Design For A Noise Barrier On The Trimble Earthworks 3D GPS System 2024, Juli
Anonim
GPS -sporing 3D -kort
GPS -sporing 3D -kort
GPS -sporing 3D -kort
GPS -sporing 3D -kort

Dette projekt er et 3D -trykt 3D -kort med veje, floder og byer med LED -beacons for at vise familiens medlemmer. Det kan vise, om et barn er i skole eller ikke, eller bare hvor begge forældre er. Vi kan også bruge den til at forudsige, hvilken tid forældrene kommer hjem, så middagen kan laves til det rigtige tidspunkt. Det er også bare et generelt fedt projekt at vise frem og vise til familie og venner.

Jeg håber, du nyder at gøre dette instruerbart, eller nyder at finde ud af om et projekt, jeg har lavet

Trin 1: Få et 3D -kort

FOR at få et 3D -kort over dit område har jeg skrevet en separat instruerbar til at hjælpe dig med at guide dig gennem processen med at lave et. Linket til det instruerbare er her:

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

Trin 2: Forberedelse af kortet til LED -skær

Nu hvor du har et 3D -kort med veje, byer og floder, har vi brug for en måde at angive, hvor en person er på kortet. Jeg brugte tofarvede 3 mm RG LED'er, fordi hovedformålet med kortet er at vise, hvor de to forældre er. Nogle steder brugte jeg en RGB LED, så jeg kunne vise, hvor det ældste barn var. Der er en grænse på 28 ben til output på Raspberry Pi, så vælg placeringen af lysdioderne klogt. Jeg endte med at bruge omkring 24 af dem, så du skulle have det godt.

For at bore PLA fandt jeg, at et normalt træbor fungerede godt, og jeg behandlede det, som jeg ville behandle træ.

På steder, hvor kortet var for tykt, ville jeg bore bundlaget ud med et stort bor, og derefter det synlige ovenstående lag med det korrekte 3 mm bor.

Trin 3: Indsæt lysdioderne

Indsæt lysdioderne
Indsæt lysdioderne

Nu hvor vi har huller til lysdioderne at sidde i, kan vi lime dem i. PVA eller Superlim fungerer godt til dette, jeg fandt ud af, at PVA løb rundt om det og forseglede det på plads, og superlim fungerede også meget godt. Sørg for, at de med hver LED kun stikker ud på den synlige side med et par mm, fordi det ser lidt rodet ud med at have lysdioderne stukket ud hele vejen. Bare rolig om benene på ryggen, vi kan folde dem om, når de er loddet.

Trin 4: Tilslut lysdioderne til Raspberry Pi

Jeg loddet LED'erne direkte til Raspberry Pi, men hvis du har en med en forhåndssoldet header, eller du vil kunne bruge pi til noget andet, så vil jeg foreslå at bruge jumperwires til hver LED, hvilket betyder, at Pi er aftagelig. Du kan se, at når jeg havde loddet LED'en, foldede jeg benene ned, så de ikke sad fast på ryggen.

Trin 5: Test lysdioderne

Test lysdioderne
Test lysdioderne

For at sikre, at alle lysdioderne fungerer, kørte jeg et script, der går igennem hver mulig pin, og tænder dem, en ad gangen, som går over på den næste, når jeg klikker på enter. Dette gav mig mulighed for at notere hvilket pinkode der gjorde hvilken placering, hvilket kom meget nyttigt.

importer RPi. GPIO som GPIO

importtid GPIO.setmode (GPIO. BCM) for i inden for område (0, 28): GPIO.setup (i, GPIO. OUT) for i i område (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 skete, ville jeg notere en tekstfil, hvilken pin gjorde hvilken placering og hvilken farve. Du skal gøre dette, da det er meget nyttigt i det næste trin.

Trin 6: Kode for at tænde LED'en, når du anmoder om det

Den måde, jeg har udført dette projekt på, involverer en Raspberry Pi Zero W, med et grundlæggende websted, som giver dig mulighed for at tænde en pin. Dette betød, at hoved Pi 4, som normalt er tændt, og kører, kan klare behandlingen, og så skal den lille Pi 0 kun tænde en pin, hvilket gør tingene lidt mere komplicerede. Jeg gjorde dette, fordi det passer til min opsætning, og jeg følte også, at Pi 0 kan være lidt langsom for det, vi skal gøre senere.

importer RPi. GPIO som GPIO

importtid fra kolbeimportflaske, render_template, request, jsonify import os app = kolbe (_ 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) 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) returnerer "On" hvis _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Den måde, det fungerer på, venter på url'en til pi's IP -adresse og derefter en til eller fra og derefter pin -nummeret.

gem denne kode i hjemmemappen på Raspberry Pi, og navngiv den "pin_website.py"

Du bliver nødt til at indstille dette til at køre automatisk, så for at gøre dette i terminaltypen: sudo nano /etc /profile

I bunden af denne fil tilføjes "python3 pin_website.py &"

"&" Er vigtigt, da det får det til at køre i baggrunden og derfor tillader opstart at fortsætte

Trin 7: Sådan modtages placering

Sådan modtages placering
Sådan modtages placering

Ved hjælp af IFTTT kan du konfigurere en service, så når telefonen kommer ind på et bestemt sted, kan den sende dig en e -mail eller pinge en webadresse eller sende dig en besked på telegram.

Trin 8: Sådan fungerer alt dette

Den opsætning, jeg har, er en Server Pi, der er vært for mit websted, med portvideresendelse og en statisk DNS ved hjælp af tjenesten leveret af https://freedns.afraid.org/. Meget af dette er ret komplekst, og du skal have en forståelse for port forwarding, jeg kan måske lave en instruktion om, hvordan du gør denne del en anden gang.

En anden måde du kan gøre det på er at bruge telegram til at få beskeder til pi, eller muligvis den nemmeste, er at oprette en e -mail -læser, der læser e -mails og modtager placeringsopdateringer via det.

Jeg har ikke prøvet Telegram -botten eller en e -mail -læser, men der er masser af selvstudier derude, der viser dig, hvordan du gør det.

Her er min Flask / Python -kode, som derefter anmodes om af webhooks ved hjælp af IFTTT:

fra kolbeimport Kolbe, render_template, request, jsonify

import os fra datetime import datetime fra kortimport * app = kolbe (_ navn_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (placering): mum.current_loc (location) returnerer "Tak for opdateringen, mor!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) returnerer "Tak for opdateringen, far!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) return "Hey, Me" @app.route ('/mum/exit/') def mume (location): mum.offline (placering) returnerer "Tak for opdateringen, mor!" @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) return "Hey, Me" @app.route ("/reset") def redo (): setup () return "Nulstil!" 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 importtid 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 mor: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "fire kryds": 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 kryds ": 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 &") klassefar: locs = {"welshpool": 3, "lynclys": 1, "hjem": 23, "shrewsbury": 0, "llanymynech": 6, "fire kryds": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," fire kryds ": 15} f = open (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTP -forbindelse ('192.168.1.251:5000') forbind 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 mig: 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 &")

Trin 9: Byg din egen ud fra inspiration fra mit projekt

Så jeg ved, at det foregående trin vil være meget svært at forstå, så jeg vil lade det være som viser dig, hvordan du laver kortet, og kunne have en hindbærpi, der tænder og slukker lysdioderne. Du skal nu oprette et python -script, der ved hjælp af IFTTT sender dig en e -mail. Derefter skal du finde et kodeord, der læser en e -mail, som er ret let (google det). Så når du har læst en e -mail og fundet placeringen af en forælder, skal du bruge 'if' -sætninger til at finde hvilken pin, der skal tændes.

På kortet betyder et blinkende lys, at de lige har forladt området

Måden at tænde lysdioderne på en anden 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') #ændr dette med hindbær pi's kort -IP -adresse conn.request ("GET", str ("/off) /2 "))) # dette deaktiverer pin -nummer 2 -respons = conn.getresponse () # dette anmoder om webadressen, og derefter læser kort -pi dette og slukker pin -nummer 2

Grundlæggende håber jeg, at du kan bruge det, jeg har gjort med mit 3D -kort, som inspiration til at lave dit eget GPS -sporingskort.

Anbefalede: