Cuprins:

Harta 3D de urmărire GPS: 9 pași
Harta 3D de urmărire GPS: 9 pași

Video: Harta 3D de urmărire GPS: 9 pași

Video: Harta 3D de urmărire GPS: 9 pași
Video: Cele mai interesante aplicații pentru hărți 2024, Noiembrie
Anonim
Harta 3D de urmărire GPS
Harta 3D de urmărire GPS
Harta 3D de urmărire GPS
Harta 3D de urmărire GPS

Acest proiect este o hartă 3D imprimată 3D, cu drumuri, râuri și orașe, cu balize LED pentru a arăta locația membrilor familiei. Poate arăta dacă un copil este sau nu la școală sau doar locația ambilor părinți. Îl putem folosi, de asemenea, pentru a prezice la ce oră ajung părinții acasă, astfel încât cina să poată fi făcută la momentul potrivit. Este, de asemenea, doar un proiect, în general, interesant de prezentat și afișat familiei și prietenilor.

Sper că vă face plăcere să faceți acest Instructable sau să vă bucurați să aflați despre un proiect pe care l-am făcut

Pasul 1: Obținerea unei hărți 3D

Pentru a obține o hartă 3D a zonei dvs., am scris o instruire separată pentru a vă ajuta să vă ghidați în procesul de realizare a uneia. Link-ul către instructabil este aici:

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

Pasul 2: Pregătirea hărții pentru inserțiile LED

Acum că aveți o hartă 3D, cu drumuri, orașe și râuri, avem nevoie de un mod de a indica unde se află o persoană pe hartă. Am folosit LED-uri RG bi-color de 3 mm, deoarece scopul principal al hărții este să arate unde sunt cei doi părinți. În anumite locuri am folosit un LED RGB, pentru a-mi permite să arăt unde este cel mai mare copil. Există o limită de 28 de pini pentru a ieși pe Raspberry Pi, deci alegeți cu înțelepciune locațiile LED-urilor. Am ajuns să folosesc aproximativ 24 dintre ele, așa că ar trebui să fii bine.

Pentru a găuri PLA, am găsit un burghiu normal pentru lemn funcționat bine și am tratat așa cum aș trata lemnul.

În locurile în care harta era prea groasă, aș fora stratul de bază cu un burghiu mare, apoi stratul vizibil de deasupra cu burghiul corect de 3 mm.

Pasul 3: Introduceți LED-urile

Introduceți LED-urile
Introduceți LED-urile

Acum, că avem găuri pentru ca LED-urile să poată sta, le putem lipi. PVA sau Superglue funcționează bine în acest sens, am constatat că PVA a rulat în jurul ei, sigilându-l la locul său, și superglue a funcționat foarte bine. Asigurați-vă că, cu fiecare LED, acestea ies în afară pe partea vizibilă doar cu câțiva mm, deoarece faptul că LED-urile se extind până la capăt arată cam dezordonat. Nu vă faceți griji cu privire la picioarele din spate, le putem împături odată ce sunt lipite.

Pasul 4: Conectați LED-urile la Raspberry Pi

Am lipit direct LED-urile către Raspberry Pi, totuși, dacă aveți unul cu antet pre-lipit sau doriți să puteți folosi pi pentru altceva, atunci aș sugera să folosiți fire jumper pentru fiecare LED, adică Pi este detașabil. Puteți vedea că odată ce am lipit LED-ul, am pliat picioarele în jos, astfel încât acestea să nu se lipească pe spate.

Pasul 5: Testați LED-urile

Testați LED-urile
Testați LED-urile

Pentru a mă asigura că toate LED-urile funcționează, am rulat un script care trece prin fiecare pin posibil și le aprinde, unul câte unul, care se plasează pe următorul când fac clic pe Enter. Acest lucru mi-a permis să notez ce număr PIN a făcut ce locație, care a venit foarte util.

importați RPi. GPIO ca GPIO

timp de import GPIO.setmode (GPIO. BCM) pentru i în intervalul (0, 28): GPIO.setup (i, GPIO. OUT) pentru i în intervalul (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("That Was:" + str (i)) z = raw_input ("Next?")

În timp ce se întâmpla acest lucru, aș nota pe un fișier text ce pin a făcut ce locație și ce culoare. Trebuie să faceți acest lucru, deoarece este foarte util în pasul următor.

Pasul 6: Cod pentru a porni LED-ul la cerere

Modul în care am făcut acest proiect implică un singur Raspberry Pi Zero W, cu un site de bază care vă permite să activați un pin. Acest lucru a însemnat că Pi 4 principal, care este de obicei pornit și rulează, poate face procesarea, iar apoi micul Pi 0 trebuie doar să pornească un pin, făcând lucrurile puțin mai complicate. Am făcut acest lucru pentru că se potrivește configurării mele și, de asemenea, am simțit că Pi 0 poate fi puțin lent pentru ceea ce vom face mai târziu.

importați RPi. GPIO ca GPIO

timp de import din flask import Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) pentru i în intervalul (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) returnează „Off” @ app.route („/ off / all”) def alloff (): pentru i în intervalul (0, 28): GPIO.output (i, GPIO. LOW) returnează „off” @ app.route ("/ on /") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) returnează „On” dacă _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Modul în care funcționează este că așteaptă url-ul adresei IP a lui pi, apoi o pornire sau o oprire și apoi numărul PIN.

salvați acest cod în directorul principal al Raspberry Pi și denumiți-l „pin_website.py”

Va trebui să setați acest lucru pentru a rula automat, deci pentru a face acest lucru, în tipul de terminal: sudo nano / etc / profile

În partea de jos a acestui fișier, adăugați „python3 pin_website.py &”

„&” Este esențial, deoarece îl face să ruleze în fundal și, prin urmare, permite pornirea să continue

Pasul 7: Cum să primiți locația

Cum să primiți locația
Cum să primiți locația

Utilizând IFTTT, puteți configura un serviciu astfel încât, atunci când telefonul intră într-o anumită locație, să vă poată trimite prin e-mail sau să transmiteți o adresă web sau să vă trimită un mesaj prin telegramă.

Pasul 8: Cum funcționează toate acestea

Configurarea pe care o am este un Server Pi, care găzduiește site-ul meu web, cu redirecționare de porturi și un DNS static utilizând serviciul furnizat de https://freedns.afraid.org/. Multe dintre acestea sunt destul de complexe și trebuie să aveți o înțelegere a redirecționării porturilor, aș putea să vă instruiesc cum să faceți această parte altă dată.

O altă modalitate prin care o puteți face este să utilizați telegrama pentru a trimite mesaje către pi, sau posibil cel mai ușor, este să configurați un cititor de e-mail care să citească e-mailurile și să primească actualizări de locație prin intermediul acestuia.

Nu am încercat robotul Telegram sau un cititor de e-mail, dar există o mulțime de tutoriale acolo care vă vor arăta cum să.

Iată codul meu Flask / Python, care este apoi solicitat de webhooks folosind IFTTT:

din 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 (locație): mum.current_loc (locație) returnează "Mulțumesc pentru actualizare, mamă!" @ app.route ("/ dad / enter /") def da (l): dad.current_loc (l) returnează "Mulțumesc pentru actualizare, tată!" @ app.route ("/ child / enter /") def child_enter (l): me.current_loc (l) returnează "Hey, Me" @ app.route ('/ mum / exit /') def mume (location): mum.offline (locație) returnează "Mulțumesc pentru actualizare, mamă!" @ app.route ("/ dad / exit /") def dade (l): dad.offline (l) returnează "Mulțumesc pentru actualizare, tată!" @ app.route ("/ child / exit /") def child_exit (l): me.offline (l) return "Hey, Me" @ app.route ("/ reset") def refo (): setup () return "Resetați!" if _name_ == '_main_': app.run (debug = Adevărat, gazdă = '0.0.0.0')

și 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:5est') "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, "patru cruci": 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," patru cruci ": 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 &") clasa tată: locs = {"welshpool": 3, "lynclys": 1, "acasă": 23, "shrewsbury": 0, "llanymynech": 6, "patru cruci": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," patru cruci ": 15} f = deschis (" 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," acasă ": 23," shrewsbury ": 0," llanymynech ": 6," patru cruci ": 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 &")

Pasul 9: Construiește-ți propriul din Inspirație din proiectul meu

Deci, știu că pasul anterior va fi foarte greu de înțeles, așa că îl voi lăsa ca arătându-vă cum să faceți harta și voi putea avea un pi zmeură care pornește și oprește LED-urile. Acum trebuie să creați un script python care, folosind IFTTT, vă trimite un e-mail. Apoi, trebuie să găsiți un e-mail care citește o bucată de cod, ceea ce este destul de ușor (google it). Apoi, odată ce ați citit un e-mail și ați găsit locația unui părinte, utilizați declarațiile „if” pentru a găsi care pin să activați.

Pe hartă, o lumină intermitentă înseamnă că tocmai au părăsit zona

Modul de a porni LED-urile pe un alt pi de la python este după cum urmează:

import 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 ")) # aceasta dezactivează pinul numărul 2 răspuns = conn.getresponse () # acesta solicită adresa URL, iar apoi harta pi citește acest lucru și dezactivează pinul numărul 2

Practic, sper să puteți folosi ceea ce am făcut cu harta mea 3D ca inspirație pentru a vă crea propria hartă de urmărire GPS.

Recomandat: