विषयसूची:

जीपीएस ट्रैकिंग 3डी मैप: 9 कदम
जीपीएस ट्रैकिंग 3डी मैप: 9 कदम

वीडियो: जीपीएस ट्रैकिंग 3डी मैप: 9 कदम

वीडियो: जीपीएस ट्रैकिंग 3डी मैप: 9 कदम
वीडियो: What Is GPS In Hindi | How GPS Works In Hindi 2024, जुलाई
Anonim
जीपीएस ट्रैकिंग 3 डी मानचित्र
जीपीएस ट्रैकिंग 3 डी मानचित्र
जीपीएस ट्रैकिंग 3 डी मानचित्र
जीपीएस ट्रैकिंग 3 डी मानचित्र

यह परियोजना एक 3डी प्रिंटेड 3डी नक्शा है, जिसमें सड़कें, नदियां और कस्बे हैं, जिसमें परिवार के सदस्यों के स्थान को दिखाने के लिए एलईडी बीकन हैं। यह दिखा सकता है कि बच्चा स्कूल में है या नहीं, या सिर्फ माता-पिता दोनों का स्थान है। हम इसका उपयोग यह अनुमान लगाने के लिए भी कर सकते हैं कि माता-पिता किस समय घर आएंगे, ताकि सही समय पर रात का खाना बनाया जा सके। यह परिवार और दोस्तों को दिखाने और प्रदर्शित करने के लिए आम तौर पर एक अच्छी परियोजना है।

मुझे आशा है कि आपको यह निर्देश योग्य बनाने में मज़ा आया होगा, या मेरे द्वारा बनाई गई परियोजना के बारे में जानने में मज़ा आएगा

चरण 1: 3D मानचित्र प्राप्त करना

आपके क्षेत्र का 3डी नक्शा प्राप्त करने के लिए, मैंने एक अलग निर्देश लिखा है जो आपको एक बनाने की प्रक्रिया के माध्यम से मार्गदर्शन करने में मदद करेगा। निर्देशयोग्य का लिंक यहाँ है:

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

चरण 2: एलईडी इंसर्ट के लिए मानचित्र तैयार करना

अब जब आपके पास सड़कों, कस्बों और नदियों के साथ एक 3D नक्शा है, तो हमें यह इंगित करने का एक तरीका चाहिए कि कोई व्यक्ति मानचित्र पर कहां है। मैंने द्वि-रंग 3 मिमी आरजी एलईडी का उपयोग किया, क्योंकि मानचित्र का मुख्य उद्देश्य यह दिखाना है कि दो माता-पिता कहां हैं। कुछ जगहों पर मैंने आरजीबी एलईडी का इस्तेमाल किया, ताकि मुझे यह दिखाने की अनुमति मिल सके कि सबसे बड़ा बच्चा कहां है। रास्पबेरी पाई पर आउटपुट के लिए 28 पिन की सीमा है, इसलिए एलईडी के स्थानों को बुद्धिमानी से चुनें। मैंने उनमें से लगभग 24 का उपयोग किया है, इसलिए आपको ठीक होना चाहिए।

पीएलए को ड्रिल करने के लिए, मैंने पाया कि एक सामान्य लकड़ी की ड्रिल बिट ने अच्छी तरह से काम किया है, और मैंने इलाज किया है जैसे मैं लकड़ी का इलाज करूंगा।

उन जगहों पर, जहां नक्शा बहुत मोटा था, मैं आधार परत को एक बड़े ड्रिल बिट के साथ ड्रिल करता था, और फिर ऊपर दिखाई देने वाली परत को सही 3 मिमी ड्रिल बिट के साथ ड्रिल करता था।

चरण 3: एल ई डी डालें

एल ई डी डालें
एल ई डी डालें

अब जब हमारे पास एलईडी के बैठने के लिए छेद हैं, तो हम उन्हें गोंद कर सकते हैं। पीवीए या सुपरग्लू इसके लिए अच्छी तरह से काम करता है, मैंने पाया कि पीवीए इसके चारों ओर इसे सील कर रहा था, और सुपरग्लू ने भी बहुत अच्छा काम किया। सुनिश्चित करें कि प्रत्येक एलईडी के साथ, वे केवल कुछ मिमी द्वारा दृश्यमान पक्ष पर चिपके रहते हैं, क्योंकि एलईडी के सभी तरह से चिपके रहने से थोड़ा गड़बड़ दिखता है। पीठ पर पैरों के बारे में चिंता न करें, एक बार टांका लगाने के बाद हम इन्हें मोड़ सकते हैं।

चरण 4: एल ई डी को रास्पबेरी पाई से कनेक्ट करें

मैंने सीधे एल ई डी को रास्पबेरी पाई में मिलाया, हालाँकि, यदि आपके पास प्री-सोल्डर हेडर वाला एक है, या आप किसी और चीज़ के लिए पाई का उपयोग करने में सक्षम होना चाहते हैं, तो मैं प्रत्येक एलईडी के लिए जम्पर तारों का उपयोग करने का सुझाव दूंगा, जिसका अर्थ है कि पाई हटाने योग्य है। आप देख सकते हैं कि एक बार जब मैंने एलईडी को टांका लगाया, तो मैंने पैरों को नीचे मोड़ दिया ताकि वे पीठ पर न चिपके।

चरण 5: एल ई डी का परीक्षण करें

एलईडी का परीक्षण करें
एलईडी का परीक्षण करें

यह सुनिश्चित करने के लिए कि सभी एल ई डी काम कर रहे हैं, मैंने एक स्क्रिप्ट चलाई जो प्रत्येक संभावित पिन के माध्यम से जाती है, और उन्हें एक बार में रोशनी देती है, जो कि, जब मैं एंटर पर क्लिक करता हूं, तो अगले एक पर होता है। इसने मुझे यह नोट करने की अनुमति दी कि किस पिन नंबर ने किस स्थान पर काम किया, जो बहुत उपयोगी था।

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) प्रिंट ("वह था:" + str (i)) z = raw_input ("अगला?")

जब यह हो रहा था, मैं एक टेक्स्ट फ़ाइल पर नोट करूंगा कि किस पिन ने किस स्थान और किस रंग को किया। आपको यह करने की आवश्यकता है, क्योंकि यह अगले चरण में बहुत उपयोगी है।

चरण 6: अनुरोध किए जाने पर एलईडी चालू करने के लिए कोड

जिस तरह से मैंने इस परियोजना को किया है, उसमें एक रास्पबेरी पाई ज़ीरो डब्ल्यू शामिल है, जिसमें एक मूल वेबसाइट है जो आपको एक पिन चालू करने की अनुमति देती है। इसका मतलब यह था कि मुख्य पीआई 4, जो आमतौर पर चालू और चल रहा है, प्रसंस्करण कर सकता है, और फिर छोटे पीआई 0 को केवल एक पिन चालू करना होता है, जिससे चीजें थोड़ी अधिक जटिल हो जाती हैं। मैंने ऐसा इसलिए किया क्योंकि यह मेरे सेटअप के अनुकूल है, और मुझे यह भी लगा कि बाद में हम जो करेंगे, उसके लिए Pi 0 थोड़ा धीमा हो सकता है।

RPI. GPIO को GPIO के रूप में आयात करें

फ्लास्क आयात फ्लास्क से आयात समय, रेंडर_टेम्पलेट, अनुरोध, jsonify आयात ओएस ऐप = फ्लास्क (_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) वापसी "बंद" @ app.route("/off/all") def alloff(): के लिए मैं सीमा में (0, 28): GPIO.output(i, GPIO. LOW) वापसी "बंद" @app.route("/ चालू/") def turn_on(pin): GPIO.output(int(pin), GPIO. HIGH) वापसी "चालू" अगर _name_ == '_main_': app.run(debug=True, host='0.0. 0.0')

जिस तरह से यह काम करता है वह पीआई के आईपी पते के यूआरएल और फिर चालू या बंद और फिर पिन नंबर की प्रतीक्षा करता है।

इस कोड को रास्पबेरी पाई की होम डायरेक्टरी में सेव करें और इसे "pin_website.py" नाम दें।

आपको इसे स्वचालित रूप से चलाने के लिए सेट करना होगा, इसलिए ऐसा करने के लिए, टर्मिनल प्रकार में: sudo nano /etc/profile

इस फ़ाइल के निचले भाग में, "python3 pin_website.py &" जोड़ें

"&" आवश्यक है, क्योंकि यह इसे पृष्ठभूमि में चलाता है, और इसलिए बूट को जारी रखने की अनुमति देता है

चरण 7: स्थान कैसे प्राप्त करें

स्थान कैसे प्राप्त करें
स्थान कैसे प्राप्त करें

IFTTT का उपयोग करके, आप एक सेवा सेट कर सकते हैं ताकि जब फ़ोन किसी निश्चित स्थान में प्रवेश करे, तो वह आपको ईमेल कर सके, या एक वेब पता पिंग कर सके, या आपको टेलीग्राम पर संदेश भेज सके।

चरण 8: यह सब कैसे काम करता है

मेरे पास सेटअप एक सर्वर पाई है, जो मेरी वेबसाइट को होस्ट करता है, पोर्ट फ़ॉरवर्डिंग के साथ और एक स्थिर डीएनएस https://freedns.afraid.org/ द्वारा प्रदान की गई सेवा का उपयोग करता है। इसमें से बहुत कुछ काफी जटिल है, और आपको पोर्ट फ़ॉरवर्डिंग की समझ होनी चाहिए, मैं इस भाग को दूसरी बार कैसे करना है, इस पर एक निर्देश दे सकता हूँ।

एक और तरीका है कि आप पीआई को संदेश प्राप्त करने के लिए टेलीग्राम का उपयोग कर सकते हैं, या संभवतः सबसे आसान, एक ईमेल रीडर स्थापित करना है जो ईमेल पढ़ता है और उसके माध्यम से स्थान अपडेट प्राप्त करता है।

मैंने टेलीग्राम बॉट या ईमेल रीडर की कोशिश नहीं की है, लेकिन वहां बहुत सारे ट्यूटोरियल हैं जो आपको दिखाएंगे कि कैसे करें।

यहां मेरा फ्लास्क/पायथन कोड है जिसे IFTTT का उपयोग करके वेबहुक द्वारा अनुरोध किया जाता है:

फ्लास्क आयात फ्लास्क से, render_template, अनुरोध, jsonify

डेटाटाइम से आयात ओएस नक्शा आयात से डेटाटाइम आयात करें * ऐप = फ्लास्क (_name_) एल = 0 सेटअप () @ ऐप.रूट ('/') डीईएफ़ इंडेक्स (): वापसी अनुरोध। /') डीईएफ़ म्यू (स्थान): 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) return "Hey, Me" @app.route('/mum/exit/') def mume(location): माँ.ऑफ़लाइन(स्थान) वापसी "अद्यतन के लिए धन्यवाद, माँ!" @app.route("/dad/exit/") def dede(l): dad.offline(l) return "थैंक्स फॉर द अपडेट, डैड!" @ app.route("/child/exit/") def child_exit(l): me.offline(l) return "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

आयात ast, json आयात समय आयात सूत्रण आयात 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")) प्रतिक्रिया = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request "GET", str("/off/all")) प्रतिक्रिया = 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 = { "llansantfraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": १३, "फोर क्रॉस": १८, "लैंड्रीनियो": २५, "वेल्शपूल": २७ } f = open("pin", "w") f.write(str(-1)) f.close() समय। नींद(1) conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/") + str(last_loc)) प्रतिक्रिया = conn.getrespons e() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) प्रतिक्रिया = conn.getresponse() last_loc = locs[l] def offline(l): वैश्विक last_loc locs = { "llansantfraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech" ": १३, "फोर क्रॉस": १८, "लैंड्रीनियो": २५, "वेल्शपूल": २७ } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str(" /off/") + str(last_loc)) प्रतिक्रिया = conn.getresponse() f = open("pin", "w") f.write(str(locs[l])) f.close() os.system ("पायथन3 फ्लैश.पीई और") क्लास डैड: लोक्स = {"वेल्शपूल": 3, "लिन्क्लीस": 1, "होम": 23, "श्रूस्बरी": 0, "लैनीमीनेच": 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 = 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)) प्रतिक्रिया = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/on/") + str(locs[l])) प्रतिक्रिया = conn.getresponse() dlast_loc = locs[l] def offline(l): वैश्विक dlast_loc locs = { "welshpool": 3, "lynclys ": 1, "होम": 23, "श्रूस्बरी": 0, "लैनीमीनेच": 6, "फोर क्रॉस": 15, "लैंड्रिनो": 10 } conn = http.client. HTTPConnection('192.168.1.251:5000') con.request("GET", str("/off/") + str(dlast_loc)) प्रतिक्रिया = conn.getresponse() f = open("pind", "w") f.write(str(locs[l])) f.close() os.system("python3 flashd.py &") मुझे क्लास दें: def current_loc(l): ग्लोबल mlast_loc locs = { "होम": 22, "स्कूल": 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)) प्रतिक्रिया = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request ("प्राप्त करें", str ("/ चालू /") + str (lo cs[l])) प्रतिक्रिया = conn.getresponse() mlast_loc = locs[l] def offline(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)) प्रतिक्रिया = conn.getresponse() f = open("pinm", "w") f.write(str(locs[l])) f.close() os.system("python3 flashm.py &")

चरण 9: मेरे प्रोजेक्ट से प्रेरणा लेकर अपना खुद का निर्माण करें

इसलिए मुझे पता है कि पिछले चरण को समझना बहुत कठिन होगा, इसलिए मैं इसे आपको यह दिखाने के लिए छोड़ दूंगा कि नक्शा कैसे बनाया जाता है, और एक रास्पबेरी पाई हो सकती है जो एल ई डी को चालू और बंद करती है। अब आपको एक अजगर स्क्रिप्ट बनाने की आवश्यकता है, जो IFTTT का उपयोग करके आपको ईमेल करती है। फिर आपको कोड का एक ईमेल रीडिंग पीस ढूंढना होगा, जो काफी आसान है (इसे गूगल करें)। फिर एक बार जब आप एक ईमेल पढ़ते हैं और माता-पिता का स्थान ढूंढते हैं, तो 'if' कथनों का उपयोग करके पता लगाएं कि कौन सा पिन चालू करना है।

मानचित्र पर, एक चमकती रोशनी का अर्थ है कि उन्होंने अभी-अभी क्षेत्र छोड़ा है

अजगर से दूसरे पाई पर एल ई डी चालू करने का तरीका नीचे दिया गया है:

आयात 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() # यह यूआरएल का अनुरोध करता है, और फिर नक्शा पीआई इसे पढ़ता है और पिन नंबर 2 बंद कर देता है

मूल रूप से, मुझे आशा है कि आप अपने स्वयं के जीपीएस ट्रैकिंग मानचित्र को बनाने के लिए प्रेरणा के रूप में अपने 3D मानचित्र के साथ मेरे द्वारा किए गए कार्यों का उपयोग कर सकते हैं।

सिफारिश की: