Mündəricat:

GPS İzləmə 3D xəritəsi: 9 addım
GPS İzləmə 3D xəritəsi: 9 addım

Video: GPS İzləmə 3D xəritəsi: 9 addım

Video: GPS İzləmə 3D xəritəsi: 9 addım
Video: Bakı metrosunda gənclərin elədiyi zarafat 2024, Noyabr
Anonim
GPS İzləmə 3D xəritəsi
GPS İzləmə 3D xəritəsi
GPS İzləmə 3D xəritəsi
GPS İzləmə 3D xəritəsi

Bu layihə, ailə üzvlərinin yerini göstərmək üçün yolları, çayları və şəhərləri olan LED işıqları olan 3D çaplı bir 3D xəritəsidir. Bir uşağın məktəbdə olub -olmadığını və ya hər iki valideynin yerini göstərə bilər. Valideynlərin evə nə vaxt gəldiklərini də proqnozlaşdırmaq üçün istifadə edə bilərik ki, axşam yeməyi doğru vaxtda hazırlansın. Həm də ailənizə və dostlarınıza göstərmək və göstərmək üçün ümumiyyətlə sərin bir layihədir.

Ümid edirəm ki, bu təlimatı hazırlamaqdan zövq alırsınız və ya hazırladığım bir layihə haqqında məlumat əldə etməkdən zövq alırsınız

Addım 1: 3D xəritəsini əldə edin

Bölgənizin bir 3D xəritəsini əldə etmək üçün, bir xəritə hazırlamaq prosesində sizə kömək etmək üçün ayrıca bir təlimat yazdım. Təlimat verənlərə keçid burada:

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

Addım 2: Xəritəni LED -lər üçün hazırlayın

Yollarınız, şəhərləriniz və çaylarınız olan bir 3D xəritəniz olduğuna görə, bir şəxsin xəritədə harada olduğunu göstərməyimiz lazımdır. İki rəngli 3 mm RG LED-lərindən istifadə etdim, çünki xəritənin əsas məqsədi iki valideynin harada olduğunu göstərməkdir. Bəzi yerlərdə ən böyük uşağın harada olduğunu göstərmək üçün bir RGB LED istifadə etdim. Raspberry Pi -də çıxarmaq üçün 28 sancaq limiti var, buna görə LED -lərin yerlərini ağıllı şəkildə seçin. Təxminən 24 -dən istifadə etdim, buna görə yaxşı olmalısan.

PLA qazmaq üçün normal bir ağac matkapının yaxşı işlədiyini gördüm və oduna necə qulluq edərdimsə, elə də müalicə etdim.

Xəritənin çox qalın olduğu yerlərdə əsas təbəqəni böyük bir matkap ucu ilə, sonra yuxarıdakı görünən təbəqəni düzgün 3 mm qazma ucu ilə qazardım.

Addım 3: LEDləri daxil edin

LEDləri daxil edin
LEDləri daxil edin

İndi LED -lərin oturması üçün deşiklərimiz var, onları yapışdıra bilərik. PVA və ya Superglue bunun üçün yaxşı işləyir, PVA -nın ətrafına yuvarlandığını və onu möhkəm bağladığını gördüm. Hər bir LED ilə yalnız görünən tərəfdə bir neçə mm qaldıqlarından əmin olun, çünki LED -lərin bir kənara çıxması bir az qarışıq görünür. Arxadakı ayaqlardan narahat olmayın, lehimləndikdən sonra bunları qatlaya bilərik.

Addım 4: LED -ləri Raspberry Pi -yə qoşun

LEDləri birbaşa Raspberry Pi-yə lehimlədim, ancaq əvvəlcədən lehimlənmiş başlığınız varsa və ya pi-ni başqa bir şey üçün istifadə etmək istəyirsinizsə, onda hər LED üçün tullanan tellərdən istifadə etməyi təklif edərdim, yəni Pi çıxarıla bilər. Görürsünüz ki, LED -i lehimlədikdən sonra ayaqlarımı arxaya yapışmaması üçün qatladım.

Addım 5: LEDləri sınayın

LEDləri sınayın
LEDləri sınayın

Bütün LED -lərin işlədiyinə əmin olmaq üçün, hər bir mümkün pindən keçən bir skript işlədim və onları bir -bir işıqlandırdım ki, bu da daxil etmə düyməsini basdığımda digərinə keçər. Bu, hansı pin nömrəsinin hansı yerdə etdiyini və çox faydalı olduğunu qeyd etməyə imkan verdi.

GPO olaraq RPi. GPIO idxal edin

idxal vaxtı GPIO.setmode (GPIO. BCM) i aralığında (0, 28): GPIO.setup (i, GPIO. OUT) i aralığında (0, 28): GPIO. çıxışı (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) yazdır ("O idi:" + str (i)) z = raw_input ("Sonrakı?")

Bu baş verərkən, bir mətn sənədində hansı pinin hansı yeri və hansı rəngdə etdiyini qeyd edərdim. Növbəti addımda çox faydalı olduğu üçün bunu etməlisiniz.

Addım 6: Tələb olunduqda LED -i açmaq üçün kod

Bu layihəni həyata keçirmə üsulum, bir pin açmağa imkan verən əsas bir veb saytına sahib bir Raspberry Pi Zero W -ni əhatə edir. Bu, ümumiyyətlə işləyən və işləyən əsas Pi 4 -ün emal edə biləcəyi və sonra kiçik Pi 0 -ın işini bir az daha mürəkkəbləşdirən yalnız bir pin açması lazım olduğu anlamına gəlirdi. Bunu konfiqurasiyama uyğun olduğu üçün etdim və Pi 0 -un daha sonra edəcəyimiz işlərdə bir az ləng ola biləcəyini də hiss etdim.

GPO olaraq RPi. GPIO idxal edin

flask idxalından idxal vaxtı Flask, render_template, request, jsonify import os app = Flask (_ name_) p = i üçün diapazonda (0, 28) GPIO.setmode (GPIO. BCM): 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) qaytar "Off" @app.route ("/off/all") def alloff (): i üçündür (0, 28) üçün: GPIO.output (i, GPIO. LOW) "off" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) _name_ == '_main_' olarsa "On" qaytar: app.run (debug = True, host = '0.0. 0.0 ')

Bunun necə işlədiyi, pi -nin IP ünvanının urlini, sonra açılmasını və ya sönməsini və sonra pin nömrəsini gözləməsidir.

bu kodu Raspberry Pi -nin ana qovluğunda saxlayın və "pin_website.py" adlandırın

Bunu avtomatik olaraq işləyəcək şəkildə qurmalısınız, bunun üçün terminal tipində: sudo nano /etc /profile

Bu faylın altına "python3 pin_website.py &" əlavə edin

"&" Arxa planda işləməsini təmin etdiyi üçün önəmlidir, buna görə də yükləmənin davam etməsinə imkan verir

Addım 7: Məkanı necə əldə etmək olar

Məkanı necə əldə etmək olar
Məkanı necə əldə etmək olar

IFTTT -dən istifadə edərək, telefon müəyyən bir yerə girəndə sizə e -poçt göndərə və ya veb ünvanına ping göndərə və ya telegramda mesaj göndərə biləcəyiniz bir xidmət qura bilərsiniz.

Addım 8: Bütün bunlar necə işləyir

Sahib olduğum quruluş, https://freedns.afraid.org/ tərəfindən verilən xidmətdən istifadə edərək port yönləndirmə və statik bir DNS ilə veb saytımı yerləşdirən bir Server Pi -dir. Bunun bir çoxu olduqca mürəkkəbdir və liman yönləndirmə anlayışına sahib olmalısınız, bu hissəni başqa dəfə necə edəcəyinizi izah edə bilərəm.

Başqa bir yol, pi -yə mesaj göndərmək üçün teleqramdan istifadə etmək və ya bəlkə də ən asan olanı, e -poçtları oxuyan və bunun vasitəsilə yer yeniləmələrini alan bir e -poçt oxuyucusu qurmaqdır.

Telegram botunu və ya e -poçt oxuyucusunu sınamamışam, amma necə edəcəyinizi göstərəcək çoxlu dərsliklər var.

IFTTT istifadə edərək webhooks tərəfindən tələb olunan Flask / Python kodum budur:

balon idxalından Şüşə, render_template, istək, jsonify

datetime -dan os -ı import edin datetime xəritədən daxil edin * app = Flask (_ name_) l = 0 quraşdırma () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (yer): mum.current_loc (yer) qaytar "Yeniləmə üçün təşəkkürlər, ana!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) "Yeniləmə üçün təşəkkürlər, ata!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) "Hey, Mən" i qaytar @app.route ('/mum/exit/') def mume (yer): mum.offline (yer) "Yeniləmə üçün təşəkkürlər, ana!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) "Yeniləmə üçün təşəkkürlər, ata!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, Mən" @app.route ("/reset") def redo (): setup () return "Sıfırla!" əgər _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

və map.py:

http.client, urllib.request, urllib.parse, urllib.error, base64 idxal edin

import ast, json idxal vaxtı idxal mövzuları idxal os params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('ozodns.afraid.org')) conn.request ("GET", str ("/dynamic/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) cavab = conn.getresponse () conn = http.client. HTTPConnection ('192.1000'.251) "GET", str ("/off/all")) cavab = conn.getresponse () f = açıq ("pin", "w") f. yazmaq (str (-1)) f.close () f = açıq ("pind", "w") f. yaz (str (-1)) f.close () f = açıq ("pinm", "w") f. yaz (str (-1)) f.close () sinif anası: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "dörd xaç": 18, "llandrinio": 25, "welshpool": 27} f = açıq ("pin", "w") f.write (str (-1)) f.close () zaman. yuxu (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (last_loc)) cavab = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/on/") + str (locs [l])) cavab = 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," dörd xaç ": 18," llandrinio ": 25," welshpool ": 27} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request (" GET ", str (" /off/") + str (last_loc)) cavab = conn.getresponse () f = açıq (" pin "," w ") f.write (str (locs [l])) f.close () os.system ("python3 flash.py &") sinif atası: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "four cross": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," dörd xaç ": 15} f = açıq (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') əlaqələndiriciləri t ("GET", str ("/off/") + str (dlast_loc)) cavab = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/on/") + str (locs [l])) cavab = conn.getresponse () dlast_loc = locs [l] def off (l): global dlast_loc locs = {"welshpool": 3, "lynclys ": 1," ev ": 23," shrewsbury ": 0," llanymynech ": 6," dörd xaç ": 15," llandrinio ": 10} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (dlast_loc)) cavab = conn.getresponse () f = açıq ("pind", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") sinif məni: def current_loc (l): global mlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} f = açıq ("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)) cavab = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("GET", str ("/on/") + str (bax cs [l])) cavab = bağla http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (mlast_loc)) cavab = conn.getresponse () f = açıq ("pinm"), "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

Addım 9: Layihəmdən Öz İlhamınızı Alın

Beləliklə, əvvəlki addımı başa düşməyin çox çətin olacağını bilirəm, buna görə xəritənin necə ediləcəyini sizə göstərəcəyəm və LED -ləri yandıran və söndürən bir moruq pi -yə sahib olacağam. İndi IFTTT istifadə edərək sizə e -poçt göndərən bir python skript yaratmalısınız. Sonra olduqca asan olan bir e -poçt oxu kodu tapmalısınız (google it). Sonra bir e -poçt oxuduqda və bir valideynin yerini tapdıqda, hansı pin açılacağını tapmaq üçün 'if' ifadələrini istifadə edin.

Xəritədə, yanıb -sönən işıq, ərazini yenicə tərk etdikləri anlamına gəlir

Python -dan başqa bir pi -də LEDləri açmağın yolu aşağıdakı kimidir:

http.client, urllib.request, urllib.parse, urllib.error, base64 idxal edin

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #bunu moruq pi -nin xəritəsi IP ünvanı ilə dəyişin Conn.request ("GET", str ("/off") /2 ")) # bu 2 nömrəli pin cavabını bağlayır = conn.getresponse () # bu URL tələb edir və sonra xəritə pi bunu oxuyur və pin nömrəsi 2 -ni söndürür

Ümumiyyətlə, 3D xəritəmlə etdiklərimi öz GPS izləmə xəritənizi yaratmaq üçün ilham olaraq istifadə edə biləcəyinizə ümid edirəm.

Tövsiyə: