สารบัญ:

GPS Tracking แผนที่ 3 มิติ: 9 ขั้นตอน
GPS Tracking แผนที่ 3 มิติ: 9 ขั้นตอน

วีดีโอ: GPS Tracking แผนที่ 3 มิติ: 9 ขั้นตอน

วีดีโอ: GPS Tracking แผนที่ 3 มิติ: 9 ขั้นตอน
วีดีโอ: Real Time GPS Location Tracking [GPS Tracker Free] 2024, กรกฎาคม
Anonim
แผนที่ 3D ติดตาม GPS
แผนที่ 3D ติดตาม GPS
แผนที่ 3D ติดตาม GPS
แผนที่ 3D ติดตาม GPS

โปรเจ็กต์นี้เป็นแผนที่ 3 มิติจากเครื่องพิมพ์ 3 มิติ พร้อมถนน แม่น้ำ และเมือง พร้อมบีคอน LED เพื่อแสดงตำแหน่งของสมาชิกในครอบครัว โดยสามารถแสดงว่าเด็กอยู่ที่โรงเรียนหรือไม่ หรือเพียงแค่สถานที่ตั้งของผู้ปกครองทั้งสอง เรายังใช้ทำนายเวลาพ่อแม่กลับบ้านได้ เพื่อทำอาหารเย็นให้ถูกเวลา นอกจากนี้ยังเป็นเพียงโครงการที่ยอดเยี่ยมสำหรับอวดครอบครัวและเพื่อนฝูง

ฉันหวังว่าคุณจะสนุกกับการสร้างคำแนะนำนี้หรือสนุกกับการค้นหาเกี่ยวกับโครงการที่ฉันทำ

ขั้นตอนที่ 1: รับแผนที่ 3 มิติ

ในการรับแผนที่ 3 มิติของพื้นที่ของคุณ ฉันได้เขียนคำสั่งแยกต่างหากเพื่อช่วยแนะนำคุณตลอดขั้นตอนการสร้าง ลิงค์ไปยังคำแนะนำอยู่ที่นี่:

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

ขั้นตอนที่ 2: การเตรียมแผนที่สำหรับ LED Inserts

ตอนนี้ คุณมีแผนที่ 3 มิติ พร้อมด้วยถนน เมือง และแม่น้ำ เราต้องการวิธีระบุตำแหน่งของบุคคลบนแผนที่ ฉันใช้ไฟ LED RG 3 มม. สองสี เนื่องจากจุดประสงค์หลักของแผนที่คือเพื่อแสดงว่าผู้ปกครองสองคนอยู่ที่ไหน ในบางสถานที่ ฉันใช้ไฟ LED RGB เพื่อแสดงตำแหน่งที่ลูกคนโตที่สุด Raspberry Pi มีขีดจำกัด 28 พินที่จะส่งออก ดังนั้นให้เลือกตำแหน่งของ LED อย่างชาญฉลาด ฉันลงเอยด้วยการใช้ประมาณ 24 ตัวดังนั้นคุณควรจะสบายดี

ในการเจาะ PLA ฉันพบว่าดอกสว่านไม้ธรรมดาทำงานได้ดี และฉันก็ปฏิบัติเหมือนกับว่าจะทำกับไม้

ในสถานที่ที่แผนที่หนาเกินไป ฉันจะเจาะเลเยอร์ฐานออกด้วยสว่านขนาดใหญ่ และจากนั้นเลเยอร์ด้านบนที่มองเห็นได้ด้วยสว่านขนาด 3 มม. ที่ถูกต้อง

ขั้นตอนที่ 3: ใส่ LEDs

ใส่ไฟ LED
ใส่ไฟ LED

ตอนนี้เรามีรูสำหรับ LEDs ให้นั่งแล้ว เราสามารถติดมันได้ PVA หรือ Superglue ทำงานได้ดีสำหรับสิ่งนี้ ฉันพบว่า PVA วิ่งไปรอบๆ เพื่อปิดผนึกมันเข้าที่ และ superglue ก็ทำงานได้ดีเช่นกัน ตรวจสอบให้แน่ใจว่า LED แต่ละดวงจะยื่นออกมาทางด้านที่มองเห็นได้เพียงไม่กี่มม. เนื่องจากการมีไฟ LED ที่ยื่นออกมาจนสุดทางจึงดูเลอะเทอะเล็กน้อย ไม่ต้องกังวลเรื่องขาที่ด้านหลัง เราสามารถพับเก็บได้เมื่อบัดกรีแล้ว

ขั้นตอนที่ 4: เชื่อมต่อ LED กับ Raspberry Pi

ฉันบัดกรี LED โดยตรงกับ Raspberry Pi อย่างไรก็ตาม หากคุณมีอันที่มีส่วนหัวที่บัดกรีไว้ล่วงหน้า หรือคุณต้องการใช้ pi สำหรับอย่างอื่น ฉันขอแนะนำให้ใช้สายจัมเปอร์สำหรับ LED แต่ละอัน ซึ่งหมายความว่า Pi ถอดออกได้ คุณจะเห็นได้ว่าเมื่อฉันบัดกรี LED แล้ว ฉันพับขาลงเพื่อไม่ให้ติดที่ด้านหลัง

ขั้นตอนที่ 5: ทดสอบ LEDs

ทดสอบ LEDs
ทดสอบ LEDs

เพื่อให้แน่ใจว่าไฟ LED ทั้งหมดทำงาน ฉันได้รันสคริปต์ที่ดำเนินการผ่านแต่ละพินที่เป็นไปได้ และเปิดไฟทีละดวง ซึ่งจะวนไปยังพินถัดไปเมื่อฉันคลิก Enter สิ่งนี้ทำให้ฉันจดได้ว่าหมายเลขพินใดใช้ตำแหน่งใดซึ่งมีประโยชน์มาก

นำเข้า RPi. GPIO เป็น GPIO

เวลานำเข้า GPIO.setmode(GPIO. BCM) สำหรับผม ในช่วง (0, 28): GPIO.setup(i, GPIO. OUT) สำหรับผม ในช่วง(0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("นั่นคือ: " + str(i)) z = raw_input("Next?")

ในขณะที่สิ่งนี้กำลังเกิดขึ้น ฉันจะจดบันทึกลงในไฟล์ข้อความที่พินใช้ตำแหน่งใดและสีใด คุณต้องทำเช่นนี้ เนื่องจากจะมีประโยชน์มากในขั้นตอนต่อไป

ขั้นตอนที่ 6: รหัสเพื่อเปิด LED เมื่อได้รับการร้องขอ

วิธีที่ฉันทำโปรเจ็กต์นี้เกี่ยวข้องกับ Raspberry Pi Zero W หนึ่งตัวพร้อมเว็บไซต์พื้นฐานที่ให้คุณเปิดพินได้ ซึ่งหมายความว่า Pi 4 หลักซึ่งปกติเปิดอยู่และทำงานอยู่ สามารถทำการประมวลผลได้ จากนั้น Pi 0 ตัวน้อยจะต้องเปิดพินเท่านั้น ทำให้สิ่งต่างๆ ซับซ้อนขึ้นเล็กน้อย ฉันทำสิ่งนี้เพราะมันเหมาะกับการตั้งค่าของฉัน และฉันรู้สึกว่า Pi 0 อาจทำงานช้าเล็กน้อยสำหรับสิ่งที่เราจะทำในภายหลัง

นำเข้า RPi. GPIO เป็น GPIO

เวลานำเข้าจากขวด นำเข้า Flask, render_template, คำขอ, jsonify import os app = Flask(_name_) p = GPIO.setmode(GPIO. BCM) for i in range(0, 28): GPIO.setup(i, GPIO. ออก) @app.route('/') def index(): return request.remote_addr @app.route("/off/") def turn_off(pin): GPIO.output(int(pin), GPIO. LOW) return "Off" @app.route("/off/all") def alloff(): สำหรับฉันในช่วง (0, 28): GPIO.output(i, GPIO. LOW) ส่งคืน "off" @app.route("/on/") def turn_on(pin): GPIO.output(int(pin), GPIO. HIGH) คืนค่า "On" ถ้า _name_ == '_main_': app.run(debug=True, host='0.0. 0.0')

วิธีการทำงานคือรอ url ของที่อยู่ IP ของ pi จากนั้นเปิดหรือปิดแล้วตามด้วยหมายเลขพิน

บันทึกรหัสนี้ในโฮมไดเร็กทอรีของ Raspberry Pi และตั้งชื่อว่า "pin_website.py"

คุณจะต้องตั้งค่าให้ทำงานโดยอัตโนมัติ ในการดำเนินการนี้ในประเภทเทอร์มินัล: sudo nano /etc/profile

ที่ด้านล่างของไฟล์นี้ ให้เพิ่ม "python3 pin_website.py &"

"&" เป็นสิ่งจำเป็น เนื่องจากทำให้ทำงานในพื้นหลัง และทำให้การบูตทำต่อได้

ขั้นตอนที่ 7: วิธีรับตำแหน่ง

วิธีรับตำแหน่ง
วิธีรับตำแหน่ง

เมื่อใช้ IFTTT คุณสามารถตั้งค่าบริการเพื่อให้เมื่อโทรศัพท์เข้าสู่ตำแหน่งใดตำแหน่งหนึ่ง มันสามารถส่งอีเมลถึงคุณ หรือ ping ที่อยู่เว็บ หรือส่งข้อความถึงคุณทางโทรเลข

ขั้นตอนที่ 8: ทั้งหมดนี้ทำงานอย่างไร

การตั้งค่าที่ฉันมีคือ Server Pi ซึ่งโฮสต์เว็บไซต์ของฉัน พร้อมการส่งต่อพอร์ตและ DNS แบบคงที่โดยใช้บริการที่จัดทำโดย https://freedns.afraid.org/ สิ่งนี้ค่อนข้างซับซ้อน และคุณต้องมีความเข้าใจในการส่งต่อพอร์ต ฉันอาจให้คำแนะนำเกี่ยวกับวิธีการทำส่วนนี้อีกครั้ง

อีกวิธีหนึ่งที่คุณสามารถทำได้คือใช้โทรเลขเพื่อรับข้อความไปยัง pi หรืออาจง่ายที่สุดคือการตั้งค่าโปรแกรมอ่านอีเมลที่อ่านอีเมลและรับการอัปเดตตำแหน่งผ่านทางนั้น

ฉันไม่ได้ลองใช้บอทโทรเลขหรือโปรแกรมอ่านอีเมล แต่มีบทช่วยสอนมากมายที่จะแสดงให้คุณเห็นวิธีการ

นี่คือรหัส Flask / Python ของฉันซึ่งถูกร้องขอโดย webhooks โดยใช้ IFTTT:

จากการนำเข้าขวด Flask, render_template, ขอ, jsonify

นำเข้าระบบปฏิบัติการจากวันที่และเวลา วันที่นำเข้าจากการนำเข้าแผนที่ * app = Flask(_name_) l = 0 setup() @app.route('/') def index(): return request.remote_addr @app.route('/mum/enter /') def mu(location): mum.current_loc(location) return "ขอบคุณสำหรับการอัพเดต คุณแม่!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "ขอบคุณสำหรับการอัปเดต พ่อ!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "เฮ้ ฉัน" @app.route('/mum/exit/') def mume(location): mum.offline(location) ส่งคืน "ขอบคุณสำหรับการอัปเดต Mum!" @app.route("/dad/exit/") def dade(l): dad.offline(l) return "ขอบคุณสำหรับการอัพเดท พ่อ!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "เฮ้ ฉัน" @app.route("/reset") def redo(): setup() return “รีเซ็ต!” ถ้า _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

และ map.py:

นำเข้า http.client, urllib.request, urllib.parse, urllib.error, base64

นำเข้า ast, เวลานำเข้า json นำเข้าเธรด อิมพอร์ต 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.251:5000') "GET", str("/off/all")) response = 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 () คลาส mum: def current_loc(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "four crosses": 18, "llandrinio": 25, "welshpool": 27 } f = open("pin", "w") f.write(str(-1)) f.close() เวลา 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 ออฟไลน์ (l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13, "four crosses": 18, "llandrinio": 25, "welshpool": 27 } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str(" /off/") + str(last_loc)) การตอบสนอง = conn.getresponse() f = open("pin", "w") f.write(str(locs[l])) f.close() os.system ("python3 flash.py &") class dad: 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, "four crosses": 15 } f = open("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, "home": 23, "shrewsbury": 0, "llanymynech": 6, "four crosses": 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, "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(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: สร้างของคุณเองจากแรงบันดาลใจจากโครงการของฉัน

ดังนั้นฉันรู้ว่าขั้นตอนก่อนหน้านี้จะยากมากที่จะเข้าใจ ดังนั้นฉันจะปล่อยให้มันเป็นการแสดงให้คุณเห็นถึงวิธีการสร้างแผนที่ และสามารถมี Raspberry Pi ที่เปิดและปิดไฟ LED ได้ ตอนนี้คุณต้องสร้างสคริปต์หลามที่ใช้ IFTTT เพื่อส่งอีเมลถึงคุณ จากนั้นคุณต้องหาโค้ดอ่านอีเมลซึ่งค่อนข้างง่าย (google it) จากนั้นเมื่อคุณอ่านอีเมลและค้นหาตำแหน่งของผู้ปกครองแล้ว ให้ใช้คำสั่ง 'if' เพื่อค้นหาว่าจะเปิดพินใด

บนแผนที่ ไฟกะพริบหมายความว่าเพิ่งออกจากพื้นที่

วิธีการเปิดไฟ LED บน pi อื่นจาก python มีดังต่อไปนี้:

นำเข้า http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #change ด้วยที่อยู่ IP ของแผนที่ raspberry pi conn.request("GET", str("/off /2")) # สิ่งนี้จะปิดการตอบสนองของพินหมายเลข 2 = conn.getresponse() # สิ่งนี้จะร้องขอ URL จากนั้น map pi จะอ่านสิ่งนี้และปิดหมายเลขพิน 2

โดยพื้นฐานแล้ว ฉันหวังว่าคุณสามารถใช้สิ่งที่ฉันทำกับแผนที่ 3 มิติของฉันเป็นแรงบันดาลใจในการสร้างแผนที่ติดตาม GPS ของคุณเอง

แนะนำ: