Obsah:

Sledovanie 3D mapy GPS: 9 krokov
Sledovanie 3D mapy GPS: 9 krokov

Video: Sledovanie 3D mapy GPS: 9 krokov

Video: Sledovanie 3D mapy GPS: 9 krokov
Video: Отображение Пунктов, Маршрутов, Путей на экране эхолота Lowrance. Вкл. и откл. функций! 2024, November
Anonim
GPS sledovanie 3D mapy
GPS sledovanie 3D mapy
GPS sledovanie 3D mapy
GPS sledovanie 3D mapy

Tento projekt je 3D vytlačená 3D mapa s cestami, riekami a mestami s LED majákmi, ktoré ukazujú polohu členov rodiny. Môže ukázať, či je dieťa v škole alebo nie, alebo iba polohu oboch rodičov. Môžeme to tiež použiť na predpovedanie toho, kedy sa rodičia vrátia domov, aby bola večera pripravená na správny čas. Je to tiež všeobecne skvelý projekt, ktorý môžete predviesť a predviesť rodine a priateľom.

Dúfam, že sa vám bude páčiť tvorba tohto návodu alebo sa budete chcieť dozvedieť viac o projekte, ktorý som vytvoril

Krok 1: Získanie 3D mapy

Aby som získal 3D mapu vašej oblasti, spísal som samostatný návod, ktorý vám pomôže pri jej vytváraní. Odkaz na návod je tu:

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

Krok 2: Príprava mapy pre vložky LED

Teraz, keď máte 3D mapu s cestami, mestami a riekami, potrebujeme spôsob, ako naznačiť, kde sa na mape osoba nachádza. Použil som dvojfarebné 3mm RG LED, pretože hlavným účelom mapy je ukázať, kde sú obaja rodičia. Na určitých miestach som použil RGB LED, aby som mohol ukázať, kde bolo najstaršie dieťa. Na Raspberry Pi je k dispozícii limit 28 pinov, preto umiestnenia LED diód zvoľte múdro. Nakoniec som ich použil asi 24, takže by ste mali byť v poriadku.

Na vŕtanie PLA som zistil, že bežný vrták do dreva funguje dobre a ošetrujem tak, ako by som zaobchádzal s drevom.

Na miestach, kde bola mapa príliš hrubá, by som vyvŕtal základnú vrstvu veľkým vrtákom a potom viditeľnú vrstvu hore správnym vrtákom s priemerom 3 mm.

Krok 3: Vložte LED diódy

Vložte LED diódy
Vložte LED diódy

Teraz, keď máme otvory na osadenie diód LED, môžeme ich prilepiť. PVA alebo Superglue na to funguje dobre, zistil som, že PVA okolo neho bežalo a tesnilo ho na mieste a superglue tiež fungovalo veľmi dobre. Uistite sa, že s každou diódou LED vyčnievajú iba na viditeľnej strane o niekoľko mm, pretože ponechanie diód LED po celú dobu vyzerá trochu chaoticky. O nohy na chrbte sa nemusíte báť, tieto môžeme po ich spájkovaní preložiť.

Krok 4: Pripojte diódy LED k Raspberry Pi

LED diódy som priamo spájkoval na Raspberry Pi, ak však máte jednu s vopred spájkovanou hlavičkou alebo ak chcete mať možnosť použiť pi na niečo iné, navrhoval by som pre každú LED použiť prepojovacie vodiče, to znamená, že Pi je odnímateľný. Vidíte, že akonáhle som spájkoval LED, sklopil som nohy, aby sa nelepili na chrbát.

Krok 5: Otestujte LED diódy

Otestujte LED diódy
Otestujte LED diódy

Aby som sa ubezpečil, že všetky LED diódy fungujú, spustil som skript, ktorý prechádza každým možným kolíkom a rozsvieti ich jeden po druhom, ktorý sa po kliknutí na kláves Enter presunie na ďalší. To mi umožnilo zaznamenať si, ktoré číslo PIN robí ktoré miesto, čo bolo veľmi užitočné.

importujte RPi. GPIO ako GPIO

čas importu GPIO.setmode (GPIO. BCM) pre i v rozsahu (0, 28): GPIO.setup (i, GPIO. OUT) pre i v rozsahu (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0,3) GPIO.output (i, GPIO. LOW) print ("To bolo:" + str (i)) z = raw_input ("Ďalej?")

Aj keď sa to deje, poznamenal by som si do textového súboru, ktorý pin urobil aké umiestnenie a akú farbu. Musíte to urobiť, pretože je to veľmi užitočné v nasledujúcom kroku.

Krok 6: Kód na zapnutie LED diódy na požiadanie

Spôsob, akým som tento projekt vykonal, zahŕňa jeden Raspberry Pi Zero W so základnou webovou stránkou, ktorá vám umožní zapnúť pin. To znamenalo, že spracovanie zvládne hlavný Pi 4, ktorý je zvyčajne zapnutý a beží, a potom malý Pi 0 musí zapnúť iba kolík, čo veci trochu komplikuje. Urobil som to, pretože to vyhovuje môjmu nastaveniu, a tiež som cítil, že Pi 0 môže byť trochu pomalý na to, čo budeme robiť neskôr.

importujte RPi. GPIO ako GPIO

čas importu z banky 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átiť „Off“@app.route („/off/all“) def alloff (): pre i v rozsahu (0, 28): GPIO.output (i, GPIO. LOW) vrátiť „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 čaká na URL adresu IP pí a potom na zapnuté alebo vypnuté a potom na číslo PIN.

uložte tento kód do domovského adresára Raspberry Pi a pomenujte ho „pin_website.py“

Budete musieť nastaviť automatické spustenie, aby ste to urobili na termináli typu: sudo nano /etc /profile

V spodnej časti tohto súboru pridajte „python3 pin_website.py &“

„&“Je nevyhnutné, pretože beží na pozadí, a preto umožňuje pokračovanie bootovania

Krok 7: Ako získať polohu

Ako získať polohu
Ako získať polohu

Pomocou IFTTT môžete nastaviť službu tak, aby vám telefón po zadaní určitého umiestnenia poslal e -mail alebo ping na webovú adresu alebo vám poslal správu v telegrame.

Krok 8: Ako to všetko funguje

Mám k dispozícii server Pi, ktorý prevádzkuje moju webovú stránku, s presmerovaním portov a statickým serverom DNS pomocou služby https://freedns.afraid.org/. Veľa z toho je dosť zložitých a musíte porozumieť presmerovaniu portov, možno vám dám návod, ako túto časť urobiť inokedy.

Ďalším spôsobom, ako to urobiť, je použiť telegram na príjem správ na pi, alebo možno najľahšie, je nastaviť čítačku e -mailov, ktorá bude e -maily čítať a prostredníctvom ktorých bude dostávať aktuálne informácie o polohe.

Neskúšal som bota Telegramu ani čítačku e -mailov, ale existuje množstvo návodov, ktoré vám ukážu, ako na to.

Tu je môj kód Flask / Python, ktorý je potom vyžiadaný webhookmi pomocou IFTTT:

z banky importujte banku, render_template, požiadavku, 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 (umiestnenie): mum.current_loc (umiestnenie) návrat "Ďakujem za aktualizáciu, 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 (umiestnenie) vrátiť „Vďaka za aktualizáciu, 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 „Resetovať!“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 čas importu závitovanie 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 () triedna mama: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, „štyri kríže“: 18, „llandrinio“: 25, „welshpool“: 27} f = otvorený („špendlík“, „w“) f.píšte (str (-1)) f.zatvorte () čas. spánok (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," štyri kríž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 &") triedny otec: 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," štyri kríže ": 15} f = otvorený (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') spojenia 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," štyri kríž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 &") trieda me: def current_loc (l): global mlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} f = otvorený ("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 („ZÍSKAŤ“, str („/zapnúť/“) + 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: Vytvorte si vlastnú inšpiráciu z môjho projektu

Takže viem, že predchádzajúci krok bude veľmi ťažké pochopiť, takže to nechám tak, že vám ukážem, ako vytvoriť mapu, a budem môcť mať malinové pi, ktoré zapína a vypína diódy LED. Teraz musíte vytvoriť skript pythonu, ktorý vám pomocou IFTTT pošle e -mail. Potom musíte nájsť kus kódu na čítanie e -mailov, ktorý je celkom jednoduchý (vygooglite ho). Potom, čo si prečítate e -mail a zistíte polohu rodiča, pomocou príkazu „if“vyhľadajte, ktorý kolík zapnete.

Blikajúce svetlo na mape znamená, že práve opustili oblasť

Spôsob, ako zapnúť LED diódy na inom pí z pythonu, je nasledujúci:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #zmeňte to pomocou adresy IP mapy maliny pi conn.request ("GET", str ("/off /2 ")) # týmto sa vypne odpoveď pinu číslo 2 = conn.getresponse () # toto vyžiada adresu URL a potom to prečíta mapa pí a vypne kolík číslo 2

V zásade dúfam, že to, čo som urobil s mojou 3D mapou, môžete použiť ako inšpiráciu na vytvorenie vlastnej mapy sledovania GPS.

Odporúča: