Obsah:
- Krok 1: Získanie 3D mapy
- Krok 2: Príprava mapy pre vložky LED
- Krok 3: Vložte LED diódy
- Krok 4: Pripojte diódy LED k Raspberry Pi
- Krok 5: Otestujte LED diódy
- Krok 6: Kód na zapnutie LED diódy na požiadanie
- Krok 7: Ako získať polohu
- Krok 8: Ako to všetko funguje
- Krok 9: Vytvorte si vlastnú inšpiráciu z môjho projektu
Video: Sledovanie 3D mapy GPS: 9 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
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
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
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
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:
Vytvorte si vlastné mapy pre svoj Garmin GPS: 8 krokov (s obrázkami)
Vytvorte si vlastné mapy pre svoj Garmin GPS: Ak máte GPS Garmin určený na turistiku a iné outdoorové aktivity (vrátane GPSMAP, eTrex, Colorado, Dakota, Oregon a Montana, okrem iných), nemusíte uspokojte sa s mapami holých kostí, ktoré boli na ňom vopred načítané. E
ATtiny85 Nositeľné zariadenie na sledovanie vibrácií, sledovanie a programovanie ATtiny85 s Arduino Uno: 4 kroky (s obrázkami)
ATtiny85 Nositeľné hodinky na sledovanie vibrácií a programovanie ATtiny85 s Arduino Uno: Ako vyrobiť hodinky na sledovanie nositeľnej aktivity? Toto je nositeľný gadget navrhnutý tak, aby vibroval, keď zistí stagnáciu. Trávite väčšinu času pri počítači ako ja? Sedíte hodiny bez toho, aby ste si to uvedomovali? Potom je toto zariadenie
Sledovanie a sledovanie malých obchodov: 9 krokov (s obrázkami)
Track & trace pre malé obchody: Jedná sa o systém, ktorý je vytvorený pre malé obchody a ktorý sa má montovať na e-bicykle alebo e-skútre pri dodávkach na krátku vzdialenosť, napríklad v pekárni, ktorá chce dodávať pečivo. Čo znamená Track and Trace? Track and Trace je systém, ktorý používa približne
Navigujte robota so snímačmi obuvi, bez GPS, bez mapy: 13 krokov (s obrázkami)
Navigujte robota pomocou senzorov obuvi, bez GPS, bez mapy: Robot sa pohybuje po vopred naprogramovanej ceste a vysiela (cez bluetooth) svoje aktuálne informácie o pohybe do telefónu na sledovanie v reálnom čase. Arduino je predprogramované s dráhou a oblu slúži na snímanie pohybu robota. oblu prenáša pohyb a
Inatel - SmartHome - SH2Y - Sledovanie systému a sledovanie okolitého prostredia: 6 krokov
Inatel - SmartHome - SH2Y - Sledovanie systému a okolité prostredie: Zobrazenie monitora a systém monitora a systému Ambiente " para Smart Homes, intuitívne monitorujúce aktuálny stav a teplotu "Temperatura", "Luminosidade" e " Senzor