Sisällysluettelo:

GPS -seuranta 3D -kartta: 9 vaihetta
GPS -seuranta 3D -kartta: 9 vaihetta

Video: GPS -seuranta 3D -kartta: 9 vaihetta

Video: GPS -seuranta 3D -kartta: 9 vaihetta
Video: 10 СУМАСШЕДШИХ БИТВ ЖИВОТНЫХ Снятых На Камеру 2024, Heinäkuu
Anonim
GPS -seuranta 3D -kartta
GPS -seuranta 3D -kartta
GPS -seuranta 3D -kartta
GPS -seuranta 3D -kartta

Tämä projekti on 3D -tulostettu 3D -kartta, jossa on teitä, jokia ja kaupunkeja, ja LED -majakat osoittavat perheenjäsenten sijainnin. Se voi osoittaa, onko lapsi koulussa vai ei, tai vain molempien vanhempien sijainti. Voimme myös käyttää sitä ennustamaan, milloin vanhemmat tulevat kotiin, jotta illallinen voidaan valmistaa oikeaan aikaan. Se on myös vain yleisesti viileä projekti, jota voidaan esitellä ja näyttää perheelle ja ystäville.

Toivon, että nautit tämän ohjeen tekemisestä tai jos haluat tietää tekemästäni projektista

Vaihe 1: 3D -kartan hankkiminen

Saadaksesi alueesi 3D -kartan, olen kirjoittanut erillisen ohjeen, joka auttaa sinua tekemään sen. Linkki ohjeeseen löytyy täältä:

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

Vaihe 2: Kartan valmistelu LED -lisäosia varten

Nyt kun sinulla on 3D -kartta, jossa on teitä, kaupunkeja ja jokia, tarvitsemme tavan osoittaa, missä henkilö on kartalla. Käytin kaksivärisiä 3 mm: n RG-LED-valoja, koska kartan päätarkoitus on näyttää, missä molemmat vanhemmat ovat. Tietyissä paikoissa käytin RGB -LEDiä, jotta voin näyttää missä vanhin lapsi oli. Raspberry Pi -laitteessa on enintään 28 nastaa, joten valitse LEDien sijainnit viisaasti. Päädyin käyttämään niitä noin 24, joten sinun pitäisi olla kunnossa.

PLA: n poraamiseksi huomasin, että tavallinen puuporakone toimi hyvin ja käsitin puuta samalla tavalla.

Paikoissa, joissa kartta oli liian paksu, poraisin pohjakerroksen suurella poranterällä ja sitten näkyvän yläkerroksen oikealla 3 mm: n poranterällä.

Vaihe 3: Aseta LED -valot paikalleen

Aseta LED -valot paikalleen
Aseta LED -valot paikalleen

Nyt kun meillä on reiät LED -valojen istumista varten, voimme liimata ne sisään. PVA tai Superglue toimii hyvin tähän, huomasin, että PVA juoksi sen ympärille tiivistäen sen paikalleen ja superliima toimi myös erittäin hyvin. Varmista, että jokaisella LED -valolla ne näkyvät näkyvillä puolella vain muutaman millimetrin verran, koska LED -valojen ulostulo kokonaan näyttää hieman sotkuiselta. Älä huolehdi selässä olevista jaloista, voimme taittaa ne, kun ne on juotettu.

Vaihe 4: Liitä LEDit Raspberry Pi -laitteeseen

Juotin LEDit suoraan Raspberry Pi: hen, mutta jos sinulla on sellainen, jossa on valmiiksi juotettu otsikko, tai haluat käyttää pi: tä johonkin muuhun, suosittelen käyttämään hyppyjohtimia jokaiselle LEDille, mikä tarkoittaa, että Pi on irrotettava. Näet, että kun olin juottanut LEDin, taittelin jalat alas, jotta ne eivät tartu takaosaan.

Vaihe 5: Testaa LEDit

Testaa LEDit
Testaa LEDit

Varmistaakseni, että kaikki LEDit toimivat, suoritin komentosarjan, joka kulkee jokaisen mahdollisen nastan läpi ja sytyttää ne yksi kerrallaan, joka siirtyy seuraavaan, kun napsautan Enter. Näin sain merkitä muistiin, mikä pin -numero sijaitsi, mikä oli erittäin hyödyllistä.

Tuo RPi. GPIO GPIO: ksi

tuontiaika GPIO.setmode (GPIO. BCM) i: lle alueella (0, 28): GPIO.setup (i, GPIO. OUT) i: lle alueella (0, 28): GPIO. output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("That Was:" + str (i)) z = raw_input ("Seuraava?")

Samalla kun tämä tapahtui, merkitsisin tekstitiedostoon muistiin, mikä nasta teki missä paikassa ja mikä väri. Sinun on tehtävä tämä, koska se on erittäin hyödyllinen seuraavassa vaiheessa.

Vaihe 6: Koodi LED -valon kytkemiseksi päälle pyydettäessä

Tapa, jolla olen tehnyt tämän projektin, sisältää yhden Raspberry Pi Zero W: n perusverkkosivustolla, jonka avulla voit ottaa nastan käyttöön. Tämä tarkoitti sitä, että pääpi 4, joka on yleensä päällä ja käynnissä, pystyy käsittelemään, ja sitten pienen Pi 0: n on vain käynnistettävä tappi, mikä tekee asioista hieman monimutkaisempia. Tein tämän, koska se sopii asetuksiini, ja minustakin tuntui, että Pi 0 voi olla hieman hidas sen suhteen, mitä teemme myöhemmin.

Tuo RPi. GPIO GPIO: ksi

tuontiaika pullon tuonnista Pullo, render_template, request, jsonify import os app = Pullo (_ name_) p = GPIO.setmode (GPIO. BCM) i: lle alueella (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) palauta "Pois" @app.route ("/off/all") def alloff (): i alueella (0, 28): GPIO.output (i, GPIO. LOW) palauta "off" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) palauta "On", jos _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 '')

Tämä toimii siten, että se odottaa pi: n IP -osoitteen URL -osoitetta ja sitten päälle tai pois päältä ja sitten PIN -numeroa.

tallenna tämä koodi Raspberry Pi: n kotihakemistoon ja anna sille nimi "pin_website.py"

Sinun on asetettava tämä toimimaan automaattisesti, jotta voit tehdä tämän, päätetyypissä: sudo nano /etc /profile

Lisää tämän tiedoston alareunaan "python3 pin_website.py &"

"&" On välttämätön, koska se saa sen toimimaan taustalla ja mahdollistaa käynnistyksen jatkamisen

Vaihe 7: Sijainnin saaminen

Kuinka hakea sijainti
Kuinka hakea sijainti

IFTTT: n avulla voit määrittää palvelun niin, että kun puhelin saapuu tiettyyn paikkaan, se voi lähettää sinulle sähköpostia tai ping -verkko -osoitteen tai lähettää viestin sähkeellä.

Vaihe 8: Kuinka tämä kaikki toimii

Asennuksessani on palvelin Pi, joka isännöi verkkosivustoani, jossa on portinsiirto ja staattinen DNS käyttämällä palvelua, jonka tarjoaa https://freedns.afraid.org/. Suuri osa tästä on melko monimutkaista, ja sinun on ymmärrettävä portin edelleenlähetys. Voisin tehdä opastettavan tämän osan suorittamisen toisen kerran.

Toinen tapa, jolla voit tehdä sen, on käyttää sähkeitä viestien vastaanottamiseen pi: lle tai mahdollisesti helpoimmin, on perustaa sähköpostinlukija, joka lukee sähköpostit ja vastaanottaa sijaintipäivitykset sen kautta.

En ole kokeillut sähkebottia tai sähköpostinlukijaa, mutta siellä on paljon opetusohjelmia, jotka näyttävät sinulle kuinka.

Tässä on Flask / Python -koodini, jota webhookit sitten pyytävät IFTTT: tä käyttäen:

pullon tuonnista Pullo, render_template, request, jsonify

tuoda osia päivämäärä- ja aika -ajoista tuoda päivämäärät kartasta /') def mu (sijainti): mum.current_loc (location) return "Kiitos päivityksestä, äiti!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) return "Kiitos päivityksestä, isä!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) return "Hei, minä" @app.route ('/mum/exit/') def mume (location): mum.offline (sijainti) return "Kiitos päivityksestä, äiti!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "Kiitos päivityksestä, isä!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hei, minä" @app.route ("/reset") def redo (): setup () return "Nollaa!" jos _nimi_ == '_main_': app.run (debug = True, host = '0.0.0.0')

ja map.py:

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

tuonti ast, json tuonti aika tuontiketjujen tuonti 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 = auki ("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, "neljä ristiä": 18, "llandrinio": 25, "welshpool": 27} f = auki ("pin", "w") f.write (str (-1)) f. Close () time. uni (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," neljä ristiä ": 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 &") luokan isä: 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," neljä ristiä ": 15} f = auki (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') jatkopyyntöjä 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," koti ": 23," shrewsbury ": 0," llanymynech ": 6," neljä ristiä ": 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 &") luokka me: def current_loc (l): global mlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} f = auki ("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 &")

Vaihe 9: Rakenna oma inspiraationi projektini ulkopuolelta

Joten tiedän, että edellistä vaihetta on erittäin vaikea ymmärtää, joten jätän sen näyttämään sinulle kartan tekemisen ja voin saada vadelmapi, joka sytyttää ja sammuttaa LEDit. Sinun on nyt luotava python -komentosarja, joka IFTTT: n avulla lähettää sinulle sähköpostia. Sitten sinun on löydettävä sähköpostin lukukoodi, joka on melko helppoa (googlaa se). Kun olet lukenut sähköpostiviestin ja löytänyt vanhemman sijainnin, käytä if -lausekkeita löytääksesi, mikä nasta otetaan käyttöön.

Kartalla vilkkuva valo tarkoittaa, että he ovat juuri poistuneet alueelta

Tapa kytkeä pythonin toisen pi: n LEDit päälle seuraavasti:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #muuta tämä raspberry pi: n kartalla IP -osoite conn.request ("GET", str ("/off) /2 ")) # tämä poistaa nastan 2 vastauksen käytöstä = conn.getresponse () # tämä pyytää URL -osoitetta, ja sitten kartta pi lukee tämän ja sammuttaa nastan 2

Pohjimmiltaan toivon, että voit käyttää 3D -kartallani tekemääni inspiraationa oman GPS -seurantakartan luomiseen.

Suositeltava: