Sommario:
- Passaggio 1: ottenere una mappa 3D
- Passaggio 2: preparazione della mappa per gli inserti LED
- Passaggio 3: inserire i LED
- Passaggio 4: collega i LED al Raspberry Pi
- Passaggio 5: testare i LED
- Passaggio 6: codice per accendere il LED quando richiesto
- Passaggio 7: come ricevere la posizione
- Passaggio 8: come funziona?
- Passaggio 9: crea il tuo dall'ispirazione del mio progetto
Video: Mappa 3D di localizzazione GPS: 9 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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
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
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:
Introduzione - Trasforma un Raspberry Pi in un server di localizzazione GPS: 12 passaggi
Introduzione - Trasforma un Raspberry Pi in un server di localizzazione GPS: In questa guida ti mostrerò come installare il software di localizzazione GPS Traccar su un Raspberry Pi che riceverà dati da dispositivi compatibili su Internet, registrando le loro posizioni su una mappa in tempo reale monitoraggio e anche il monitoraggio della riproduzione
Zaino intelligente con localizzazione GPS e luci automatiche: 15 passaggi
Zaino intelligente con tracciamento GPS e luci automatiche: in questo tutorial creeremo uno zaino intelligente in grado di tracciare la nostra posizione, velocità e ha luci automatizzate che possono tenerci al sicuro di notte. Uso 2 sensori per rilevare se è sulle tue spalle per assicurarmi che non si spenga quando non è necessario
PCB: sistema di localizzazione del veicolo basato su GPS e GSM: 3 passaggi
PCB: Sistema di localizzazione del veicolo basato su GPS e GSM: Sistema di localizzazione del veicolo basato su GPS e GSMGiugno 30, 2016, Progetti di ingegneria Il progetto Sistema di localizzazione del veicolo basato su GPS e GSM utilizza il Global Positioning System (GPS) e il sistema globale per la comunicazione mobile (GSM), che rende questo progetto più e
Configura il tuo server di localizzazione GPS su un Raspberry Pi: 8 passaggi
Configura il tuo server di localizzazione GPS su un Raspberry Pi: In questo progetto ti mostrerò come configurare il tuo server di localizzazione GPS su un Raspberry Pi. Non deve essere un Raspberry pi, perché il software che utilizzeremo per il server di tracciamento è disponibile anche per Windows e Linux
Come collegare il DeLorme Earthmate GPS LT-20 a Google Earth per un'ottima mappa di localizzazione GPS.: 5 passaggi
Come collegare DeLorme Earthmate GPS LT-20 al tuo Google Earth per un'ottima mappa di localizzazione GPS.: Ti mostrerò come collegare un dispositivo GPS al popolare programma Google Earth, senza utilizzare Google Earth Plus. Non ho un grande budget quindi posso garantire che sarà il più economico possibile