Obsah:

GPS sledování 3D mapy: 9 kroků
GPS sledování 3D mapy: 9 kroků

Video: GPS sledování 3D mapy: 9 kroků

Video: GPS sledování 3D mapy: 9 kroků
Video: TRIK NA MAPY.CZ 2024, Červenec
Anonim
GPS sledování 3D mapy
GPS sledování 3D mapy
GPS sledování 3D mapy
GPS sledování 3D mapy

Tento projekt je 3D vytištěná 3D mapa se silnicemi, řekami a městy s LED majáky, které ukazují polohu členů rodiny. Může ukázat, zda je dítě ve škole, nebo jen umístění obou rodičů. Můžeme to také použít k předpovědi, kdy se rodiče vrátí domů, aby bylo možné připravit večeři ve správný čas. Je to také obecně skvělý projekt, který můžete předvést a ukázat rodině a přátelům.

Doufám, že se vám bude líbit tento Instructable, nebo si užijete informace o projektu, který jsem vytvořil

Krok 1: Získání 3D mapy

Chcete -li získat 3D mapu vaší oblasti, napsal jsem samostatný návod, který vám pomůže provést ji. Odkaz na instruktáž je zde:

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

Krok 2: Příprava mapy pro LED vložky

Nyní, když máte 3D mapu se silnicemi, městy a řekami, potřebujeme způsob, jak určit, kde se na mapě osoba nachází. Použil jsem dvoubarevné 3mm RG LED, protože hlavním účelem mapy je ukázat, kde jsou ti dva rodiče. Na určitých místech jsem použil RGB LED, abych mohl ukázat, kde bylo nejstarší dítě. Na Raspberry Pi je výstup 28 pinů, takže umístění LED diod vybírejte moudře. Nakonec jsem jich použil asi 24, takže byste měli být v pořádku.

Pro vrtání PLA jsem zjistil, že normální vrták do dřeva funguje dobře, a já jsem se choval stejně, jako bych ošetřoval dřevo.

V místech, kde byla mapa příliš silná, bych vyvrtal základní vrstvu velkým vrtákem a poté viditelnou vrstvu pomocí správného vrtáku o průměru 3 mm.

Krok 3: Vložte diody LED

Vložte LED diody
Vložte LED diody

Nyní, když máme otvory pro LED diody, do kterých můžeme dosednout, můžeme je přilepit. PVA nebo Superglue na to funguje dobře, zjistil jsem, že PVA kolem něj utěsňuje a drží na místě a superglue také fungovalo velmi dobře. Ujistěte se, že s každou LED diodou vyčnívají na viditelné straně pouze o několik mm, protože nechat LED diody vyčnívat celou cestu vypadá trochu nepořádně. Nebojte se nohou na zádech, můžeme je sklopit, jakmile jsou pájeny.

Krok 4: Připojte diody LED k Raspberry Pi

Přímo jsem připájel LED k Raspberry Pi, pokud však máte jednu s pájenou hlavičkou nebo chcete-li použít pi pro něco jiného, doporučil bych použít propojovací vodiče pro každou LED, což znamená, že Pi je odnímatelný. Vidíte, že jakmile jsem LED připájel, složil jsem nohy dolů, aby se nelepily na záda.

Krok 5: Otestujte diody LED

Vyzkoušejte LED diody
Vyzkoušejte LED diody

Abych se ujistil, že všechny LED diody fungují, spustil jsem skript, který projde každým možným kolíkem, a rozsvítí je, jeden po druhém, který se po kliknutí na Enter přesune na další. To mi umožnilo poznamenat si, které číslo PIN dělá které místo, což bylo velmi užitečné.

importujte RPi. GPIO jako GPIO

doba importu GPIO.setmode (GPIO. BCM) pro i v rozsahu (0, 28): GPIO.setup (i, GPIO. OUT) pro i v rozsahu (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0,3) GPIO.output (i, GPIO. LOW) tisk ("To bylo:" + str (i)) z = raw_input ("Další?")

Zatímco se to dělo, poznamenal bych si do textového souboru, který pin udělal jaké umístění a jakou barvu. Musíte to udělat, protože je to velmi užitečné v dalším kroku.

Krok 6: Kód pro zapnutí LED na vyžádání

Způsob, jakým jsem tento projekt provedl, zahrnuje jeden Raspberry Pi Zero W se základním webem, který vám umožní zapnout pin. To znamenalo, že zpracování zvládne hlavní Pi 4, který je obvykle zapnutý a běží, a pak malý Pi 0 stačí zapnout pin, což věci trochu zkomplikovalo. Udělal jsem to, protože to vyhovuje mému nastavení, a také jsem cítil, že Pi 0 může být trochu pomalý pro to, co budeme dělat později.

importujte RPi. GPIO jako GPIO

čas importu z baňky 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) vrátit "Off" @app.route ("/off/all") def alloff (): pro i v rozsahu (0, 28): GPIO.output (i, GPIO. LOW) vrátit "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 ')

Funguje to tak, že čeká na adresu IP adresy pí a poté na zapnutí nebo vypnutí a poté na číslo PIN.

uložte tento kód do domovského adresáře Raspberry Pi a pojmenujte jej „pin_website.py“

Budete to muset nastavit tak, aby se to spouštělo automaticky, abyste to udělali v typu terminálu: sudo nano /etc /profile

Do spodní části tohoto souboru přidejte „python3 pin_website.py &“

"&" Je zásadní, protože běží na pozadí, a proto umožňuje pokračování bootování

Krok 7: Jak zjistit polohu

Jak zjistit polohu
Jak zjistit polohu

Pomocí IFTTT můžete nastavit službu tak, že když vám telefon zadá určité místo, může vám poslat e -mail nebo pingnout webovou adresu nebo vám poslat zprávu na telegram.

Krok 8: Jak to všechno funguje

Nastavení, které mám, je Server Pi, hostující mé webové stránky, s přesměrováním portů a statickým DNS pomocí služby poskytované https://freedns.afraid.org/. Hodně z toho je docela složitých a vy potřebujete rozumět přesměrování portů, možná udělám návod, jak tuto část udělat jindy.

Dalším způsobem, jak to udělat, je použít telegram k získání zpráv na pi, nebo možná nejjednodušší, je nastavit čtečku e -mailů, která čte e -maily a přijímá aktualizace polohy.

Nezkoušel jsem robot Telegram ani čtečku e -mailů, ale existuje spousta návodů, které vám ukážou, jak na to.

Zde je můj kód Flask / Python, který je poté požadován webhooky pomocí IFTTT:

z baňky import Baňka, render_template, požadavek, jsonify

import os from datetime import datetime from map import * app = Flask (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (umístění): mum.current_loc (umístění) návrat "Díky za aktualizaci, mami!" @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 (umístění) vrátit "Díky za aktualizaci, mami!" @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 „Resetovat!“if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

a map.py:

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

import ast, json doba importu 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")) response = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251 "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 () třída máma: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, „čtyři kříže“: 18, „llandrinio“: 25, „welshpool“: 27} f = otevřený („pin“, „w“) f.write (str (-1)) f.close () čas. 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," čtyři křížky ": 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," čtyři kříže ": 15} f = otevřený (" 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," domov ": 23," shrewsbury ": 0," llanymynech ": 6," čtyři kříž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 &") třída me: def current_loc (l): global mlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} f = otevřeno ("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: Vytvořte si vlastní z inspirace z mého projektu

Vím tedy, že předchozí krok bude velmi těžké pochopit, takže to nechám tak, že vám ukážu, jak vytvořit mapu, a budu moci mít malinové pi, které zapíná a vypíná LED diody. Nyní musíte vytvořit skript pythonu, který vám pomocí IFTTT pošle e -mail. Poté musíte najít kód pro čtení e -mailu, což je docela snadné (vygooglete). Poté, co si přečtete e -mail a zjistíte polohu rodiče, použijte příkazy „if“a najděte, který pin chcete zapnout.

Blikající světlo na mapě znamená, že právě opustili oblast

Způsob zapnutí LED na jiném pí z pythonu je následující:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #změňte to pomocí IP adresy mapy raspberry pi conn.request ("GET", str ("/off /2 ")) # tím se vypne odpověď PIN číslo 2 = conn.getresponse () # toto si vyžádá URL, a pak to pí pi přečte a vypne pin číslo 2

V zásadě doufám, že můžete použít to, co jsem udělal s mojí 3D mapou, jako inspiraci pro vytvoření vlastní sledovací mapy GPS.

Doporučuje: