Სარჩევი:

GPS თვალთვალის 3D რუკა: 9 ნაბიჯი
GPS თვალთვალის 3D რუკა: 9 ნაბიჯი

ვიდეო: GPS თვალთვალის 3D რუკა: 9 ნაბიჯი

ვიდეო: GPS თვალთვალის 3D რუკა: 9 ნაბიჯი
ვიდეო: SpaceX Starship Static Fire Prep, NASA Blue Origin Announcement of Lunar Lander, and much more 2024, ივლისი
Anonim
GPS თვალთვალის 3D რუკა
GPS თვალთვალის 3D რუკა
GPS თვალთვალის 3D რუკა
GPS თვალთვალის 3D რუკა

ეს პროექტი არის 3D ნაბეჭდი 3D რუქა, გზებით, მდინარეებითა და ქალაქებით, LED შუქებით, რომ აჩვენოს ოჯახის წევრების ადგილმდებარეობა. მას შეუძლია აჩვენოს არის თუ არა ბავშვი სკოლაში, ან ორივე მშობლის ადგილმდებარეობა. ჩვენ ასევე შეგვიძლია გამოვიყენოთ იმის პროგნოზირება, თუ რომელ დროს მიიღებენ მშობლები სახლში, ისე რომ სადილი იყოს შესაფერისი დროისათვის. ეს ასევე უბრალოდ ზოგადად მაგარი პროექტია ოჯახის წევრებისა და მეგობრების საჩვენებლად და ჩვენებისთვის.

ვიმედოვნებ, რომ თქვენ გსიამოვნებთ ამ ინსტრუქციის გაკეთება, ან ისიამოვნებთ ჩემს მიერ შემუშავებული პროექტის გაცნობით

ნაბიჯი 1: მიიღეთ 3D რუქა

თქვენი ტერიტორიის 3D რუქის მისაღებად, მე დავწერე ცალკე ინსტრუქცია, რომელიც დაგეხმარებათ გაგიწიოთ მისი შექმნის პროცესში. ინსტრუქციის ბმული აქ არის:

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

ნაბიჯი 2: რუქის მომზადება LED ჩანართებისთვის

ახლა, როდესაც თქვენ გაქვთ 3D რუკა, გზებით, ქალაქებითა და მდინარეებით, ჩვენ გვჭირდება გზა იმის მითითებისთვის, თუ სად არის ადამიანი რუკაზე. მე გამოვიყენე ორფერიანი 3 მმ RG LED- ები, რადგან რუქის მთავარი დანიშნულებაა აჩვენოს სად არიან ორი მშობელი. ზოგიერთ ადგილას მე გამოვიყენე RGB LED, რომ მომცა საშუალება მეჩვენებინა სად იყო ყველაზე დიდი ბავშვი. არსებობს შეზღუდვა 28 ქინძისთავზე Raspberry Pi– ზე გამოსასვლელად, ასე რომ გონივრულად შეარჩიეთ LED- ების ადგილმდებარეობა. მე დაახლოებით 24 მათგანი გამოვიყენე, ასე რომ თქვენ კარგად უნდა იყოთ.

PLA– ს საბურღი, მე აღმოვაჩინე, რომ ნორმალური ხის საბურღი კარგად მუშაობდა და მე ისე მოვექეცი, როგორც ხეზე.

იმ ადგილებში, სადაც რუკა ძალიან სქელი იყო, მე ვბურღავდი ძირითად ფენას დიდი ბურღვით, შემდეგ კი ხილულ ზემოთა ფენას სწორი 3 მმ -იანი საბურღით.

ნაბიჯი 3: ჩადეთ LED- ები

ჩადეთ LED- ები
ჩადეთ LED- ები

ახლა, როდესაც ჩვენ გვაქვს ხვრელები LED- ების დასაყენებლად, ჩვენ შეგვიძლია მათი წებოვანა. PVA ან Superglue კარგად მუშაობს ამაში, მე აღმოვაჩინე, რომ PVA გარბოდა მის გარშემო დალუქვით და სუპერწებოვანიც ძალიან კარგად მუშაობდა. დარწმუნდით, რომ თითოეული LED- ით, ისინი მხოლოდ რამდენიმე მმ -ით იშლება ხილულ მხარეზე, რადგან LED- ების შებუსვა ბოლომდე ცოტა არეულად გამოიყურება. არ ინერვიულოთ ფეხები ზურგზე, ჩვენ შეგვიძლია დავკეცოთ ისინი, როგორც კი შედუღდება.

ნაბიჯი 4: დაუკავშირეთ LED- ები Raspberry Pi- ს

მე პირდაპირ მივაწებე LED- ები Raspberry Pi- ს, თუმცა, თუ თქვენ გაქვთ ერთი წინასწარ შედუღებული სათაურით, ან გინდათ რომ გამოიყენოთ pi სხვა რამეში, მაშინ მე გირჩევთ გამოიყენოთ jumper ხაზები თითოეული LED- ისთვის, რაც იმას ნიშნავს, რომ Pi არის მოსახსნელი. თქვენ ხედავთ, რომ LED- ის შედუღებისთანავე, მე დავკეცე ფეხები ისე, რომ ისინი უკანა მხარეს არ დაეჭირათ.

ნაბიჯი 5: შეამოწმეთ LED- ები

შეამოწმეთ LED- ები
შეამოწმეთ LED- ები

იმისათვის, რომ დავრწმუნდე, რომ ყველა LED- ები მუშაობს, მე გავუშვი სკრიპტი, რომელიც გადის თითოეულ შესაძლო პინზე და ანათებს მათ სათითაოდ, რომელიც გადადის მომდევნოზე, როდესაც დააჭირეთ 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) ბეჭდვა ("ეს იყო:" + str (i)) z = raw_input ("შემდეგი?")

სანამ ეს ხდებოდა, მე აღვნიშნავდი ტექსტურ ფაილს, რომელმა პინმა გააკეთა რომელი ადგილმდებარეობა და რომელი ფერი. თქვენ უნდა გააკეთოთ ეს, რადგან ეს ძალიან სასარგებლოა შემდეგ ეტაპზე.

ნაბიჯი 6: კოდი, რომ ჩართოთ LED მოთხოვნის შემთხვევაში

ისე, როგორც მე გავაკეთე ეს პროექტი მოიცავს ერთ Raspberry Pi Zero W– ს, ძირითადი ვებ გვერდი, რომელიც საშუალებას გაძლევთ ჩართოთ პინი. ეს იმას ნიშნავდა, რომ მთავარ Pi 4 -ს, რომელიც ჩვეულებრივ ჩართულია და მუშაობს, შეუძლია პროცესის დამუშავება, შემდეგ კი პატარა Pi 0 -ს მხოლოდ ქინძისთავი უნდა ჩართოს, რაც საქმეს ოდნავ ართულებს. მე ეს გავაკეთე იმიტომ, რომ ის შეესაბამება ჩემს კონფიგურაციას და ასევე ვიგრძენი, რომ Pi 0 შეიძლება იყოს ცოტა ნელი იმაში რასაც ჩვენ მოგვიანებით გავაკეთებთ.

იმპორტი RPi. GPIO როგორც GPIO

ბოთლიდან იმპორტის დრო იმპორტი Flask, 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) დაბრუნება "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) return "On" if _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: როგორ მუშაობს ეს ყველაფერი

კონფიგურაცია, რომელიც მაქვს, არის სერვერი Pi, რომელიც მასპინძლობს ჩემს ვებსაიტს, პორტის გადაგზავნით და სტატიკური DNS სერვისით, რომელსაც უზრუნველყოფს https://freedns.afraid.org/. ბევრი მათგანი საკმაოდ რთულია და თქვენ უნდა გქონდეთ ნავსადგურის გადაგზავნის გაგება, მე შეიძლება ინსტრუქტაჟი გავუწიო, როგორ გავაკეთო ეს ნაწილი სხვა დროს.

ამის გაკეთების კიდევ ერთი გზა არის დეპეშის გამოყენება pi– ზე შეტყობინებების მისაღებად, ან შესაძლოა ყველაზე მარტივი, ეს არის ელ.ფოსტის მკითხველის დაყენება, რომელიც კითხულობს წერილებს და იღებს ადგილმდებარეობის განახლებებს ამის საშუალებით.

მე არ მიცდია Telegram- ის ბოტი ან ელ.ფოსტის მკითხველი, მაგრამ არსებობს უამრავი გაკვეთილი, რომელიც გაჩვენებთ როგორ.

აქ არის ჩემი Flask / Python კოდი, რომელსაც შემდეგ ითხოვენ ვებგვერდები IFTTT გამოყენებით:

ფლაკონის იმპორტიდან Flask, render_template, request, jsonify

იმპორტი os from datetime იმპორტი datetime რუკადან import * app = Flask (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') 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 (მდებარეობა): mum.offline (ადგილმდებარეობა) დაბრუნება "მადლობა განახლებისთვის, დედა!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) return "მადლობა განახლებისთვის, მამა!" @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 იმპორტის დრო იმპორტის ძაფის იმპორტირება 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 ("/dynamical/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) respond = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1) (' 192.168.1) "GET", str ("/off/all")) response = conn.getresponse () f = open ("pin", "w") f.write (str (-1)) f.close () f = გახსნა ("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 = ღია ("pin", "w") f.write (str (-1)) f.losose () time. ძილი (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])) 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 (" /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, "მთავარი": 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)) response = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("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," შრიუსბერი ": 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)) response = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("GET", str ("/on/") + str (lo cs [l])) respond = 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: შექმენით თქვენი საკუთარი პროექტი ჩემი პროექტის შთაგონებისგან

ასე რომ, მე ვიცი, რომ წინა ნაბიჯის გაგება ძალიან ძნელი იქნება, ამიტომ მე დავტოვებ მას, როგორც გაჩვენებთ თუ როგორ უნდა გააკეთოთ რუკა და შემეძლოს გქონდეს ჟოლოს პი, რომელიც ჩართავს და გამორთავს LED- ებს. ახლა თქვენ უნდა შექმნათ პითონის სკრიპტი, რომელიც IFTTT– ის გამოყენებით გამოგიგზავნით ელ.წერილს. შემდეგ თქვენ უნდა იპოვოთ ელ.ფოსტის კოდის ნაწილი, რომელიც საკმაოდ ადვილია (google it). მას შემდეგ რაც წაიკითხავთ ელ.წერილს და იპოვით მშობლის ადგილსამყოფელს, გამოიყენეთ 'if' განცხადებები, რომ იპოვოთ რომელი პინი უნდა ჩართოთ.

რუქაზე მოციმციმე შუქი ნიშნავს, რომ მათ ახლახანს დატოვეს ტერიტორია

პითონიდან სხვა 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 თვალთვალის რუქის შესაქმნელად.

გირჩევთ: