Kazalo:

3D -zemljevid GPS sledenja: 9 korakov
3D -zemljevid GPS sledenja: 9 korakov

Video: 3D -zemljevid GPS sledenja: 9 korakov

Video: 3D -zemljevid GPS sledenja: 9 korakov
Video: Урок от А до Я. ArtCam, CorelDRAW, Рисуем вектор, Пишем УП, Фрезеруем на ЧПУ вместе. CNC lessons. 2024, November
Anonim
3D -zemljevid GPS sledenja
3D -zemljevid GPS sledenja
3D zemljevid GPS sledenja
3D zemljevid GPS sledenja

Ta projekt je 3D natisnjen 3D zemljevid s cestami, rekami in mesti z LED svetilniki, ki prikazujejo lokacijo članov družine. Lahko pokaže, ali je otrok v šoli ali pa le lokacijo obeh staršev. Z njim lahko tudi napovemo, kdaj bodo starši prišli domov, da bo večerja pripravljena ob pravem času. To je tudi na splošno kul projekt, ki ga lahko pokažete družini in prijateljem.

Upam, da vam bo všeč, če boste naredili ta Instructable, ali pa boste izvedeli za moj projekt

1. korak: Pridobite 3D zemljevid

Da bi dobili 3D zemljevid vašega območja, sem napisal ločeno navodilo, ki vam bo pomagalo skozi postopek izdelave. Povezava do navodil je tukaj:

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

2. korak: Priprava zemljevida za LED vložke

Zdaj, ko imate 3D zemljevid s cestami, mesti in rekami, potrebujemo način, da navedemo, kje je oseba na zemljevidu. Uporabil sem dvobarvne 3 mm RG LED diode, ker je glavni namen zemljevida pokazati, kje sta starša. Na nekaterih mestih sem uporabil RGB LED, da sem lahko pokazal, kje je najstarejši otrok. Na Raspberry Pi je na voljo 28 izhodov, zato pametno izberite lokacije LED. Na koncu sem jih uporabil približno 24, zato bi morali biti v redu.

Za vrtanje PLA sem ugotovil, da je običajen sveder za les dobro deloval, in ravnal sem tako, kot bi obdeloval les.

Na mestih, kjer je bil zemljevid predebel, sem izvrtal osnovno plast z velikim svedrom, nato pa vidno zgornjo plast s pravilnim 3 -milimetrskim svedrom.

Korak: Vstavite LED

Vstavite LED
Vstavite LED

Zdaj, ko imamo luknje za namestitev LED, jih lahko prilepimo. PVA ali Superglue dobro deluje za to, ugotovil sem, da je PVA tekel okoli njega in ga zapečatil, superlepilo pa je tudi zelo dobro delovalo. Prepričajte se, da pri vsaki LED -u le nekaj mm štrlijo na vidni strani, ker je videti, da je LED, ki sveti do konca, nekoliko zmešan. Ne skrbite za noge na hrbtu, jih lahko zložimo, ko so spajkane.

4. korak: LED diode priključite na Raspberry Pi

LED sem neposredno spajkal na Raspberry Pi, če pa imate enega z vnaprej spajkano glavo ali želite uporabiti pi za kaj drugega, potem predlagam, da za vsako LED uporabite mostične žice. Pi je odstranljiv. Vidite, da sem po spajkanju LED zložil noge navzdol, da se niso prilepile na hrbet.

5. korak: Preizkusite LED

Preizkusite LED
Preizkusite LED

Da bi se prepričali, da vse LED delujejo, sem zagnal skript, ki gre skozi vsak možni zatič in jih prižge, enega za drugim, ki se premakne na naslednjega, ko kliknem enter. To mi je omogočilo, da sem zapisal, katera številka pin je naredila katero lokacijo, kar je bilo zelo koristno.

uvozite RPi. GPIO kot GPIO

čas uvoza GPIO.setmode (GPIO. BCM) za i v območju (0, 28): nastavitev GPIO. (i, GPIO. OUT) za i v območju (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("To je bilo:" + str (i)) z = raw_input ("Naprej?")

Medtem ko se je to dogajalo, bi si zapisal besedilno datoteko, kateri zatič je naredil katero lokacijo in katero barvo. To morate storiti, saj je v naslednjem koraku zelo koristno.

Korak 6: Koda za vklop LED na zahtevo

Način, kako sem izvedel ta projekt, vključuje eno Raspberry Pi Zero W z osnovno spletno stranjo, ki vam omogoča vklop pin. To je pomenilo, da lahko glavni Pi 4, ki je običajno vklopljen in delujoč, opravi obdelavo, nato pa mora mali Pi 0 samo vklopiti zatič, zaradi česar so stvari nekoliko bolj zapletene. To sem storil, ker ustreza moji nastavitvi, prav tako pa se mi je zdelo, da je Pi 0 nekoliko počasen pri tem, kar bomo počeli kasneje.

uvozite RPi. GPIO kot GPIO

čas uvoza iz bučke uvoz Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) za i v območju (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 (): za i v območju (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 ')

To deluje tako, da počaka na url naslova IP -ja pi, nato na vklop ali izklop in nato na številko pin.

shranite to kodo v domači imenik Raspberry Pi in jo poimenujte "pin_website.py"

To morate nastaviti tako, da se samodejno zažene, zato to storite v vrsti terminala: sudo nano /etc /profile

Na dnu te datoteke dodajte "python3 pin_website.py &"

"&" Je bistvenega pomena, saj deluje v ozadju in zato omogoča nadaljevanje zagona

7. korak: Kako pridobiti lokacijo

Kako pridobiti lokacijo
Kako pridobiti lokacijo

Z uporabo IFTTT lahko storitev nastavite tako, da vam lahko, ko telefon vstopi na določeno lokacijo, pošlje e -pošto ali pokliče spletni naslov ali vam pošlje sporočilo v telegramu.

8. korak: Kako vse to deluje

Imam nastavitev Server Pi, ki gosti moje spletno mesto, s posredovanjem vrat in statičnim DNS -jem, ki uporablja storitev https://freedns.a fear.org/. Veliko tega je precej zapletenega in morate razumeti posredovanje vrat. Morda bom kdaj izvedel navodila, kako narediti ta del drugič.

Drug način, da to storite, je, da uporabite telegram za prejemanje sporočil na pi, ali pa najlažje, če nastavite bralnik e -pošte, ki bere e -poštna sporočila in prek tega prejema posodobitve lokacije.

Nisem preizkusil Telegram bota ali bralnika e -pošte, vendar obstaja veliko vadnic, ki vam bodo pokazale, kako.

Tukaj je moja koda Flask / Python, ki jo webhooki nato zahtevajo z uporabo IFTTT:

iz flask import Flask, render_template, request, jsonify

uvoz os iz datuma in časa uvoz datuma iz zemljevida uvoz * app = Flask (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (location): mum.current_loc (location) return "Hvala za posodobitev, mama!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) vrne "Hvala za posodobitev, oče!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) vrne "Hey, Me" @app.route ('/mum/exit/') def mume (lokacija): mum.offline (location) return "Hvala za posodobitev, mama!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) vrne "Hvala za posodobitev, oče!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) vrne "Hey, Me" @app.route ("/reset") def redo (): setup () return "Ponastaviti!" if _name_ == '_main_': app.run (debug = True, gostitelj = '0.0.0.0')

in map.py:

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

import ast, json čas uvoza import threading import os params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('freedns.a fear.org') conn.request ("GET", str ("/dynamic/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) response = conn.getresponse () conn = http.client. HTTPConnection ('192.168) "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 () razred mama: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "štirje križi": 18, "llandrinio": 25, "welshpool": 27} f = open ("pin", "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 (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," štirje križi ": 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 &") razred oče: locs = {"welshpool": 3, "lynclys": 1, "dom": 23, "shrewsbury": 0, "llanymynech": 6, "štirje križi": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," štirje križi ": 15} f = open (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client Zahteve povezave. HTTPConnection ('192.168.1.251:5000') 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): globalni dlast_loc locs = {"welshpool": 3, "lynclys ": 1," home ": 23," shrewsbury ": 0," llanymynech ": 6," four crosss ": 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 &") razred me: def current_loc (l): globalni 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 (glej 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 &")

9. korak: Zgradite svoje iz navdiha na mojem projektu

Zato vem, da bo prejšnji korak zelo težko razumeti, zato vam bom pustil, da vam pokaže, kako narediti zemljevid, in imeti lahko malinov pi, ki vklopi in izklopi LED. Zdaj morate ustvariti skript python, ki vam z uporabo IFTTT pošlje e -pošto. Nato morate poiskati kodo za branje e -pošte, kar je precej enostavno (google). Potem, ko preberete e -poštno sporočilo in poiščete lokacijo starša, uporabite stavke 'if', da ugotovite, kateri pin morate vklopiti.

Na zemljevidu utripajoča lučka pomeni, da so pravkar zapustili območje

Način vklopa LED na drugem pi iz pythona je naslednji:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #spremenite to z naslovom IP -ja maline pi conn.request ("GET", str ("/off /2 ")) # to izklopi pin številka 2 response = conn.getresponse () # ta zahteva URL, nato pa zemljevid pi to prebere in izklopi pin številko 2

V bistvu upam, da lahko uporabite tisto, kar sem naredil s svojim 3D zemljevidom, kot navdih za izdelavo lastnega zemljevida za sledenje GPS.

Priporočena: