Sadržaj:

GPS praćenje 3D karte: 9 koraka
GPS praćenje 3D karte: 9 koraka

Video: GPS praćenje 3D karte: 9 koraka

Video: GPS praćenje 3D karte: 9 koraka
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Juli
Anonim
GPS karta za praćenje GPS
GPS karta za praćenje GPS
GPS karta za praćenje GPS
GPS karta za praćenje GPS

Ovaj projekat je 3D štampana 3D mapa, sa putevima, rijekama i gradovima, sa LED svjetionicima koji pokazuju lokaciju članova porodice. Može pokazati da li je dijete u školi ili samo lokaciju oba roditelja. Možemo ga koristiti i za predviđanje kada će roditelji doći kući, tako da se večera može pripremiti u pravo vrijeme. To je također samo općenito kul projekt za pokazivanje i prikazivanje porodici 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: Nabavite 3D mapu

Da bih dobio 3D kartu vašeg područja, napisao sam zasebnu instrukciju koja će vam pomoći u procesu izrade. Link do uputstva 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 određenim mjestima koristio sam 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 24, pa bi trebao biti u redu.

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 dobro funkcionira za to, otkrio sam da je PVA trčao oko njega zabrtvljujući ga na mjestu, a super ljepilo je također radilo vrlo dobro. Uvjerite se da sa svakom LED diodom na vidljivoj strani štrče samo nekoliko mm, jer ako LED diode strše do kraja izgleda pomalo neuredno. Ne brinite o nogama 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 da koristite kratkospojnike za svaku LED, što znači da Pi se može ukloniti. Možete vidjeti da sam, nakon što sam zalemio LED, preklopio noge prema dolje tako da se nisu lijepile 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 kada pritisnem enter. To mi je omogućilo da zabilježim koji je pin broj radio na kojoj lokaciji, što je bilo vrlo korisno.

uvezite RPi. GPIO kao GPIO

vreme uvoza GPIO.setmode (GPIO. BCM) za i u opsegu (0, 28): GPIO.setup (i, GPIO. OUT) za i u opsegu (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 odredila koju lokaciju 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 projekat uključuje jedan Raspberry Pi Zero W, sa osnovnom web lokacijom koja vam omogućava 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 pin, š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 bočice 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.

sačuvajte ovaj kôd u matičnom direktoriju Raspberry Pi i dajte mu ime "pin_website.py"

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

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

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

Korak 7: Kako dobiti lokaciju

Kako dobiti lokaciju
Kako dobiti lokaciju

Pomoću IFTTT -a možete postaviti uslugu tako da vam, kada telefon uđe na određenu lokaciju, može slati e -poštu ili pingati web adresu ili vam poslati poruku na telegramu.

Korak 8: Kako sve ovo funkcionira

Podešavanje koje imam je Server Pi, na kojem se nalazi moja web stranica, 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 da obavite ovaj dio.

Drugi način na koji to možete učiniti je korištenje telegrama za primanje poruka na pi, ili možda 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 webhooks -i traže pomoću IFTTT -a:

iz flask import Flask, render_template, request, jsonify

import os iz datetime import datetime sa karte 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) vrati "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 "Resetovati!" if _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

i map.py:

import 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")) odgovor = conn.getresponse () conn = http.client. HTTPConnection ('192.168) "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): globalno dlast_loc locs = {"welshpool": 3, "lynclys ": 1," home ": 23," shrewsbury ": 0," llanymynech ": 6," four crosssts ": 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 ("GET", str ("/on/") + str (gle 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 &")

Korak 9: Izgradite svoje iz inspiracije na mom projektu

Tako da znam da će prethodni korak biti jako teško razumljiv, pa ću vam ostaviti da vam pokaže kako napraviti mapu i moći ćete 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). Zatim, nakon što pročitate e -poruku 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:

import 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 () # ovo 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čuje se: