תוכן עניינים:
- שלב 1: קבלת מפה תלת -ממדית
- שלב 2: הכנת המפה לתוספות LED
- שלב 3: הכנס את נוריות הלדים
- שלב 4: חבר את נוריות ה- LED ל- Raspberry Pi
- שלב 5: בדוק את נוריות הלדים
- שלב 6: קוד להפעלת הנורית כאשר תתבקש
- שלב 7: כיצד לקבל מיקום
- שלב 8: איך כל זה עובד
- שלב 9: בנה משלך מתוך השראה מהפרויקט שלי
וִידֵאוֹ: מפת תלת -ממד מעקב GPS: 9 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
פרויקט זה הוא מפת תלת מימד המודפסת בתלת מימד, עם כבישים, נהרות ועיירות, עם משואות LED המציגות את מיקומם של בני המשפחה. זה יכול להראות אם ילד נמצא בבית הספר או לא, או רק את המיקום של שני ההורים. אנחנו יכולים גם להשתמש בו כדי לנבא באיזו שעה ההורים מגיעים הביתה, כך שאפשר להכין ארוחת ערב בזמן הנכון. זה גם רק פרויקט מגניב בדרך כלל להתהדר ולהציג למשפחה ולחברים.
אני מקווה שתיהנו מההנחיה הזו, או שתיהנו לגלות על פרויקט שעשיתי
שלב 1: קבלת מפה תלת -ממדית
כדי לקבל מפה תלת מימדית של האזור שלך, כתבתי הוראה נפרדת שתסייע לך להדריך אותך בתהליך הכנת אחת. הקישור למדריך נמצא כאן:
www.instructables.com/id/Making-a-3D-Print…
שלב 2: הכנת המפה לתוספות LED
כעת, כשיש לך מפה תלת -ממדית, עם כבישים, עיירות ונהרות, אנו צריכים דרך לציין היכן האדם נמצא על המפה. השתמשתי בנורות 3 מ מ RG דו-צבעיות, כי המטרה העיקרית של המפה היא להראות היכן נמצאים שני ההורים. במקומות מסוימים השתמשתי ב- RGB LED, כדי לאפשר לי להראות היכן נמצא הילד הבכור. יש הגבלה של 28 סיכות לפלט ב- Raspberry Pi, אז בחר את המיקומים של נוריות ה- LED בתבונה. בסופו של דבר השתמשתי בכ -24 מהם, אז אתה אמור להיות בסדר.
כדי לקדוח PLA, מצאתי מקדח עץ רגיל עובד היטב, וטיפלתי הוא כפי שהייתי מתייחס לעץ.
במקומות שבהם המפה הייתה עבה מדי, הייתי מקדח את שכבת הבסיס בעזרת מקדח גדול, ולאחר מכן את השכבה הנראית לעיל עם מקדח 3 מ מ הנכון.
שלב 3: הכנס את נוריות הלדים
עכשיו, כשיש לנו חורים לנורות LED לשבת בהם, אנחנו יכולים להדביק אותם פנימה. PVA או Superglue עובדים טוב בשביל זה, גיליתי ש- PVA התרוצץ סביבו ואטם אותו במקום, וגם דבק -על עבד טוב מאוד. וודא שבכל נורית LED הם בולטים רק בצד הנראה בכמה מ מ, כיוון שהנורות הלבות יבלטו לאורך כל הדרך נראה קצת מבולגן. אל תדאג לגבי הרגליים על הגב, נוכל לקפל אותן ברגע שהן מולחמות.
שלב 4: חבר את נוריות ה- LED ל- Raspberry Pi
הלחמתי ישירות את נוריות ה- LED ל- Raspberry Pi, עם זאת, אם יש לך כותרת עם כותרת מולחמת מראש, או שאתה רוצה להיות מסוגל להשתמש ב- pi למשהו אחר, אז הייתי מציע להשתמש בחוטי מגשר עבור כל LED, כלומר הפי נשלף. אתה יכול לראות שברגע שהלחמתי את הנורית, קיפלתי את הרגליים למטה כדי שלא יידבקו על הגב.
שלב 5: בדוק את נוריות הלדים
כדי לוודא שכל הלדים פועלים, הפעלתי סקריפט שעובר כל סיכה אפשרית, ומדליק אותם, אחד בכל פעם, אשר עולה על הבא כאשר אני לוחץ על enter. זה איפשר לי לרשום איזה מספר סיכה עשה איזה מיקום, שהגיע שימושי מאוד.
ייבא 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: קוד להפעלת הנורית כאשר תתבקש
הדרך שבה ביצעתי את הפרויקט הזה כרוכה ב- 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 בטווח (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 ("/כבוי/הכל") def alloff (): עבור i בטווח (0, 28): GPIO.output (i, GPIO. LOW) החזר "כבוי" @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 ')
הדרך שבה זה עובד היא מחכה לכתובת ה- IP של ה- pi ולאחר מכן הפעלה או כיבוי ואז מספר הסיכה.
שמור את הקוד הזה בספריית הבית של ה- Raspberry Pi, וקרא לו "pin_website.py"
יהיה עליך להגדיר זאת לפעול אוטומטית, כדי לעשות זאת, בסוג הטרמינל: sudo nano /etc /profile
בתחתית קובץ זה, הוסף "python3 pin_website.py &"
ה- "&" הוא חיוני, מכיוון שהוא גורם לו לפעול ברקע, ולכן מאפשר להמשיך אתחול
שלב 7: כיצד לקבל מיקום
באמצעות IFTTT, אתה יכול להגדיר שירות כך שכאשר הטלפון נכנס למיקום מסוים, הוא יכול לשלוח לך דוא ל, או לדפדף כתובת אינטרנט, או לשלוח לך הודעה בטלגרם.
שלב 8: איך כל זה עובד
ההתקנה שיש לי היא Server Pi, המארחת את האתר שלי, עם העברת יציאות ו- DNS סטטי באמצעות השירות המסופק על ידי https://freedns.afraid.org/. הרבה מזה די מורכב, ואתה צריך להבין את העברת הנמל, אולי אכין הוראה כיצד לבצע את החלק הזה בפעם אחרת.
דרך נוספת שבה אתה יכול לעשות זאת היא להשתמש במברק כדי לקבל הודעות ל- pi, או אולי הקלה ביותר, היא להגדיר קורא דוא"ל שקורא את הודעות הדוא"ל ומקבל עדכוני מיקום באמצעות זה.
לא ניסיתי את בוט הטלגרם או קורא דוא ל, אבל יש הרבה הדרכות שיסבירו לך כיצד לעשות זאת.
להלן קוד הבקבוק / פייתון שלי המתבקש לאחר מכן על ידי webhooks באמצעות IFTTT:
מבקבוק ייבוא בקבוק, render_template, request, jsonify
ייבוא מערכת ההפעלה מ- datetime יבוא תאריך הזמן מהמפה יבוא * אפליקציה = בקבוק (_ שם_) l = 0 הגדרות () @app.route ('/') def index (): return request.remote_addr @app.route ('/אמא/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) החזר "היי, אני" @app.route ('/אמא/יציאה/') def mume (מיקום): אמא.אופליין (מיקום) החזרה "תודה על העדכון, אמא!" @app.route ("/אבא/יציאה/") def dade (l): dad.offline (l) החזר "תודה על העדכון, אבא!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) החזר "היי, אני" @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 time import time 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 () אמא בכיתה: 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)) 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," ארבעה צלבים ": 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 &") אבא בכיתה: 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," four crosses ": 15} f = open (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client חיבור HTTP ('192.168.1.251:5000') חיבורים 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 &") class me: def current_loc (l): 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 (להלן 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: בנה משלך מתוך השראה מהפרויקט שלי
אז אני יודע שהשלב הקודם יהיה מאוד קשה להבנה, אז אני אשאיר אותו כמראה לך איך לעשות את המפה, ואוכל לקבל פאי פטל שמדליק ומכבה את הלדים. כעת עליך ליצור סקריפט פייתון שבעזרת IFTTT שולח לך מייל. אז אתה צריך למצוא פיסת קוד של אימייל שהיא די קלה (חפש אותה בגוגל). לאחר שתקרא הודעת אימייל ותמצא את מיקומו של הורה, השתמש בהצהרות 'אם' כדי למצוא איזה סיכה להפעיל.
על המפה, אור מהבהב פירושו שזה עתה עזבו את האזור
הדרך להדליק את נוריות ה- pi בפאי אחר מפיתון היא כדלקמן:
ייבא 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 () # זה מבקש את כתובת האתר, ואז מפת ה- pi קוראת את זה ומכבה את מספר הסיכה 2
בעיקרון, אני מקווה שתוכל להשתמש במה שעשיתי עם המפה התלת -ממדית שלי כהשראה כדי ליצור מפת מעקב GPS משלך.
מוּמלָץ:
לוח המחוונים של COVID19 על מפת העולם (באמצעות פייתון): 16 שלבים
לוח המחוונים של COVID19 על מפת העולם (באמצעות Python): אני יודע שכמעט כולנו יודעים את רוב המידע על COVID19. וההנחיה הזו היא על יצירת מפת בועות, לשרטט את הנתונים בזמן אמת (של מקרים) על מפת העולם. לנוחות רבה יותר , הוספתי את התוכנית למאגר Github: https: //github.co
סורק תלת מימד בסיסי למיפוי תלת מימד דיגיטלי: 5 שלבים
סורק תלת מימד בסיסי למיפוי תלת מימד דיגיטלי: בפרויקט זה אתאר ויסביר את היסודות הבסיסיים של סריקה ושחזור תלת מימד החלים בעיקר על סריקה של אובייקטים קטנים של מטוסים למחצה, ואשר ניתן להרחיב את פעולתם למערכות סריקה ושחזור שיכולות ב
מעטפת חום למדפסת תלת מימד: תקן עיוות בהדפסות תלת מימד: 4 שלבים
מעטפת חום למדפסת תלת מימד: תיקון עיוות בהדפסות תלת מימד: כל מי שהיה לו מדפסת תלת מימד נתקל בשלב זה או אחר בבעיית העיוות. הדפסים שלוקחים שעות בסופו של דבר נהרסים בגלל שהבסיס התקלף מהמיטה. נושא זה יכול להיות מתסכל ולוקח זמן. אז מה בעצם
בוט מעקב אחר שלדה מעקב מרחוק: 7 שלבים (עם תמונות)
בוט מעקב אחר שלדה מחוסרת מרחוק: מבוא: אז זה היה פרוייקט שרציתי להתחיל ולסיים עוד בשנת 2016, אולם בשל עבודות ושפע של דברים אחרים הצלחתי רק להתחיל ולהשלים את הפרויקט הזה בשנת 2016 שנה חדשה 2018! זה לקח בערך 3 שעות
כיצד לחבר את ה- DeLorme Earthmate GPS LT-20 ל- Google Earth שלך למפת מעקב GPS מעולה: 5 שלבים
כיצד לחבר את ה- DeLorme Earthmate GPS LT-20 ל- Google Earth שלך למפת מעקב GPS מעולה: אראה לך כיצד לחבר מכשיר GPS לתוכנית הפופולרית של Google Earth, ללא שימוש ב- Google Earth Plus. אין לי תקציב גדול אז אני יכול להבטיח שזה יהיה כמה שיותר זול