Daftar Isi:

Peta 3D Pelacakan GPS: 9 Langkah
Peta 3D Pelacakan GPS: 9 Langkah

Video: Peta 3D Pelacakan GPS: 9 Langkah

Video: Peta 3D Pelacakan GPS: 9 Langkah
Video: How to Get Directions Using Google Maps & Petal Maps on Huawei Watch GT 2024, November
Anonim
Peta 3D Pelacakan GPS
Peta 3D Pelacakan GPS
Peta 3D Pelacakan GPS
Peta 3D Pelacakan GPS

Proyek ini adalah peta 3D cetak 3D, dengan jalan, sungai, dan kota, dengan suar LED untuk menunjukkan lokasi anggota keluarga. Ini dapat menunjukkan apakah seorang anak berada di sekolah atau tidak, atau hanya lokasi kedua orang tuanya. Kita juga bisa menggunakannya untuk memprediksi jam berapa orang tua pulang, sehingga makan malam bisa dibuat di waktu yang tepat. Ini juga merupakan proyek yang umumnya keren untuk dipamerkan dan ditampilkan kepada keluarga dan teman.

Saya harap Anda menikmati membuat Instruksi ini, atau menikmati mencari tahu tentang proyek yang telah saya buat

Langkah 1: Mendapatkan Peta 3D

UNTUK mendapatkan peta 3D wilayah Anda, saya telah menulis instruksi terpisah untuk membantu memandu Anda melalui proses pembuatannya. Tautan ke instruksi ada di sini:

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

Langkah 2: Mempersiapkan Peta untuk Sisipan LED

Sekarang setelah Anda memiliki peta 3D, dengan jalan, kota, dan sungai, kami memerlukan cara untuk menunjukkan di mana seseorang berada di peta. Saya menggunakan LED RG 3mm dua warna, karena tujuan utama peta adalah untuk menunjukkan di mana kedua orang tua berada. Di tempat-tempat tertentu saya menggunakan LED RGB, untuk memungkinkan saya menunjukkan di mana anak tertua berada. Ada batas 28 pin untuk output pada Raspberry Pi, Jadi pilih lokasi LED dengan bijak. Saya akhirnya menggunakan sekitar 24 dari mereka, jadi Anda harus baik-baik saja.

Untuk mengebor PLA, saya menemukan mata bor kayu biasa bekerja dengan baik, dan saya memperlakukannya seperti saya merawat kayu.

Di tempat-tempat di mana peta terlalu tebal, saya akan mengebor lapisan dasar dengan mata bor besar, dan kemudian lapisan di atas yang terlihat dengan mata bor 3mm yang benar.

Langkah 3: Masukkan LED

Masukkan LED
Masukkan LED

Sekarang kami memiliki lubang untuk LED, Kami dapat merekatkannya. PVA atau Superglue bekerja dengan baik untuk ini, saya menemukan bahwa PVA berlari di sekitarnya untuk menyegelnya, dan superglue juga bekerja dengan sangat baik. Pastikan bahwa dengan setiap LED, mereka hanya menonjol di sisi yang terlihat beberapa mm, Karena LED yang menonjol sepanjang jalan terlihat agak berantakan. Jangan khawatir tentang kaki di bagian belakang, kita bisa melipatnya setelah disolder.

Langkah 4: Hubungkan LED ke Raspberry Pi

Saya langsung menyolder LED ke Raspberry Pi, namun, jika Anda memilikinya dengan header yang telah disolder sebelumnya, atau Anda ingin dapat menggunakan pi untuk hal lain, maka saya sarankan menggunakan kabel jumper untuk setiap LED, artinya Pi dapat dihapus. Anda dapat melihat bahwa setelah saya menyolder LED, saya melipat kakinya ke bawah sehingga tidak menempel di bagian belakang.

Langkah 5: Uji LED

Uji LED
Uji LED

Untuk memastikan bahwa semua LED berfungsi, saya menjalankan skrip yang melewati setiap pin yang mungkin, dan menyalakannya, satu per satu, yang akan berpindah ke pin berikutnya ketika saya mengklik enter. Ini memungkinkan saya untuk mencatat nomor pin mana yang melakukan lokasi mana, yang sangat berguna.

impor RPi. GPIO sebagai GPIO

waktu impor GPIO.setmode(GPIO. BCM) untuk i dalam rentang (0, 28): GPIO.setup(i, GPIO. OUT) untuk i dalam rentang (0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("Itu tadi: " + str(i)) z = raw_input("Selanjutnya?")

Sementara ini terjadi, saya akan mencatat pada file teks pin mana yang melakukan lokasi dan warna mana. Anda perlu melakukan ini, karena ini sangat berguna pada langkah selanjutnya.

Langkah 6: Kode untuk Menyalakan LED Saat Diminta

Cara saya melakukan proyek ini melibatkan satu Raspberry Pi Zero W, dengan situs web dasar yang memungkinkan Anda mengaktifkan pin. Ini berarti bahwa Pi 4 utama, yang biasanya aktif, dan berjalan, dapat melakukan pemrosesan, dan kemudian Pi 0 kecil hanya perlu menyalakan pin, membuat segalanya sedikit lebih rumit. Saya melakukan ini karena sesuai dengan pengaturan saya, dan juga saya merasa Pi 0 bisa agak lambat untuk apa yang akan kita lakukan nanti.

impor RPi. GPIO sebagai GPIO

waktu impor dari labu impor Labu, render_template, permintaan, jsonify import os app = Flask(_name_) p = GPIO.setmode(GPIO. BCM) untuk i dalam rentang (0, 28): GPIO.setup(i, GPIO. KELUAR) @app.route('/') def index(): kembali request.remote_addr @app.route("/off/") def turn_off(pin): GPIO.output(int(pin), GPIO. LOW) return "Off" @app.route("/off/all") def alloff(): for i in range(0, 28): GPIO.output(i, GPIO. LOW) return "off" @app.route("/on/") def turn_on(pin): GPIO.output(int(pin), GPIO. HIGH) mengembalikan "On" jika _name_ == '_main_': app.run(debug=True, host='0.0. 0,0')

Cara kerjanya adalah menunggu url alamat IP pi dan kemudian on atau off dan kemudian nomor pin.

simpan kode ini di direktori home Raspberry Pi, dan beri nama "pin_website.py"

Anda perlu mengatur ini untuk berjalan secara otomatis, jadi untuk melakukan ini, di terminal ketik: sudo nano /etc/profile

Di bagian bawah file ini, tambahkan "python3 pin_website.py &"

"&" sangat penting, karena membuatnya berjalan di latar belakang, dan oleh karena itu memungkinkan boot untuk melanjutkan

Langkah 7: Cara Menerima Lokasi

Cara Menerima Lokasi
Cara Menerima Lokasi

Dengan menggunakan IFTTT, Anda dapat mengatur layanan sehingga ketika telepon memasuki lokasi tertentu, ia dapat mengirim email kepada Anda, atau melakukan ping ke alamat web, atau mengirim pesan kepada Anda melalui telegram.

Langkah 8: Bagaimana Semua Ini Bekerja

Pengaturan yang saya miliki adalah Server Pi, hosting situs web saya, dengan penerusan porta dan DNS statis menggunakan layanan yang disediakan oleh https://freedns.afraid.org/. Banyak dari ini cukup rumit, dan Anda perlu memiliki pemahaman tentang penerusan porta, saya mungkin akan membuat instruksi tentang cara melakukan bagian ini di lain waktu.

Cara lain yang dapat Anda lakukan adalah menggunakan telegram untuk mengirim pesan ke pi, atau mungkin yang paling mudah, adalah dengan menyiapkan pembaca email yang membaca email dan menerima pembaruan lokasi melalui itu.

Saya belum mencoba bot Telegram atau pembaca email, tetapi ada banyak tutorial di luar sana yang akan menunjukkan caranya.

Berikut adalah kode Flask/Python saya yang kemudian diminta oleh webhook menggunakan IFTTT:

dari labu impor Flask, render_template, request, jsonify

import os from datetime import datetime from map import * app = Flask(_name_) l = 0 setup() @app.route('/') def index(): return request.remote_addr @app.route('/mum/enter /') def mu(lokasi): mum.current_loc(location) return "Terima kasih Atas Pembaruannya, Bu!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "Terima kasih Atas Pembaruannya, Ayah!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) mengembalikan "Hai, Saya" @app.route('/mum/exit/') def mume(lokasi): mum.offline(location) return "Terima kasih Atas Pembaruannya, Bu!" @app.route("/dad/exit/") def dade(l): dad.offline(l) return "Terima kasih Atas Pembaruannya, Ayah!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "Hey, Me" @app.route("/reset") def redo(): setup() return "Mengatur ulang!" if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

dan map.py:

impor 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")) response = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str("/off/all")) response = conn.getresponse() f = open("pin", "w") f.write(str(-1)) f.close() f = buka("pind", "w") f.write(str(-1)) f.close() f = open("pinm", "w") f.write(str(-1)) f.close () kelas ibu: 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 = open("pin", "w") f.write(str(-1)) f.close() waktu. 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, "empat salib": 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 &") ayah kelas: 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. HTTPConnection('192.168.1.251:5000') conn.reques 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 cross": 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 &") kelas saya: def current_loc(l): global mlast_loc locs = { "rumah": 22, "sekolah": 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 ("DAPATKAN", str("/pada/") + 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 &")

Langkah 9: Bangun Sendiri Dari Inspirasi Dari Proyek Saya

Jadi saya tahu bahwa langkah sebelumnya akan sangat sulit untuk dipahami, 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, mengirimi Anda email. Maka Anda perlu menemukan sepotong kode membaca email, yang cukup mudah (google it). Kemudian setelah Anda membaca email dan menemukan lokasi orang tua, gunakan pernyataan 'jika' untuk menemukan pin mana yang akan diaktifkan.

Di peta, Lampu berkedip berarti mereka baru saja meninggalkan area

Cara menyalakan LED pada pi lain dari python adalah sebagai berikut:

impor 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 conn.request("GET", str("/off /2")) # ini mematikan pin nomor 2 response = conn.getresponse() # ini meminta URL, dan kemudian peta pi membaca ini dan mematikan pin nomor 2

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

Direkomendasikan: