Innholdsfortegnelse:
- Trinn 1: Få et 3D -kart
- Trinn 2: Forberede kartet for LED -innlegg
- Trinn 3: Sett inn lysdiodene
- Trinn 4: Koble lysdiodene til Raspberry Pi
- Trinn 5: Test lysdiodene
- Trinn 6: Kode for å slå på lysdioden når du blir bedt om det
- Trinn 7: Slik mottar du plassering
- Trinn 8: Hvordan alt dette fungerer
- Trinn 9: Bygg din egen inspirasjon fra prosjektet mitt
Video: GPS -sporing 3D -kart: 9 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:22
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
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
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
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:
Arduino bilvarslingssystem for omvendt parkering - Trinn for trinn: 4 trinn
Arduino Car Reverse Parking Alert System | Trinn for trinn: I dette prosjektet skal jeg designe en enkel Arduino Car Reverse Parking Sensor Circuit ved hjelp av Arduino UNO og HC-SR04 Ultrasonic Sensor. Dette Arduino -baserte bilreverseringssystemet kan brukes til autonom navigasjon, robotavstand og andre områder
Trinn for trinn PC -bygging: 9 trinn
Steg for trinn PC -bygging: Rekvisita: Maskinvare: HovedkortCPU & CPU -kjøler PSU (strømforsyningsenhet) Lagring (HDD/SSD) RAMGPU (ikke nødvendig) CaseTools: Skrutrekker ESD -armbånd/mathermal pasta m/applikator
Tre høyttalerkretser -- Trinn-for-trinn opplæring: 3 trinn
Tre høyttalerkretser || Trinn-for-trinn opplæring: Høyttalerkretsen styrker lydsignalene som mottas fra miljøet til MIC og sender den til høyttaleren der forsterket lyd produseres. Her vil jeg vise deg tre forskjellige måter å lage denne høyttalerkretsen på:
RC -sporet robot ved hjelp av Arduino - Trinn for trinn: 3 trinn
RC -sporet robot ved bruk av Arduino - Steg for trinn: Hei folkens, jeg er tilbake med et annet kult Robot -chassis fra BangGood. Håper du har gått gjennom våre tidligere prosjekter - Spinel Crux V1 - Gesture Controlled Robot, Spinel Crux L2 - Arduino Pick and Place Robot with Robotic Arms og The Badland Braw
Slik kobler du DeLorme Earthmate GPS LT-20 til Google Earth for et flott GPS-sporingskart .: 5 trinn
Slik kobler du DeLorme Earthmate GPS LT-20 til Google Earth for et flott GPS-sporingskart.: Jeg viser deg hvordan du kobler en GPS-enhet til det populære Google Earth-programmet, uten å bruke Google Earth Plus. Jeg har ikke et stort budsjett, så jeg kan garantere at dette blir så billig som mulig