Turinys:

GPS sekimo 3D žemėlapis: 9 žingsniai
GPS sekimo 3D žemėlapis: 9 žingsniai

Video: GPS sekimo 3D žemėlapis: 9 žingsniai

Video: GPS sekimo 3D žemėlapis: 9 žingsniai
Video: Kaip naudotis kompasu ir žemėlapiu 2024, Lapkritis
Anonim
GPS sekimo 3D žemėlapis
GPS sekimo 3D žemėlapis
GPS sekimo 3D žemėlapis
GPS sekimo 3D žemėlapis

Šis projektas yra 3D spausdintas 3D žemėlapis su keliais, upėmis ir miesteliais su LED švyturėliais, rodančiais šeimos narių buvimo vietą. Tai gali parodyti, ar vaikas yra mokykloje, ar ne, ar tik abiejų tėvų vieta. Mes taip pat galime jį naudoti numatydami, kada tėvai grįš namo, kad vakarienė būtų paruošta tinkamu laiku. Tai taip pat tiesiog puikus projektas, kurį galima parodyti ir parodyti šeimai ir draugams.

Tikiuosi, kad jums patiko tai padaryti „Instructable“arba jums patiko sužinoti apie mano sukurtą projektą

1 žingsnis: Gaukite 3D žemėlapį

Norėdami gauti savo vietovės 3D žemėlapį, parašiau atskirą instrukciją, kuri padės jums sukurti žemėlapį. Nuoroda į instrukciją yra čia:

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

2 žingsnis: Žemėlapio paruošimas LED intarpams

Dabar, kai turite 3D žemėlapį su keliais, miestais ir upėmis, mums reikia būdo nurodyti, kur žemėlapyje yra žmogus. Aš naudoju dviejų spalvų 3 mm RG šviesos diodus, nes pagrindinis žemėlapio tikslas yra parodyti, kur yra abu tėvai. Tam tikrose vietose aš naudoju RGB šviesos diodą, kad galėčiau parodyti, kur buvo vyriausias vaikas. „Raspberry Pi“gali būti išvestas iki 28 kaiščių, todėl protingai pasirinkite šviesos diodų vietas. Aš baigiau naudoti maždaug 24 iš jų, taigi jums turėtų būti gerai.

Norėdami gręžti PLA, radau, kad normalus medinis grąžtas gerai veikia, ir aš elgiausi taip, kaip apdorojau medieną.

Tose vietose, kur žemėlapis buvo per storas, aš išgręžčiau pagrindinį sluoksnį dideliu grąžtu, o tada matomą sluoksnį su tinkamu 3 mm grąžtu.

3 žingsnis: įdėkite šviesos diodus

Įdėkite šviesos diodus
Įdėkite šviesos diodus

Dabar, kai turime skylutes šviesos diodams prisėsti, galime jas įklijuoti. Tam puikiai tinka PVA arba „Superglue“, pastebėjau, kad PVA bėgo aplink jį, užsandarindama jį vietoje, o superklijai taip pat labai gerai veikė. Įsitikinkite, kad su kiekvienu šviesos diodu jie matomoje pusėje išsikiša tik keliais mm, nes, jei šviesos diodai išsikiša iki galo, atrodo šiek tiek netvarkinga. Nesijaudinkite dėl kojų ant nugaros, kai jas prilituosime, galime jas sulenkti.

4 veiksmas: prijunkite šviesos diodus prie „Raspberry Pi“

Aš tiesiogiai litavau šviesos diodus prie „Raspberry Pi“, tačiau, jei turite vieną su iš anksto lituojama antrašte arba norite naudoti „pi“kažkam kitam, aš siūlau kiekvienam šviesos diodui naudoti trumpiklius, tai reiškia, kad Pi yra nuimamas. Matote, kad kai litavau šviesos diodą, aš sulenkiau kojas žemyn, kad jos neliptų ant nugaros.

5 veiksmas: išbandykite šviesos diodus

Patikrinkite šviesos diodus
Patikrinkite šviesos diodus

Norėdami įsitikinti, kad visi šviesos diodai veikia, aš paleidžiau scenarijų, kuris eina per kiekvieną galimą kaištį, ir užsidega vienas po kito, kuris paspaudžiamas įvesti. Tai leido man užrašyti, kuris PIN kodas nurodė kokią vietą, o tai buvo labai naudinga.

importuoti RPi. GPIO kaip GPIO

importo laikas GPIO.setmode (GPIO. BCM) i diapazone (0, 28): GPIO.setup (i, GPIO. OUT), kai diapazonas (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("Tai buvo:" + str (i)) z = raw_input ("Kitas?")

Kol tai vyko, teksto faile pažymėčiau, kuris smeigtukas padarė kokią vietą ir kokia spalva. Jūs turite tai padaryti, nes tai labai naudinga kitame žingsnyje.

6 veiksmas: kodas įjungti šviesos diodą, kai to paprašoma

Šio projekto atlikimo būdas apima vieną „Raspberry Pi Zero W“su pagrindine svetaine, leidžiančia įjungti smeigtuką. Tai reiškė, kad pagrindinis „Pi 4“, kuris paprastai yra įjungtas ir veikia, gali apdoroti, o tada mažasis „Pi 0“turi tik įjungti kaištį, todėl viskas bus šiek tiek sudėtingiau. Aš tai padariau, nes tai tinka mano sąrankai, taip pat jaučiau, kad „Pi 0“gali būti šiek tiek lėtas dėl to, ką darysime vėliau.

importuoti RPi. GPIO kaip GPIO

importavimo laikas iš kolbos importavimo Kolba, render_template, request, jsonify import os app = Kolba (_ name_) p = GPIO.setmode (GPIO. BCM) i diapazone (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) grįžti „Išjungta“@app.route („/off/all“) def alloff (): i diapazone (0, 28): GPIO.output (i, GPIO. LOW) grįžti „off“@app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) grąžina "On", jei _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Tai veikia taip, kad laukia pi IP adreso URL, tada įjungiamas arba išjungiamas ir tada PIN kodas.

išsaugokite šį kodą „Raspberry Pi“pagrindiniame kataloge ir pavadinkite jį „pin_website.py“

Turėsite nustatyti, kad tai vyktų automatiškai, todėl, norėdami tai padaryti, įveskite terminalo tipą: sudo nano /etc /profile

Šio failo apačioje pridėkite „python3 pin_website.py &“

„&“Yra labai svarbus, nes jis veikia fone, todėl leidžia tęsti paleidimą

7 veiksmas: kaip gauti vietą

Kaip gauti vietą
Kaip gauti vietą

Naudodamiesi IFTTT, galite nustatyti paslaugą, kad kai telefonas įeina į tam tikrą vietą, jis gali jums atsiųsti el. Laišką, įvesti žiniatinklio adresą arba išsiųsti jums žinutę telegrama.

8 žingsnis: kaip visa tai veikia

Turiu sąranką „Server Pi“, kurioje yra mano svetainė, su prievadų peradresavimu ir statiniu DNS naudojant paslaugą, kurią teikia https://freedns.afraid.org/. Daug kas yra gana sudėtinga, ir jūs turite turėti supratimą apie uosto persiuntimą, galbūt norėčiau pamokyti, kaip kitą kartą atlikti šią dalį.

Kitas būdas, kurį galite padaryti, yra naudoti telegramą, kad gautumėte pranešimus į pi, arba galbūt lengviausia, yra nustatyti el. Pašto skaitytuvą, kuris skaito el. Laiškus ir per tai gauna vietos atnaujinimus.

Nesu bandžiusi „Telegram“roboto ar el. Pašto skaitytuvo, tačiau ten yra daug vadovėlių, kurie parodys, kaip tai padaryti.

Čia yra mano „Flask / Python“kodas, kurio tada prašo „webhooks“, naudodamiesi IFTTT:

iš kolbos importo Kolba, render_template, request, jsonify

importuoti operacines sistemas iš datos laiko importuoti datų laiką iš žemėlapio importavimo /') def mu (vieta): mum.current_loc (vieta) return "Ačiū už atnaujinimą, mama!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) return "Ačiū už atnaujinimą, tėti!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) return "Hey, Me" @app.route ('/mum/exit/') def mume (vieta): mum.offline (vieta) grįžti "Ačiū už atnaujinimą, mama!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "Ačiū už atnaujinimą, tėti!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, Me" @app.route ("/reset") def redo (): setup () return "Atstatyti!" if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

ir map.py:

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

importuoti ast, json importo laikas importuoti sriegį importuoti 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.21.2000 "GET", str ("/off/all")) response = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = atidaryti ("pind", "w") f.write (str (-1)) f.close () f = open ("pinm", "w") f.write (str (-1)) f. close () class mum: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, „keturi kryžiai“: 18, „llandrinio“: 25, „welshpool“: 27} f = atviras („kaištis“, „w“) f.rašyti (str (-1)) f.uždaryti () laiką. miego (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," keturi kryžiai ": 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 &") klasės tėtis: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "keturi kryžiai": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," keturi kryžiai ": 15} f = atviras (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') jungtiniai reikalavimai 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," namai ": 23," shrewsbury ": 0," llanymynech ": 6," keturi kryžiai ": 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 &") klasė man: 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 &")

9 žingsnis: sukurkite savo įkvėpimą iš mano projekto

Taigi aš žinau, kad ankstesnį žingsnį bus labai sunku suprasti, todėl paliksiu jį kaip parodantį, kaip sudaryti žemėlapį, ir galėsiu turėti aviečių pi, kuris įjungia ir išjungia šviesos diodus. Dabar turite sukurti „python“scenarijų, kuris, naudojant IFTTT, jums atsiųs el. Tada jums reikia rasti el. Pašto skaitymo kodą, kuris yra gana lengvas („google“). Tada, perskaitę el. Laišką ir suradę tėvų vietą, naudokite teiginius „jei“, kad surastumėte, kurį smeigtuką įjungti.

Žemėlapyje mirksinti lemputė reiškia, kad jie ką tik paliko vietovę

Šviesos diodų įjungimas kitame „Python“pi yra toks:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #pakeiskite tai naudodami aviečių pi žemėlapio IP adresą conn.request ("GET", str ("/off /2 ")) # tai išjungia 2 PIN kodo atsakymą = conn.getresponse () # tai prašo URL, tada žemėlapis pi skaito tai ir išjungia 2 PIN kodą

Iš esmės tikiuosi, kad galite panaudoti tai, ką padariau su savo 3D žemėlapiu, kaip įkvėpimą, kad sukurtumėte savo GPS sekimo žemėlapį.

Rekomenduojamas: