Tartalomjegyzék:

GPS nyomkövető 3D térkép: 9 lépés
GPS nyomkövető 3D térkép: 9 lépés

Videó: GPS nyomkövető 3D térkép: 9 lépés

Videó: GPS nyomkövető 3D térkép: 9 lépés
Videó: ELSZÍVTAM ÉLETEM ELSŐ CIGIJÉT. vagy nyalókáját? #shorts 2024, Július
Anonim
GPS nyomkövető 3D térkép
GPS nyomkövető 3D térkép
GPS nyomkövető 3D térkép
GPS nyomkövető 3D térkép

Ez a projekt egy 3D nyomtatott 3D -s térkép, utakkal, folyókkal és városokkal, LED -es jelzőfényekkel, amelyek a család tagjainak helyét mutatják. Megmutathatja, hogy a gyermek iskolában van -e vagy sem, vagy csak mindkét szülő tartózkodási helyét. Segítségünkkel megjósolhatjuk azt is, hogy a szülők mikor érnek haza, hogy a vacsorát a megfelelő időpontra tudják elkészíteni. Ez is csak egy általában jó projekt, hogy megmutassák és megmutassák a családnak és a barátoknak.

Remélem, élvezni fogja ezt az utasítást, vagy élvezni fogja az általam készített projekt megismerését

1. lépés: 3D térkép készítése

Ahhoz, hogy 3D -s térképet kaphasson a területéről, írtam egy külön utasítást, amely segíti az elkészítés folyamatát. Az oktatható link itt található:

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

2. lépés: A térkép előkészítése a LED betétekhez

Most, hogy rendelkezik 3D -s térképpel, utakkal, városokkal és folyókkal, szükségünk van arra, hogy jelezzük, hol van egy személy a térképen. Kétszínű 3 mm-es RG LED-eket használtam, mert a térkép fő célja, hogy megmutassa, hol van a két szülő. Bizonyos helyeken RGB LED -et használtam, hogy megmutassam, hol van a legidősebb gyermek. A Raspberry Pi -n 28 tű rögzíthető, ezért okosan válassza ki a LED -ek helyét. Végül körülbelül 24 -et használtam, szóval rendben kell lennie.

A PLA fúrásához azt találtam, hogy egy normál fafúró jól működik, és úgy kezeltem, mint a fát.

Olyan helyeken, ahol a térkép túl vastag volt, nagy fúróval fúrnám ki az alapréteget, majd a látható fenti réteget a megfelelő 3 mm -es fúróval.

3. lépés: Helyezze be a LED -eket

Helyezze be a LED -eket
Helyezze be a LED -eket

Most, hogy lyukak vannak a LED -ek számára, ahová beülhetnek, beragaszthatjuk őket. A PVA vagy a Superglue jól működik erre, azt tapasztaltam, hogy a PVA körbefutott, lezárva a helyét, és a szuperragasztó is nagyon jól működött. Győződjön meg arról, hogy mindegyik LED -nél csak néhány mm -rel ragadnak ki a látható oldalon, mert a LED -ek teljesen kilógása kicsit zavarosnak tűnik. Ne aggódjon a hátsó lábak miatt, forrasztás után összecsukhatjuk.

4. lépés: Csatlakoztassa a LED -eket a Raspberry Pi -hez

A LED-eket közvetlenül a Raspberry Pi-hez forrasztottam, azonban ha van egy előre forrasztott fejléccel, vagy másra szeretné használni a pi-t, akkor azt javaslom, hogy minden LED-hez használjon jumper vezetékeket, ami azt jelenti, hogy a Pi eltávolítható. Láthatja, hogy miután forrasztottam a LED -et, lehajtottam a lábakat, hogy ne ragadjanak a hátlapra.

5. lépés: Ellenőrizze a LED -eket

Tesztelje a LED -eket
Tesztelje a LED -eket

Annak érdekében, hogy az összes LED működjön, futtattam egy szkriptet, amely végigmegy minden lehetséges tűn, és egyesével felgyújtja őket, amely az Enter gombra kattintva a következőre lép. Ez lehetővé tette számomra, hogy feljegyezzem, melyik pin szám melyik helyre került, ami nagyon hasznos volt.

importálja az RPi. GPIO -t GPIO -ként

importálási idő GPIO.setmode (GPIO. BCM) i (0, 28) tartományban: GPIO.setup (i, GPIO. OUT) i (0, 28) tartományban: GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("Ez volt:" + str (i)) z = raw_input ("Következő?")

Amíg ez történt, egy szövegfájlnál lejegyezném, hogy melyik tű melyik helyen és milyen színű volt. Ezt meg kell tennie, mivel ez nagyon hasznos a következő lépésben.

6. lépés: Kód a LED bekapcsolásához, amikor kérik

A projekt elkészítésének módja egy Raspberry Pi Zero W, egy alap webhellyel, amely lehetővé teszi a csap bekapcsolását. Ez azt jelentette, hogy a fő Pi 4, amely rendszerint be van kapcsolva, és fut, képes elvégezni a feldolgozást, majd a kis Pi 0 -nak csak egy csapot kell bekapcsolnia, ami kissé bonyolultabbá teszi a dolgokat. Ezt azért tettem, mert megfelel a beállításaimnak, és úgy éreztem, hogy a Pi 0 kissé lassú lehet ahhoz, amit később fogunk csinálni.

importálja az RPi. GPIO -t GPIO -ként

importálási idő a lombik importálásából Lombik, render_template, request, jsonify import os app = Lombik (_ name_) p = GPIO.setmode (GPIO. BCM) i (0, 28) tartományban: 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 "Ki" @app.route ("/off/all") def alloff (): i tartományban (0, 28): GPIO.output (i, GPIO. LOW) return "off" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) return "On", ha _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Ez úgy működik, hogy várja a pi IP -címének url -jét, majd egy be- vagy kikapcsolást, majd a PIN -kódot.

mentse el ezt a kódot a Raspberry Pi saját könyvtárába, és nevezze el "pin_website.py"

Be kell állítania, hogy ez automatikusan fusson, ezért a terminál típusában: sudo nano /etc /profile

A fájl alján adja hozzá a következőt: "python3 pin_website.py &"

A "&" elengedhetetlen, mivel a háttérben fut, ezért lehetővé teszi a rendszerindítás folytatását

7. lépés: A hely lekérése

Hogyan kaphat helyet
Hogyan kaphat helyet

Az IFTTT használatával beállíthat egy szolgáltatást, hogy amikor a telefon egy adott helyre belép, e -mailt küldjön Önnek, vagy pingáljon egy webcímet, vagy üzenjen táviratban.

8. lépés: Hogyan működik ez az egész?

A beállításom egy szerver Pi, amely a webhelyemet tárolja, portátirányítással és statikus DNS -sel a https://freedns.afraid.org/ szolgáltatás segítségével. Ennek sok része meglehetősen bonyolult, és meg kell értenie a kikötői továbbítást, lehet, hogy máskor megtanítom, hogyan kell elvégezni ezt a részt.

Egy másik módja annak, hogy távirat segítségével juttatja el az üzeneteket a pi -hez, vagy talán a legegyszerűbb, ha beállít egy e -mail olvasót, amely elolvassa az e -maileket, és ezen keresztül fogadja a helyfrissítéseket.

Nem próbáltam ki a Telegram botot vagy egy e -mail olvasót, de rengeteg oktatóanyag létezik, amelyek megmutatják, hogyan kell.

Itt van a Flask / Python kódom, amelyet azután az IFTTT -t használó webhookok kérnek:

lombik importból Lombik, render_template, request, jsonify

rész importálása a dátumból importálás dátum/idő importálása a térkép importálásából * app = Flask (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (hely): mum.current_loc (location) return "Köszönöm a frissítést, anya!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) return "Köszönöm a frissítést, apa!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) return "Hey, Me" @app.route ('/mum/exit/') def mume (hely): mum.offline (hely) return "Köszönöm a frissítést, anya!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "Köszönöm a frissítést, apa!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, Me" @app.route ("/reset") def redo (): setup () return "Visszaállítás!" if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

és map.py:

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

import ast, json import time import threading 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.21.2000 "GET", str ("/off/all")) response = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = nyitott ("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, "négy kereszt": 18, "llandrinio": 25, "welshpool": 27} f = nyitott ("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): globális last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13," négy kereszt ": 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 &") osztályapa: 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," négy kereszt ": 15} f = nyitott (" 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): global dlast_loc locs = {"welshpool": 3, "lynclys ": 1," otthon ": 23," shrewsbury ": 0," llanymynech ": 6," négy kereszt ": 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 &") class me: def current_loc (l): global mlast_loc locs = {"home": 22, "iskola": 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. lépés: Építsd meg sajátodat a projektemből származó inspirációból

Tehát tudom, hogy az előző lépést nagyon nehéz lesz megérteni, ezért úgy hagyom, hogy megmutatja, hogyan kell elkészíteni a térképet, és képes lesz egy málna pi -vel, amely be- és kikapcsolja a LED -eket. Most létre kell hoznia egy python szkriptet, amely az IFTTT használatával e -mailt küld Önnek. Ezután meg kell találnia egy e -mailt olvasó kódrészletet, ami meglehetősen egyszerű (google). Majd ha elolvasott egy e -mailt, és megtalálta a szülő helyét, használja az „if” utasításokat a bekapcsolni kívánt tű meghatározásához.

A térképen a villogó fény azt jelenti, hogy éppen elhagyták a területet

A LED -ek bekapcsolásának módja egy másik pi -n a python -ból:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #módosítsa ezt a málna pi térképének IP -címével conn.request ("GET", str ("/off /2 ")) # ez kikapcsolja a 2 -es jelű válasz választ = conn.getresponse () # ez lekéri az URL -t, majd a térkép a pi ezt elolvassa és kikapcsolja a 2 -es pin -t

Alapvetően remélem, hogy a 3D -s térképemmel végzett munkámat inspirációként használhatja saját GPS nyomkövetési térképének elkészítéséhez.

Ajánlott: