สารบัญ:
- ขั้นตอนที่ 1: รายการวัสดุ
- ขั้นตอนที่ 2: การสร้างเลเซอร์และจิ๊กกล้อง
- ขั้นตอนที่ 3: ขับเลเซอร์และ LCD
- ขั้นตอนที่ 4: การตรวจจับเลเซอร์โดยใช้ OpenCV
- ขั้นตอนที่ 5: การปรับเทียบตัวค้นหาช่วง
- ขั้นตอนที่ 6: การวัดระยะทาง
วีดีโอ: การสร้างเรนจ์ไฟนเดอร์โดยใช้เลเซอร์และกล้อง: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
ฉันกำลังวางแผนงานตกแต่งภายในสำหรับฤดูใบไม้ผลิปีหน้า แต่เนื่องจากฉันเพิ่งซื้อบ้านหลังเก่า ฉันไม่มีแผนบ้านใดๆ ฉันเริ่มวัดระยะห่างระหว่างผนังกับผนังโดยใช้ไม้บรรทัด แต่มันช้าและมีโอกาสผิดพลาดได้ ฉันคิดว่าจะซื้อเครื่องวัดระยะเพื่อให้กระบวนการนี้ง่ายขึ้น แต่แล้วฉันก็พบบทความเก่าเกี่ยวกับการสร้างเครื่องวัดระยะโดยใช้เลเซอร์และกล้อง ปรากฎว่า ฉันมีส่วนประกอบเหล่านั้นในเวิร์กชอปของฉัน
โครงการนี้อ้างอิงจากบทความนี้:
ข้อแตกต่างเพียงอย่างเดียวคือฉันจะสร้างเครื่องวัดระยะโดยใช้ Raspberry Pi Zero W, LCD และโมดูลกล้อง Raspberry Pi ฉันจะใช้ OpenCV เพื่อติดตามเลเซอร์ด้วย
ฉันคิดว่าคุณเข้าใจเทคโนโลยีและคุ้นเคยกับการใช้ Python และบรรทัดคำสั่ง ในโครงการนี้ ฉันใช้ Pi ในโหมดหัวขาด
เริ่มกันเลย!
ขั้นตอนที่ 1: รายการวัสดุ
สำหรับโครงการนี้ คุณจะต้อง:
- เลเซอร์ 6mm 5mW ราคาถูก
- ตัวต้านทาน 220 Ω
- ทรานซิสเตอร์ 2N2222A หรือสิ่งที่เทียบเท่า
- ราสเบอร์รี่ Pi Zero W
- กล้อง Raspberry Pi v2
- จอ LCD Nokia 5110 หรือเทียบเท่า
- สายจัมเปอร์และเขียงหั่นขนมขนาดเล็ก
ฉันใช้เครื่องพิมพ์ 3 มิติเพื่อพิมพ์จิ๊กที่ช่วยฉันในระหว่างการทดลอง ฉันยังวางแผนที่จะใช้เครื่องพิมพ์ 3 มิติเพื่อสร้างกล่องหุ้มที่สมบูรณ์สำหรับตัวค้นหาระยะ คุณสามารถทำได้โดยสิ้นเชิงโดยไม่ต้อง
ขั้นตอนที่ 2: การสร้างเลเซอร์และจิ๊กกล้อง
ระบบจะถือว่าระยะห่างคงที่ระหว่างเลนส์กล้องกับเอาต์พุตเลเซอร์ เพื่อความสะดวกในการทดสอบ ฉันพิมพ์จิ๊กเพื่อติดตั้งกล้อง เลเซอร์ และวงจรขับเคลื่อนขนาดเล็กสำหรับเลเซอร์
ฉันใช้ขนาดของโมดูลกล้องเพื่อสร้างฐานยึดสำหรับกล้อง ฉันใช้คาลิปเปอร์ดิจิตอลและไม้บรรทัดที่มีความแม่นยำเป็นหลักในการวัด สำหรับเลเซอร์ ฉันสร้างรูขนาด 6 มม. พร้อมเสริมแรงเล็กน้อยเพื่อให้แน่ใจว่าเลเซอร์จะไม่เคลื่อนที่ ฉันพยายามจัดพื้นที่ให้เพียงพอเพื่อให้มีเขียงหั่นขนมเล็กๆ ติดอยู่ที่ด้านหลังของจิ๊ก
ฉันใช้ Tinkercad สำหรับบิลด์ คุณสามารถค้นหาโมเดลได้ที่นี่:
มีระยะห่าง 3.75 ซม. ระหว่างศูนย์กลางของเลนส์เลเซอร์กับศูนย์กลางของเลนส์กล้อง
ขั้นตอนที่ 3: ขับเลเซอร์และ LCD
ฉันทำตามบทช่วยสอนนี้ https://www.algissalys.com/how-to/nokia-5110-lcd-on-raspberry-pi เพื่อขับเคลื่อนจอ LCD ด้วย Raspberry Pi Zero แทนที่จะแก้ไขไฟล์ /boot/config.txt คุณสามารถเปิดใช้งานอินเทอร์เฟซ SPI โดยใช้ sudo raspi-config ผ่านบรรทัดคำสั่ง
ฉันใช้ Raspberry Pi Zero ในโหมดหัวขาดโดยใช้ Raspbian Stretch ล่าสุด ณ วันที่ ฉันจะไม่ครอบคลุมการติดตั้งในคำแนะนำนี้ แต่คุณสามารถทำตามคำแนะนำนี้: https://medium.com/@danidudas/install-raspbian-jessie-lite-and-setup-wi-fi-without-access-to- command-line-or-using-the-network-97f065af722e
เพื่อให้ได้จุดเลเซอร์ที่สว่าง ฉันใช้ราง 5V ของ Pi สำหรับสิ่งนั้น ฉันจะใช้ทรานซิสเตอร์ (2N2222a หรือเทียบเท่า) เพื่อขับเคลื่อนเลเซอร์โดยใช้ GPIO ตัวต้านทาน 220 Ω ที่ฐานของทรานซิสเตอร์ช่วยให้กระแสไฟผ่านเลเซอร์ได้เพียงพอ ฉันใช้ RPi. GPIO เพื่อจัดการ Pi GPIO ฉันเชื่อมต่อฐานของทรานซิสเตอร์กับพิน GPIO22 (พินที่ 15) อิมิตเตอร์กับพื้นและตัวสะสมกับเลเซอร์ไดโอด
อย่าลืมเปิดใช้งานอินเทอร์เฟซของกล้องโดยใช้ sudo raspi-config ผ่านบรรทัดคำสั่ง
คุณสามารถใช้รหัสนี้เพื่อทดสอบการตั้งค่าของคุณ:
หากทุกอย่างเป็นไปด้วยดี คุณควรมีไฟล์ dot-j.webp
ในโค้ด เราตั้งค่ากล้องและ GPIO จากนั้นเราเปิดใช้งานเลเซอร์ เราจับภาพ และปิดใช้งานเลเซอร์ ขณะที่ฉันใช้งาน Pi ในโหมดหัวขาด ฉันต้องคัดลอกรูปภาพจาก Pi ของฉันไปยังคอมพิวเตอร์ก่อนที่จะแสดง
ณ จุดนี้ ฮาร์ดแวร์ของคุณควรได้รับการกำหนดค่า
ขั้นตอนที่ 4: การตรวจจับเลเซอร์โดยใช้ OpenCV
ก่อนอื่นเราต้องติดตั้ง OpenCV บน Pi โดยทั่วไปคุณมีสามวิธีในการทำ คุณสามารถติดตั้งเวอร์ชันแพ็คเกจเก่าด้วย apt คุณสามารถคอมไพล์เวอร์ชันที่คุณต้องการได้ แต่ในกรณีนี้ เวลาในการติดตั้งอาจนานถึง 15 ชั่วโมง และส่วนใหญ่จะเป็นการรวบรวมจริง หรือวิธีที่ฉันชอบ คุณสามารถใช้เวอร์ชันที่คอมไพล์ล่วงหน้าสำหรับ Pi Zero ที่จัดหาโดยบุคคลที่สาม
เพราะมันง่ายกว่าและเร็วกว่า ฉันจึงใช้แพ็คเกจของบุคคลที่สาม คุณสามารถค้นหาขั้นตอนการติดตั้งได้ในบทความนี้: https://yoursunny.com/t/2018/install-OpenCV3-PiZero/ ฉันลองใช้แหล่งอื่น ๆ มากมาย แต่แพ็คเกจของพวกเขาไม่ทันสมัย
ในการติดตามตัวชี้เลเซอร์ ฉันได้อัปเดตโค้ดจาก https://github.com/bradmontgomery/python-laser-tracker เพื่อใช้โมดูลกล้อง Pi แทนอุปกรณ์ USB คุณสามารถใช้รหัสได้โดยตรงหากคุณไม่มีโมดูลกล้อง Pi และต้องการใช้กล้อง USB
คุณสามารถค้นหารหัสที่สมบูรณ์ได้ที่นี่:
ในการรันโค้ดนี้ คุณจะต้องติดตั้งแพ็คเกจ Python: pillow and picamera (sudo pip3 install pillow picamera)
ขั้นตอนที่ 5: การปรับเทียบตัวค้นหาช่วง
ในบทความต้นฉบับ ผู้เขียนได้ออกแบบขั้นตอนการสอบเทียบเพื่อให้ได้พารามิเตอร์ที่จำเป็นในการแปลงพิกัด y เป็นระยะทางจริง ฉันใช้โต๊ะในห้องนั่งเล่นเพื่อสอบเทียบและงานคราฟท์ชิ้นเก่า ทุกๆ 10 ซม. หรือมากกว่านั้น ฉันสังเกตพิกัด x และ y ลงในสเปรดชีต: https://docs.google.com/spreadsheets/d/1OTGu09GLAt… เพื่อให้แน่ใจว่าทุกอย่างทำงานอย่างถูกต้อง ในทุกขั้นตอน ฉันตรวจสอบภาพที่ถ่ายเพื่อดูว่า เลเซอร์ถูกติดตามอย่างถูกต้อง หากคุณใช้เลเซอร์สีเขียวหรือหากเลเซอร์ของคุณไม่ถูกติดตามอย่างถูกต้อง คุณจะต้องปรับเฉดสี ความอิ่มตัว และเกณฑ์ค่าของโปรแกรมให้สอดคล้องกัน
เมื่อขั้นตอนการวัดเสร็จสิ้น ก็ถึงเวลาคำนวณพารามิเตอร์จริงๆ เช่นเดียวกับผู้เขียน ฉันใช้การถดถอยเชิงเส้น อันที่จริง Google สเปรดชีตทำงานให้ฉัน จากนั้นฉันก็นำพารามิเตอร์เหล่านั้นกลับมาใช้ใหม่เพื่อคำนวณระยะทางโดยประมาณ และตรวจสอบกับระยะทางจริง
ตอนนี้ได้เวลาใส่พารามิเตอร์ลงในโปรแกรม rangefinder เพื่อวัดระยะทาง
ขั้นตอนที่ 6: การวัดระยะทาง
ในรหัส: https://gist.github.com/kevinlebrun/e767a46855e5fd501d820e1c5fcc527c ฉันอัปเดตตัวแปร HEIGHT, GAIN และ OFFSET ตามการวัดการสอบเทียบ ฉันใช้สูตรระยะทางในบทความต้นฉบับเพื่อประเมินระยะทาง และฉันพิมพ์ระยะทางโดยใช้จอ LCD
รหัสจะตั้งค่ากล้องและ GPIO ก่อน จากนั้นเราต้องการเปิดไฟแบ็คไลท์ LCD เพื่อดูการวัดที่ดีขึ้น อินพุต LCD เสียบกับ GPIO14 ทุกๆ 5 วินาทีหรือมากกว่านั้น เราจะ:
- เปิดใช้งานเลเซอร์ไดโอด
- เก็บภาพไว้ในความทรงจำ
- ปิดการใช้งานเลเซอร์ไดโอด
- ติดตามเลเซอร์โดยใช้ตัวกรองช่วง HSV
- เขียนอิมเมจที่ได้ลงในดิสก์เพื่อการดีบัก
- คำนวณระยะทางตามพิกัด y
- เขียนระยะทางบนจอ LCD
แม้ว่าการวัดจะมีความแม่นยำและแม่นยำสูงเพียงพอสำหรับกรณีการใช้งานของฉัน แต่ก็ยังมีช่องว่างให้ปรับปรุงอีกมาก ตัวอย่างเช่น จุดเลเซอร์มีคุณภาพต่ำมากและเส้นเลเซอร์ไม่ได้อยู่ตรงกลาง ด้วยเลเซอร์ที่มีคุณภาพดีขึ้น ขั้นตอนการสอบเทียบจะแม่นยำยิ่งขึ้น แม้แต่กล้องยังอยู่ในตำแหน่งที่ไม่ดีนักในจิ๊กของฉัน แต่ก็เอียงไปด้านล่าง
ฉันยังสามารถเพิ่มความละเอียดของเรนจ์ไฟน์เดอร์ได้ด้วยการหมุนกล้อง 90º โดยใช้แบบเต็ม และเพิ่มความละเอียดให้สูงสุดที่กล้องรองรับ ด้วยการใช้งานในปัจจุบัน เราจำกัดช่วงพิกเซลไว้ที่ 0 ถึง 384 พิกเซล เราสามารถเพิ่มขีดจำกัดบนเป็น 1640 ซึ่งเป็น 4 เท่าของความละเอียดปัจจุบัน ระยะทางจะแม่นยำยิ่งขึ้น
ในการติดตามผล ฉันจะต้องปรับปรุงความแม่นยำที่ฉันได้กล่าวไว้ข้างต้น และสร้างกรอบสำหรับเครื่องวัดระยะ ตู้จะต้องมีความลึกที่แม่นยำเพื่อให้ง่ายต่อการวัดจากผนังถึงผนัง
โดยรวมแล้วระบบปัจจุบันก็เพียงพอแล้วสำหรับฉันและจะช่วยฉันประหยัดเงินได้บ้างในการวางแผนบ้านของฉัน!
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง