INHOUDSOPGAWE:

GPS -dop 3D -kaart: 9 stappe
GPS -dop 3D -kaart: 9 stappe

Video: GPS -dop 3D -kaart: 9 stappe

Video: GPS -dop 3D -kaart: 9 stappe
Video: Gat 3D tekenen in stappen voor beginners 2024, Julie
Anonim
GPS -dop 3D -kaart
GPS -dop 3D -kaart
GPS -dop 3D -kaart
GPS -dop 3D -kaart

Hierdie projek is 'n 3D -gedrukte 3D -kaart, met paaie, riviere en dorpe, met LED -bakens om die ligging van lede van die gesin aan te dui. Dit kan aandui of 'n kind op skool is, of net die plek van albei ouers. Ons kan dit ook gebruik om te voorspel hoe laat die ouers by die huis kom, sodat aandete op die regte tyd gemaak kan word. Dit is ook net 'n baie goeie projek om te pronk en te vertoon aan familie en vriende.

Ek hoop dat u dit geniet om hierdie instruksies te maak, of dat u dit geniet om uit te vind oor 'n projek wat ek gemaak het

Stap 1: Kry 'n 3D -kaart

Om 'n 3D -kaart van u gebied te kry, het ek 'n aparte instruksie geskryf om u te help om die proses te maak. Die skakel na die instruksies is hier:

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

Stap 2: Die kaart voorberei vir LED -insetsels

Noudat u 'n 3D -kaart met paaie, dorpe en riviere het, moet ons aandui waar 'n persoon op die kaart is. Ek het tweekleurige 3 mm RG-LED's gebruik, want die hoofdoel van die kaart is om aan te toon waar die twee ouers is. Op sekere plekke het ek 'n RGB LED gebruik, sodat ek kon wys waar die oudste kind was. Daar is 'n limiet van 28 penne om op die Raspberry Pi uit te voer, dus kies die liggings van die LED's verstandig. Uiteindelik het ek ongeveer 24 daarvan gebruik, so dit moet goed gaan.

Om PLA te boor, het ek gevind dat 'n gewone houtboor goed werk, en ek het behandel soos ek hout sou behandel.

Op plekke waar die kaart te dik was, sou ek die basislaag uitboor met 'n groot boorpunt, en dan die sigbare bogenoemde laag met die korrekte boorpunt van 3 mm.

Stap 3: Plaas die LED's

Plaas die LED's
Plaas die LED's

Noudat ons gate in die LED's het om in te sit, kan ons dit plak. PVA of Superglue werk goed hiervoor. Maak seker dat hulle met elke LED slegs 'n paar mm aan die sigbare kant uitsteek, want dit lyk effens deurmekaar om die LED's heeltemal uit te steek. Moenie bekommerd wees oor die bene op die rug nie; ons kan dit vou sodra dit gesoldeer is.

Stap 4: Koppel die LED's aan die Raspberry Pi

Ek het die LED's direk aan die Raspberry Pi gesoldeer, maar as u een het met 'n vooraf gesoldeerde kop, of as u die pi vir iets anders wil gebruik, stel ek voor dat u draaddrade vir elke LED gebruik, wat beteken dat die Pi is verwyderbaar. U kan sien dat ek, nadat ek die LED gesoldeer het, die bene platgevou het sodat hulle nie op die rug vasgesteek het nie.

Stap 5: Toets die LED's

Toets die LED's
Toets die LED's

Om seker te maak dat al die LED's werk, het ek 'n script uitgevoer wat deur elke moontlike pen gaan, en dit een vir een aangesteek, wat na die volgende een oorgaan as ek op enter klik. Dit het my in staat gestel om aan te meld watter speldommer die ligging gedoen het, wat baie nuttig was.

voer RPi. GPIO in as GPIO

invoertyd GPIO.setmode (GPIO. BCM) vir i in reeks (0, 28): GPIO.setup (i, GPIO. OUT) vir i in reeks (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?")

Terwyl dit gebeur, sou ek 'n tekslêer noteer watter pen die ligging en watter kleur bevat. U moet dit doen, aangesien dit in die volgende stap baie handig is.

Stap 6: Kode om die LED aan te skakel wanneer dit versoek word

Die manier waarop ek hierdie projek gedoen het, behels een Raspberry Pi Zero W, met 'n basiese webwerf waarmee u 'n speld kan aanskakel. Dit het beteken dat die hoof Pi 4, wat gewoonlik aan en aan die gang is, die verwerking kan doen, en dan hoef die klein Pi 0 net 'n pen aan te skakel, wat dinge effens ingewikkelder maak. Ek het dit gedoen omdat dit by my opset pas, en ek het ook gevoel dat die Pi 0 'n bietjie stadig kan wees vir wat ons later gaan doen.

voer RPi. GPIO in as GPIO

invoer tyd van fles invoer fles, render_template, versoek, jsonify import os app = fles (_ naam_) p = GPIO.setmode (GPIO. BCM) vir i in reeks (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) gee "Off" @app.route ("/off/all") def alloff (): vir i in range (0, 28): GPIO.output (i, GPIO. LOW) return "off" @app.route ("/aan/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) gee "Aan" terug as _name_ == '_main_': app.run (debug = True, host = '0.0. 0,0 ')

Die manier waarop dit werk, wag op die url van die pi se IP -adres en dan op of af en dan die speldnommer.

stoor hierdie kode in die tuisgids van die Raspberry Pi, en noem dit "pin_website.py"

U moet dit instel om outomaties te werk, om dit te doen in die terminale tipe: sudo nano /etc /profile

Voeg onderaan hierdie lêer 'python3 pin_website.py &' by

Die '&' is noodsaaklik, want dit laat dit op die agtergrond loop en laat toe dat die opstart kan voortgaan

Stap 7: Hoe om ligging te ontvang

Hoe om ligging te ontvang
Hoe om ligging te ontvang

Deur IFTTT te gebruik, kan u 'n diens opstel sodat wanneer u die telefoon op 'n sekere plek binnegaan, u 'n e -pos kan stuur, 'n webadres kan ping, of 'n boodskap aan u kan stuur op telegram.

Stap 8: Hoe dit alles werk

Die opstelling wat ek het, is 'n Server Pi, wat my webwerf huisves, met poortaanstuur en 'n statiese DNS met behulp van die diens wat deur https://freedns.afraid.org/ aangebied word. Baie hiervan is taamlik kompleks, en u moet kennis neem van die deurstuur van poort.

'N Ander manier waarop u dit kan doen, is deur telegram te gebruik om boodskappe na die pi te stuur, of moontlik die maklikste, is om 'n e -posleser op te stel wat die e -posse lees en daardeur liggingopdaterings ontvang.

Ek het nie die Telegram -bot of 'n e -posleser probeer nie, maar daar is baie tutoriale wat u sal wys hoe u dit moet doen.

Hier is my Flask / Python -kode wat dan deur webhooks aangevra word met behulp van IFTTT:

vanaf kolf invoer Kolf, render_template, versoek, 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 (ligging): mum.current_loc (plek) terug "Dankie vir die opdatering, mamma!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) gee terug "Dankie vir die opdatering, pa!" @app.route ("/kind/enter/") def child_enter (l): me.current_loc (l) gee terug "Hey, ek" @app.route ('/ma/exit/') def mume (plek): mamma.offline (ligging) terugkeer "Dankie vir die opdatering, mamma!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) gee terug "Dankie vir die opdatering, pa!" @app.route ("/kind/uitgang/") def child_exit (l): me.offline (l) gee terug "Hey, ek" @app.route ("/reset") def redo (): setup () terug "Herstel!" as _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

en map.py:

voer http.client, urllib.request, urllib.parse, urllib.error, base64 in

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:5000') conn. "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 () klas ma: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "vier kruise": 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," vier kruise ": 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 &") klasvader: locs = {"welshpool": 3, "lynclys": 1, "huis": 23, "shrewsbury": 0, "llanymynech": 6, "vier kruise": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," vier kruise ": 15} f = open (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTP -verbinding ('192.168.1.251:5000') konn.reeks 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 crosses ": 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 &") klas my: 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 (kyk 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 &")

Stap 9: Bou u eie uit inspirasie uit my projek

Ek weet dus dat die vorige stap baie moeilik sal wees om te verstaan, en ek sal u hierna laat wys hoe u die kaart kan maak en 'n framboos -pi kan hê wat die LED's aan- en uitskakel. U moet nou 'n python -script skep wat u met behulp van IFTTT e -pos. Dan moet u 'n stuk kode vind wat eenvoudig is (google dit). Sodra u 'n e -pos gelees het en die ligging van 'n ouer gevind het, gebruik 'as' -stellings om te bepaal watter pen u moet aanskakel.

Op die kaart beteken 'n flikkerlig dat hulle pas die gebied verlaat het

Die manier om die LED's op 'n ander pi vanaf python aan te skakel, is soos volg:

voer http.client, urllib.request, urllib.parse, urllib.error, base64 in

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #verander dit met die IP -adres van die framboos pi verbindingsaanvraag ("GET", str ("/off) /2 "))) # hierdie skakel pin nommer 2 reaksie uit = conn.getresponse () # dit versoek die URL, en dan lees die kaart pi dit en skakel pin nommer 2 uit

Ek hoop basies dat u wat ek met my 3D -kaart gedoen het, kan inspireer om u eie GPS -opsporingskaart te maak.

Aanbeveel: