Բովանդակություն:

GPS հետևող 3D քարտեզ ՝ 9 քայլ
GPS հետևող 3D քարտեզ ՝ 9 քայլ

Video: GPS հետևող 3D քարտեզ ՝ 9 քայլ

Video: GPS հետևող 3D քարտեզ ՝ 9 քայլ
Video: 50 Ultimate Excel- ի հուշումներ և հնարքներ 2020 թվականի համար 2024, Նոյեմբեր
Anonim
GPS հետևող 3D քարտեզ
GPS հետևող 3D քարտեզ
GPS հետևող 3D քարտեզ
GPS հետևող 3D քարտեզ

Այս նախագիծը եռաչափ տպագրված 3D քարտեզ է ՝ ճանապարհներով, գետերով և քաղաքներով, LED փարոսներով ՝ ընտանիքի անդամների գտնվելու վայրը ցույց տալու համար: Այն կարող է ցույց տալ, թե երեխան դպրոցում է, թե ոչ, կամ պարզապես երկու ծնողների գտնվելու վայրը: Մենք կարող ենք օգտագործել այն նաև կանխատեսելու համար, թե որ ժամին են ծնողները տուն գալիս, որպեսզի ընթրիքը պատրաստվի ճիշտ ժամանակին: Դա նաև պարզապես ընդհանրապես հիանալի նախագիծ է ՝ ցուցադրելու և ցուցադրելու ընտանիքին և ընկերներին:

Հուսով եմ, որ ձեզ դուր կգա այս հրահանգը դարձնելը, կամ իմ կայացրած նախագծի մասին տեղեկանալը

Քայլ 1: Ստացեք 3D քարտեզ

Ձեր տարածքի 3D քարտեզ ստանալու համար ես գրել եմ առանձին հրահանգ, որը կօգնի ձեզ ուղղորդել այն պատրաստելու գործընթացում: Ուսուցողականի հղումն այստեղ է.

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

Քայլ 2. Քարտեզի պատրաստում LED ներդիրների համար

Այժմ, երբ դուք ունեք 3D քարտեզ ՝ ճանապարհներով, քաղաքներով և գետերով, մեզ պետք է մի միջոց ՝ նշելու, թե որտեղ է գտնվում մարդը քարտեզի վրա: Ես օգտագործեցի երկգույն 3 մմ RG LED- ներ, քանի որ քարտեզի հիմնական նպատակն է ցույց տալ, թե որտեղ են երկու ծնողները: Որոշ տեղերում ես օգտագործել եմ RGB LED, որպեսզի թույլ տամ ցույց տալ, թե որտեղ է եղել ամենամեծ երեխան: Raspberry Pi- ի թողարկման համար կա 28 կապի սահմանափակում, այնպես որ խելամտորեն ընտրեք LED- ների գտնվելու վայրը: Ես վերջացրեցի դրանցից շուրջ 24 -ի օգտագործումը, այնպես որ դուք պետք է լավ լինեք:

PLA հորատելու համար ես գտա, որ սովորական փայտյա հորատիչը լավ է աշխատել, և ես վերաբերվեցի այնպես, ինչպես փայտին:

Այն վայրերում, որտեղ քարտեզը չափազանց հաստ էր, ես խորը հորատում էի հիմնական շերտով, այնուհետև վերևի տեսանելի շերտը `ճիշտ 3 մմ տրամագծով:

Քայլ 3: Տեղադրեք LED- ները

Տեղադրեք LED- ները
Տեղադրեք LED- ները

Այժմ, երբ մենք ունենք LED- ների նստելու անցքեր, կարող ենք դրանք սոսնձել: PVA- ն կամ Superglue- ը լավ են աշխատում դրա համար, ես գտա, որ PVA- ն դրա շուրջը պտտվում է ՝ այն փակելով տեղում, և գերծաղիկը նույնպես շատ լավ է աշխատում: Համոզվեք, որ յուրաքանչյուր LED- ով դրանք մի քանի մմ -ով մնում են միայն տեսանելի կողմում, որովհետև LED- ների առկայությունը մինչև վերջ մի փոքր խառնաշփոթ է թվում: Մի անհանգստացեք հետևի ոտքերի համար, դրանք կարող ենք ծալել, երբ դրանք կպչեն:

Քայլ 4. LED- ները միացրեք Raspberry Pi- ին

Ես ուղղակիորեն LED- ները կպցրեցի Raspberry Pi- ին, այնուամենայնիվ, եթե ունեք նախապես զոդված վերնագրով մեկը, կամ ցանկանում եք կարողանալ օգտագործել pi- ն այլ բանի համար, ապա ես կառաջարկեի օգտագործել յուրաքանչյուր LED- ի համար jumper լարերը, այսինքն ` Pi- ն հեռացվող է: Դուք կարող եք տեսնել, որ LED- ը միացնելուց հետո ես ոտքերը ծալեցի ներքև, որպեսզի դրանք չկպչեն մեջքին:

Քայլ 5: Փորձարկեք LED- ները

Փորձարկեք LED- ները
Փորձարկեք LED- ները

Համոզված լինելու համար, որ բոլոր LED- ները աշխատում են, ես գործարկեցի մի սցենար, որը անցնում է յուրաքանչյուր հնարավոր քորոցով և դրանք լուսավորում է մեկ առ մեկ, որը մյուսին անցնում է, երբ սեղմում եմ Enter: Սա ինձ թույլ տվեց նշելու, թե որ քորոցն է որ վայրը կատարել, որը շատ օգտակար է:

ներմուծեք RPi. GPIO- ն որպես GPIO

ներմուծման ժամանակ time.sleep (0.3) GPIO.output (i, GPIO. LOW) տպագիր («Դա էր.» + str (i)) z = raw_input («Հաջորդ»)

Մինչ դա տեղի էր ունենում, ես նշում էի տեքստային ֆայլի վրա, թե որ փինն է որ վայրը և որ գույնը: Դուք պետք է դա անեք, քանի որ դա շատ օգտակար է հաջորդ քայլին:

Քայլ 6. Կոդ `պահանջվող դեպքում LED- ը միացնելու համար

Այս նախագիծը կատարելու ձևը ներառում է մեկ Raspberry Pi Zero W- ը ՝ հիմնական կայքով, որը թույլ է տալիս միացնել քորոց: Սա նշանակում էր, որ հիմնական Pi 4 -ը, որը սովորաբար միացված է և աշխատում է, կարող է կատարել վերամշակում, այնուհետև փոքրիկ Pi 0 -ն մնում է միայն միացնել քորոցը ՝ ամեն ինչ մի փոքր ավելի բարդացնելով: Ես դա արեցի, քանի որ այն համապատասխանում է իմ կարգավորմանը և նաև զգացի, որ Pi 0 -ը կարող է մի փոքր դանդաղ լինել այն բանի համար, ինչ մենք հետագայում կանենք:

ներմուծեք RPi. GPIO- ն որպես GPIO

ներմուծման ժամանակը տափաշիշից ներմուծում Ֆլասկ, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) i in range (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) վերադարձնել «Անջատված» @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) վերադարձնել «On», եթե _name_ == '_main_': app.run (debug = True, host = '0.0. 0.0 ')

Ինչպես է դա աշխատում, այն սպասում է pi- ի IP հասցեի url- ին, այնուհետև `միացված կամ անջատված, այնուհետև ՝ PIN համարին:

պահպանեք այս ծածկագիրը Raspberry Pi- ի տնային գրացուցակում և անվանեք այն «pin_website.py»

Դուք պետք է սահմանեք, որ այն ինքնաբերաբար գործի, այնպես որ դա անեք, տերմինալի տեսակով ՝ sudo nano /etc /profile

Այս ֆայլի ներքևում ավելացրեք "python3 pin_website.py &"

«&» -Ն էական է, քանի որ այն ստիպում է աշխատել հետին պլանում և, հետևաբար, թույլ է տալիս շարունակել բեռնախցիկը

Քայլ 7: Ինչպես ստանալ գտնվելու վայրը

Ինչպես ստանալ գտնվելու վայրը
Ինչպես ստանալ գտնվելու վայրը

IFTTT- ի միջոցով կարող եք կարգավորել ծառայությունը, որպեսզի երբ հեռախոսը մտնի որոշակի վայր, կարողանա ձեզ էլ.

Քայլ 8: Ինչպես է աշխատում այս ամենը

Կարգավորումը, որը ես ունեմ, Server Pi- ն է, որը տեղադրում է իմ կայքը ՝ նավահանգստի փոխանցմամբ և ստատիկ DNS- ով ՝ օգտագործելով https://freedns.afraid.org/ ծառայությունը: Դրանցից շատերը բավականին բարդ են, և դուք պետք է պատկերացում ունենաք նավահանգստի փոխանցման մասին, ես գուցե ուսանելի դարձնեմ, թե ինչպես դա անել մեկ այլ անգամ:

Մեկ այլ եղանակ, որի միջոցով կարող եք դա անել, այն է, որ օգտագործեք հեռագիրը pi- ին հաղորդագրություններ ստանալու համար, կամ, հավանաբար, ամենահեշտը, դա էլ. Ընթերցող ստեղծելն է, որը կկարդա նամակները և դրա միջոցով կստանա տեղադրության թարմացումները:

Ես չեմ փորձել Telegram բոտը կամ էլփոստի ընթերցողը, բայց այնտեղ կան բազմաթիվ ձեռնարկներ, որոնք ցույց կտան ձեզ, թե ինչպես դա անել:

Ահա իմ Flask / Python ծածկագիրը, որն այնուհետև պահանջվում է վեբհուքերի կողմից ՝ օգտագործելով IFTTT ՝

տափաշիշից ներմուծում Ֆլասկ, render_template, request, jsonify

ներմուծել տվյալներ ժամանակից ներմուծել տվյալներ քարտեզից /') def mu (գտնվելու վայրը). mum.current_loc (գտնվելու վայրը) վերադարձնել «Շնորհակալություն թարմացման համար, մայրիկ»: @app.route ("/dad/enter/") def da (l): dad.current_loc (l) return "Շնորհակալություն թարմացման համար, հայրիկ": @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) վերադարձնել «Hey, Me» @app.route ('/mum/exit/') def mume (location): mum.offline (գտնվելու վայրը) վերադարձ «Շնորհակալություն թարմացման համար, մայրիկ»: @app.route ("/հայր/ելք/") 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 «Վերակայե՞լ»: եթե _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

և map.py:

ներմուծել http.client, urllib.request, urllib.parse, urllib.error, base64

import ast, json import time import 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') կոն. "GET", str ("/off/all")) response = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = բաց («pind», «w») f. գրել (str (-1)) f.close () f = open («pinm», «w») f.write (str (-1)) f.close () դասի մայրիկ ՝ def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, «չորս խաչ» ՝ 18, «llandrinio» ՝ 25, «welshpool» ՝ 27} f = բաց («pin», «w») f.write (str (-1)) f.close () time: քուն (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (last_loc)) respond = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/on/") + str (locs [l])) respond = 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.quest ("GET", str (" /անջատված/") + փող (last_loc)) պատասխան = conn.getresponse () f = բաց (" pin "," w ") f.write (str (locs [l])) f.close () os.system («python3 flash.py &") դասի հայր `locs = {" welshpool ": 3," lynclys ": 1," home ": 23," shrewsbury ": 0," llanymynech ": 6," four crosses ": 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 = բաց (" փին "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') կոնն. Պահանջներ t ("GET", str ("/off/") + str (dlast_loc)) respond = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.quest ("GET", str ("/on/") + str (locs [l])) respond = conn.getresponse () dlast_loc = locs [l] def offline (l): global dlast_loc locs = {"welshpool": 3, "lynclys ": 1," տուն "` 23, "shrewsbury": 0, "llanymynech": 6, "չորս խաչ" `15," llandrinio ": 10} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (dlast_loc)) respond = conn.getresponse () f = open ("pind", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") դաս 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)) respond = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') կոնտ. ("GET", str ("/on/") + str (lo cs [l])) respond = conn.getresponse () mlast_loc = locs [l] անջատել անցանց (l). գլոբալ dlast_loc locs = {"տուն" ՝ 22, «դպրոց» ՝ 2, «oswestry» ՝ 14} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (mlast_loc)) respond = conn.getresponse () f = open ("pinm", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

Քայլ 9. Կառուցեք ձեր սեփականը իմ նախագծից ներշնչումից

Այսպիսով, ես գիտեմ, որ նախորդ քայլը շատ դժվար կլինի հասկանալ, ուստի ես դա կթողնեմ ՝ ցույց տալով ձեզ, թե ինչպես պատրաստել քարտեզը և կկարողանամ ունենալ ազնվամորի պի, որը միացնում և անջատում է LED- ները: Այժմ դուք պետք է ստեղծեք պիթոնի սցենար, որը IFTTT- ի միջոցով ձեզ էլ. Այնուհետև պետք է գտնել էլ.փոստի ծածկագիր կարդալու կտոր, որը բավականին հեշտ է (google it): Այնուհետև նամակ կարդալուց և ծնողի գտնվելու վայրը գտնելուց, օգտագործեք «եթե» արտահայտությունները ՝ գտնելու համար, թե որ կապը միացնել:

Քարտեզի վրա առկայծող լույսը նշանակում է, որ նրանք նոր են հեռացել տարածքից

Պիթոնից մեկ այլ pi- ի վրա LED- ները միացնելու եղանակը հետևյալն է.

ներմուծել http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #փոխեք սա ազնվամորի պիի քարտեզի IP հասցեի հետ conn.request ("GET", str ("/off /2 ")) # սա անջատում է 2 համարի պատասխանը պատասխան = conn.getresponse () # սա պահանջում է URL- ը, այնուհետև քարտեզը pi- ն կարդում է սա և անջատում 2 -րդ քորոցը

Հիմնականում, ես հույս ունեմ, որ դուք կարող եք օգտագործել այն, ինչ ես արել եմ իմ 3D քարտեզի հետ որպես ոգեշնչում `ձեր սեփական GPS հետևման քարտեզը կազմելու համար:

Խորհուրդ ենք տալիս: