Spisu treści:

Mapa 3D śledzenia GPS: 9 kroków
Mapa 3D śledzenia GPS: 9 kroków

Wideo: Mapa 3D śledzenia GPS: 9 kroków

Wideo: Mapa 3D śledzenia GPS: 9 kroków
Wideo: UKRYTE Funkcje w Google Maps! Mój TOP 2021 🧭 2024, Listopad
Anonim
Śledzenie GPS Mapa 3D
Śledzenie GPS Mapa 3D
Śledzenie GPS Mapa 3D
Śledzenie GPS Mapa 3D

Ten projekt to wydrukowana w 3D mapa 3D, z drogami, rzekami i miastami, z sygnalizatorami LED pokazującymi położenie członków rodziny. Może pokazywać, czy dziecko jest w szkole, czy tylko lokalizację obojga rodziców. Możemy go również wykorzystać do przewidzenia, o której rodzice wracają do domu, aby obiad mógł być zrobiony na odpowiedni czas. Jest to również po prostu fajny projekt, który można pochwalić się i pokazać rodzinie i przyjaciołom.

Mam nadzieję, że spodoba ci się tworzenie tej instrukcji lub spodoba ci się poznanie projektu, który zrobiłem

Krok 1: Uzyskanie mapy 3D

ABY uzyskać mapę 3D twojego obszaru, napisałem osobną instrukcję, która poprowadzi cię przez proces jej tworzenia. Link do instrukcji znajduje się tutaj:

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

Krok 2: Przygotowanie mapy do wstawek LED

Teraz, gdy masz mapę 3D z drogami, miastami i rzekami, potrzebujemy sposobu na wskazanie, gdzie dana osoba się znajduje na mapie. Użyłem dwukolorowych 3mm diod RG, ponieważ głównym celem mapy jest pokazanie, gdzie znajdują się dwoje rodziców. W niektórych miejscach zastosowałem diodę LED RGB, aby pokazać, gdzie było najstarsze dziecko. Na Raspberry Pi można wyprowadzić limit 28 pinów, więc mądrze wybieraj lokalizacje diod LED. Skończyło się na tym, że użyłem około 24 z nich, więc powinno być dobrze.

Do wiercenia PLA stwierdziłem, że zwykłe wiertło do drewna działa dobrze i potraktowałem go tak, jakbym traktował drewno.

W miejscach, gdzie mapa była zbyt gruba, warstwę podkładową wywierciłbym dużym wiertłem, a następnie widoczną powyżej warstwę odpowiednim wiertłem 3mm.

Krok 3: Włóż diody LED

Włóż diody LED
Włóż diody LED

Teraz, gdy mamy otwory na diody LED, możemy je przykleić. PVA lub Superglue sprawdzają się w tym przypadku dobrze. Odkryłem, że PVA krążył wokół niego uszczelniając go na miejscu, a klej superglue również działał bardzo dobrze. Upewnij się, że z każdą diodą LED wystają one tylko na widoczną stronę o kilka mm, ponieważ posiadanie diod LED wystających do końca wygląda trochę nieporządnie. Nie martw się o nogi z tyłu, możemy je złożyć po przylutowaniu.

Krok 4: Podłącz diody LED do Raspberry Pi

Diody LED przylutowałem bezpośrednio do Raspberry Pi, jednak jeśli masz taki z wstępnie wlutowanym nagłówkiem lub chcesz móc wykorzystać pi do czegoś innego, sugerowałbym użycie zworek dla każdej diody LED, co oznacza, że Pi jest usuwalny. Widać, że jak już wlutowałem diodę, to nogi złożyłem w dół, żeby nie przykleiły się z tyłu.

Krok 5: Przetestuj diody LED

Przetestuj diody LED
Przetestuj diody LED

Aby upewnić się, że wszystkie diody LED działają, uruchomiłem skrypt, który przechodzi przez każdy możliwy pin i zapala je pojedynczo, co po kliknięciu enter przechodzi na następny. To pozwoliło mi zanotować, który numer PIN zrobił jaką lokalizację, co było bardzo przydatne.

importuj RPi. GPIO jako GPIO

czas importu GPIO.setmode(GPIO. BCM) for i in range (0, 28): GPIO.setup(i, GPIO. OUT) for i in range (0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("To było: " + str(i)) z = raw_input("Następny?")

Podczas gdy to się działo, zapisywałem w pliku tekstowym, który pin zrobił jaką lokalizację i jaki kolor. Musisz to zrobić, ponieważ jest to bardzo przydatne w następnym kroku.

Krok 6: Kod do włączania diody LED na żądanie

Sposób, w jaki wykonałem ten projekt, dotyczy jednego Raspberry Pi Zero W, z podstawową stroną internetową, która pozwala włączyć pin. Oznaczało to, że główny Pi 4, który zwykle jest włączony i uruchomiony, może wykonać przetwarzanie, a małe Pi 0 musi tylko włączyć pin, co nieco komplikuje sprawę. Zrobiłem to, ponieważ pasuje do mojej konfiguracji, a także czułem, że Pi 0 może być nieco powolny w stosunku do tego, co będziemy robić później.

importuj RPi. GPIO jako GPIO

import czasu z flask import 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(): 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(): for i in range(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')

Działa to w ten sposób, że czeka na adres URL adresu IP pi, a następnie włącza lub wyłącza, a następnie numer pin.

zapisz ten kod w katalogu domowym Raspberry Pi i nazwij go "pin_website.py"

Będziesz musiał ustawić to, aby uruchamiało się automatycznie, więc aby to zrobić, w terminalu wpisz: sudo nano /etc/profile

Na dole tego pliku dodaj „python3 pin_website.py &”

Znak „&” jest niezbędny, ponieważ sprawia, że działa on w tle, a zatem umożliwia kontynuowanie rozruchu

Krok 7: Jak uzyskać lokalizację?

Jak uzyskać lokalizację?
Jak uzyskać lokalizację?

Korzystając z IFTTT, możesz skonfigurować usługę, aby po wejściu telefonu w określoną lokalizację mógł do Ciebie wysłać e-mail, pingować adres internetowy lub wysłać wiadomość telegramem.

Krok 8: Jak to wszystko działa?

Konfiguracja, którą mam, to Server Pi, hostujący moją stronę internetową, z przekierowaniem portów i statycznym DNS przy użyciu usługi dostarczanej przez https://freedns.afraid.org/. Wiele z nich jest dość skomplikowanych i musisz rozumieć przekierowanie portów, mogę podać instrukcję, jak zrobić tę część innym razem.

Innym sposobem, w jaki możesz to zrobić, jest użycie telegramu do przesyłania wiadomości do pi, lub prawdopodobnie najłatwiejszym, jest skonfigurowanie czytnika poczty e-mail, który odczytuje wiadomości e-mail i otrzymuje za jego pośrednictwem aktualizacje lokalizacji.

Nie próbowałem bota Telegram ani czytnika poczty e-mail, ale istnieje wiele samouczków, które pokażą ci, jak to zrobić.

Oto mój kod Flask / Python, który jest następnie wymagany przez webhooki przy użyciu IFTTT:

from flask import Flask, render_template, request, jsonify

import systemu operacyjnego z datetime import datetime z mapy import * app = Flask(_name_) l = 0 setup() @app.route('/') def index(): return request.remote_addr @app.route('/mama/enter /') def mu(lokalizacja): mum.current_loc(lokalizacja) return "Dzięki za aktualizację, mamo!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "Dziękujemy za aktualizację, tato!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "Hej, ja" @app.route('/mama/exit/') def mume(lokalizacja): mum.offline(lokalizacja) return "Mamo dzięki za aktualizację!" @app.route("/tata/exit/") def dade(l): dad.offline(l) return "Dziękujemy za aktualizację, tato!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "Hej, ja" @app.route("/reset") def redo(): setup() return "Resetowanie!" if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

i map.py:

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

import ast, json czas importu import wątków 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.251:request(n) 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 mama: def current_loc(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "cztery krzyże": 18, "llandrinio": 25, "welshpool": 27 } f = open("pin", "w") f.write(str(-1)) f.close() czas. 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, "cztery krzyże": 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, "cztery krzyże": 15, "llandrinio": 10, "welshpool": 24 } def current_loc(l): global dlast_loc locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech": 6, "cztery krzyże": 15 } f = open("pind", "w") f.write(str(-1)) f.close() time.sleep(1) conn = http.client. HTTPConnection('192.168.1.251:5000') poł.żądania 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, "cztery krzyże": 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 &")

Krok 9: Zbuduj własne z inspiracji z mojego projektu

Więc wiem, że poprzedni krok będzie bardzo trudny do zrozumienia, więc zostawię to jako pokazanie, jak zrobić mapę i móc mieć Raspberry Pi, który włącza i wyłącza diody LED. Teraz musisz utworzyć skrypt Pythona, który za pomocą IFTTT wyśle do Ciebie e-maila. Następnie musisz znaleźć fragment kodu do odczytywania wiadomości e-mail, co jest dość łatwe (wygoogluj). Następnie po przeczytaniu e-maila i znalezieniu lokalizacji rodzica użyj instrukcji „jeśli”, aby znaleźć pinezkę do włączenia.

Na mapie migające światło oznacza, że właśnie opuścili obszar

Sposób na włączenie diod na innym pi z pythona jest jak poniżej:

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

params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #zmień to za pomocą adresu IP mapy raspberry pi conn.request("GET", str("/off /2")) # to wyłącza odpowiedź pin nr 2 = conn.getresponse() # to żąda adresu URL, a następnie mapa pi odczytuje to i wyłącza pin nr 2

Zasadniczo mam nadzieję, że możesz wykorzystać to, co zrobiłem z moją mapą 3D, jako inspirację do stworzenia własnej mapy śledzenia GPS.

Zalecana: