جدول المحتويات:

خريطة تتبع GPS ثلاثية الأبعاد: 9 خطوات
خريطة تتبع GPS ثلاثية الأبعاد: 9 خطوات

فيديو: خريطة تتبع GPS ثلاثية الأبعاد: 9 خطوات

فيديو: خريطة تتبع GPS ثلاثية الأبعاد: 9 خطوات
فيديو: ضيعنا الطريق قوقل ماب snap:V555 2024, يوليو
Anonim
خريطة تتبع GPS ثلاثية الأبعاد
خريطة تتبع GPS ثلاثية الأبعاد
خريطة تتبع GPS ثلاثية الأبعاد
خريطة تتبع GPS ثلاثية الأبعاد

هذا المشروع عبارة عن خريطة ثلاثية الأبعاد مطبوعة ثلاثية الأبعاد ، بها طرق وأنهار وبلدات ، مع منارات LED لإظهار موقع أفراد الأسرة. يمكن أن يوضح ما إذا كان الطفل في المدرسة أم لا ، أو مجرد موقع كلا الوالدين. يمكننا أيضًا استخدامه للتنبؤ بالوقت الذي سيعود فيه الوالدان إلى المنزل ، بحيث يمكن إعداد العشاء في الوقت المناسب. إنه أيضًا مجرد مشروع رائع بشكل عام للتباهي والعرض للعائلة والأصدقاء.

أتمنى أن تستمتع بجعل هذا Instructable ، أو تستمتع بمعرفة مشروع قمت بإنشائه

الخطوة الأولى: الحصول على خريطة ثلاثية الأبعاد

للحصول على خريطة ثلاثية الأبعاد لمنطقتك ، قمت بكتابة تعليمات منفصلة للمساعدة في إرشادك خلال عملية صنع واحدة. رابط التعليمات موجود هنا:

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

الخطوة 2: إعداد الخريطة لإدراج LED

الآن بعد أن أصبح لديك خريطة ثلاثية الأبعاد ، مع الطرق والبلدات والأنهار ، نحتاج إلى طريقة للإشارة إلى مكان وجود الشخص على الخريطة. لقد استخدمت مصابيح RG ثنائية اللون مقاس 3 مم ، لأن الغرض الرئيسي من الخريطة هو إظهار مكان الوالدين. في أماكن معينة ، استخدمت RGB LED ، للسماح لي بإظهار مكان وجود الطفل الأكبر. يوجد حد يبلغ 28 دبوسًا للإخراج على Raspberry Pi ، لذا اختر مواقع مصابيح LED بحكمة. انتهى بي الأمر باستخدام حوالي 24 منهم ، لذا يجب أن تكون بخير.

لحفر جيش التحرير الشعبى الصينى ، وجدت أن مثقاب الخشب العادي يعمل جيدًا ، وعالجت كما كنت أعالج الخشب.

في الأماكن ، حيث كانت الخريطة سميكة للغاية ، كنت سأقوم بالبحث عن الطبقة الأساسية بقطعة كبيرة من المثقاب ، ثم الطبقة المرئية أعلاه بمثقاب 3 مم الصحيح.

الخطوة 3: أدخل المصابيح

أدخل المصابيح
أدخل المصابيح

الآن بعد أن أصبح لدينا ثقوب لمصابيح LED للجلوس فيها ، يمكننا لصقها. PVA أو Superglue يعمل جيدًا لهذا ، وجدت أن PVA تدور حولها لتغلقها في مكانها ، كما أن superglue يعمل جيدًا أيضًا. تأكد من أنه مع كل LED ، فإنها تلتصق فقط بالجانب المرئي ببضعة مم ، لأن ظهور مصابيح LED على طول الطريق يبدو فوضويًا بعض الشيء. لا تقلق بشأن الأرجل الموجودة على الظهر ، يمكننا طيها بمجرد لحامها.

الخطوة 4: قم بتوصيل مصابيح LED بـ Raspberry Pi

لقد قمت بلحام مصابيح LED مباشرة بـ Raspberry Pi ، ومع ذلك ، إذا كان لديك رأس به رأس ملحوم مسبقًا ، أو كنت تريد أن تكون قادرًا على استخدام pi لشيء آخر ، فأقترح استخدام أسلاك توصيل لكل مؤشر LED ، مما يعني ذلك Pi قابل للإزالة. يمكنك أن ترى أنه بمجرد أن ألحم المصباح ، قمت بطي الأرجل لأسفل حتى لا تلتصق بالظهر.

الخطوة 5: اختبر المصابيح

اختبر المصابيح
اختبر المصابيح

للتأكد من أن جميع مصابيح LED تعمل ، قمت بتشغيل برنامج نصي يمر عبر كل دبوس محتمل ، ويضيءهم ، واحدًا تلو الآخر ، والذي يظهر على الرمز التالي عند النقر فوق إدخال. سمح لي هذا بتدوين الرقم السري الذي قام به أي موقع ، والذي جاء مفيدًا جدًا.

استيراد 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: كود لتشغيل مؤشر LED عند الطلب

الطريقة التي قمت بها بهذا المشروع تتضمن Raspberry Pi Zero W ، مع موقع ويب أساسي يسمح لك بتشغيل دبوس. هذا يعني أن Pi 4 الرئيسي ، الذي عادة ما يكون قيد التشغيل ، يمكن أن يقوم بالمعالجة ، ومن ثم فإن Pi 0 الصغير عليه فقط تشغيل دبوس ، مما يجعل الأمور أكثر تعقيدًا بعض الشيء. لقد فعلت هذا لأنه يناسب الإعداد الخاص بي ، وشعرت أيضًا أن Pi 0 يمكن أن يكون بطيئًا بعض الشيء لما سنفعله لاحقًا.

استيراد RPi. GPIO كـ GPIO

وقت الاستيراد من flask import 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) تُرجع "On" إذا _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 ، يمكنك إعداد خدمة بحيث عندما يدخل الهاتف موقعًا معينًا ، يمكنه إرسال بريد إلكتروني إليك ، أو اختبار اتصال عنوان الويب ، أو إرسال رسالة إليك على Telegram.

الخطوة 8: كيف يعمل هذا كله

الإعداد الذي أملكه هو Server Pi ، يستضيف موقع الويب الخاص بي ، مع إعادة توجيه المنفذ و DNS ثابت باستخدام الخدمة المقدمة من خلال https://freedns.afraid.org/. الكثير من هذا معقد للغاية ، وتحتاج إلى فهم إعادة توجيه المنفذ ، وقد أجعل تعليمات حول كيفية القيام بهذا الجزء في وقت آخر.

هناك طريقة أخرى يمكنك القيام بها وهي استخدام telegram لتوصيل الرسائل إلى pi ، أو ربما أسهلها ، وهي إعداد قارئ بريد إلكتروني يقرأ رسائل البريد الإلكتروني ويستقبل تحديثات الموقع عبر ذلك.

لم أجرب روبوت Telegram أو قارئ البريد الإلكتروني ، ولكن هناك الكثير من البرامج التعليمية التي ستوضح لك كيفية القيام بذلك.

هذا هو رمز Flask / Python الخاص بي والذي تم طلبه بعد ذلك بواسطة webhooks باستخدام IFTTT:

من flask import Flask ، render_template ، request ، jsonify

استيراد نظام التشغيل من استيراد التاريخ والوقت والوقت من استيراد الخريطة * التطبيق = Flask (_ name_) l = 0 إعداد () @ app.route ('/') فهرس def (): return request.remote_addr @ app.route ('/ mum / enter / ') def mu (الموقع): mum.current_loc (الموقع) إرجاع "شكرًا على التحديث ، أمي!" @ 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 (الموقع): يعرض mum.offline (الموقع) "شكرًا على التحديث ، أمي!" @ 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 "إعادة ضبط!" إذا _name_ == '_main_': app.run (التصحيح = صحيح ، المضيف = '0.0.0.0')

و map.py:

استيراد http.client ، urllib.request ، urllib.parse ، urllib.error ، base64

استيراد ast ، json استيراد وقت استيراد سلاسل العمليات استيراد نظام التشغيل params = urllib.parse.urlencode ({}) last_loc = 0 dlast_loc = 0 mlast_loc = 0 def setup (): conn = http.client. HTTPSConnection ('freens.afraid.org') conn.request ("GET"، str ("/ dynamic / update.php؟ ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) استجابة = conn.getresponse () conn = http.client. HTTPConnection ('192.168).1.251:5000' استجابة "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 () class mum: 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 = 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)) استجابة = 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 دون اتصال (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') استجابة 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])) response = conn.getresponse () dlast_loc = locs [l] def offline (l): global dlast_loc locs = {"welshpool": 3، "lynclys ": 1 ،" home ": 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)) response = conn.getresponse () f = open ("pind"، "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") صنفني: 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 (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 = open ("pinm" ، "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

الخطوة 9: اصنع بنفسك من الإلهام خارج مشروعي

لذلك أنا أعلم أن الخطوة السابقة سيكون من الصعب جدًا فهمها ، لذلك سأتركها على أنها توضح لك كيفية إنشاء الخريطة ، وأكون قادرًا على الحصول على raspberry pi الذي يعمل على تشغيل وإيقاف تشغيل مصابيح LED. أنت الآن بحاجة إلى إنشاء نص برمجي بلغة Python يقوم بإرسال بريد إلكتروني إليك باستخدام IFTTT. ثم تحتاج إلى العثور على جزء من التعليمات البرمجية لقراءة البريد الإلكتروني ، وهو أمر سهل للغاية (google it). ثم بمجرد قراءة رسالة بريد إلكتروني والعثور على موقع أحد الوالدين ، استخدم عبارات "if" للعثور على الدبوس الذي تريد تشغيله.

على الخريطة ، يشير الضوء الوامض إلى أنهم غادروا المنطقة للتو

طريقة تشغيل مصابيح LED على باي آخر من بيثون هي على النحو التالي:

استيراد http.client ، urllib.request ، urllib.parse ، urllib.error ، base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') # قم بتغيير هذا باستخدام عنوان IP لخريطة raspberry Pi conn.request ("GET"، str ("/ إيقاف) / 2 ")) # يؤدي هذا إلى إيقاف استجابة الرقم السري 2 = conn.getresponse () # وهذا يطلب عنوان URL ، ثم يقرأ الخريطة pi هذا ويوقف رقم التعريف الشخصي 2

في الأساس ، آمل أن تتمكن من استخدام ما فعلته مع خريطتي ثلاثية الأبعاد كمصدر إلهام لإنشاء خريطة تتبع GPS الخاصة بك.

موصى به: