Mục lục:

Bản đồ 3D theo dõi GPS: 9 bước
Bản đồ 3D theo dõi GPS: 9 bước

Video: Bản đồ 3D theo dõi GPS: 9 bước

Video: Bản đồ 3D theo dõi GPS: 9 bước
Video: Cách xem bản đồ 3d trên Google Maps trên Android - Mới Nhất 2024 2024, Tháng mười một
Anonim
Bản đồ 3D theo dõi GPS
Bản đồ 3D theo dõi GPS
Bản đồ 3D theo dõi GPS
Bản đồ 3D theo dõi GPS

Dự án này là một bản đồ 3D được in 3D, có đường xá, sông ngòi và thị trấn, với đèn hiệu LED để hiển thị vị trí của các thành viên trong gia đình. Nó có thể cho biết trẻ có đang ở trường hay không, hay chỉ vị trí của cả cha và mẹ. Chúng ta cũng có thể sử dụng nó để dự đoán thời gian bố mẹ về nhà, để có thể chuẩn bị bữa tối cho đúng giờ. Nó cũng chỉ là một dự án thú vị để khoe và hiển thị với gia đình và bạn bè.

Tôi hy vọng bạn thích làm cuốn sách này có thể hướng dẫn hoặc thích tìm hiểu về một dự án mà tôi đã thực hiện

Bước 1: Lấy bản đồ 3D

Để có được bản đồ 3D cho khu vực của bạn, tôi đã viết một hướng dẫn riêng để giúp hướng dẫn bạn trong quá trình tạo một bản đồ. Liên kết đến hướng dẫn ở đây:

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

Bước 2: Chuẩn bị Bản đồ cho Chèn LED

Bây giờ bạn đã có bản đồ 3D, với đường xá, thị trấn và sông ngòi, chúng tôi cần một cách để chỉ ra vị trí của một người trên bản đồ. Tôi đã sử dụng đèn LED RG 3mm hai màu, vì mục đích chính của bản đồ là hiển thị vị trí của hai bố mẹ. Ở một số nơi nhất định, tôi đã sử dụng đèn LED RGB để cho phép tôi hiển thị vị trí của đứa trẻ lớn nhất. Có giới hạn 28 chân để xuất trên Raspberry Pi, Vì vậy, hãy chọn vị trí của các đèn LED một cách khôn ngoan. Tôi đã kết thúc sử dụng khoảng 24 người trong số họ, vì vậy bạn sẽ ổn.

Để khoan PLA, tôi thấy một mũi khoan gỗ bình thường hoạt động tốt, và tôi xử lý như tôi sẽ xử lý gỗ.

Ở những nơi bản đồ quá dày, tôi sẽ khoan lớp cơ sở bằng một mũi khoan lớn, và sau đó là lớp trên có thể nhìn thấy bằng mũi khoan 3mm chính xác.

Bước 3: Chèn đèn LED

Chèn đèn LED
Chèn đèn LED

Bây giờ chúng ta đã có các lỗ cho đèn LED để lắp vào, Chúng ta có thể dán chúng vào. PVA hoặc Superglue hoạt động tốt cho điều này, tôi thấy rằng PVA chạy xung quanh nó để niêm phong nó tại chỗ và superglue cũng hoạt động rất tốt. Đảm bảo rằng với mỗi đèn LED, chúng chỉ nhô ra ở phía có thể nhìn thấy được vài mm, Bởi vì để các đèn LED nhô ra ngoài trông hơi lộn xộn. Đừng lo lắng về phần chân ở mặt sau, chúng tôi có thể gấp chúng lại sau khi chúng được hàn.

Bước 4: Kết nối đèn LED với Raspberry Pi

Tôi đã hàn trực tiếp các đèn LED vào Raspberry Pi, tuy nhiên, nếu bạn có một cái có đầu cắm được hàn sẵn hoặc bạn muốn có thể sử dụng số pi cho một thứ khác, thì tôi khuyên bạn nên sử dụng dây nhảy cho mỗi đèn LED, nghĩa là Pi có thể loại bỏ được. Bạn có thể thấy rằng sau khi tôi hàn đèn LED, tôi đã gấp các chân xuống để chúng không bị dính ở mặt sau.

Bước 5: Kiểm tra đèn LED

Kiểm tra đèn LED
Kiểm tra đèn LED

Để đảm bảo rằng tất cả các đèn LED đang hoạt động, tôi đã chạy một tập lệnh đi qua từng chân có thể và sáng chúng lên, từng chân một, sẽ xuất hiện ở chân tiếp theo khi tôi nhấp vào. Điều này cho phép tôi ghi lại số pin đã thực hiện ở vị trí nào, rất hữu ích.

nhập RPi. GPIO dưới dạng GPIO

thời gian nhập GPIO.setmode (GPIO. BCM) cho tôi trong phạm vi (0, 28): GPIO.setup (i, GPIO. OUT) cho tôi trong phạm vi (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0,3) GPIO.output (i, GPIO. LOW) print ("Đó là:" + str (i)) z = raw_input ("Tiếp theo?")

Trong khi điều này đang xảy ra, tôi sẽ ghi lại trên một tệp văn bản ghim ghim ở vị trí nào và màu sắc nào. Bạn cần phải làm điều này, vì nó rất hữu ích trong bước tiếp theo.

Bước 6: Mã để bật đèn LED khi được yêu cầu

Cách mà tôi đã thực hiện dự án này liên quan đến một Raspberry Pi Zero W, với một trang web cơ bản cho phép bạn bật mã pin. Điều này có nghĩa là Pi 4 chính, thường được bật và đang chạy, có thể thực hiện quá trình xử lý, và sau đó Pi 0 nhỏ chỉ phải bật một pin, khiến mọi thứ phức tạp hơn một chút. Tôi đã làm điều này vì nó phù hợp với thiết lập của tôi và tôi cũng cảm thấy Pi 0 có thể hơi chậm so với những gì chúng tôi sẽ làm sau này.

nhập RPi. GPIO dưới dạng GPIO

thời gian nhập từ bình nhập Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) cho tôi trong phạm vi (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) return "Off" @ app.route ("/ off / all") def alloff (): cho tôi trong phạm vi (0, 28): GPIO.output (i, GPIO. LOW) return "off" @ app.route ("/ on /") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) return "On" if _name_ == '_main_': app.run (debug = True, host = '0.0. 0.0 ')

Cách thức hoạt động là nó đợi url của địa chỉ IP của pi, sau đó bật hoặc tắt và sau đó là số pin.

lưu mã này trong thư mục chính của Raspberry Pi và đặt tên là "pin_website.py"

Bạn sẽ cần thiết lập cài đặt này chạy tự động, do đó, để thực hiện việc này, trong loại thiết bị đầu cuối: sudo nano / etc / profile

Ở cuối tệp này, thêm "python3 pin_website.py &"

Dấu "&" rất cần thiết, vì nó làm cho nó chạy ở chế độ nền và do đó cho phép khởi động tiếp tục

Bước 7: Cách Nhận Vị trí

Làm thế nào để nhận được vị trí
Làm thế nào để nhận được vị trí

Sử dụng IFTTT, bạn có thể thiết lập một dịch vụ để khi điện thoại vào một vị trí nhất định, nó có thể gửi email cho bạn hoặc ping một địa chỉ web hoặc nhắn tin cho bạn trên điện tín.

Bước 8: Tất cả điều này hoạt động như thế nào

Thiết lập mà tôi có là Máy chủ Pi, lưu trữ trang web của tôi, có chuyển tiếp cổng và DNS tĩnh bằng cách sử dụng dịch vụ do https://freedns.a afraid.org/ cung cấp. Rất nhiều điều này khá phức tạp và bạn cần phải hiểu về chuyển tiếp cổng, tôi có thể sẽ hướng dẫn cách thực hiện phần này vào lúc khác.

Một cách khác mà bạn có thể làm là sử dụng telegram để gửi tin nhắn đến pi, hoặc có thể dễ dàng nhất, là thiết lập một trình đọc email để đọc email và nhận cập nhật vị trí thông qua đó.

Tôi chưa thử bot Telegram hoặc trình đọc email, nhưng có rất nhiều hướng dẫn trên mạng sẽ chỉ cho bạn cách thực hiện.

Đây là mã Flask / Python của tôi, sau đó được webhooks yêu cầu sử dụng IFTTT:

from flask import Flask, render_template, request, jsonify

nhập hệ điều hành từ datetime nhập datetime từ map import * 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 "Thanks For The Update, Mẹ!" @ app.route ("/ dad / enter /") def da (l): dad.current_loc (l) return "Thanks For The Update, Dad!" @ app.route ("/ child / enter /") def child_enter (l): me.current_loc (l) return "Hey, Me" @ app.route ('/ mum / exit /') def mume (location): mum.offline (location) return "Thanks For The Update, Mum!" @ app.route ("/ dad / exit /") def dade (l): dad.offline (l) return "Thanks For The Update, Dad!" @ app.route ("/ child / exit /") def child_exit (l): me.offline (l) return "Hey, Me" @ app.route ("/ reset") def redo (): setup () return "Cài lại!" if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

và map.py:

nhập 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 ('Liberationns.a afraid.org') conn.request ("GET", str ("/ dynamic / update.php? zmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) response = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn "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 () class mum: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "bốn chữ thập": 18, "llandrinio": 25, "welshpool": 27} f = open ("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): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13," bốn chữ thập ": 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 &") 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," bốn chữ thập ": 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 &") phân loại tôi: 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 &")

Bước 9: Xây dựng của riêng bạn từ nguồn cảm hứng từ dự án của tôi

Vì vậy, tôi biết rằng bước trước sẽ rất khó hiểu, vì vậy tôi sẽ để nó là chỉ cho bạn cách tạo bản đồ, và có thể có một quả mâm xôi pi bật và tắt đèn LED. Bây giờ bạn cần tạo một tập lệnh python, sử dụng IFTTT, gửi email cho bạn. Sau đó, bạn cần tìm một đoạn mã đọc email, khá dễ dàng (google nó). Sau đó, khi bạn đọc email và tìm thấy vị trí của phụ huynh, hãy sử dụng câu lệnh 'if' để tìm mã pin nào cần bật.

Trên bản đồ, Đèn nhấp nháy có nghĩa là họ vừa rời khỏi khu vực

Cách bật đèn LED trên pi khác từ python như dưới đây:

nhập http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') # thay đổi địa chỉ IP bản đồ của mâm xôi pi conn.request ("GET", str ("/ tắt / 2 ")) # cái này tắt pin số 2 response = conn.getresponse () # cái này yêu cầu URL, sau đó bản đồ pi đọc cái này và tắt pin số 2

Về cơ bản, tôi hy vọng bạn có thể sử dụng những gì tôi đã làm với bản đồ 3D của mình làm nguồn cảm hứng để tạo bản đồ theo dõi GPS của riêng bạn.

Đề xuất: