Taula de continguts:

Mapa 3D de seguiment GPS: 9 passos
Mapa 3D de seguiment GPS: 9 passos

Vídeo: Mapa 3D de seguiment GPS: 9 passos

Vídeo: Mapa 3D de seguiment GPS: 9 passos
Vídeo: Satmap Xplorer GPS - Getting Started 2024, Juliol
Anonim
Mapa 3D de seguiment GPS
Mapa 3D de seguiment GPS
Mapa 3D de seguiment GPS
Mapa 3D de seguiment GPS

Aquest projecte és un mapa 3D imprès en 3D, amb carreteres, rius i ciutats, amb balises LED per mostrar la ubicació dels membres de la família. Pot mostrar si hi ha un nen a l'escola o simplement la ubicació dels dos pares. També el podem utilitzar per predir a quina hora arriben els pares a casa, de manera que el sopar es pugui preparar al moment adequat. També és només un projecte genial per mostrar i mostrar a familiars i amics.

Espero que us agradi fer aquest instructiu o que us agradi conèixer un projecte que he fet

Pas 1: Obtenir un mapa en 3D

Per obtenir un mapa en 3D de la vostra zona, he escrit una instrucció separada que us ajudarà a guiar-vos durant el procés de creació d'un. L’enllaç a allò instructable és aquí:

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

Pas 2: Preparació del mapa per a insercions LED

Ara que teniu un mapa en 3D, amb carreteres, ciutats i rius, necessitem una manera d’indicar on es troba una persona al mapa. He utilitzat LED RG bicolors de 3 mm, perquè el propòsit principal del mapa és mostrar on es troben els dos pares. En determinats llocs he utilitzat un LED RGB per permetre'm mostrar on era el nen més gran. Hi ha un límit de 28 pins per sortir al Raspberry Pi, de manera que trieu la ubicació dels LED amb prudència. Vaig acabar utilitzant-ne uns 24, de manera que hauríeu d’estar bé.

Per perforar PLA, he trobat que una broca de fusta normal funcionava bé i he tractat com tractaria la fusta.

Als llocs on el mapa fos massa gruixut, perforaria la capa base amb una broca gran i després la capa superior visible amb la broca correcta de 3 mm.

Pas 3: Inseriu els LED

Inseriu els LED
Inseriu els LED

Ara que tenim forats perquè els LED s’hi puguin asseure, els podem enganxar. El PVA o el Superglue funcionen bé per a això. Vaig comprovar que el PVA l’envoltava segellant-lo al seu lloc i la superglue també funcionava molt bé. Assegureu-vos que amb cada LED només sobresurten uns 30 mm al costat visible, ja que tenir els LEDs apagats tot el camí sembla una mica desordenat. No us preocupeu per les potes de l’esquena, les podem doblegar un cop soldades.

Pas 4: connecteu els LED al Raspberry Pi

He soldat directament els LED al Raspberry Pi, però, si en teniu un amb capçalera prèviament soldada o voleu utilitzar el pi per a una altra cosa, us suggeriria utilitzar cables de pont per a cada LED, és a dir, que el Pi és extraïble. Podeu veure que un cop heu soldat el LED, vaig doblegar les cames cap avall perquè no s’enganxessin a la part posterior.

Pas 5: proveu els LED

Proveu els LED
Proveu els LED

Per assegurar-me que tots els LED funcionen, he executat un script que passa per cada pin possible i els il·lumina, un a la vegada, que es converteix en el següent quan faig clic a Intro. Això em va permetre anotar quin número de PIN va fer una ubicació, cosa que va resultar molt útil.

importar RPi. GPIO com a GPIO

temps d’importació GPIO.setmode (GPIO. BCM) per a l’interval (0, 28): GPIO.setup (i, GPIO. OUT) per a l’interval (0, 28): sortida GPIO.i (GPIO. HIGH) time.sleep (0,3) GPIO.output (i, GPIO. LOW) print ("Això era:" + str (i)) z = raw_input ("Següent?")

Mentre això succeïa, anotaria en un fitxer de text quin pin va fer quina ubicació i quin color. Cal fer-ho, ja que és molt útil en el següent pas.

Pas 6: Codi per encendre el LED quan se sol·liciti

La manera com he fet aquest projecte consisteix en un Raspberry Pi Zero W, amb un lloc web bàsic que us permet activar un pin. Això significava que el Pi 4 principal, que normalment està en funcionament i en funcionament, pot fer el processament, i aleshores el petit Pi 0 només ha d’encendre un pin, cosa que complica una mica les coses. Ho vaig fer perquè s'adapta a la meva configuració, i també vaig sentir que el Pi 0 pot ser una mica lent pel que farem més endavant.

importar RPi. GPIO com a GPIO

temps d’importació des de flask import Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) per a l’interval (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) retorna "Desactivat" @ app.route ("/ desactivat / tot") def alloff (): per a l'interval (0, 28): GPIO.output (i, GPIO. LOW) retorna "desactivat" @ app.route ("/ on /") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) retorna "On" si _name_ == '_main_': app.run (depuració = True, host = '0.0. 0,0 ')

La forma en què funciona és que espera l’URL de l’adreça IP del pi i, a continuació, una activació o desactivació i, a continuació, el número de PIN.

deseu aquest codi al directori inicial de Raspberry Pi i anomeneu-lo "pin_website.py"

Haureu d’establir-ho perquè s’executi automàticament, per això, al tipus de terminal: sudo nano / etc / profile

A la part inferior d'aquest fitxer, afegiu "python3 pin_website.py &"

El "&" és essencial, ja que el fa funcionar en segon pla i, per tant, permet que l'arrencada continuï

Pas 7: Com rebre la ubicació

Com rebre la ubicació
Com rebre la ubicació

Mitjançant IFTTT, podeu configurar un servei perquè, quan el telèfon entri en una ubicació determinada, us pugui enviar un correu electrònic o fer ping a una adreça web o enviar-vos un missatge per telegrama.

Pas 8: Com funciona tot això

La configuració que tinc és un servidor Pi, que allotja el meu lloc web, amb reenviament de ports i un DNS estàtic mitjançant el servei proporcionat per https://freedns.afraid.org/. Una gran part d'això és bastant complex i cal que entengueu el reenviament de ports. És possible que us sigui instructiu sobre com fer aquesta part una altra vegada.

Una altra manera de fer-ho és fer servir el telegrama per enviar missatges al pi, o possiblement el més fàcil, mitjançant la configuració d’un lector de correu electrònic que llegeixi els correus electrònics i rebi les actualitzacions d’ubicació.

No he provat el bot de Telegram ni un lector de correu electrònic, però hi ha molts tutorials que us mostraran com fer-ho.

Aquí teniu el meu codi Flask / Python que després sol·liciten els webhooks mitjançant IFTTT:

des de la importació de flask Flask, render_template, request, 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 (location): mum.current_loc (location) return "Gràcies per l'actualització, mare!" @ app.route ("/ dad / enter /") def da (l): dad.current_loc (l) return "Gràcies per l'actualització, pare!" @ app.route ("/ child / enter /") def child_enter (l): me.current_loc (l) return "Ei, jo" @ app.route ('/ mum / exit /') def mume (location): mum.offline (location) return "Gràcies per l'actualització, mare!" @ app.route ("/ dad / exit /") def dade (l): dad.offline (l) return "Gràcies per l'actualització, pare!" @ app.route ("/ child / exit /") def child_exit (l): me.offline (l) return "Ei, jo" @ app.route ("/ reset") def refo (): setup () return "Restableix!" if _name_ == '_main_': app.run (depuració = True, host = '0.0.0.0')

i map.py:

importació de http.client, urllib.request, urllib.parse, urllib.error, base64

import ast, json importation time 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:5re') "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 () classe mum: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "quatre creus": 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," quatre creus ": 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 &") classe pare: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "quatre creus": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," quatre creus ": 15} f = obert (" 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," home ": 23," shrewsbury ": 0," llanymynech ": 6," quatre creus ": 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 &") class me: def current_loc (l): global 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 (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 &")

Pas 9: creeu-ne un des d'Inspiration Off My Project

Per tant, sé que el pas anterior serà molt difícil d’entendre, de manera que us deixaré com mostrar-vos com fer el mapa i ser capaç de tenir un pi de gerds que encengui i apagui els LED. Ara heu de crear un script python que usi un correu electrònic mitjançant IFTTT. A continuació, heu de trobar un fragment de codi per llegir el correu electrònic, que és bastant fàcil (google it). A continuació, un cop llegiu un missatge de correu electrònic i trobeu la ubicació d'un pare, utilitzeu les instruccions "if" per trobar quin passador s'ha d'activar.

Al mapa, una llum intermitent significa que acaben de sortir de la zona

La manera d’encendre els LED d’un altre pi des de python és la següent:

importació de http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #change this with the raspberry pi's map IP address conn.request ("GET", str ("/ off / 2 ")) # això desactiva el pin número 2 resposta = conn.getresponse () # això sol·licita l'URL i, a continuació, el mapa pi ho llegeix i desactiva el pin número 2

Bàsicament, espero que pugueu utilitzar el que he fet amb el meu mapa 3D com a inspiració per fer el vostre propi mapa de seguiment GPS.

Recomanat: