Obsah:
- Krok 1: Získání 3D mapy
- Krok 2: Příprava mapy pro LED vložky
- Krok 3: Vložte diody LED
- Krok 4: Připojte diody LED k Raspberry Pi
- Krok 5: Otestujte diody LED
- Krok 6: Kód pro zapnutí LED na vyžádání
- Krok 7: Jak zjistit polohu
- Krok 8: Jak to všechno funguje
- Krok 9: Vytvořte si vlastní z inspirace z mého projektu
Video: GPS sledování 3D mapy: 9 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:20
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
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
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
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:
Vytvořte vlastní mapy pro svůj Garmin GPS: 8 kroků (s obrázky)
Vytvářejte vlastní mapy pro svůj Garmin GPS: Pokud máte Garmin GPS určený pro turistiku a další outdoorové aktivity (včetně řady GPSMAP, eTrex, Colorado, Dakota, Oregon a Montana, mimo jiné), nemusíte spokojit se s mapami holých kostí, které na něm byly předem načteny. E
ATtiny85 Nositelné vibrační sledování aktivity Sledování a programování ATtiny85 s Arduino Uno: 4 kroky (s obrázky)
ATtiny85 Wearable Vibration Activity Tracking Watch & Programming ATtiny85 With Arduino Uno: How to make the wearable activity tracking watch? Toto je nositelný gadget navržený tak, aby vibroval, když detekuje stagnaci. Trávíte většinu času na počítači jako já? Sedíte hodiny, aniž byste si to uvědomovali? Pak je toto zařízení f
Sady inteligentních robotů pro sledování robotů Sledování automobilů Fotosenzitivní: 7 kroků
Sady inteligentních robotů pro sledování robotů Sledovací auto Fotosenzitivní: Design od SINONING ROBOT Můžete si koupit od sledovacího robota carTheoryLM393 čip porovnat dva fotorezistory, když je na jedné straně LED dioda fotorezistoru na BÍLÉ, strana motoru se okamžitě zastaví, druhá strana motoru roztočit, aby
Navigujte robota se senzory obuvi, bez GPS, bez mapy: 13 kroků (s obrázky)
Navigujte robota pomocí snímačů obuvi, bez GPS, bez mapy: Robot se pohybuje po předem naprogramované dráze a přenáší (přes bluetooth) své aktuální informace o pohybu do telefonu pro sledování v reálném čase. Arduino je předprogramováno s dráhou a oblu slouží k snímání pohybu robota. oblu přenáší pohyb pro
Inatel - SmartHome - SH2Y - Sledování systému a sledování prostředí: 6 kroků
Inatel - SmartHome - SH2Y - Sledování systému a prostředí Ambiente: Foen desenvolvido um & Sistema de Monitoramento e Seguran ç a F í sica de Ambiente " para Smart Homes, což je intuitivní monitorování stavu vari á veis como "Temperatura", "Luminosidade" e " Senzor