สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: ตัวเข้ารหัสออปติคัล
- ขั้นตอนที่ 2: ชิ้นส่วนที่พิมพ์ 3 มิติ
- ขั้นตอนที่ 3: แผนภาพการเดินสายไฟ
- ขั้นตอนที่ 4: รหัส Arduino
- ขั้นตอนที่ 5: สแกนครั้งแรก
วีดีโอ: เครื่องสแกนจุด XYZ โดยใช้เครื่องเข้ารหัสโรตารีที่กู้คืนแล้ว: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
หลังจากได้รับตัวเข้ารหัสออปติคัลแบบหมุนที่ถูกทิ้งจำนวนมากจากที่ทำงานของฉัน ในที่สุดฉันก็ตัดสินใจทำสิ่งที่สนุก/มีประโยชน์กับพวกเขา
ฉันเพิ่งซื้อเครื่องพิมพ์ 3D ใหม่สำหรับบ้านของฉัน และอะไรจะดีไปกว่าเครื่องสแกน 3D! โครงการนี้ยังเปิดโอกาสให้ฉันได้ใช้เครื่องพิมพ์ 3 มิติเพื่อผลิตชิ้นส่วนที่จำเป็น
เสบียง
ตัวเข้ารหัสออปติคัลและเซ็นเซอร์ออปติคัลที่เกี่ยวข้อง
Arduino UNO
เกราะป้องกันการสร้างต้นแบบเสริม
รางเหล็กเส้น
การเข้าถึงเครื่องพิมพ์ 3 มิติ
ขั้นตอนที่ 1: ตัวเข้ารหัสออปติคัล
โปรเจ็กต์นี้สามารถใช้เครื่องเข้ารหัสแบบโรตารี่เกือบทุกชนิด ตราบใดที่มี 'คลิก' ต่อมม. ในปริมาณที่ค่อนข้างสูง ตัวเข้ารหัสที่แตกต่างกันจะต้องใช้วิธีการติดตั้งที่เหมาะสม
ฉันใช้เครื่องวัดความต่อเนื่องเพื่อติดตามแผนภาพการเดินสายไฟสำหรับเซ็นเซอร์ภาพถ่าย
ขั้นตอนที่ 2: ชิ้นส่วนที่พิมพ์ 3 มิติ
ชิ้นส่วนเหล่านี้เป็นที่ตั้งของตัวเข้ารหัสแบบหมุนและจัดเตรียมสไลด์สำหรับราง ตัวเรือนเอ็นโค้ดเดอร์เดี่ยวมีสองรูที่ด้านหลังสำหรับรางขวางเพื่อยึด โครงเครื่องเข้ารหัสแบบคู่เป็นเพียงเรือนเดี่ยวสองเรือนที่หลอมรวมกันเป็นมุมฉาก
ฉันออกแบบตัวยึดเหล่านี้บน fusion360 เพื่อให้เหมาะกับตัวเข้ารหัสและรางที่ฉันเลือก เพลาของตัวเข้ารหัสมีปลอกยางหนังสติ๊กแบบสั้น เพื่อช่วยให้จับเพลาสแตนเลสได้ดียิ่งขึ้น
คุณต้องการให้ก้านเลื่อนได้อย่างอิสระและตกลงมาผ่านตัวเรือนเมื่อถือในแนวตั้ง แต่ต้องออกแรงกดที่เพียงพอบนตัวเข้ารหัสเพื่อไม่ให้ลื่นไถล สิ่งที่ได้ผลสำหรับฉันคือการปล่อยให้สไลด์สำหรับเพลาทับซ้อนกับเพลาตัวเข้ารหัส 0.5 มม. ยางหนังสติ๊กนุ่มพอที่จะทำให้เสียรูปตามปริมาณนั้นและให้การยึดเกาะที่ดี
ขั้นตอนที่ 3: แผนภาพการเดินสายไฟ
วงจรนั้นง่ายมาก ออปโตเซนเซอร์ต้องการกระแสไฟบางส่วนสำหรับไดโอดอีมิตเตอร์อินฟราเรด ตัวต้านทานกราวด์และตัวต้านทานแบบดึงขึ้นสำหรับโฟโต้ไดโอด
ฉันตัดสินใจเลือก 5mA สำหรับไดโอดอีมิตเตอร์ในซีรีส์ โดยในตัวเข้ารหัสนี้ แรงดันไฟฟ้าตกคร่อมไดโอดคือ 3.65V ฉันใช้แหล่งจ่ายไฟ 5V จาก Arduino ซึ่งเหลือ 1.35V สำหรับตัวต้านทาน ที่ 5mA ผลลัพธ์ที่ได้คือ 270 โอห์ม
10k ohm ถูกเลือกสำหรับการดึงขึ้นเนื่องจากโฟโตไดโอดสามารถจมกระแสไฟเพียงเล็กน้อยเท่านั้น 10k ohm ยังใช้สำหรับปุ่มกดด้วย มีปุ่มสำหรับใช้งานบนบอร์ดต้นแบบที่เชื่อมต่อกับกราวด์แล้ว เพียงแค่ให้ตัวต้านทานแบบดึงขึ้นและต่อเข้ากับพินอินพุตที่ต้องการ
ขั้นตอนที่ 4: รหัส Arduino
โค้ดต้องการคำอธิบายเล็กน้อยเนื่องจากการทำงานของโค้ดอาจไม่ชัดเจนในทันที แต่ก็ต้องปรับให้เหมาะสมด้วยวิธีนี้เพื่อให้สามารถประมวลผลตัวเข้ารหัส 3 ตัวได้เร็วพอ
ประการแรก เราเพียงต้องการประมวลผลข้อมูลทิศทางเท่านั้น หากมีการเปลี่ยนแปลงตำแหน่งตัวเข้ารหัส
การเปลี่ยนแปลง = new_value ^ ค่าที่เก็บไว้;
เพื่อให้ได้ความละเอียดมากขึ้นจากตัวเข้ารหัสของฉัน ฉันต้องประมวลผลทั้งขอบขึ้นและลง
ในการตั้งค่าของฉันความละเอียดของฉันคือ 24 คลิกต่อ 1 ซม.
สิ่งนี้ทำให้เรามีบางสถานการณ์
S1 เป็นค่าคงที่ 0 และ S2 สลับจาก 0 ถึง 1
S1 เป็นค่าคงที่ 0 และ S2 สลับจาก 1 เป็น 0
S1 เป็นค่าคงที่ 1 และ S2 สลับจาก 0 ถึง 1
S1 เป็นค่าคงที่ 1 และ S2 สลับจาก 1 เป็น 0
S2 เป็นค่าคงที่ 0 และ S1 สลับจาก 0 ถึง 1
S2 เป็นค่าคงที่ 0 และ S1 สลับจาก 1 เป็น 0
S2 เป็นค่าคงที่ 1 และ S1 สลับจาก 0 ถึง 1
S2 เป็นค่าคงที่ 1 และ S1 สลับจาก 1 เป็น 0
เงื่อนไขเหล่านี้เข้าใจได้ดีกว่าในตารางความจริงด้านบน นอกจากนี้ แต่ละเงื่อนไขยังให้ 'ทิศทาง' ซึ่งตั้งชื่อตามอำเภอใจว่า 0 หรือ 1
แผนภูมิให้ข้อมูลสำคัญสองประการแก่เรา:
1) แผนภูมิหนึ่งเป็นค่าผกผันที่สมบูรณ์ของอีกแผนภูมิหนึ่ง ดังนั้น ถ้าเรามีแผนภูมิหนึ่ง เราสามารถคำนวณอีกแผนภูมิได้อย่างง่ายดายโดยเพียงแค่กลับผลลัพธ์ เรากลับเอาท์พุตเฉพาะเมื่อพินหนึ่งกำลังเปลี่ยนและไม่ใช่อีกอัน เราสามารถเลือกอันใดอันหนึ่งโดยพลการ
2) แผนภูมินั้นเป็นเพียง XOR ของสัญญาณ S1 และ S2 (แผนภูมิอื่นไม่ใช่ของสิ่งนี้)
ตอนนี้การทำความเข้าใจรหัสนั้นง่าย
// อ่านใน PORT แบบขนาน // จำไว้ว่าคู่ที่อยู่ติดกันอยู่ในสถานะตัวเข้ารหัสเดียวกัน = PINB & 0x3f; // พินใดที่เปลี่ยนไปหากมีสถานะ diff = ถือ ^; // XOR ที่อยู่ติดกัน S1 และ S2 ส่งสัญญาณเพื่อรับตารางความจริง // วิธีที่ง่ายที่สุดคือการทำสำเนาของสถานะปัจจุบัน // และเลื่อนไปทางขวาโดยการค้นหาหนึ่งบิต = state >> 1; // ตอนนี้บิตถูกจัดตำแหน่งสำหรับสถานะ XOR dir = ค้นหา ^; // จำไว้ว่า ตารางจะต้องถูกกลับด้านหาก // ของอินพุตคงที่ เราไม่ต้องการคำสั่ง IF // สำหรับสิ่งนี้ ขณะนี้บิตทิศทางที่ต้องการ // เป็นบิตทางขวามือของทุกคู่ในตัวแปร 'dir' // บิตทางซ้ายไม่มีความหมาย // ตัวแปร 'diff' มีบิตที่เปลี่ยน 'set' // ดังนั้นเราจึงมี '01' หรือ '10' // XOR สิ่งนี้ด้วยไบต์ 'dir' จะ // กลับด้านหรือไม่ก็ได้บิตที่มีความหมาย ผบ ^= แตกต่าง; // ตอนนี้อัพเดตตัวแปร hold = state; // ถ้าบิตใดมีการเปลี่ยนแปลงสำหรับตัวเข้ารหัสนี้ if (diff & 0x03) { // กำหนดทิศทาง if (dir & 0x01) { // ขึ้นอยู่กับแฮดแวร์และการเดินสายของคุณ ++ หรือ --z; } อื่น ๆ { ++z; } } // เหมือนกันสำหรับส่วนที่เหลือ if(diff & 0x0c) { if(dir & 0x04) { ++y; } อื่น ๆ { --y; } } if(diff & 0x30) { if(dir & 0x10) { --x; } อื่นๆ { ++x; } }
เมื่อกดปุ่ม เราจะส่งค่า XYZ ปัจจุบันไปยังโปรแกรมเทอร์มินัล
ข้อมูลอนุกรมนั้นช้า แต่ในระหว่างการทำงานปกติ ตำแหน่งของตัวเข้ารหัสจะไม่เปลี่ยนแปลงในช่วงเวลานี้อยู่ดี
ข้อมูลจะถูกส่งเป็นการนับดิบ คุณสามารถคำนวณและส่งข้อมูลเป็นหน่วย มม. หรือนิ้ว เป็นต้น ฉันพบว่าค่าดิบนั้นดีพอๆ กัน เพราะเราสามารถปรับขนาดวัตถุได้ในภายหลังในซอฟต์แวร์
ขั้นตอนที่ 5: สแกนครั้งแรก
การรวบรวมคะแนนเป็นกระบวนการที่ช้า ฉันวางโพรบที่มุมซ้ายบนและรีเซ็ต Arduino
สิ่งนี้ทำให้ตำแหน่งเป็นบ้านเป็นศูนย์
จากนั้นย้ายโพรบไปยังตำแหน่งบนเป้าหมาย ถือให้นิ่งแล้วกดปุ่ม 'snapshot'
สำหรับชิ้นงานตัวอย่างที่ค่อนข้างใหญ่นี้ ฉันทำได้เพียง 140 คะแนน ดังนั้นรายละเอียดในผลิตภัณฑ์ขั้นสุดท้ายจึงไม่ค่อยดีนัก
บันทึกข้อมูลลงในไฟล์. PCD และเพิ่มส่วนหัว
#. PCD v.7 - รูปแบบไฟล์ Point Cloud DataVERSION.7 FIELDS x y z ขนาด 4 4 4 ประเภท F F F นับ 1 1 1 WIDTH (การนับแต้มของคุณ) HEIGHT 1 VIEWPOINT 0 0 0 1 0 0 0 POINTS (การนับแต้มของคุณ)
ใส่การนับคะแนนในส่วนหัว ซึ่งเป็นเรื่องง่ายสำหรับโปรแกรมแก้ไขใดๆ ที่ให้หมายเลขบรรทัดแก่คุณ
ด้านบนจุดสามารถเห็นได้ใน freeCad จากนั้นจะส่งออกจาก freeCad เป็นไฟล์. PLY
เปิด. PLY บน MeshLab และแสดงวัตถุ เสร็จแล้ว!!
แนะนำ:
การออกแบบเกมในการสะบัดใน 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++)
การใช้ Arduino Uno สำหรับการวางตำแหน่ง XYZ ของแขนหุ่นยนต์ 6 DOF: 4 ขั้นตอน
การใช้ Arduino Uno สำหรับการวางตำแหน่ง XYZ ของแขนกล DOF 6 ตัว: โครงการนี้เกี่ยวกับการนำร่าง Arduino ที่สั้นและค่อนข้างง่ายไปใช้ในการจัดตำแหน่งจลนศาสตร์ผกผันของ XYZ ฉันได้สร้างแขนหุ่นยนต์เซอร์โว 6 ตัวแล้ว แต่เมื่อต้องหาซอฟต์แวร์เพื่อใช้งาน ไม่มีอะไรมากนอกจากการดูแล