Isi kandungan:

Peta 3D Penjejakan GPS: 9 Langkah
Peta 3D Penjejakan GPS: 9 Langkah

Video: Peta 3D Penjejakan GPS: 9 Langkah

Video: Peta 3D Penjejakan GPS: 9 Langkah
Video: Cara Tingkatkan Akurasi Lokasi Google Map - Fix Google Map Tidak Akurat 2024, Julai
Anonim
Peta 3D Penjejakan GPS
Peta 3D Penjejakan GPS
Peta 3D Penjejakan GPS
Peta 3D Penjejakan GPS

Projek ini adalah peta 3D bercetak 3D, dengan jalan, sungai dan bandar, dengan suar LED untuk menunjukkan lokasi ahli keluarga. Ini dapat menunjukkan sama ada anak berada di sekolah atau tidak, atau hanya lokasi kedua ibu bapa. Kita juga dapat menggunakannya untuk meramalkan waktu ibu bapa pulang, sehingga makan malam dapat dibuat pada waktu yang tepat. Ia juga merupakan projek yang sangat menarik untuk dipamerkan dan dipamerkan kepada keluarga dan rakan-rakan.

Saya harap anda menikmati membuat Instructable ini, atau menikmati mengetahui projek yang telah saya buat

Langkah 1: Mendapatkan Peta 3D

Untuk mendapatkan peta 3D kawasan anda, saya telah menulis arahan yang terpisah untuk membantu membimbing anda melalui proses membuatnya. Pautan ke petunjuk boleh didapati di sini:

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

Langkah 2: Menyiapkan Peta untuk Sisipan LED

Sekarang anda mempunyai peta 3D, dengan jalan, bandar dan sungai, kami memerlukan cara untuk menunjukkan di mana seseorang berada di peta. Saya menggunakan LED RG dwi-warna 3mm, kerana tujuan utama peta adalah untuk menunjukkan di mana kedua ibu bapa berada. Di tempat-tempat tertentu saya menggunakan LED RGB, untuk membolehkan saya menunjukkan di mana anak tertua berada. Terdapat had 28 pin untuk output pada Raspberry Pi, Oleh itu, pilih lokasi LED dengan bijak. Saya akhirnya menggunakan sekitar 24 daripadanya, jadi anda pasti baik-baik saja.

Untuk menggerudi PLA, saya dapati bor kayu biasa berfungsi dengan baik, dan saya memperlakukannya sama seperti saya mengolah kayu.

Di tempat-tempat, di mana peta terlalu tebal, saya akan mengebor lapisan dasar dengan bit gerudi yang besar, dan kemudian lapisan yang dapat dilihat di atas dengan bit gerudi 3mm yang betul.

Langkah 3: Masukkan LED

Masukkan LED
Masukkan LED

Sekarang kita mempunyai lubang untuk menyalakan LED, Kita boleh merekatkannya. PVA atau Superglue berfungsi dengan baik untuk ini, saya dapati PVA berlari mengelilinginya dengan menutupnya, dan superglue juga berfungsi dengan baik. Pastikan bahawa dengan setiap LED, mereka hanya menonjol di sisi yang terlihat oleh beberapa mm, Kerana LED yang melekat jauh kelihatan agak tidak kemas. Jangan risau kaki di belakang, kita boleh melipatnya setelah dipateri.

Langkah 4: Sambungkan LED ke Raspberry Pi

Saya secara langsung menyolder LED ke Raspberry Pi, namun, jika anda memilikinya dengan header pra-solder, atau anda ingin dapat menggunakan pi untuk sesuatu yang lain, maka saya cadangkan menggunakan kabel jumper untuk setiap LED, yang bermaksud Pi boleh ditanggalkan. Anda dapat melihat bahawa setelah saya menyolder LED, saya melipat kaki ke bawah sehingga mereka tidak melekat di belakang.

Langkah 5: Uji LED

Uji LED
Uji LED

Untuk memastikan bahawa semua LED berfungsi, saya menjalankan skrip yang melewati setiap pin yang mungkin, dan menyalakannya, satu demi satu, yang, ke yang berikutnya ketika saya mengklik enter. Ini membolehkan saya mencatat nombor pin mana lokasi, yang masuk sangat berguna.

import RPi. GPIO sebagai GPIO

masa import GPIO.setmode (GPIO. BCM) untuk i dalam julat (0, 28): GPIO.setup (i, GPIO. OUT) untuk i dalam julat (0, 28): GPIO.output (i, GPIO. HIGH) time.sleep (0.3) GPIO.output (i, GPIO. LOW) cetakan ("Itu:" + str (i)) z = raw_input ("Next?")

Semasa ini berlaku, saya akan mencatat pada fail teks pin mana yang melakukan lokasi dan warna mana. Anda perlu melakukan ini, kerana ia sangat berguna pada langkah seterusnya.

Langkah 6: Kod untuk Menghidupkan LED Apabila Diminta

Cara saya melaksanakan projek ini adalah menggunakan satu Raspberry Pi Zero W, dengan laman web asas yang membolehkan anda menghidupkan pin. Ini bermaksud bahawa Pi 4 utama, yang biasanya dihidupkan, dan berjalan, dapat melakukan pemrosesan, dan kemudian Pi 0 kecil hanya harus menghidupkan pin, membuat semuanya sedikit lebih rumit. Saya melakukan ini kerana sesuai dengan persediaan saya, dan saya juga merasakan Pi 0 sedikit lambat untuk apa yang akan kita lakukan kemudian.

import RPi. GPIO sebagai GPIO

masa import dari termos import Flask, render_template, request, jsonify import os app = Flask (_ name_) p = GPIO.setmode (GPIO. BCM) untuk i dalam julat (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) kembali "Mati" @ app.route ("/ off / all") def alloff (): untuk i dalam jarak (0, 28): GPIO.output (i, GPIO. LOW) kembali "off" @ app.route ("/ on /") def turn_on (pin): GPIO.output (int (pin), GPIO. HIGH) kembali "On" if _name_ == '_main_': app.run (debug = True, host = '0.0. 0.0 ')

Cara ini berfungsi ialah menunggu url alamat IP pi dan kemudian hidupkan atau matikan dan kemudian nombor pin.

simpan kod ini di direktori utama Raspberry Pi, dan beri nama "pin_website.py"

Anda perlu menetapkan ini agar berjalan secara automatik, jadi untuk melakukannya, dalam jenis terminal: sudo nano / etc / profile

Di bahagian bawah fail ini, tambahkan "python3 pin_website.py &"

"&" Adalah mustahak, kerana ia berjalan di latar belakang, dan oleh itu membolehkan boot terus

Langkah 7: Cara Mendapatkan Lokasi

Cara Mendapatkan Lokasi
Cara Mendapatkan Lokasi

Dengan menggunakan IFTTT, anda dapat mengatur layanan sehingga ketika telepon memasuki lokasi tertentu, ia dapat mengirim e-mel kepada anda, atau ping alamat web, atau mengirim pesan kepada anda melalui telegram.

Langkah 8: Bagaimana Ini Semua Berfungsi

Penyediaan yang saya miliki adalah Server Pi, yang menghosting laman web saya, dengan penerusan port dan DNS statik menggunakan perkhidmatan yang disediakan oleh https://freedns.afraid.org/. Sebilangan besar ini cukup kompleks, dan anda perlu mempunyai pemahaman tentang pemajuan port, saya mungkin akan memberi petunjuk mengenai cara melakukan bahagian ini pada waktu yang lain.

Cara lain yang boleh anda lakukan adalah menggunakan telegram untuk mendapatkan mesej ke pi, atau mungkin yang paling mudah, adalah dengan menyediakan pembaca e-mel yang membaca e-mel dan menerima kemas kini lokasi melalui itu.

Saya belum mencuba bot Telegram atau pembaca e-mel, tetapi terdapat banyak tutorial di luar sana yang akan menunjukkan kepada anda bagaimana caranya.

Berikut adalah kod Flask / Python saya yang kemudian diminta oleh webhooks menggunakan IFTTT:

dari termos import Flask, render_template, request, jsonify

import os dari datetime import datetime dari peta import * app = Flask (_ name_) l = 0 setup () @ app.route ('/') def index (): return request.remote_addr @ app.route ('/ mum / enter / ') def mu (location): mum.current_loc (location) kembali "Terima kasih Untuk Kemas Kini, Ibu!" @ app.route ("/ dad / enter /") def da (l): dad.current_loc (l) kembali "Terima kasih Untuk Kemas Kini, Ayah!" @ app.route ("/ child / enter /") def child_enter (l): me.current_loc (l) return "Hey, Me" @ app.route ('/ mum / exit /') def mume (lokasi): mum.offline (lokasi) kembali "Terima kasih Untuk Kemas Kini, Ibu!" @ app.route ("/ dad / exit /") def dade (l): dad.offline (l) kembali "Terima kasih Untuk Kemas Kini, Ayah!" @ app.route ("/ child / exit /") def child_exit (l): me.offline (l) return "Hey, Me" @ app.route ("/ reset") def redo (): setup () return "Tetapkan semula!" jika _name_ == '_main_': app.run (debug = True, host = '0.0.0.0')

dan map.py:

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

import ast, json import time import 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")) respons = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251 "GET", str ("/ off / all")) respon = conn.getresponse () f = terbuka ("pin", "w") f.write (str (-1)) f.close () f = buka ("pind", "w") f.write (str (-1)) f.close () f = buka ("pinm", "w") f.write (str (-1)) f.close () ibu kelas: def current_loc (l): global last_loc locs = {"llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "empat salib": 18, "llandrinio": 25, "welshpool": 27} f = buka ("pin", "w") f.write (str (-1)) f.tutup () masa. sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ off /") + str (last_loc)) tindak balas = conn.getrespons e () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ on /") + str (locs [l])) respon = 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," empat salib ": 18," llandrinio ": 25," welshpool ": 27} conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request (" GET ", str (" / off / ") + str (last_loc)) respon = conn.getresponse () f = terbuka (" pin "," w ") f.write (str (locs [l])) f.close () os.system ("python3 flash.py &") dad class: locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, "llanymynech": 6, "empat salib": 15, "llandrinio": 10, "welshpool": 24} def current_loc (l): global dlast_loc locs = {"welshpool": 3, "lynclys": 1, "home": 23, "shrewsbury": 0, " llanymynech ": 6," empat salib ": 15} f = terbuka (" pind "," w ") f.write (str (-1)) f.close () time.sleep (1) conn = http.client. HTTPConnection ('192.168.1.251:5000') sambungan t ("GET", str ("/ off /") + str (dlast_loc)) tindak balas = conn.getresponse () conn = http.client. HTTPConnection ('192.168.1.251:5000') conn.request ("GET", str ("/ on /") + str (locs [l])) respons = 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)) respons = conn.getresponse () f = terbuka ("pind", "w") f.write (str (lokasi [l])) f.close () os.system ("python3 flashd.py &") kelas saya: def current_loc (l): global mlast_loc locs = {"home": 22, "school": 2, "oswestry": 14} f = terbuka ("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)) respons = conn.getresponse () conn = http.client. HTTPConnection (' 192.168.1.251:5000 ') conn.request ("GET", str ("/ on /") + str (lo cs [l])) respons = 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)) respons = conn.getresponse () f = terbuka ("pinm", "w") f.write (str (loc [l])) f.close () os.system ("python3 flashm.py &")

Langkah 9: Bangun Sendiri Dari Inspirasi dari Projek Saya

Oleh itu, saya tahu bahawa langkah sebelumnya akan sangat sukar difahami, jadi saya akan membiarkannya menunjukkan cara membuat peta, dan dapat memiliki raspberry pi yang menghidupkan dan mematikan LED. Anda sekarang perlu membuat skrip python yang, menggunakan IFTTT, menghantar e-mel kepada anda. Maka anda perlu mencari kod membaca e-mel, yang cukup mudah (google it). Kemudian setelah anda membaca e-mel dan mencari lokasi ibu bapa, gunakan pernyataan 'if' untuk mencari pin mana yang harus dihidupkan.

Di peta, Lampu berkelip bermaksud bahawa mereka baru saja meninggalkan kawasan itu

Cara untuk menghidupkan LED pada pi lain dari python adalah seperti di bawah:

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

params = urllib.parse.urlencode ({}) conn = http.client. HTTPConnection ('192.168.1.251:5000') # ubah ini dengan alamat IP peta raspberry pi.request ("GET", str ("/ off) / 2 ")) # ini mematikan jawapan nombor pin 2 = conn.getresponse () # ini meminta URL, dan kemudian peta pi membacanya dan mematikan pin nombor 2

Pada dasarnya, saya harap anda dapat menggunakan apa yang telah saya lakukan dengan peta 3D saya sebagai inspirasi untuk membuat peta penjejakan GPS anda sendiri.

Disyorkan: