Satura rādītājs:

GPS izsekošanas 3D karte: 9 soļi
GPS izsekošanas 3D karte: 9 soļi

Video: GPS izsekošanas 3D karte: 9 soļi

Video: GPS izsekošanas 3D karte: 9 soļi
Video: Sonar Depth Mapping With Autonomous GPS Boat 2024, Novembris
Anonim
GPS izsekošanas 3D karte
GPS izsekošanas 3D karte
GPS izsekošanas 3D karte
GPS izsekošanas 3D karte

Šis projekts ir 3D drukāta 3D karte ar ceļiem, upēm un pilsētām ar LED bākām, lai parādītu ģimenes locekļu atrašanās vietu. Tas var parādīt, vai bērns mācās skolā, vai ne, vai tikai abu vecāku atrašanās vietu. Mēs to varam izmantot arī, lai prognozētu, kurā laikā vecāki atgriežas mājās, lai vakariņas varētu pagatavot īstajā laikā. Tas ir arī vienkārši foršs projekts, ko demonstrēt un parādīt ģimenei un draugiem.

Es ceru, ka jums patiks padarīt šo pamācību vai uzzināt par kādu manu projektu

1. darbība: 3D kartes iegūšana

Lai iegūtu jūsu reģiona 3D karti, esmu uzrakstījis atsevišķu pamācību, kas palīdzēs jums izveidot tās veidošanas procesu. Saite uz pamācību ir šeit:

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

2. darbība. Kartes sagatavošana LED ieliktņiem

Tagad, kad jums ir 3D karte ar ceļiem, pilsētām un upēm, mums ir nepieciešams veids, kā norādīt personas atrašanās vietu kartē. Es izmantoju divkrāsainas 3 mm RG gaismas diodes, jo kartes galvenais mērķis ir parādīt, kur atrodas abi vecāki. Dažās vietās es izmantoju RGB gaismas diodi, lai varētu parādīt, kur bija vecākais bērns. Raspberry Pi var izvadīt 28 tapas, tāpēc gudri izvēlieties gaismas diožu atrašanās vietas. Es beidzot izmantoju apmēram 24 no tiem, tāpēc jums vajadzētu būt kārtībā.

Lai urbtu PLA, es atklāju, ka parasts koka urbis darbojās labi, un es apstrādāju tā, kā es apstrādātu koku.

Vietās, kur karte bija pārāk bieza, es izurbtu bāzes slāni ar lielu urbi un pēc tam redzamo virskārtu ar pareizo 3 mm urbi.

3. solis: ievietojiet gaismas diodes

Ievietojiet gaismas diodes
Ievietojiet gaismas diodes

Tagad, kad mums ir caurumi, kur gaismas diodēm sēdēt, mēs varam tos pielīmēt. Šim nolūkam labi darbojas PVA vai Superglue, es atklāju, ka PVA skrēja ap to, noslēdzot to vietā, un arī superlīme darbojās ļoti labi. Pārliecinieties, ka ar katru gaismas diodi tie redzamajā pusē izliekas tikai par dažiem mm, jo gaismas diožu izgaismošana līdz galam izskatās mazliet netīra. Neuztraucieties par kājām aizmugurē, mēs varam tās salocīt, kad tās ir pielodētas.

4. solis: pievienojiet gaismas diodes Raspberry Pi

Es tieši lodēju gaismas diodes pie Raspberry Pi, tomēr, ja jums ir viens ar iepriekš lodētu galveni vai vēlaties izmantot pi kādam citam, es ieteiktu katrai gaismas diodei izmantot džemperu vadus, kas nozīmē, ka Pi ir noņemams. Jūs varat redzēt, ka pēc tam, kad biju pielodējis LED, es saliku kājas uz leju, lai tās neliptu pie muguras.

5. darbība: pārbaudiet gaismas diodes

Pārbaudiet gaismas diodes
Pārbaudiet gaismas diodes

Lai pārliecinātos, ka visas gaismas diodes darbojas, es palaidu skriptu, kas iet cauri katrai iespējamai tapai, un pa vienai iedegas, kas nokļūst nākamajā, kad noklikšķinu uz ievadīšanas. Tas ļāva man atzīmēt, kurš pin numurs kādā vietā atradās, un tas bija ļoti noderīgi.

importēt RPi. GPIO kā GPIO

importēšanas laiks GPIO.setmode (GPIO. BCM) i diapazonā (0, 28): GPIO.setup (i, GPIO. OUT) i diapazonā (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("Tas bija:" + str (i)) z = raw_input ("Nākamais?")

Kamēr tas notika, es teksta failā atzīmētu, kura tapa un kurā vietā izdarīja tapu. Jums tas jādara, jo tas ir ļoti noderīgi nākamajā solī.

6. darbība: kods, lai ieslēgtu gaismas diodi pēc pieprasījuma

Veids, kādā esmu paveicis šo projektu, ietver vienu Raspberry Pi Zero W ar pamata vietni, kas ļauj ieslēgt tapu. Tas nozīmēja, ka galvenais Pi 4, kas parasti ir ieslēgts un darbojas, var veikt apstrādi, un tad mazajam Pi 0 ir jāieslēdz tikai tapa, padarot lietas nedaudz sarežģītākas. Es to darīju, jo tas ir piemērots manam iestatījumam, un arī es jutu, ka Pi 0 var būt nedaudz lēns tam, ko mēs darīsim vēlāk.

importēt RPi. GPIO kā GPIO

importēšanas laiks no kolbas importēšanas Kolba, render_template, request, jsonify importēt os app = Kolba (_ name_) p = GPIO.setmode (GPIO. BCM) i diapazonā (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) atgriezt "Izslēgts" @app.route ("/off/all") def alloff (): i diapazonā (0, 28): GPIO.output (i, GPIO. LOW) atgriezt "off" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) atgriež "On", ja _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Tas darbojas tā, ka tas gaida pi IP adreses URL un pēc tam ieslēgšanu vai izslēgšanu un pēc tam PIN numuru.

saglabājiet šo kodu Raspberry Pi mājas direktorijā un nosauciet to par "pin_website.py"

Jums būs jāiestata, lai tas darbotos automātiski, tāpēc, lai to izdarītu, termināļa tipā: sudo nano /etc /profile

Šī faila apakšdaļā pievienojiet “python3 pin_website.py &”

"&" Ir būtiska, jo tā darbojas fonā un tādējādi ļauj turpināt sāknēšanu

7. darbība. Kā iegūt atrašanās vietu

Kā iegūt atrašanās vietu
Kā iegūt atrašanās vietu

Izmantojot IFTTT, jūs varat iestatīt pakalpojumu, lai, tālrunim ieejot noteiktā vietā, tas varētu jums nosūtīt e -pastu vai pingēt tīmekļa adresi vai ziņu telegrammā.

8. darbība. Kā tas viss darbojas

Man ir iestatījums Server Pi, kas mitina manu vietni, ar portu pāradresāciju un statisku DNS, izmantojot pakalpojumu, ko nodrošina https://freedns.afraid.org/. Daudz kas no tā ir diezgan sarežģīts, un jums ir jābūt izpratnei par ostas pāradresāciju, es varētu sniegt pamācību par to, kā šo daļu veikt citreiz.

Vēl viens veids, kā to izdarīt, ir izmantot telegrammu, lai saņemtu ziņojumus pi, vai, iespējams, vienkāršākais, ir iestatīt e -pasta lasītāju, kas lasa e -pastus un ar to saņem atrašanās vietas atjauninājumus.

Es neesmu izmēģinājis Telegram robotu vai e -pasta lasītāju, taču ir daudz pamācību, kas parādīs, kā to izdarīt.

Šeit ir mans kolbas / Python kods, kuru pēc tam pieprasa tīmekļa āķi, izmantojot IFTTT:

no kolbas importēšanas Kolba, render_template, request, jsonify

importēt os no datuma laika importēt datuma laiku no kartes importēšanas * app = kolba (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (atrašanās vieta): mum.current_loc (atrašanās vieta) atgriezties "Paldies par atjauninājumu, mammu!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) return "Paldies par atjauninājumu, tēt!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) atgriezties "Hei, es" @app.route ('/mum/exit/') def mume (atrašanās vieta): mum.offline (atrašanās vieta) atgriezties "Paldies par atjauninājumu, mammu!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "Paldies par atjauninājumu, tēt!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) atgriezties "Hei, es" @app.route ("/reset") def redo (): setup () return "Atiestatīt!" ja _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

un map.py:

importēt http.client, urllib.request, urllib.parse, urllib.error, base64

importēt ast, json importēšanas laiku importēt pavedienu importēšanu 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")) atbilde = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = atvērt ("pind", "w") f.write (str (-1)) f.close () f = open ("pinm", "w") f.write (str (-1)) f.close () klases mamma: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "četri krusti": 18, "llandrinio": 25, "welshpool": 27} f = open ("pin", "w") f.writ (str (-1)) f.close () time. miega (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," četri krusti ": 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 &") klases tētis: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "četri krusti": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," četri krusti ": 15} f = open (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') savienojuma pieprasījumi 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," mājas ": 23," shrewsbury ": 0," llanymynech ": 6," četri krusti ": 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 &") klase 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 (skat 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. solis: izveidojiet savu, iedvesmojoties no mana projekta

Tāpēc es zinu, ka iepriekšējo soli būs ļoti grūti saprast, tāpēc es atstāšu to kā parāda, kā izveidot karti, un varēšu iegūt aveņu pi, kas ieslēdz un izslēdz gaismas diodes. Tagad jums ir jāizveido pitona skripts, kas, izmantojot IFTTT, nosūta jums e -pastu. Tad jums jāatrod e -pasta lasīšanas koda gabals, kas ir diezgan vienkārši (google to). Pēc tam, kad esat izlasījis e -pastu un atradis vecāku atrašanās vietu, izmantojiet paziņojumus “ja”, lai atrastu, kuru tapu ieslēgt.

Kartē mirgojoša gaisma nozīmē, ka viņi ir tikko izbraukuši no apgabala

Kā ieslēgt gaismas diodes citā pi no python, ir šāds:

importēt http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #mainiet to, izmantojot aveņu pi kartes IP adresi conn.request ("GET", str ("/off /2 ")) # tas izslēdz atbildes taustiņa 2 atbildi = conn.getresponse () # tas pieprasa URL, un tad karte pi to nolasa un izslēdz tapu 2. numuru

Būtībā es ceru, ka jūs varat izmantot to, ko esmu paveicis ar savu 3D karti, kā iedvesmu, lai izveidotu savu GPS izsekošanas karti.

Ieteicams: