İçindekiler:

GPS İzleme 3D Haritası: 9 Adım
GPS İzleme 3D Haritası: 9 Adım

Video: GPS İzleme 3D Haritası: 9 Adım

Video: GPS İzleme 3D Haritası: 9 Adım
Video: Bu Özelliği Bilmeyen Navigasyon Kullanmasın! #shorts 2024, Temmuz
Anonim
GPS İzleme 3D Harita
GPS İzleme 3D Harita
GPS İzleme 3D Harita
GPS İzleme 3D Harita

Bu proje, yolların, nehirlerin ve kasabaların bulunduğu, aile üyelerinin konumlarını gösteren LED işaretli 3D baskılı 3D haritadır. Bir çocuğun okulda olup olmadığını veya sadece her iki ebeveynin yerini gösterebilir. Ayrıca, akşam yemeğinin doğru zamanda hazırlanabilmesi için ebeveynlerin eve ne zaman geleceğini tahmin etmek için de kullanabiliriz. Aynı zamanda aile ve arkadaşlara gösteriş yapmak ve sergilemek için genel olarak harika bir proje.

Umarım bu Eğitilebilirliği yapmaktan zevk alırsınız veya yaptığım bir proje hakkında bilgi edinmekten keyif alırsınız.

1. Adım: Bir 3B Harita Alma

Bölgenizin 3B haritasını almak için, bir harita oluşturma sürecinde size rehberlik edecek ayrı bir talimat yazdım. Eğitilebilir dosyanın bağlantısı burada:

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

2. Adım: Haritayı LED Ek Parçaları için Hazırlama

Artık yolları, kasabaları ve nehirleri içeren bir 3B haritanız olduğuna göre, bir kişinin haritada nerede olduğunu göstermenin bir yoluna ihtiyacımız var. Haritanın asıl amacı iki ebeveynin nerede olduğunu göstermek olduğu için iki renkli 3 mm RG LED'ler kullandım. Bazı yerlerde, en büyük çocuğun nerede olduğunu göstermeme izin vermek için bir RGB LED kullandım. Raspberry Pi'de çıkış yapmak için 28 pin sınırı vardır, bu nedenle LED'lerin yerlerini akıllıca seçin. Yaklaşık 24 tanesini kullandım, bu yüzden iyi olmalısın.

PLA'yı delmek için normal bir ahşap matkap ucunun iyi çalıştığını gördüm ve ahşabı işleyeceğim gibi işlem yaptım.

Haritanın çok kalın olduğu yerlerde, temel katmanı büyük bir matkap ucuyla ve ardından görünen üst katmanı doğru 3 mm matkap ucuyla delerdim.

Adım 3: LED'leri yerleştirin

LED'leri takın
LED'leri takın

Artık LED'lerin oturması için deliklerimiz olduğuna göre, onları yapıştırabiliriz. PVA veya Süper Yapıştırıcı bunun için iyi çalışıyor, PVA'nın etrafında dolaştığını ve yerinde yalıttığını ve süper yapıştırıcının da çok iyi çalıştığını gördüm. Her LED'de, yalnızca görünen tarafta birkaç mm dışarı çıktıklarından emin olun, çünkü LED'lerin tamamen dışarı çıkması biraz dağınık görünüyor. Arkadaki bacaklar için endişelenme, lehimlendikten sonra bunları katlayabiliriz.

Adım 4: LED'leri Raspberry Pi'ye bağlayın

LED'leri doğrudan Raspberry Pi'ye lehimledim, ancak, önceden lehimlenmiş bir başlığınız varsa veya pi'yi başka bir şey için kullanabilmek istiyorsanız, o zaman her LED için atlama telleri kullanmanızı öneririm, yani Pi çıkarılabilir. LED'i lehimledikten sonra arkaya yapışmaması için bacakları aşağı katladığımı görebilirsiniz.

Adım 5: LED'leri test edin

LED'leri test edin
LED'leri test edin

Tüm LED'lerin çalıştığından emin olmak için, olası her pimden geçen ve onları birer birer aydınlatan bir komut dosyası çalıştırdım, bu da enter'a tıkladığımda bir sonrakine geçiyor. Bu, hangi pin numarasının hangi lokasyonu yaptığını not etmemi sağladı, ki bu çok faydalı oldu.

RPi. GPIO'yu GPIO olarak içe aktar

içe aktarma süresi i aralığı (0, 28) için GPIO.setmode(GPIO. BCM): i aralığı (0, 28) için GPIO.setup(i, GPIO. OUT): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("Öyleydi: " + str(i)) z = raw_input("Sonraki?")

Bu olurken, hangi pinin hangi konumu ve hangi rengi yaptığını bir metin dosyasına not ederdim. Bir sonraki adımda çok faydalı olduğu için bunu yapmanız gerekir.

Adım 6: İstendiğinde LED'i Açma Kodu

Bu projeyi yapma şeklim, bir pin açmanıza izin veren temel bir web sitesine sahip bir Raspberry Pi Zero W'yi içeriyor. Bu, genellikle açık olan ve çalışan ana Pi 4'ün işlemeyi yapabileceği ve ardından küçük Pi 0'ın yalnızca bir pimi açması gerektiği ve işleri biraz daha karmaşık hale getirdiği anlamına geliyordu. Bunu yaptım çünkü kurulumuma uyuyor ve ayrıca Pi 0'ın daha sonra yapacağımız şey için biraz yavaş olabileceğini hissettim.

RPi. GPIO'yu GPIO olarak içe aktar

şişeden içe aktarma süresi içe aktarma Flask, render_template, request, jsonify import os app = Flask(_name_) p = GPIO.setmode(GPIO. BCM) for i in range(0, 28): GPIO.setup(i, GPIO. OUT) @app.route('/') def index(): request.remote_addr @app.route("/off/") def turn_off(pin): GPIO.output(int(pin), GPIO. LOW) return "Off" @app.route("/off/all") def alloff(): i aralığında (0, 28): GPIO.output(i, GPIO. LOW) return "off" @app.route("/on/") def turn_on(pin): GPIO.output(int(pin), GPIO. HIGH) _name_ == '_main_' ise "On" döndürür: app.run(debug=True, host='0.0. 0,0')

Bunun çalışma şekli, pi'nin IP adresinin url'sini ve ardından bir açık veya kapalı ve ardından pin numarasını beklemektir.

bu kodu Raspberry Pi'nin ana dizinine kaydedin ve "pin_website.py" olarak adlandırın.

Bunu otomatik olarak çalışacak şekilde ayarlamanız gerekecek, böylece bunu yapmak için terminal türünde: sudo nano /etc/profile

Bu dosyanın altına "python3 pin_website.py &" ekleyin.

"&", arka planda çalışmasını sağladığı ve bu nedenle önyüklemenin devam etmesine izin verdiği için önemlidir.

7. Adım: Konum Nasıl Alınır

Konum Nasıl Alınır
Konum Nasıl Alınır

IFTTT'yi kullanarak, telefon belirli bir konuma girdiğinde size e-posta gönderebilmesi, bir web adresine ping atabilmesi veya size telgrafla mesaj gönderebilmesi için bir hizmet ayarlayabilirsiniz.

Adım 8: Bunların Hepsi Nasıl Çalışır?

Sahip olduğum kurulum, web sitemi barındıran, bağlantı noktası yönlendirmeli ve https://freedns.afraid.org/ tarafından sağlanan hizmeti kullanan statik bir DNS'li bir Sunucu Pi'dir. Bunların çoğu oldukça karmaşık ve port yönlendirmeyi anlamanız gerekiyor, başka bir zaman bu bölümün nasıl yapılacağına dair bir talimat verebilirim.

Bunu yapmanın başka bir yolu, mesajları pi'ye almak için telgraf kullanmaktır veya muhtemelen en kolayı, e-postaları okuyan ve bunun aracılığıyla konum güncellemelerini alan bir e-posta okuyucusu kurmaktır.

Telegram botunu veya bir e-posta okuyucusunu denemedim, ancak size nasıl yapılacağını gösterecek çok sayıda öğretici var.

İşte daha sonra IFTTT kullanılarak web kancaları tarafından istenen Flask/Python kodum:

şişeden içe aktarma Flask, render_template, request, jsonify

işletim sistemini tarih saatinden içe aktar tarih saatini haritadan içe aktar içe aktar * app = Flask(_name_) l = 0 setup() @app.route('/') def index(): request.remote_addr @app.route('/mum/enter) /') def mu(konum): mum.current_loc(konum) return "Güncelleme için Teşekkürler Anne!" @app.route("/dad/enter/") def da(l): Dad.current_loc(l) return "Güncelleme İçin Teşekkürler Baba!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "Hey, Me" @app.route('/mum/exit/') def mume(konum): mum.offline(location) return "Güncelleme İçin Teşekkürler Anne!" @app.route("/dad/exit/") def dade(l): Dad.offline(l) return "Güncelleme İçin Teşekkürler Baba!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "Hey, Me" @app.route("/reset") def redo(): setup() return "Sıfırla!" if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

ve map.py:

http.client, urllib.request, urllib.parse, urllib.error, base64'ü içe aktarın

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")) yanıt = conn.getresponse() bağlantı = http.client. HTTPConnection('192.168.1.251:5000') "GET", str("/off/all")) yanıt = conn.getresponse() f = open("pin", "w") f.write(str(-1)) f.close() f = open("pind", "w") f.write(str(-1)) f.close() f = open("pinm", "w") f.write(str(-1)) f.close () class anne: def current_loc(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "dört çarpı": 18, "llandrinio": 25, "welshpool": 27 } f = open("pin", "w") f.write(str(-1)) f.close() zaman. uyku(1) bağlantı = http.client. HTTPConnection('192.168.1.251:5000') bağlantı.request("GET", str("/off/") + str(last_loc)) yanıt = bağlantı.getrespons e() bağlantı = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) yanıt = bağlantı.getresponse() last_loc = locs[l] def çevrimdışı(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13, "dört çarpı": 18, "llandrinio": 25, "welshpool": 27 } bağlantı = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str(" /off/") + str(last_loc)) yanıt = conn.getresponse() f = open("pin", "w") f.write(str(locs[l])) f.close() os.system ("python3 flash.py &") class baba: locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "dört çarpı": 15, "llandrinio": 10, "welshpool": 24 } def current_loc(l): global dlast_loc locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech": 6, "dört çarpı": 15 } f = open("pind", "w") f.write(str(-1)) f.close() time.sleep(1) bağlantı = http.client. HTTPConnection('192.168.1.251:5000') bağlantı.reques t("GET", str("/off/") + str(dlast_loc)) yanıt = conn.getresponse() bağlantı = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) yanıt = bağlantı.getresponse() dlast_loc = locs[l] def çevrimdışı(l): global dlast_loc locs = { "welshpool": 3, "lynclys ": 1, "ev": 23, "shrewsbury": 0, "llanymynech": 6, "dört çarpı": 15, "llandrinio": 10 } bağlantı = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/") + str(dlast_loc)) yanıt = 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, "school": 2, "oswestry": 14 } f = open("pinm", "w") f.write(str(-1)) f.close() time.sleep(1) bağlantı = http.client. HTTPConnection('192.168.1.251:5000 ') conn.request("GET", str("/off/") + str(mlast_loc)) yanıt = conn.getresponse() bağlantı = http.client. HTTPConnection('192.168.1.251:5000') conn.request ("GET", str("/on/") + str(lo cs[l])) yanıt = bağlantı.getresponse() mlast_loc = locs[l] tanım çevrimdışı(l): global dlast_loc locs = { "ev": 22, "okul": 2, "oswestry": 14 } bağlantı = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/") + str(mlast_loc)) yanıt = conn.getresponse() f = open("pinm", "w") f.write(str(locs[l])) f.close() os.system("python3 flashm.py &")

Adım 9: Projemden İlham Alarak Kendi Projenizi Oluşturun

Bu yüzden bir önceki adımın anlaşılmasının çok zor olacağını biliyorum, bu yüzden size haritayı nasıl yapacağınızı ve LED'leri açıp kapatan bir ahududu pi'ye sahip olabileceğinizi göstererek bırakacağım. Şimdi, IFTTT kullanarak size e-posta gönderen bir python betiği oluşturmanız gerekiyor. O zaman oldukça kolay olan bir e-posta okuma kodu bulmanız gerekir (google it). Ardından, bir e-postayı okuyup bir ebeveynin konumunu bulduğunuzda, hangi pinin açılacağını bulmak için 'if' ifadelerini kullanın.

Haritada, yanıp sönen bir ışık, bölgeden yeni ayrıldıklarını gösterir.

Python'dan başka bir pi'deki LED'leri açmanın yolu aşağıdaki gibidir:

http.client, urllib.request, urllib.parse, urllib.error, base64'ü içe aktarın

params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #bunu ahududu pi'nin harita IP adresi ile değiştirin conn.request("GET", str("/off) /2")) # bu 2 numaralı pini kapatır yanıt = conn.getresponse() # bu URL'yi ister ve ardından pi haritası bunu okur ve 2 numaralı pini kapatır

Temel olarak, kendi GPS izleme haritanızı yapmak için 3B haritamla yaptıklarımı ilham kaynağı olarak kullanabileceğinizi umuyorum.

Önerilen: