Sadržaj:
- Korak 1: Nabavite 3D mapu
- Korak 2: Priprema karte za LED umetke
- Korak 3: Umetnite LED diode
- Korak 4: Spojite LED diode na Raspberry Pi
- Korak 5: Testirajte LED diode
- Korak 6: Kod za uključivanje LED diode na zahtjev
- Korak 7: Kako dobiti lokaciju
- Korak 8: Kako sve ovo funkcionira
- Korak 9: Izgradite svoje iz inspiracije na mom projektu
Video: GPS praćenje 3D karte: 9 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:05
Ovaj projekat je 3D štampana 3D mapa, sa putevima, rijekama i gradovima, sa LED svjetionicima koji pokazuju lokaciju članova porodice. Može pokazati da li je dijete u školi ili samo lokaciju oba roditelja. Možemo ga koristiti i za predviđanje kada će roditelji doći kući, tako da se večera može pripremiti u pravo vrijeme. To je također samo općenito kul projekt za pokazivanje i prikazivanje porodici i prijateljima.
Nadam se da ćete uživati u izradi ovog Instructable -a ili da ćete uživati u saznanjima o projektu koji sam napravio
Korak 1: Nabavite 3D mapu
Da bih dobio 3D kartu vašeg područja, napisao sam zasebnu instrukciju koja će vam pomoći u procesu izrade. Link do uputstva je ovdje:
www.instructables.com/id/Making-a-3D-Print…
Korak 2: Priprema karte za LED umetke
Sada kada imate 3D kartu s cestama, gradovima i rijekama, potreban nam je način da označimo gdje se neka osoba nalazi na karti. Koristio sam dvobojne 3 mm RG LED diode, jer je glavna svrha karte pokazati gdje se nalaze dva roditelja. Na određenim mjestima koristio sam RGB LED kako bih mogao pokazati gdje je najstarije dijete. Postoji ograničenje od 28 pinova za izlaz na Raspberry Pi, pa pametno birajte lokacije LED dioda. Na kraju sam ih koristio 24, pa bi trebao biti u redu.
Za bušenje PLA -e otkrio sam da je normalna svrdla za drvo dobro radila i tretirala sam je kao što bih tretirala drvo.
Na mjestima gdje je karta bila predebela izbušila sam osnovni sloj velikom bušilicom, a zatim vidljivi gornji sloj s ispravnom svrdlom od 3 mm.
Korak 3: Umetnite LED diode
Sada kada imamo rupe za LED diode u koje možemo sjediti, možemo ih zalijepiti. PVA ili Superglue dobro funkcionira za to, otkrio sam da je PVA trčao oko njega zabrtvljujući ga na mjestu, a super ljepilo je također radilo vrlo dobro. Uvjerite se da sa svakom LED diodom na vidljivoj strani štrče samo nekoliko mm, jer ako LED diode strše do kraja izgleda pomalo neuredno. Ne brinite o nogama na stražnjoj strani, možemo ih preklopiti nakon što su zalemljene.
Korak 4: Spojite LED diode na Raspberry Pi
Izravno sam lemio LED diode na Raspberry Pi, međutim, ako imate onu s prethodno zalemljenim zaglavljem ili želite koristiti pi za nešto drugo, predlažem da koristite kratkospojnike za svaku LED, što znači da Pi se može ukloniti. Možete vidjeti da sam, nakon što sam zalemio LED, preklopio noge prema dolje tako da se nisu lijepile na stražnju stranu.
Korak 5: Testirajte LED diode
Da bih se uvjerio da sve LED diode rade, pokrenuo sam skriptu koja prolazi kroz svaki mogući pin i pali ih, jednu po jednu, koja prelazi na sljedeću kada pritisnem enter. To mi je omogućilo da zabilježim koji je pin broj radio na kojoj lokaciji, što je bilo vrlo korisno.
uvezite RPi. GPIO kao GPIO
vreme uvoza GPIO.setmode (GPIO. BCM) za i u opsegu (0, 28): GPIO.setup (i, GPIO. OUT) za i u opsegu (0, 28): GPIO.izlaz (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("To je bilo:" + str (i)) z = raw_input ("Dalje?")
Dok se to događalo, zabilježio bih tekstualnu datoteku koja je oznaka odredila koju lokaciju i koju boju. Morate to učiniti jer je vrlo korisno u sljedećem koraku.
Korak 6: Kod za uključivanje LED diode na zahtjev
Način na koji sam napravio ovaj projekat uključuje jedan Raspberry Pi Zero W, sa osnovnom web lokacijom koja vam omogućava da uključite pin. To je značilo da glavni Pi 4, koji je obično uključen i radi, može obaviti obradu, a zatim mali Pi 0 samo mora uključiti pin, što stvari čini malo kompliciranijima. Učinio sam to jer odgovara mojim postavkama, a također sam osjetio da Pi 0 može biti malo spor za ono što ćemo kasnije raditi.
uvezite RPi. GPIO kao GPIO
vrijeme uvoza iz bočice uvoz Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) za i u rasponu (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 (): za i u rasponu (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 ')
Način na koji ovo funkcionira je da čeka url pi -jeve IP adrese, a zatim uključivanje ili isključivanje, a zatim i pin broj.
sačuvajte ovaj kôd u matičnom direktoriju Raspberry Pi i dajte mu ime "pin_website.py"
Morat ćete postaviti ovo automatsko pokretanje, pa da biste to učinili, u vrsti terminala: sudo nano /etc /profile
Na dnu ove datoteke dodajte "python3 pin_website.py &"
Znak "&" je bitan, jer ga pokreće u pozadini i stoga omogućava nastavak pokretanja
Korak 7: Kako dobiti lokaciju
Pomoću IFTTT -a možete postaviti uslugu tako da vam, kada telefon uđe na određenu lokaciju, može slati e -poštu ili pingati web adresu ili vam poslati poruku na telegramu.
Korak 8: Kako sve ovo funkcionira
Podešavanje koje imam je Server Pi, na kojem se nalazi moja web stranica, s prosljeđivanjem portova i statičkim DNS -om koristeći uslugu koju pruža https://freedns.a fear.org/. Mnogo toga je prilično složeno i morate imati razumijevanje za prosljeđivanje portova. Možda ću drugi put uputiti kako da obavite ovaj dio.
Drugi način na koji to možete učiniti je korištenje telegrama za primanje poruka na pi, ili možda najjednostavniji, postavljanje čitača e -pošte koji čita e -poruke i putem toga prima ažuriranja lokacije.
Nisam probao Telegram bot ili čitač e -pošte, ali postoji mnogo vodiča koji će vam pokazati kako to učiniti.
Evo mog Flask / Python koda koji tada webhooks -i traže pomoću IFTTT -a:
iz flask import Flask, render_template, request, jsonify
import os iz datetime import datetime sa karte import * app = Flask (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (location): mum.current_loc (location) return "Hvala na ažuriranju, mama!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) vrati "Hvala na ažuriranju, tata!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) vrati "Hey, Me" @app.route ('/mum/exit/') def mume (lokacija): mum.offline (location) return "Hvala na ažuriranju, mama!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) vrati "Hvala na ažuriranju, tata!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, Me" @app.route ("/reset") def redo (): setup () return "Resetovati!" if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')
i map.py:
import http.client, urllib.request, urllib.parse, urllib.error, base64
import ast, json vrijeme uvoza import threading import os params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('freedns.a fear.org') conn.request ("GET", str ("/dynamic/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) odgovor = conn.getresponse () conn = http.client. HTTPConnection ('192.168) "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 () klasa mama: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "četiri križa": 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," četiri križa ": 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 &") klasa tata: locs = {"welshpool": 3, "lynclys": 1, "dom": 23, "shrewsbury": 0, "llanymynech": 6, "četiri križa": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," četiri križa ": 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): globalno dlast_loc locs = {"welshpool": 3, "lynclys ": 1," home ": 23," shrewsbury ": 0," llanymynech ": 6," four crosssts ": 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 &") klasa 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 (gle 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 &")
Korak 9: Izgradite svoje iz inspiracije na mom projektu
Tako da znam da će prethodni korak biti jako teško razumljiv, pa ću vam ostaviti da vam pokaže kako napraviti mapu i moći ćete imati malinovo pi koje uključuje i isključuje LED diode. Sada morate stvoriti python skriptu koja vam, koristeći IFTTT, šalje e -poštu. Zatim morate pronaći e -poruku koja čita kôd, što je prilično jednostavno (google to). Zatim, nakon što pročitate e -poruku i pronađete lokaciju roditelja, upotrijebite naredbe 'if' da biste pronašli koji pin želite uključiti.
Na karti trepćuće svjetlo znači da su upravo napustili područje
Način uključivanja LED dioda na drugom pi iz pythona je sljedeći:
import http.client, urllib.request, urllib.parse, urllib.error, base64
params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #promijenite ovo s IP adresom karte maline pi conn.request ("GET", str ("/off /2 ")) # ovo isključuje pin broj 2 response = conn.getresponse () # ovo traži URL, a zatim karta pi čita ovo i isključuje pin 2
U osnovi se nadam da ćete ono što sam učinio sa svojom 3D kartom koristiti kao inspiraciju za izradu vlastite GPS karte za praćenje.
Preporučuje se:
Kreirajte prilagođene karte za svoj Garmin GPS: 8 koraka (sa slikama)
Izradite prilagođene karte za svoj Garmin GPS: Ako imate Garmin GPS namijenjen planinarenju i drugim aktivnostima na otvorenom (uključujući serije GPSMAP, eTrex, Colorado, Dakota, Oregon i Montana), ne morate zadovoljiti se kartama golih kostiju koje su na njega bile prethodno učitane. E
Praćenje i praćenje za male trgovine: 9 koraka (sa slikama)
Track & trace za male trgovine: Ovo je sistem koji je napravljen za male trgovine koje bi trebalo montirati na e-bicikle ili e-skutere za kratke isporuke, na primjer pekara koja želi isporučivati peciva. Track and Trace je sistem koji koriste ca
DIY Pametni robotski alati za praćenje Auto kompleti za praćenje Auto fotoosjetljivi: 7 koraka
DIY Pametni roboti za praćenje automobila Kompleti za praćenje Automobil Fotoosjetljivi: Dizajn SINONING ROBOT -a Možete kupiti od robota za praćenje Roboti TheoryLM393 čip uporedite dva fotootpornika, kada LED dioda sa jedne strane na BELOJ strani LED motora zaustavi se, s druge strane motora okreni se pa
Navigacija robotom sa senzorima za cipele, bez GPS -a, bez karte: 13 koraka (sa slikama)
Navigacija robotom sa senzorima za cipele, bez GPS-a, bez karte: Robot se kreće unaprijed programiranom putanjom i prenosi (preko bluetootha) svoje stvarne informacije o kretanju na telefon za praćenje u stvarnom vremenu. Arduino je unaprijed programiran s putanjom, a oblu se koristi za osjet kretanja robota. oblu prenosi informacije o kretanju
Kako spojiti DeLorme Earthmate GPS LT-20 na Google Earth za odličnu kartu za praćenje GPS-a .: 5 koraka
Kako spojiti DeLorme Earthmate GPS LT-20 na Google Earth za odličnu kartu za praćenje GPS-a. Pokazat ću vam kako povezati GPS uređaj s popularnim programom Google Earth, bez korištenja programa Google Earth Plus. Nemam veliki budžet pa mogu garantirati da će ovo biti što jeftinije