Cuprins:
- Pasul 1: Obținerea unei hărți 3D
- Pasul 2: Pregătirea hărții pentru inserțiile LED
- Pasul 3: Introduceți LED-urile
- Pasul 4: Conectați LED-urile la Raspberry Pi
- Pasul 5: Testați LED-urile
- Pasul 6: Cod pentru a porni LED-ul la cerere
- Pasul 7: Cum să primiți locația
- Pasul 8: Cum funcționează toate acestea
- Pasul 9: Construiește-ți propriul din Inspirație din proiectul meu
Video: Harta 3D de urmărire GPS: 9 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:42
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
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
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
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:
Introducere - Transformați un Raspberry Pi într-un server de urmărire GPS: 12 pași
Introducere - Transformați un Raspberry Pi într-un server de urmărire GPS: În acest ghid vă voi arăta cum să instalați software-ul de urmărire GPS Traccar pe un Raspberry Pi care va primi date de pe dispozitive compatibile pe internet, înregistrându-și pozițiile pe o hartă în timp real urmărirea și, de asemenea, urmărirea redării
ATtiny85 Urmărire și programare urmărire activități vibrante purtabile ATtiny85 cu Arduino Uno: 4 pași (cu imagini)
ATtiny85 Ceas și programare de urmărire a activității vibrante purtabile ATtiny85 Cu Arduino Uno: Cum să faci ceasul de urmărire a activității purtabil? Acesta este un gadget portabil conceput pentru a vibra atunci când detectează stagnarea. Îți petreci cea mai mare parte a timpului pe computer ca mine? Stai ore în șir fără să-ți dai seama? Atunci acest dispozitiv este f
Urmărire și urmărire pentru magazine mici: 9 pași (cu imagini)
Urmărire și urmărire pentru magazine mici: Acesta este un sistem creat pentru magazinele mici care se presupune că se montează pe biciclete electrice sau scutere electronice pentru livrări la distanță scurtă, de exemplu o brutărie care dorește să livreze produse de patiserie. Ce înseamnă urmărirea și urmărirea? Urmărirea și urmărirea este un sistem utilizat de ca
Navigați robotul cu senzori de pantofi, fără GPS, fără hartă: 13 pași (cu imagini)
Navigați robotul cu senzori de pantofi, fără GPS, fără hartă: robotul se deplasează într-o cale pre-programată și transmite (prin bluetooth) informațiile sale reale de mișcare către un telefon pentru urmărire în timp real. Arduino este pre-programat cu cale și oblu este utilizat pentru detectarea mișcării robotului. oblu transmite mișcarea pentru
Cum să conectați DeLorme Earthmate GPS LT-20 la Google Earth pentru o hartă GPS excelentă de urmărire .: 5 pași
Cum să conectați DeLorme Earthmate GPS LT-20 la Google Earth pentru o hartă GPS excelentă de urmărire .: Vă voi arăta cum să conectați un dispozitiv GPS la popularul program Google Earth, fără a utiliza Google Earth Plus. Nu am un buget mare, așa că pot garanta că acest lucru va fi cât se poate de ieftin