Spisu treści:
- Krok 1: Uzyskanie mapy 3D
- Krok 2: Przygotowanie mapy do wstawek LED
- Krok 3: Włóż diody LED
- Krok 4: Podłącz diody LED do Raspberry Pi
- Krok 5: Przetestuj diody LED
- Krok 6: Kod do włączania diody LED na żądanie
- Krok 7: Jak uzyskać lokalizację?
- Krok 8: Jak to wszystko działa?
- Krok 9: Zbuduj własne z inspiracji z mojego projektu
Wideo: Mapa 3D śledzenia GPS: 9 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
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
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
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ę?
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:
Wprowadzenie - Zmień Raspberry Pi w serwer śledzenia GPS: 12 kroków
Wprowadzenie - Zmień Raspberry Pi w serwer śledzenia GPS: W tym przewodniku pokażę, jak zainstalować oprogramowanie do śledzenia GPS Traccar na Raspberry Pi, które będzie odbierać dane z kompatybilnych urządzeń przez Internet, rejestrując ich pozycje na mapie w czasie rzeczywistym śledzenie, a także śledzenie odtwarzania
Stwórz własny system śledzenia SMS-ów GPS: 5 kroków (ze zdjęciami)
Stwórz własny system śledzenia bezpieczeństwa SMS SMS: W tym projekcie pokażę Ci, jak połączyć moduł SIM5320 3G z Arduino i przetwornikiem piezoelektrycznym jako czujnik wstrząsów, aby stworzyć system śledzenia bezpieczeństwa, który wyśle Ci lokalizację Twojego cenny pojazd przez SMS, gdy
Skonfiguruj własny serwer śledzenia GPS na Raspberry Pi: 8 kroków
Skonfiguruj swój własny serwer śledzenia GPS na Raspberry Pi: W tym projekcie pokażę ci, jak skonfigurować własny serwer śledzenia GPS na Raspberry Pi. Nie musi to być Raspberry pi, ponieważ oprogramowanie, którego będziemy używać do serwera śledzącego, jest dostępne również dla systemów Windows i Linux
Projekt Arduino: Zakres testowy Moduł LoRa RF1276 dla rozwiązania śledzenia GPS: 9 kroków (ze zdjęciami)
Projekt Arduino: Zakres testowy Moduł LoRa RF1276 do śledzenia GPS Rozwiązanie: Połączenie: USB - Serial Potrzeba: Przeglądarka Chrome Potrzeba: 1 X Arduino Mega Potrzeba: 1 X GPS Potrzeba: 1 X Karta SD Potrzeba: 2 X Modem LoRa RF1276 Funkcja: Arduino Wyślij wartość GPS do bazy głównej - Główna baza przechowuje dane w Dataino Server Moduł Lora: Ultra daleki zasięg
Jak podłączyć urządzenie DeLorme Earthmate GPS LT-20 do Google Earth, aby uzyskać świetną mapę śledzenia GPS.: 5 kroków
Jak podłączyć urządzenie DeLorme Earthmate GPS LT-20 do programu Google Earth, aby uzyskać świetną mapę śledzenia GPS.: Pokażę ci, jak podłączyć urządzenie GPS do popularnego programu Google Earth bez korzystania z programu Google Earth Plus. Nie mam dużego budżetu, więc gwarantuję, że będzie to tak tanie, jak to tylko możliwe