Mundarija:

GPS kuzatuvining 3D xaritasi: 9 qadam
GPS kuzatuvining 3D xaritasi: 9 qadam

Video: GPS kuzatuvining 3D xaritasi: 9 qadam

Video: GPS kuzatuvining 3D xaritasi: 9 qadam
Video: Ташкилот ва Корханаларни камерасига уланиш 2024, Noyabr
Anonim
GPS kuzatuv 3D xaritasi
GPS kuzatuv 3D xaritasi
GPS kuzatuv 3D xaritasi
GPS kuzatuv 3D xaritasi

Bu loyiha 3D -bosma 3D xaritadir, yo'llar, daryolar va shaharlar, oila a'zolarining joylashishini ko'rsatadigan LED -mayoqlar. Bu bolaning maktabda yoki yo'qligini yoki faqat ikkala ota -onaning joyini ko'rsatishi mumkin. Bundan tashqari, biz ota -onalar uyga qaysi vaqtda kelishini oldindan bilishimiz mumkin, shunda kechki ovqatni o'z vaqtida tayyorlash mumkin. Bu, shuningdek, oila va do'stlaringizga namoyish qilish va namoyish qilish uchun ajoyib loyihadir.

Umid qilamanki, siz ushbu ko'rsatmalarni yaratishni yoqtirasiz yoki men qilgan loyiha haqida bilib olasiz

1 -qadam: 3D xaritasini olish

O'zingizning hududingizning 3D xaritasini olish uchun men sizga ko'rsatma berish uchun alohida ko'rsatma yozdim. Ko'rsatmalarga havola bu erda:

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

2 -qadam: xaritani LED qo'shimchalari uchun tayyorlash

Endi sizda yo'llar, shaharlar va daryolar bilan 3D xaritasi bor, biz xaritada odam qaerda ekanligini ko'rsatadigan usul kerak. Men ikki rangli 3 mm RG LEDlarini ishlatardim, chunki xaritaning asosiy maqsadi-ikkita ota-onaning qaerdaligini ko'rsatish. Ba'zi joylarda men eng katta bolaning qaerdaligini ko'rsatish uchun RGB LEDini ishlatardim. Raspberry Pi -ni chiqarish uchun 28 ta pin chegarasi bor, shuning uchun LEDlarning joylarini oqilona tanlang. Men ulardan 24tasini ishlatdim, shuning uchun siz yaxshi bo'lishingiz kerak.

PLA -ni burg'ilash uchun men yog'ochdan yasalgan oddiy matkapni yaxshi ishlaganini topdim va men yog'ochga qanday ishlov bergan bo'lsam, xuddi shunday ishlov berdim.

Xarita juda qalin bo'lgan joylarda, men asosiy qatlamni katta matkap bilan, so'ngra yuqoridagi ko'rinadigan qatlamni to'g'ri 3 mm matkap bilan burg'ulardim.

3 -qadam: LEDlarni joylashtiring

LEDlarni joylashtiring
LEDlarni joylashtiring

Endi bizda LEDlar uchun teshiklar bor, biz ularni yopishtira olamiz. PVA yoki Superglue buning uchun yaxshi ishlaydi, men shuni bildimki, PVA uning atrofida yugurib, uni muhrlab qo'ydi va superglue ham juda yaxshi ishladi. Har bir LED bilan ular faqat bir necha mm ko'rinadigan tomonga yopishib olishiga ishonch hosil qiling, chunki LEDlarning oxirigacha yopishib qolishi biroz chalkash ko'rinadi. Orqa tarafdagi oyoqlar haqida qayg'urmang, biz ularni lehimlangandan keyin katlay olamiz.

4 -qadam: LEDlarni Raspberry Pi -ga ulang

Men LEDlarni Raspberry Pi-ga to'g'ridan-to'g'ri lehimladim, lekin agar sizda oldindan lehimlangan sarlavha bo'lsa yoki siz pi-ni boshqa narsaga ishlatmoqchi bo'lsangiz, men har bir LED uchun o'tish simlarini ishlatishni taklif qilaman, ya'ni. Pi olib tashlanishi mumkin. Ko'ryapsizmi, men LEDni lehimlagandan so'ng, oyoqlarimni orqaga yopishtirmasliklari uchun bukdim.

5 -qadam: LEDlarni sinab ko'ring

LEDlarni sinab ko'ring
LEDlarni sinab ko'ring

Barcha LEDlar ishlayotganiga ishonch hosil qilish uchun men har bir mumkin bo'lgan pin orqali o'tadigan skriptni ishga tushirdim va ularni birma -bir yondirib qo'ydim. Bu menga qaysi pin raqami qaysi manzilni ko'rsatganini yozishga imkon berdi, bu juda foydali bo'ldi.

RPi. GPIO -ni GPIO sifatida import qilish

i vaqt oralig'ida GPIO.setmode (GPIO. BCM) import vaqti (0, 28): i diapazonidagi (0, 28) GPIO.setup (i, GPIO. OUT): GPIO. chiqish (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) chop etish ("Bu shunday edi:" + str (i)) z = raw_input ("Keyingi?")

Bu sodir bo'lganda, men matnli faylga qaysi pin qaysi joy va qaysi rangda ishlaganini qayd qilardim. Buni qilish kerak, chunki bu keyingi bosqichda juda foydali.

6 -qadam: Agar so'ralsa, LEDni yoqish uchun kod

Men bu loyihani qanday amalga oshirgan bo'lsam, Raspberry Pi Zero W ni o'z ichiga olaman, bu sizga pinni yoqishga imkon beradigan asosiy veb -sayt. Bu shuni anglatadiki, odatda ishga tushadigan va ishlaydigan asosiy Pi 4 ishlov bera oladi, keyin kichik Pi 0 faqat pinni yoqishi kerak, bu ishni biroz murakkablashtiradi. Men buni qildim, chunki bu mening sozlamalarimga mos keladi, shuningdek Pi 0 biz keyinroq qiladigan ishimiz uchun biroz sekin bo'lishi mumkin deb o'yladim.

RPi. GPIO -ni GPIO sifatida import qilish

kolbadan import qilish vaqti Flask, render_template, request, jsonify import os app = Flask (_ name_) p = i uchun diapazonidagi (0, 28) GPIO.setmode (GPIO. BCM): 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) qaytarish "Off" @app.route ("/off/all") def alloff (): i diapazonida (0, 28): GPIO.output (i, GPIO. LOW) "o'chirish" @app.route ("/on/") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) _name_ == '_main_' bo'lsa, "On" qaytadi: app.run (debug = To'g'ri, host = '0.0. 0,0 ')

Buning usuli shundan iboratki, u pi -ning IP -manzilining URL manzilini, keyin yoqish yoki o'chirishni, keyin esa pin raqamini kutadi.

bu kodni Raspberry Pi uy katalogiga saqlang va unga "pin_website.py" deb nom bering.

Siz buni avtomatik ravishda ishga tushirishni sozlashingiz kerak, buning uchun terminal turida: sudo nano /etc /profile

Faylning pastki qismiga "python3 pin_website.py &" qo'shing.

"&" Juda muhim, chunki u fonda ishlaydi va shuning uchun yuklashni davom ettirishga imkon beradi

7 -qadam: Joylashuvni qanday olish kerak

Joylashuvni qanday olish mumkin
Joylashuvni qanday olish mumkin

IFTTT -dan foydalanib, siz xizmatni shunday sozlashingiz mumkinki, telefon ma'lum bir joyga kirsa, u sizga elektron pochta orqali xabar yuborishi, veb -manzilini yuborishi yoki telegramda xabar yuborishi mumkin.

8 -qadam: Bularning barchasi qanday ishlaydi

Menda sozlamalar - bu server Pi, bu mening veb -saytimni joylashtirgan, portni yo'naltirish va statik DNS bilan https://freedns.afraid.org/ xizmatidan foydalanadi. Bularning barchasi juda murakkab va siz portni qayta yo'naltirishni tushunishingiz kerak, men bu bo'limni boshqa safar qanday qilish haqida ko'rsatma bera olaman.

Buni amalga oshirishning yana bir usuli - telegramdan foydalanib, pi -ga xabar yuborish yoki, ehtimol, eng osoni, elektron pochtani o'qiydigan va bu orqali joylashuv yangilanishlarini oladigan elektron o'quvchi o'rnatish.

Men Telegram botini yoki elektron pochta o'quvchisini sinab ko'rmadim, lekin u erda sizga ko'rsatadigan ko'plab darsliklar mavjud.

Mana mening Flask / Python kodim, keyin IFTTT yordamida webhooks tomonidan so'raladi:

idishni import qilishdan Flask, render_template, request, jsonify

dat os vaqtini import qilish datetime xaritadan import * app = Flask (_ name_) l = 0 setup () @app.route ('/') def index (): return request.remote_addr @app.route ('/mum/enter /') def mu (manzil): mum.current_loc (manzil) qaytish "Yangilanganingiz uchun tashakkur, onajon!" @app.route ("/dad/enter/") def da (l): dad.current_loc (l) qaytish "Yangilanganingiz uchun tashakkur, ota!" @app.route ("/child/enter/") def child_enter (l): me.current_loc (l) "Hey, men" ga qaytish @app.route ('/mum/exit/') def mume (manzil): mum.offline (manzil) qaytish "Yangilanganingiz uchun tashakkur, onajon!" @app.route ("/dad/exit/") def dade (l): dad.offline (l) "Yangilanganingiz uchun tashakkur, ota!" @app.route ("/child/exit/") def child_exit (l): me.offline (l) return "Hey, men" @app.route ("/reset") def redo (): setup () return "Qayta o'rnatish!" agar _name_ == '_main_': app.run (disk raskadrovka = To'g'ri, xost = '0.0.0.0')

va map.py:

import http.client, urllib.request, urllib.parse, urllib.error, base64

import ast, json import vaqtini import qilish) Conn.request ("GET", str ("/dynamic/update.php? ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) javob = conn.getresponse () conn = http.client. HTTPConnection ('192.1000'.251) "GET", str ("/off/all")) javob = conn.getresponse () f = ochiq ("pin", "w") f.write (str (-1)) f.close () f = ochiq ("pind", "w") f.yozish (str (-1)) f.close () f = ochiq ("pinm", "w") f.yozish (str (-1)) f.yaqin () sinf onasi: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "to'rt xoch": 18, "llandrinio": 25, "welshpool": 27} f = ochiq ("pin", "w") f.write (str (-1)) f.close () vaqt. uyqu (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (last_loc)) javob = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/on/") + str (locs [l])) javob = 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," to'rt xoch ": 18," llandrinio ": 25," welshpool ": 27} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request (" GET ", str (") /off/") + str (last_loc)) javob = conn.getresponse () f = ochiq (" pin "," w ") f.write (str (locs [l])) f.close () os.system ("python3 flash.py &") sinf otasi: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "to'rt xoch": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," to'rtta xoch ": 15} f = ochiq (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') ulanish usullari t ("GET", str ("/off/") + str (dlast_loc)) javob = Conn.getresponse () Conn = http.client. HTTPConnection ('192.168.1.251:5000') Conn.request ("Oling"), str ("/on/") + str (locs [l])) javob = conn.getresponse () dlast_loc = locs [l] off off (l): global dlast_loc locs = {"welshpool": 3, "lynclys" ": 1," uy ": 23," shrewsbury ": 0," llanymynech ": 6," to'rt xoch ": 15," llandrinio ": 10} conn = http.client. HTTPConnection ('192.168.1.251:5000')) conn.request ("GET", str ("/off/") + str (dlast_loc)) javob = conn.getresponse () f = ochiq ("pind", "w") f.write (str (locs [l])) f.close () os.system ("python3 flashd.py &") sinf men: def current_loc (l): global mlast_loc locs = {"uy": 22, "maktab": 2, "oswestry": 14} f = ochiq ("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)) javob = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("Oling", str ("/on/") + str (lo cs [l])) javob = conn.getresponse () mlast_loc = locs [l] def offline (l): global dlast_loc locs = {"uy": 22, "maktab": 2, "oswestry": 14} ulanish = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/off/") + str (mlast_loc)) javob = conn.getresponse () f = ochiq ("pinm"), "w") f.write (str (locs [l])) f.close () os.system ("python3 flashm.py &")

9 -qadam: Mening loyihamdan ilhom olib, o'z mulkingizni yarating

Men shuni bilamanki, oldingi qadamni tushunish juda qiyin bo'ladi, shuning uchun men sizga xaritani qanday qilishni ko'rsataman va LEDlarni yoqadigan va o'chiradigan malina pi ga ega bo'laman. Endi siz IFTTT yordamida sizga elektron pochta orqali xabar yuboradigan python skriptini yaratishingiz kerak. Keyin elektron pochtani o'qish kodini topishingiz kerak, bu juda oson (google it). Keyin siz elektron pochtani o'qib, ota -onangiz joylashgan joyni topganingizda, qaysi pinni yoqish kerakligini aniqlash uchun "if" iboralaridan foydalaning.

Xaritada miltillovchi chiroq ularning bu hududdan endigina chiqib ketganligini bildiradi

Pitondan boshqa pi -dagi LEDlarni yoqish usuli quyidagicha:

import http.client, urllib.request, urllib.parse, urllib.error, base64

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') #buni malina pi xaritasi IP -manzili bilan o'zgartiring conn.request ("GET", str ("/off") /2 ")) # bu 2 -pin raqamini o'chiradi javob = conn.getresponse () # bu URLni so'raydi, keyin xarita pi buni o'qiydi va 2 -pin raqamini o'chiradi.

Umid qilamanki, siz 3D xaritam bilan qilgan ishimdan GPS -ni kuzatish xaritasini yaratishingiz mumkin.

Tavsiya: