Sadržaj:

3D karta GPS praćenja: 9 koraka
3D karta GPS praćenja: 9 koraka

Video: 3D karta GPS praćenja: 9 koraka

Video: 3D karta GPS praćenja: 9 koraka
Video: SCP ГОРКА ЗАБРАЛА МОЮ ДЕВУШКУ * Зря разрешил ей залезть в горку с туннелем где пропадают люди 2024, Studeni
Anonim
3D karta za GPS praćenje
3D karta za GPS praćenje
3D karta za GPS praćenje
3D karta za GPS praćenje

Ovaj projekt je 3D ispisana 3D karta, s cestama, rijekama i gradovima, sa LED svjetionicima koji pokazuju lokaciju članova obitelji. Može pokazati je li dijete u školi ili samo lokaciju oba roditelja. Također ga možemo koristiti za predviđanje u koje vrijeme će roditelji doći kući, kako bi se večera mogla pripremiti u pravo vrijeme. To je također samo općenito kul projekt za pokazivanje i prikazivanje obitelji i prijateljima.

Nadam se da ćete uživati u izradi ovog Instructable -a ili da ćete uživati u saznanjima o projektu koji sam napravio

Korak 1: Dobivanje 3D karte

Da bih dobio 3D kartu vašeg područja, napisao sam zasebne upute koje će vam pomoći u procesu izrade. Link do instruktora je ovdje:

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

Korak 2: Priprema karte za LED umetke

Sada kada imate 3D kartu s cestama, gradovima i rijekama, potreban nam je način da označimo gdje se neka osoba nalazi na karti. Koristio sam dvobojne 3 mm RG LED diode, jer je glavna svrha karte pokazati gdje se nalaze dva roditelja. Na nekim sam mjestima koristio RGB LED kako bih mogao pokazati gdje je najstarije dijete. Postoji ograničenje od 28 pinova za izlaz na Raspberry Pi, pa pametno birajte lokacije LED dioda. Na kraju sam ih koristio oko 24, pa bi trebao biti dobro.

Za bušenje PLA -e otkrio sam da je normalna svrdla za drvo dobro radila i tretirala sam je kao što bih tretirala drvo.

Na mjestima gdje je karta bila predebela izbušila sam osnovni sloj velikom bušilicom, a zatim vidljivi gornji sloj s ispravnom svrdlom od 3 mm.

Korak 3: Umetnite LED diode

Umetnite LED diode
Umetnite LED diode

Sada kada imamo rupe za LED diode u koje možemo sjediti, možemo ih zalijepiti. PVA ili Superglue za to dobro funkcioniraju, otkrio sam da je PVA trčao oko njega brtveći ga na mjestu, a super ljepilo je također radilo vrlo dobro. Pobrinite se da sa svakom LED diodom na vidljivoj strani strše samo nekoliko mm, jer to što LED diode strše do kraja izgleda pomalo neuredno. Ne brinite za noge na stražnjoj strani, možemo ih preklopiti nakon što su zalemljene.

Korak 4: Spojite LED diode na Raspberry Pi

Izravno sam lemio LED diode na Raspberry Pi, međutim, ako imate onu s prethodno zalemljenim zaglavljem ili želite koristiti pi za nešto drugo, predlažem korištenje žica kratkospojnika za svaku LED, što znači da Pi se može ukloniti. Možete vidjeti da sam, nakon što sam zalemio LED, presavio noge prema dolje tako da se nisu zalijepile na stražnju stranu.

Korak 5: Testirajte LED diode

Testirajte LED diode
Testirajte LED diode

Da bih se uvjerio da sve LED diode rade, pokrenuo sam skriptu koja prolazi kroz svaki mogući pin i pali ih, jednu po jednu, koja prelazi na sljedeću kad pritisnem enter. To mi je omogućilo da zabilježim koji je pin broj radio na kojoj lokaciji, što mi je bilo vrlo korisno.

uvezite RPi. GPIO kao GPIO

vrijeme uvoza GPIO.setmode (GPIO. BCM) za i u rasponu (0, 28): GPIO.setup (i, GPIO. OUT) za i u rasponu (0, 28): GPIO.izlaz (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("To je bilo:" + str (i)) z = raw_input ("Dalje?")

Dok se to događalo, zabilježio bih tekstualnu datoteku koja je oznaka učinila koje mjesto i koju boju. Morate to učiniti jer je vrlo korisno u sljedećem koraku.

Korak 6: Kod za uključivanje LED diode na zahtjev

Način na koji sam napravio ovaj projekt uključuje jednu Raspberry Pi Zero W, s osnovnom web stranicom koja vam omogućuje da uključite pin. To je značilo da glavni Pi 4, koji je obično uključen i radi, može obaviti obradu, a zatim mali Pi 0 samo mora uključiti iglu, što stvari čini malo kompliciranijima. Učinio sam to jer odgovara mojim postavkama, a također sam osjetio da Pi 0 može biti malo spor za ono što ćemo kasnije raditi.

uvezite RPi. GPIO kao GPIO

vrijeme uvoza iz tikvice uvoz Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) za i u rasponu (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 (): za i u rasponu (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 ')

Način na koji ovo funkcionira je da čeka url pi -jeve IP adrese, a zatim uključivanje ili isključivanje, a zatim i pin broj.

spremite ovaj kôd u početni direktorij Raspberry Pi i dajte mu ime "pin_website.py"

Morat ćete postaviti ovo automatsko pokretanje, pa to učinite u vrsti terminala: sudo nano /etc /profile

Pri dnu ove datoteke dodajte "python3 pin_website.py &"

Znak "&" je bitan jer ga pokreće u pozadini i stoga omogućuje nastavak pokretanja

Korak 7: Kako dobiti lokaciju

Kako dobiti lokaciju
Kako dobiti lokaciju

Pomoću IFTTT -a možete postaviti uslugu tako da vam telefon, kad uđe na određeno mjesto, može slati e -poštu ili pingati web adresu ili vam poslati poruku putem telegrama.

Korak 8: Kako sve ovo funkcionira

Postavka koju imam je Server Pi, koji hostira moju web stranicu, s prosljeđivanjem portova i statičkim DNS -om koristeći uslugu koju pruža https://freedns.a fear.org/. Mnogo toga je prilično složeno i morate imati razumijevanje za prosljeđivanje portova. Možda ću drugi put uputiti kako ovaj dio odraditi.

Drugi način na koji to možete učiniti je korištenje telegrama za primanje poruka na pi, ili vjerojatno najjednostavniji, postavljanje čitača e -pošte koji čita e -poruke i putem toga prima ažuriranja lokacije.

Nisam probao Telegram bot ili čitač e -pošte, ali postoji mnogo vodiča koji će vam pokazati kako to učiniti.

Evo mog Flask / Python koda koji tada webhookovi traže pomoću IFTTT -a:

iz flask import Flask, render_template, request, jsonify

import os iz 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 "Hvala na ažuriranju, mama!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) vrati "Hvala na ažuriranju, tata!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) vrati "Hey, Me" @app.route ('/mum/exit/') def mume (lokacija): mum.offline (location) return "Hvala na ažuriranju, mama!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "Hvala na ažuriranju, tata!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, Me" @app.route ("/reset") def redo (): setup () return "Poništi!" if _name_ == '_main_': app.run (ispravljanje pogrešaka = True, host = '0.0.0.0')

i map.py:

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

import ast, json vrijeme uvoza import threading import os params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('freedns.a fear.org') conn.request ("GET", str ("/dynamic/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) response = conn.getresponse () conn = http.client. HTTPConnection ('19:51.1st) "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 () klasa mama: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "četiri križa": 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," četiri križa ": 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 &") klasa tata: locs = {"welshpool": 3, "lynclys": 1, "dom": 23, "shrewsbury": 0, "llanymynech": 6, "četiri križa": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," četiri križa ": 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," dom ": 23," shrewsbury ": 0," llanymynech ": 6," četiri križa ": 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 &") klasa 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 ("DOBI", str ("/on/") + str (gle cs [l])) response = conn.getresponse () mlast_loc = locs [l] def offline (l): globalno 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 &")

Korak 9: Izgradite svoje vlastito nadahnuće na mojem projektu

Tako da znam da će prethodni korak biti jako teško razumljiv, pa ću vam ostaviti da vam pokaže kako napraviti kartu, i moći ću imati malinovo pi koje uključuje i isključuje LED diode. Sada morate stvoriti python skriptu koja vam, koristeći IFTTT, šalje e -poštu. Zatim morate pronaći e -poruku koja čita kôd, što je prilično jednostavno (google to). Nakon što pročitate poruku e -pošte i pronađete lokaciju roditelja, upotrijebite naredbe 'if' da biste pronašli koji pin želite uključiti.

Na karti trepćuće svjetlo znači da su upravo napustili područje

Način uključivanja LED dioda na drugom pi iz pythona je sljedeći:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #promijenite ovo s IP adresom karte maline pi conn.request ("GET", str ("/off /2 ")) # ovo isključuje pin broj 2 response = conn.getresponse () # traži URL, a zatim karta pi čita ovo i isključuje pin 2

U osnovi se nadam da ćete ono što sam učinio sa svojom 3D kartom koristiti kao inspiraciju za izradu vlastite GPS karte za praćenje.

Preporučeni: