สารบัญ:
- ขั้นตอนที่ 1: รับแผนที่ 3 มิติ
- ขั้นตอนที่ 2: การเตรียมแผนที่สำหรับ LED Inserts
- ขั้นตอนที่ 3: ใส่ LEDs
- ขั้นตอนที่ 4: เชื่อมต่อ LED กับ Raspberry Pi
- ขั้นตอนที่ 5: ทดสอบ LEDs
- ขั้นตอนที่ 6: รหัสเพื่อเปิด LED เมื่อได้รับการร้องขอ
- ขั้นตอนที่ 7: วิธีรับตำแหน่ง
- ขั้นตอนที่ 8: ทั้งหมดนี้ทำงานอย่างไร
- ขั้นตอนที่ 9: สร้างของคุณเองจากแรงบันดาลใจจากโครงการของฉัน
วีดีโอ: GPS Tracking แผนที่ 3 มิติ: 9 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
โปรเจ็กต์นี้เป็นแผนที่ 3 มิติจากเครื่องพิมพ์ 3 มิติ พร้อมถนน แม่น้ำ และเมือง พร้อมบีคอน LED เพื่อแสดงตำแหน่งของสมาชิกในครอบครัว โดยสามารถแสดงว่าเด็กอยู่ที่โรงเรียนหรือไม่ หรือเพียงแค่สถานที่ตั้งของผู้ปกครองทั้งสอง เรายังใช้ทำนายเวลาพ่อแม่กลับบ้านได้ เพื่อทำอาหารเย็นให้ถูกเวลา นอกจากนี้ยังเป็นเพียงโครงการที่ยอดเยี่ยมสำหรับอวดครอบครัวและเพื่อนฝูง
ฉันหวังว่าคุณจะสนุกกับการสร้างคำแนะนำนี้หรือสนุกกับการค้นหาเกี่ยวกับโครงการที่ฉันทำ
ขั้นตอนที่ 1: รับแผนที่ 3 มิติ
ในการรับแผนที่ 3 มิติของพื้นที่ของคุณ ฉันได้เขียนคำสั่งแยกต่างหากเพื่อช่วยแนะนำคุณตลอดขั้นตอนการสร้าง ลิงค์ไปยังคำแนะนำอยู่ที่นี่:
www.instructables.com/id/Making-a-3D-Print…
ขั้นตอนที่ 2: การเตรียมแผนที่สำหรับ LED Inserts
ตอนนี้ คุณมีแผนที่ 3 มิติ พร้อมด้วยถนน เมือง และแม่น้ำ เราต้องการวิธีระบุตำแหน่งของบุคคลบนแผนที่ ฉันใช้ไฟ LED RG 3 มม. สองสี เนื่องจากจุดประสงค์หลักของแผนที่คือเพื่อแสดงว่าผู้ปกครองสองคนอยู่ที่ไหน ในบางสถานที่ ฉันใช้ไฟ LED RGB เพื่อแสดงตำแหน่งที่ลูกคนโตที่สุด Raspberry Pi มีขีดจำกัด 28 พินที่จะส่งออก ดังนั้นให้เลือกตำแหน่งของ LED อย่างชาญฉลาด ฉันลงเอยด้วยการใช้ประมาณ 24 ตัวดังนั้นคุณควรจะสบายดี
ในการเจาะ PLA ฉันพบว่าดอกสว่านไม้ธรรมดาทำงานได้ดี และฉันก็ปฏิบัติเหมือนกับว่าจะทำกับไม้
ในสถานที่ที่แผนที่หนาเกินไป ฉันจะเจาะเลเยอร์ฐานออกด้วยสว่านขนาดใหญ่ และจากนั้นเลเยอร์ด้านบนที่มองเห็นได้ด้วยสว่านขนาด 3 มม. ที่ถูกต้อง
ขั้นตอนที่ 3: ใส่ LEDs
ตอนนี้เรามีรูสำหรับ LEDs ให้นั่งแล้ว เราสามารถติดมันได้ PVA หรือ Superglue ทำงานได้ดีสำหรับสิ่งนี้ ฉันพบว่า PVA วิ่งไปรอบๆ เพื่อปิดผนึกมันเข้าที่ และ superglue ก็ทำงานได้ดีเช่นกัน ตรวจสอบให้แน่ใจว่า LED แต่ละดวงจะยื่นออกมาทางด้านที่มองเห็นได้เพียงไม่กี่มม. เนื่องจากการมีไฟ LED ที่ยื่นออกมาจนสุดทางจึงดูเลอะเทอะเล็กน้อย ไม่ต้องกังวลเรื่องขาที่ด้านหลัง เราสามารถพับเก็บได้เมื่อบัดกรีแล้ว
ขั้นตอนที่ 4: เชื่อมต่อ LED กับ Raspberry Pi
ฉันบัดกรี LED โดยตรงกับ Raspberry Pi อย่างไรก็ตาม หากคุณมีอันที่มีส่วนหัวที่บัดกรีไว้ล่วงหน้า หรือคุณต้องการใช้ pi สำหรับอย่างอื่น ฉันขอแนะนำให้ใช้สายจัมเปอร์สำหรับ LED แต่ละอัน ซึ่งหมายความว่า Pi ถอดออกได้ คุณจะเห็นได้ว่าเมื่อฉันบัดกรี LED แล้ว ฉันพับขาลงเพื่อไม่ให้ติดที่ด้านหลัง
ขั้นตอนที่ 5: ทดสอบ LEDs
เพื่อให้แน่ใจว่าไฟ LED ทั้งหมดทำงาน ฉันได้รันสคริปต์ที่ดำเนินการผ่านแต่ละพินที่เป็นไปได้ และเปิดไฟทีละดวง ซึ่งจะวนไปยังพินถัดไปเมื่อฉันคลิก Enter สิ่งนี้ทำให้ฉันจดได้ว่าหมายเลขพินใดใช้ตำแหน่งใดซึ่งมีประโยชน์มาก
นำเข้า RPi. GPIO เป็น GPIO
เวลานำเข้า GPIO.setmode(GPIO. BCM) สำหรับผม ในช่วง (0, 28): GPIO.setup(i, GPIO. OUT) สำหรับผม ในช่วง(0, 28): GPIO.output(i, GPIO. HIGH) time.sleep(0.3) GPIO.output(i, GPIO. LOW) print("นั่นคือ: " + str(i)) z = raw_input("Next?")
ในขณะที่สิ่งนี้กำลังเกิดขึ้น ฉันจะจดบันทึกลงในไฟล์ข้อความที่พินใช้ตำแหน่งใดและสีใด คุณต้องทำเช่นนี้ เนื่องจากจะมีประโยชน์มากในขั้นตอนต่อไป
ขั้นตอนที่ 6: รหัสเพื่อเปิด LED เมื่อได้รับการร้องขอ
วิธีที่ฉันทำโปรเจ็กต์นี้เกี่ยวข้องกับ Raspberry Pi Zero W หนึ่งตัวพร้อมเว็บไซต์พื้นฐานที่ให้คุณเปิดพินได้ ซึ่งหมายความว่า Pi 4 หลักซึ่งปกติเปิดอยู่และทำงานอยู่ สามารถทำการประมวลผลได้ จากนั้น Pi 0 ตัวน้อยจะต้องเปิดพินเท่านั้น ทำให้สิ่งต่างๆ ซับซ้อนขึ้นเล็กน้อย ฉันทำสิ่งนี้เพราะมันเหมาะกับการตั้งค่าของฉัน และฉันรู้สึกว่า Pi 0 อาจทำงานช้าเล็กน้อยสำหรับสิ่งที่เราจะทำในภายหลัง
นำเข้า RPi. GPIO เป็น GPIO
เวลานำเข้าจากขวด นำเข้า Flask, render_template, คำขอ, jsonify import os app = Flask(_name_) p = GPIO.setmode(GPIO. BCM) for i in range(0, 28): GPIO.setup(i, GPIO. ออก) @app.route('/') def index(): return request.remote_addr @app.route("/off/") def turn_off(pin): GPIO.output(int(pin), GPIO. LOW) return "Off" @app.route("/off/all") def alloff(): สำหรับฉันในช่วง (0, 28): GPIO.output(i, GPIO. LOW) ส่งคืน "off" @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')
วิธีการทำงานคือรอ url ของที่อยู่ IP ของ pi จากนั้นเปิดหรือปิดแล้วตามด้วยหมายเลขพิน
บันทึกรหัสนี้ในโฮมไดเร็กทอรีของ Raspberry Pi และตั้งชื่อว่า "pin_website.py"
คุณจะต้องตั้งค่าให้ทำงานโดยอัตโนมัติ ในการดำเนินการนี้ในประเภทเทอร์มินัล: sudo nano /etc/profile
ที่ด้านล่างของไฟล์นี้ ให้เพิ่ม "python3 pin_website.py &"
"&" เป็นสิ่งจำเป็น เนื่องจากทำให้ทำงานในพื้นหลัง และทำให้การบูตทำต่อได้
ขั้นตอนที่ 7: วิธีรับตำแหน่ง
เมื่อใช้ IFTTT คุณสามารถตั้งค่าบริการเพื่อให้เมื่อโทรศัพท์เข้าสู่ตำแหน่งใดตำแหน่งหนึ่ง มันสามารถส่งอีเมลถึงคุณ หรือ ping ที่อยู่เว็บ หรือส่งข้อความถึงคุณทางโทรเลข
ขั้นตอนที่ 8: ทั้งหมดนี้ทำงานอย่างไร
การตั้งค่าที่ฉันมีคือ Server Pi ซึ่งโฮสต์เว็บไซต์ของฉัน พร้อมการส่งต่อพอร์ตและ DNS แบบคงที่โดยใช้บริการที่จัดทำโดย https://freedns.afraid.org/ สิ่งนี้ค่อนข้างซับซ้อน และคุณต้องมีความเข้าใจในการส่งต่อพอร์ต ฉันอาจให้คำแนะนำเกี่ยวกับวิธีการทำส่วนนี้อีกครั้ง
อีกวิธีหนึ่งที่คุณสามารถทำได้คือใช้โทรเลขเพื่อรับข้อความไปยัง pi หรืออาจง่ายที่สุดคือการตั้งค่าโปรแกรมอ่านอีเมลที่อ่านอีเมลและรับการอัปเดตตำแหน่งผ่านทางนั้น
ฉันไม่ได้ลองใช้บอทโทรเลขหรือโปรแกรมอ่านอีเมล แต่มีบทช่วยสอนมากมายที่จะแสดงให้คุณเห็นวิธีการ
นี่คือรหัส Flask / Python ของฉันซึ่งถูกร้องขอโดย webhooks โดยใช้ IFTTT:
จากการนำเข้าขวด Flask, render_template, ขอ, jsonify
นำเข้าระบบปฏิบัติการจากวันที่และเวลา วันที่นำเข้าจากการนำเข้าแผนที่ * 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) return "ขอบคุณสำหรับการอัพเดต คุณแม่!" @app.route("/dad/enter/") def da(l): dad.current_loc(l) return "ขอบคุณสำหรับการอัปเดต พ่อ!" @app.route("/child/enter/") def child_enter(l): me.current_loc(l) return "เฮ้ ฉัน" @app.route('/mum/exit/') def mume(location): mum.offline(location) ส่งคืน "ขอบคุณสำหรับการอัปเดต Mum!" @app.route("/dad/exit/") def dade(l): dad.offline(l) return "ขอบคุณสำหรับการอัพเดท พ่อ!" @app.route("/child/exit/") def child_exit(l): me.offline(l) return "เฮ้ ฉัน" @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
นำเข้า 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("/dynamic/update.php?ZmFpOWlJQ29QczhiOW1iYWJoNVdVcG9HOjE5MTM2ODU2")) response = conn.getresponse() conn = http.client. HTTPConnection('192.168.1.251:5000') "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 () คลาส mum: def current_loc(l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech": 13, "four crosses": 18, "llandrinio": 25, "welshpool": 27 } f = open("pin", "w") f.write(str(-1)) f.close() เวลา 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 ออฟไลน์ (l): global last_loc locs = { "llansantffraid": 4, "oswestry": 5, "lynclys": 8, "home": 9, "shrewsbury": 11, "llanymynech ": 13, "four crosses": 18, "llandrinio": 25, "welshpool": 27 } conn = http.client. HTTPConnection('192.168.1.251:5000') conn.request("GET", str(" /off/") + str(last_loc)) การตอบสนอง = conn.getresponse() f = open("pin", "w") f.write(str(locs[l])) f.close() os.system ("python3 flash.py &") class dad: 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 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): global 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(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 &")
ขั้นตอนที่ 9: สร้างของคุณเองจากแรงบันดาลใจจากโครงการของฉัน
ดังนั้นฉันรู้ว่าขั้นตอนก่อนหน้านี้จะยากมากที่จะเข้าใจ ดังนั้นฉันจะปล่อยให้มันเป็นการแสดงให้คุณเห็นถึงวิธีการสร้างแผนที่ และสามารถมี Raspberry Pi ที่เปิดและปิดไฟ LED ได้ ตอนนี้คุณต้องสร้างสคริปต์หลามที่ใช้ IFTTT เพื่อส่งอีเมลถึงคุณ จากนั้นคุณต้องหาโค้ดอ่านอีเมลซึ่งค่อนข้างง่าย (google it) จากนั้นเมื่อคุณอ่านอีเมลและค้นหาตำแหน่งของผู้ปกครองแล้ว ให้ใช้คำสั่ง 'if' เพื่อค้นหาว่าจะเปิดพินใด
บนแผนที่ ไฟกะพริบหมายความว่าเพิ่งออกจากพื้นที่
วิธีการเปิดไฟ LED บน pi อื่นจาก python มีดังต่อไปนี้:
นำเข้า http.client, urllib.request, urllib.parse, urllib.error, base64
params = urllib.parse.urlencode({ }) conn = http.client. HTTPConnection('192.168.1.251:5000') #change ด้วยที่อยู่ IP ของแผนที่ raspberry pi conn.request("GET", str("/off /2")) # สิ่งนี้จะปิดการตอบสนองของพินหมายเลข 2 = conn.getresponse() # สิ่งนี้จะร้องขอ URL จากนั้น map pi จะอ่านสิ่งนี้และปิดหมายเลขพิน 2
โดยพื้นฐานแล้ว ฉันหวังว่าคุณสามารถใช้สิ่งที่ฉันทำกับแผนที่ 3 มิติของฉันเป็นแรงบันดาลใจในการสร้างแผนที่ติดตาม GPS ของคุณเอง
แนะนำ:
มอเตอร์ไร้แปรงถ่านแบบ 3 มิติ: 7 ขั้นตอน (พร้อมรูปภาพ)
มอเตอร์ไร้แปรงถ่านแบบพิมพ์ 3 มิติ: ฉันออกแบบมอเตอร์นี้โดยใช้ Fusion 360 สำหรับการสาธิตในหัวข้อของมอเตอร์ ดังนั้นฉันจึงต้องการสร้างมอเตอร์ที่รวดเร็วและสอดคล้องกัน แสดงให้เห็นอย่างชัดเจนถึงส่วนต่างๆ ของมอเตอร์ จึงสามารถใช้เป็นแบบจำลองหลักการทำงานพื้นฐานที่แสดงอยู่ใน
เครื่องวัดเกลียวแบบพิมพ์ 3 มิติ: 6 ขั้นตอน (พร้อมรูปภาพ)
สไปโรมิเตอร์แบบพิมพ์ 3 มิติ: สไปโรมิเตอร์เป็นเครื่องมือคลาสสิกในการแยกวิเคราะห์อากาศขณะที่เป่าออกจากปากของคุณ ประกอบด้วยท่อที่คุณเป่าเข้าไปเพื่อบันทึกปริมาตรและความเร็วของลมหายใจหนึ่งครั้ง จากนั้นนำไปเปรียบเทียบกับชุดค่าปกติฐาน
วิธีพิมพ์หุ่นยนต์ 3 มิติ: 4 ขั้นตอน
วิธีพิมพ์หุ่นยนต์ 3 มิติ: วันนี้ฉันจะแสดงให้คุณเห็นถึงวิธีการเปลี่ยนจากภาพสเก็ตช์ที่ทำในไม่กี่นาทีให้เป็นหุ่นยนต์มืออาชีพที่ดูดีพร้อมพิมพ์
กระดานเกลียว (เวอร์ชันที่ไม่มีการพิมพ์ 3 มิติ): E-Textile Rapid Prototyping Board: 4 ขั้นตอน (พร้อมรูปภาพ)
ThreadBoard (Non-3D-Printed Version): E-Textile Rapid Prototyping Board: สามารถดูคำแนะนำสำหรับ ThreadBoard V2 เวอร์ชันที่พิมพ์ 3 มิติ ได้ที่นี่ ThreadBoard เวอร์ชัน 1 สามารถพบได้ที่นี่ ผ่านอุปสรรคด้านราคา การเดินทาง การแพร่ระบาด และอุปสรรคอื่นๆ คุณอาจไม่สามารถเข้าถึงเครื่องพิมพ์ 3 มิติ แต่ต้องการค
หุ่นยนต์ Quadruped ขับเคลื่อนด้วย Arduino ที่พิมพ์ 3 มิติ: 13 ขั้นตอน (พร้อมรูปภาพ)
หุ่นยนต์ Quadruped ที่ขับเคลื่อนด้วย Arduino แบบพิมพ์ 3 มิติ: จาก Instructables ก่อนหน้านี้ คุณอาจเห็นว่าฉันมีความสนใจอย่างมากสำหรับโครงการหุ่นยนต์ หลังจากคำสั่งสอนก่อนหน้านี้ที่ฉันสร้างหุ่นยนต์สองเท้า ฉันตัดสินใจลองทำหุ่นยนต์สี่ขาที่สามารถเลียนแบบสัตว์เช่นสุนัข