Съдържание:

GPS проследяване на 3D карта: 9 стъпки
GPS проследяване на 3D карта: 9 стъпки

Видео: GPS проследяване на 3D карта: 9 стъпки

Видео: GPS проследяване на 3D карта: 9 стъпки
Видео: Как работает GPS | РАЗБОР 2024, Юли
Anonim
GPS проследяване на 3D карта
GPS проследяване на 3D карта
GPS проследяване на 3D карта
GPS проследяване на 3D карта

Този проект е 3D отпечатана 3D карта, с пътища, реки и градове, с LED маяци, които показват местоположението на членовете на семейството. Той може да покаже дали детето е в училище или не, или само местоположението на двамата родители. Можем също да го използваме, за да предскажем кога родителите ще се приберат у дома, така че вечерята да може да се приготви за точното време. Това също е просто като цяло страхотен проект, който да се покаже и да се покаже на семейството и приятелите.

Надявам се да ви хареса да направите този Instructable или да се насладите на научаването за проект, който направих

Стъпка 1: Получаване на 3D карта

За да получите 3D карта на вашия район, написах отделна инструкция, която да ви помогне да ви преведе през процеса на създаване на такава. Връзката към инструктажа е тук:

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

Стъпка 2: Подготовка на картата за LED вложки

Сега, когато имате 3D карта с пътища, градове и реки, се нуждаем от начин да посочим къде се намира човек на картата. Използвах двуцветни 3 мм RG светодиоди, защото основната цел на картата е да покаже къде са двамата родители. На определени места използвах RGB LED, за да мога да покажа къде е най -голямото дете. Има ограничение от 28 пина за извеждане на Raspberry Pi, така че изберете местоположенията на светодиодите разумно. В крайна сметка използвах около 24 от тях, така че трябва да сте добре.

За да пробия PLA, открих, че нормалната бормашина за дърво работи добре и се отнасях така, както бих третирал дървото.

На места, където картата беше твърде дебела, бих пробил основния слой с голяма бормашина, а след това видимия горния слой с правилната 3 мм бормашина.

Стъпка 3: Поставете светодиодите

Поставете светодиодите
Поставете светодиодите

Сега, когато имаме дупки, в които да седят светодиодите, можем да ги залепим. PVA или Superglue работи добре за това, открих, че PVA се движи около него, запечатвайки го на място, а суперлепилото също работи много добре. Уверете се, че при всеки светодиод те стърчат само на видимата страна с няколко мм, защото това, че светодиодите стърчат по целия път, изглежда малко объркано. Не се притеснявайте за краката на гърба, можем да ги сгънем, след като са запоени.

Стъпка 4: Свържете светодиодите към Raspberry Pi

Директно запоявах светодиодите към Raspberry Pi, но ако имате такъв с предварително запоена заглавка или искате да можете да използвате pi за нещо друго, тогава бих предложил да използвате джъмперни проводници за всеки светодиод, което означава, че Pi може да се сваля. Можете да видите, че след като запоя LED, сгънах краката надолу, така че да не залепват по гърба.

Стъпка 5: Тествайте светодиодите

Тествайте светодиодите
Тествайте светодиодите

За да се уверя, че всички светодиоди работят, пуснах скрипт, който преминава през всеки възможен щифт и ги осветява, един по един, който преминава към следващия, когато щракна Enter. Това ми позволи да отбележа кой номер на пина е направил кое място, което се оказа много полезно.

импортирайте RPi. GPIO като GPIO

време за импортиране GPIO.setmode (GPIO. BCM) за i в обхват (0, 28): GPIO.setup (i, GPIO. OUT) за i в обхват (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) print ("Това беше:" + str (i)) z = raw_input ("Следващ?")

Докато това се случваше, ще отбележа текстов файл кой щифт е направил кое място и кой цвят. Трябва да направите това, тъй като е много полезно в следващата стъпка.

Стъпка 6: Код за включване на светодиода при поискване

Начинът, по който направих този проект, включва един Raspberry Pi Zero W, с основен уебсайт, който ви позволява да включите щифт. Това означаваше, че основният Pi 4, който обикновено е включен и работи, може да извърши обработката, а след това малкият Pi 0 трябва само да включи щифт, което прави нещата малко по -сложни. Направих това, защото отговаря на моята настройка, а също така почувствах, че Pi 0 може да бъде малко бавен за това, което ще правим по -късно.

импортирайте RPi. GPIO като GPIO

време за импортиране от колба за импортиране Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) за i в обхват (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) връщане на "Off" @app.route ("/off/all") def alloff (): за i в обхват (0, 28): GPIO.output (i, GPIO. LOW) връщане "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 ')

Начинът, по който това работи, е, че чака URL адреса на IP адреса на pi и след това включване или изключване и след това номера на пина.

запишете този код в началната директория на Raspberry Pi и го наречете "pin_website.py"

Ще трябва да настроите това да се изпълнява автоматично, така че за да направите това, в типа терминал: sudo nano /etc /profile

В долната част на този файл добавете „python3 pin_website.py &“

"&" Е от съществено значение, тъй като го кара да работи във фонов режим и следователно позволява зареждането да продължи

Стъпка 7: Как да получите местоположение

Как да получите местоположение
Как да получите местоположение

Използвайки IFTTT, можете да настроите услуга, така че когато телефонът влезе в определено местоположение, той да ви изпраща имейл или да пингва уеб адрес или да ви изпраща съобщение в телеграма.

Стъпка 8: Как работи всичко това

Настройката, която имам, е Server Pi, хостващ моя уебсайт, с пренасочване на портове и статичен DNS, използващ услугата, предоставена от https://freedns.a fear.org/. Много от това е доста сложно и трябва да имате разбиране за пренасочването на портове, може да направя инструкции как да направя тази част друг път.

Друг начин, по който можете да го направите, е да използвате телеграма за получаване на съобщения до pi, или може би най -лесният, е да настроите четец на имейли, който чете имейлите и получава актуализации за местоположението чрез това.

Не съм пробвал бота на Telegram или четеца на имейли, но има много уроци, които ще ви покажат как да го направите.

Ето моя Flask / Python код, който след това се иска от webhooks, използвайки IFTTT:

от колба за импортиране на колба, render_template, заявка, jsonify

import os от datetime импортиране datetime от карта 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 "Благодаря за актуализацията, мамо!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) върнете "Благодаря за актуализацията, татко!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) връща "Hey, Me" @app.route ('/mum/exit/') def mume (location): mum.offline (location) return "Благодаря за актуализацията, мамо!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) върнете "Благодаря за актуализацията, татко!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) връщане "Hey, Me" @app.route ("/reset") def redo (): setup () return "Нулиране!" if _name_ == '_main_': app.run (отстраняване на грешки = вярно, хост = '0.0.0.0')

и map.py:

внос http.client, urllib.request, urllib.parse, urllib.error, base64

импортиране ast, json време за импортиране импортиране на нишки импорт 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 ('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 () клас майка: def current_loc (l): глобална last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "дома": 9, "shrewsbury": 11, "llanymynech": 13, "четири кръста": 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," четири кръста ": 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, "четири кръста": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," четири кръста ": 15} f = отворен (" 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," home ": 23," shrewsbury ": 0," llanymynech ": 6," four crossses ": 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 = отворен ("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 = отворен ("pinm", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

Стъпка 9: Изградете своя собствена от вдъхновение от моя проект

Така че знам, че предишната стъпка ще бъде много трудна за разбиране, затова ще я оставя да ви покаже как да направите картата и да можете да имате малиново пи, което включва и изключва светодиодите. Сега трябва да създадете скрипт на python, който, използвайки IFTTT, ви изпраща имейл. След това трябва да намерите кода за четене на имейл, който е доста лесен (google го). След това, след като прочетете имейл и намерите местоположението на родител, използвайте „if“, за да намерите кой щифт да включите.

На картата мигаща светлина означава, че току -що са напуснали района

Начинът за включване на светодиодите на друго пи от python е както следва:

внос http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #променете това с IP адреса на картата на raspberry conn.request ("GET", str ("/off /2 ")) # това изключва пин номер 2 response = conn.getresponse () # това изисква URL адреса, след което картата pi чете това и изключва пин номер 2

По принцип се надявам, че можете да използвате това, което направих с моята 3D карта като вдъхновение, за да направите своя собствена карта за проследяване на GPS.

Препоръчано: