Innehållsförteckning:
- Steg 1: Skaffa en 3D -karta
- Steg 2: Förbered kartan för LED -skär
- Steg 3: Sätt i lysdioderna
- Steg 4: Anslut lysdioderna till Raspberry Pi
- Steg 5: Testa lysdioderna
- Steg 6: Kod för att slå på lysdioden vid begäran
- Steg 7: Hur man tar emot plats
- Steg 8: Hur allt detta fungerar
- Steg 9: Bygg ditt eget från inspiration från mitt projekt
Video: GPS -spårning 3D -karta: 9 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:40
Detta projekt är en 3D -tryckt 3D -karta, med vägar, floder och städer, med LED -fyrar som visar platsen för familjemedlemmar. Det kan visa om ett barn är i skolan eller inte, eller bara var båda föräldrarna är. Vi kan också använda den för att förutsäga vilken tid föräldrarna kommer hem, så att middagen kan göras till rätt tid. Det är också bara ett allmänt häftigt projekt att visa upp och visa för familj och vänner.
Jag hoppas att du tycker om att göra detta instruerbart, eller att du får veta om ett projekt som jag har gjort
Steg 1: Skaffa en 3D -karta
FÖR att få en 3D -karta över ditt område har jag skrivit en separat instruerbar guide som hjälper dig genom att göra en. Länken till den instruerbara finns här:
www.instructables.com/id/Making-a-3D-Print…
Steg 2: Förbered kartan för LED -skär
Nu när du har en 3D -karta, med vägar, städer och floder, behöver vi ett sätt att ange var en person är på kartan. Jag använde tvåfärgade 3 mm RG-lysdioder, eftersom kartans huvudsakliga syfte är att visa var de två föräldrarna är. På vissa ställen använde jag en RGB -LED, så att jag kunde visa var det äldsta barnet var. Det finns en gräns på 28 stift att mata ut på Raspberry Pi, så välj platserna för lysdioderna klokt. Jag slutade använda runt 24 av dem, så du borde må bra.
För att borra PLA fann jag att en vanlig träborr fungerade bra, och jag behandlade som jag skulle behandla trä.
På platser där kartan var för tjock borrade jag ut baslagret med en stor borr och sedan det synliga ovanstående lagret med rätt 3 mm borr.
Steg 3: Sätt i lysdioderna
Nu när vi har hål för lysdioderna att sitta i, kan vi limma in dem. PVA eller Superlim fungerar bra för detta, jag fann att PVA sprang runt det och förseglade det på plats, och superlim fungerade också mycket bra. Se till att de för varje LED bara sticker ut på den synliga sidan med några mm, eftersom att lysdioderna sticker ut hela vägen ser lite rörigt ut. Oroa dig inte om benen på baksidan, vi kan vika ihop dem när de är lödda.
Steg 4: Anslut lysdioderna till Raspberry Pi
Jag lödde direkt lysdioderna till Raspberry Pi, men om du har en med ett förlödt huvud eller om du vill kunna använda pi för något annat, skulle jag föreslå att du använder bygelkablar för varje LED, vilket betyder att Pi är avtagbar. Du kan se att när jag hade lödt lysdioden, fällde jag ner benen så att de inte fastnade på ryggen.
Steg 5: Testa lysdioderna
För att försäkra mig om att alla lysdioder fungerar, körde jag ett skript som går igenom varje möjlig stift och tänder dem, en i taget, som går över till nästa när jag klickar på enter. Detta gjorde att jag kunde anteckna vilket pin -nummer som gjorde vilken plats, vilket var mycket användbart.
importera RPi. GPIO som GPIO
importtid GPIO.setmode (GPIO. BCM) för i i intervall (0, 28): GPIO.setup (i, GPIO. OUT) för i i intervall (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?")
Medan detta hände skulle jag anteckna en textfil som stift gjorde vilken plats och vilken färg. Du måste göra detta, eftersom det är mycket användbart i nästa steg.
Steg 6: Kod för att slå på lysdioden vid begäran
Sättet som jag har gjort detta projekt innebär en Raspberry Pi Zero W, med en grundläggande webbplats som låter dig slå på en nål. Detta innebar att huvud Pi 4, som vanligtvis är på och körs, kan bearbeta, och då måste den lilla Pi 0 bara slå på en stift, vilket gör saker och ting mer komplicerade. Jag gjorde detta för att det passar min inställning, och jag kände också att Pi 0 kan vara lite långsam för vad vi ska göra senare.
importera RPi. GPIO som GPIO
importtid från kolvimport Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) för i i intervall (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 (): för i inom intervall (0, 28): GPIO.output (i, GPIO. LOW) return "off" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) returnerar "On" if _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')
Så här fungerar det genom att vänta på webbadressen till Pi: s IP -adress och sedan en på eller av och sedan pin -numret.
spara den här koden i hemkatalogen för Raspberry Pi och ge den namnet "pin_website.py"
Du måste ställa in detta så att det körs automatiskt, så för att göra detta, i terminaltypen: sudo nano /etc /profile
Längst ner i filen lägger du till "python3 pin_website.py &"
"&" Är viktigt, eftersom det gör att det körs i bakgrunden och därför tillåter uppstart att fortsätta
Steg 7: Hur man tar emot plats
Med IFTTT kan du konfigurera en tjänst så att när telefonen går in på en viss plats kan den skicka e -post till dig, eller pinga en webbadress eller meddela dig i telegram.
Steg 8: Hur allt detta fungerar
Installationen jag har är en Server Pi, som är värd för min webbplats, med portvidarebefordran och en statisk DNS med hjälp av tjänsten som tillhandahålls av https://freedns.afraid.org/. Mycket av detta är ganska komplext, och du måste ha förståelse för portvidarebefordran, jag kan göra en instruktion om hur du gör den här delen en annan gång.
Ett annat sätt du kan göra det är att använda telegram för att få meddelanden till pi, eller möjligen det enklaste, är att skapa en e -postläsare som läser e -postmeddelandena och tar emot platsuppdateringar via det.
Jag har inte provat Telegram -boten eller en e -postläsare, men det finns gott om självstudier där ute som visar hur du gör.
Här är min Flask / Python -kod som sedan begärs av webhooks med IFTTT:
från kolvimport Flask, render_template, request, jsonify
importera os från datetime importera datetime från kartimport * app = kolv (_ namn_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (plats): mum.current_loc (plats) returnerar "Tack för uppdateringen, mamma!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) returnera "Tack för uppdateringen, pappa!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) return "Hey, Me" @app.route ('/mum/exit/') def mume (location): mum.offline (plats) returnerar "Tack för uppdateringen, mamma!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) returnera "Tack för uppdateringen, pappa!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, Me" @app.route ("/reset") def redo (): setup () return "Återställa!" om _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')
och map.py:
importera http.client, urllib.request, urllib.parse, urllib.error, base64
import ast, json importtid import trådning 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 () klass mamma: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "fyra kors": 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," fyra kors ": 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 &") klass 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. HTTPConnection ('192.168.1.251:5000') anslut.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 &") klass 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 &")
Steg 9: Bygg ditt eget från inspiration från mitt projekt
Så jag vet att det föregående steget kommer att vara mycket svårt att förstå, så jag kommer att låta det vara att visa dig hur du gör kartan och kunna ha en hallonpi som tänder och släcker lysdioderna. Du måste nu skapa ett python -skript som, med hjälp av IFTTT, skickar dig ett e -postmeddelande. Då måste du hitta en kod som läser e -post, vilket är ganska enkelt (googla det). När du väl har läst ett e -postmeddelande och hittar platsen för en förälder, använd 'if' -satser för att hitta vilken nål som ska aktiveras.
På kartan betyder ett blinkande ljus att de just har lämnat området
Sättet att slå på lysdioderna på en annan pi från python är enligt nedan:
importera http.client, urllib.request, urllib.parse, urllib.error, base64
params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #ändra detta med hallon pi: s kart -IP -adress conn.request ("GET", str ("/off) /2 ")) # detta stänger av pin nummer 2 svar = conn.getresponse () # detta begär webbadressen, och sedan läser kartan pi detta och stänger av pin nummer 2
I grund och botten hoppas jag att du kan använda det jag har gjort med min 3D -karta som inspiration för att göra din egen GPS -spårningskarta.
Rekommenderad:
Arduino Car Reverse Parking Alert System - Steg för steg: 4 steg
Arduino Car Reverse Parking Alert System | Steg för steg: I det här projektet kommer jag att utforma en enkel Arduino Car Reverse Parking Sensor Circuit med Arduino UNO och HC-SR04 Ultrasonic Sensor. Detta Arduino -baserade bilomvändningsvarningssystem kan användas för autonom navigering, robotavstånd och andra
Steg för steg PC -byggnad: 9 steg
Steg för steg PC -byggnad: Tillbehör: Hårdvara: ModerkortCPU & CPU -kylarePSU (strömförsörjningsenhet) Lagring (HDD/SSD) RAMGPU (krävs inte) CaseTools: Skruvmejsel ESD -armband/mathermisk pasta med applikator
Tre högtalarkretsar -- Steg-för-steg handledning: 3 steg
Tre högtalarkretsar || Steg-för-steg-handledning: Högtalarkretsen förstärker ljudsignalerna som tas emot från miljön till MIC och skickar den till högtalaren varifrån förstärkt ljud produceras. Här visar jag dig tre olika sätt att göra denna högtalarkrets med:
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)
Hur du ansluter DeLorme Earthmate GPS LT-20 till din Google Earth för en bra GPS-spårningskarta .: 5 steg
Hur du ansluter DeLorme Earthmate GPS LT-20 till din Google Earth för en bra GPS-spårningskarta.: Jag visar dig hur du ansluter en GPS-enhet till det populära Google Earth-programmet utan att använda Google Earth Plus. Jag har ingen stor budget så jag kan garantera att detta blir så billigt som möjligt