جدول المحتويات:
- الخطوة الأولى: الحصول على خريطة ثلاثية الأبعاد
- الخطوة 2: إعداد الخريطة لإدراج LED
- الخطوة 3: أدخل المصابيح
- الخطوة 4: قم بتوصيل مصابيح LED بـ Raspberry Pi
- الخطوة 5: اختبر المصابيح
- الخطوة 6: كود لتشغيل مؤشر LED عند الطلب
- الخطوة 7: كيفية استلام الموقع
- الخطوة 8: كيف يعمل هذا كله
- الخطوة 9: اصنع بنفسك من الإلهام خارج مشروعي
فيديو: خريطة تتبع GPS ثلاثية الأبعاد: 9 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:37
هذا المشروع عبارة عن خريطة ثلاثية الأبعاد مطبوعة ثلاثية الأبعاد ، بها طرق وأنهار وبلدات ، مع منارات 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 الخاصة بك.
موصى به:
متزلج كاميرا تتبع الكائن مع محور الدوران. طباعة ثلاثية الأبعاد ومبنية على وحدة تحكم محرك RoboClaw DC و Arduino: 5 خطوات (بالصور)
متزلج كاميرا تتبع الكائن مع محور الدوران. 3D مطبوعة ومبنية على RoboClaw DC Motor Controller & Arduino: كان هذا المشروع أحد مشاريعي المفضلة منذ أن تمكنت من الجمع بين اهتماماتي في صناعة الفيديو مع DIY. لطالما نظرت وأردت محاكاة تلك اللقطات السينمائية في الأفلام حيث تتحرك الكاميرا عبر الشاشة أثناء التحريك لتتبع
شريحة كاميرا بمحرك مع نظام تتبع (طباعة ثلاثية الأبعاد): 7 خطوات (بالصور)
سلايدر كاميرا بمحرك مع نظام تتبع (مطبوع ثلاثي الأبعاد): بشكل أساسي ، هذا الروبوت سوف يحرك كاميرا / هاتف ذكي على سكة حديد و "يتعقب" كائنًا. موقع الكائن المستهدف معروف بالفعل بواسطة الروبوت. الحساب وراء نظام التتبع هذا بسيط للغاية. لقد أنشأنا محاكاة لعملية التتبع
حاوية حرارية للطابعة ثلاثية الأبعاد: إصلاح الالتفاف على المطبوعات ثلاثية الأبعاد: 4 خطوات
العلبة الحرارية للطابعة ثلاثية الأبعاد: إصلاح الالتواء على المطبوعات ثلاثية الأبعاد: واجه كل شخص لديه طابعة ثلاثية الأبعاد في وقت ما مشكلة الالتواء. المطبوعات التي تستغرق ساعات ينتهي بها الأمر للتلف لأن القاعدة تقشر بعيدًا عن السرير. قد تكون هذه المشكلة محبطة وتستغرق وقتًا طويلاً. إذن ما cau
مروحية ثلاثية الأبعاد مطبوعة ثلاثية الأبعاد FPV يتم التحكم فيها عبر شبكة Wifi Micro: 7 خطوات (مع صور)
مروحية Micro Wifi ثلاثية الأبعاد مطبوعة FPV مطبوعة ثلاثية الأبعاد: بعد أول كتابين لي & quot؛ WifiPPM & quot؛ و & quot؛ Lowcost 3d Fpv Camera لنظام Android & quot؛ أريد أن أظهر كوادكوبتر الصغير مع كلا الجهازين المرفقين. لا تحتاج إلى أي أجهزة إضافية مثل جهاز إرسال RC أو نظارات FPV لذلك
كيفية توصيل DeLorme Earthmate GPS LT-20 ببرنامج Google Earth للحصول على خريطة تتبع GPS رائعة: 5 خطوات
كيفية توصيل DeLorme Earthmate GPS LT-20 ببرنامج Google Earth للحصول على خريطة تتبع GPS رائعة: سأوضح لك كيفية توصيل جهاز GPS ببرنامج Google Earth الشهير ، دون استخدام Google Earth Plus. ليس لدي ميزانية كبيرة لذا يمكنني أن أضمن أن هذا سيكون رخيصًا بقدر الإمكان