Sommario:

Mappa 3D di localizzazione GPS: 9 passaggi
Mappa 3D di localizzazione GPS: 9 passaggi

Video: Mappa 3D di localizzazione GPS: 9 passaggi

Video: Mappa 3D di localizzazione GPS: 9 passaggi
Video: MAPS.ME | GUIDA alla APP GPS con MAPPE OFFLINE 2024, Novembre
Anonim
Mappa 3D di localizzazione GPS
Mappa 3D di localizzazione GPS
Mappa 3D di localizzazione GPS
Mappa 3D di localizzazione GPS

Questo progetto è una mappa 3D stampata in 3D, con strade, fiumi e città, con fari a LED per mostrare la posizione dei membri della famiglia. Può mostrare se un bambino è a scuola o meno o solo la posizione di entrambi i genitori. Possiamo anche usarlo per prevedere l'ora in cui i genitori tornano a casa, in modo che la cena possa essere preparata all'ora giusta. È anche solo un progetto generalmente interessante da mostrare e mostrare a familiari e amici.

Spero che ti diverta a realizzare questo Instructable, o ti diverti a scoprire un progetto che ho realizzato

Passaggio 1: ottenere una mappa 3D

PER ottenere una mappa 3D della tua zona, ho scritto un'istruzione separata per aiutarti a guidarti attraverso il processo di creazione di uno. Il link all'istruibile è qui:

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

Passaggio 2: preparazione della mappa per gli inserti LED

Ora che hai una mappa 3D, con strade, città e fiumi, abbiamo bisogno di un modo per indicare dove si trova una persona sulla mappa. Ho usato LED RG bicolore da 3 mm, perché lo scopo principale della mappa è mostrare dove si trovano i due genitori. In certi punti ho usato un LED RGB, per permettermi di mostrare dove si trovava il figlio più grande. C'è un limite di 28 pin da emettere sul Raspberry Pi, quindi scegli saggiamente le posizioni dei LED. Ho finito per usarne circa 24, quindi dovresti stare bene.

Per forare il PLA, ho trovato che una normale punta per legno funzionava bene e l'ho trattata come tratterei il legno.

Nei punti in cui la mappa era troppo spessa, avrei perforato lo strato di base con una punta da trapano grande, quindi lo strato sopra visibile con la punta da trapano corretta da 3 mm.

Passaggio 3: inserire i LED

Inserire i LED
Inserire i LED

Ora che abbiamo i fori per far accomodare i LED, possiamo incollarli. Il PVA o la supercolla funzionano bene per questo, ho scoperto che il PVA scorreva intorno sigillandolo in posizione, e anche la supercolla ha funzionato molto bene. Assicurati che con ogni LED sporgano solo di pochi mm dal lato visibile, perché avere i LED completamente sporgenti sembra un po' disordinato. Non preoccuparti per le gambe sul retro, possiamo piegarle una volta saldate.

Passaggio 4: collega i LED al Raspberry Pi

Ho saldato direttamente i LED al Raspberry Pi, tuttavia, se ne hai uno con un'intestazione pre-saldata, o vuoi essere in grado di usare il pi per qualcos'altro, allora suggerirei di usare i ponticelli per ogni LED, il che significa che il Pi è rimovibile. Puoi vedere che una volta saldato il LED, ho piegato le gambe verso il basso in modo che non si attaccassero sul retro.

Passaggio 5: testare i LED

Prova i LED
Prova i LED

Per assicurarmi che tutti i LED funzionino, ho eseguito uno script che passa attraverso ogni possibile pin e li accende, uno alla volta, che si sposta su quello successivo quando faccio clic su invio. Questo mi ha permesso di annotare quale numero di pin ha fatto quale posizione, il che è stato molto utile.

importa RPi. GPIO come GPIO

import time GPIO.setmode(GPIO. BCM) per i in range(0, 28): GPIO.setup(i, GPIO. OUT) for i in range(0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("Quello era: " + str(i)) z = raw_input("Successivo?")

Mentre ciò accadeva, annotavo su un file di testo quale pin ha fatto quale posizione e quale colore. Devi farlo, poiché è molto utile nel passaggio successivo.

Passaggio 6: codice per accendere il LED quando richiesto

Il modo in cui ho realizzato questo progetto prevede un Raspberry Pi Zero W, con un sito Web di base che consente di attivare un pin. Ciò significava che il Pi 4 principale, che di solito è acceso e in esecuzione, può eseguire l'elaborazione, e quindi il piccolo Pi 0 deve solo attivare un pin, rendendo le cose leggermente più complicate. L'ho fatto perché si adatta alla mia configurazione, e ho anche sentito che il Pi 0 può essere un po' lento per quello che faremo in seguito.

importa RPi. GPIO come GPIO

import time from flask 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) return "Off" @app.route("/off/all") def alloff(): for i in range(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')

Il modo in cui funziona è che aspetta l'URL dell'indirizzo IP del pi e poi un on o off e poi il numero del pin.

salva questo codice nella home directory del Raspberry Pi e chiamalo "pin_website.py"

Dovrai impostarlo per l'esecuzione automatica, quindi per farlo, nel terminale digita: sudo nano /etc/profile

In fondo a questo file, aggiungi "python3 pin_website.py &"

Il "&" è essenziale, in quanto lo fa funzionare in background e quindi consente il proseguimento dell'avvio

Passaggio 7: come ricevere la posizione

Come ricevere la posizione
Come ricevere la posizione

Usando IFTTT, puoi configurare un servizio in modo che quando il telefono entra in una determinata posizione, possa inviarti un'e-mail, eseguire il ping di un indirizzo Web o inviarti messaggi su Telegram.

Passaggio 8: come funziona?

La configurazione che ho è un Server Pi, che ospita il mio sito Web, con port forwarding e un DNS statico utilizzando il servizio fornito da https://freedns.afraid.org/. Molto di questo è piuttosto complesso e devi avere una comprensione del port forwarding, potrei fare un'istruzione su come eseguire questa parte un'altra volta.

Un altro modo per farlo è utilizzare Telegram per inviare messaggi al pi, o forse il più semplice, è impostare un lettore di posta elettronica che legga le e-mail e riceva aggiornamenti di posizione tramite quello.

Non ho provato il bot di Telegram o un lettore di posta elettronica, ma ci sono molti tutorial là fuori che ti mostreranno come farlo.

Ecco il mio codice Flask / Python che viene quindi richiesto dai webhook utilizzando IFTTT:

from flask import 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 "Grazie per l'aggiornamento, mamma!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "Grazie per l'aggiornamento, papà!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "Hey, Me" @app.route('/mum/exit/') def mume(location): mum.offline(location) return "Grazie per l'aggiornamento, mamma!" @app.route("/dad/exit/") def dade(l): dad.offline(l) return "Grazie per l'aggiornamento, papà!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "Ehi, io" @app.route("/reset") def redo(): setup() return "Ripristina!" if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

e map.py:

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

import ast, json import 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:5000') "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 () class mum: def current_loc(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "quattro croci": 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, "quattro croci": 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 crosss": 15, "llandrinio": 10, "welshpool": 24 } def current_loc(l): global dlast_loc locs = { "welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech": 6, "quattro croci": 15 } f = open("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, "casa": 23, "shrewsbury": 0, "llanymynech": 6, "quattro croci": 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 &")

Passaggio 9: crea il tuo dall'ispirazione del mio progetto

Quindi so che il passaggio precedente sarà molto difficile da capire, quindi lo lascerò come mostrarti come creare la mappa e poter avere un Raspberry Pi che accende e spegne i LED. Ora devi creare uno script Python che, usando IFTTT, ti invii un'e-mail. Quindi devi trovare un pezzo di codice per la lettura dell'e-mail, che è abbastanza semplice (google it). Quindi, una volta che hai letto un'e-mail e hai trovato la posizione di un genitore, usa le istruzioni "if" per trovare quale pin attivare.

Sulla mappa, una luce lampeggiante significa che hanno appena lasciato l'area

Il modo per accendere i LED su un altro pi da Python è il seguente:

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

params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #cambia questo con l'indirizzo IP della mappa di raspberry pi conn.request("GET", str("/off /2")) # questo disattiva il pin numero 2 response = conn.getresponse() # questo richiede l'URL, quindi la mappa pi lo legge e disattiva il pin numero 2

Fondamentalmente, spero che tu possa usare ciò che ho fatto con la mia mappa 3D come ispirazione per creare la tua mappa di localizzazione GPS.

Consigliato: