สารบัญ:

เครื่องสแกนจุด XYZ โดยใช้เครื่องเข้ารหัสโรตารีที่กู้คืนแล้ว: 5 ขั้นตอน
เครื่องสแกนจุด XYZ โดยใช้เครื่องเข้ารหัสโรตารีที่กู้คืนแล้ว: 5 ขั้นตอน

วีดีโอ: เครื่องสแกนจุด XYZ โดยใช้เครื่องเข้ารหัสโรตารีที่กู้คืนแล้ว: 5 ขั้นตอน

วีดีโอ: เครื่องสแกนจุด XYZ โดยใช้เครื่องเข้ารหัสโรตารีที่กู้คืนแล้ว: 5 ขั้นตอน
วีดีโอ: #shorts #หินปูนเกาะหนามาก #scaling 2024, พฤศจิกายน
Anonim
เครื่องสแกนจุด XYZ โดยใช้เครื่องเข้ารหัสโรตารีที่ถูกกู้คืน
เครื่องสแกนจุด XYZ โดยใช้เครื่องเข้ารหัสโรตารีที่ถูกกู้คืน

หลังจากได้รับตัวเข้ารหัสออปติคัลแบบหมุนที่ถูกทิ้งจำนวนมากจากที่ทำงานของฉัน ในที่สุดฉันก็ตัดสินใจทำสิ่งที่สนุก/มีประโยชน์กับพวกเขา

ฉันเพิ่งซื้อเครื่องพิมพ์ 3D ใหม่สำหรับบ้านของฉัน และอะไรจะดีไปกว่าเครื่องสแกน 3D! โครงการนี้ยังเปิดโอกาสให้ฉันได้ใช้เครื่องพิมพ์ 3 มิติเพื่อผลิตชิ้นส่วนที่จำเป็น

เสบียง

ตัวเข้ารหัสออปติคัลและเซ็นเซอร์ออปติคัลที่เกี่ยวข้อง

Arduino UNO

เกราะป้องกันการสร้างต้นแบบเสริม

รางเหล็กเส้น

การเข้าถึงเครื่องพิมพ์ 3 มิติ

ขั้นตอนที่ 1: ตัวเข้ารหัสออปติคัล

ตัวเข้ารหัสออปติคัล
ตัวเข้ารหัสออปติคัล
ตัวเข้ารหัสออปติคัล
ตัวเข้ารหัสออปติคัล
ตัวเข้ารหัสออปติคัล
ตัวเข้ารหัสออปติคัล

โปรเจ็กต์นี้สามารถใช้เครื่องเข้ารหัสแบบโรตารี่เกือบทุกชนิด ตราบใดที่มี 'คลิก' ต่อมม. ในปริมาณที่ค่อนข้างสูง ตัวเข้ารหัสที่แตกต่างกันจะต้องใช้วิธีการติดตั้งที่เหมาะสม

ฉันใช้เครื่องวัดความต่อเนื่องเพื่อติดตามแผนภาพการเดินสายไฟสำหรับเซ็นเซอร์ภาพถ่าย

ขั้นตอนที่ 2: ชิ้นส่วนที่พิมพ์ 3 มิติ

ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ
ชิ้นส่วนพิมพ์ 3 มิติ

ชิ้นส่วนเหล่านี้เป็นที่ตั้งของตัวเข้ารหัสแบบหมุนและจัดเตรียมสไลด์สำหรับราง ตัวเรือนเอ็นโค้ดเดอร์เดี่ยวมีสองรูที่ด้านหลังสำหรับรางขวางเพื่อยึด โครงเครื่องเข้ารหัสแบบคู่เป็นเพียงเรือนเดี่ยวสองเรือนที่หลอมรวมกันเป็นมุมฉาก

ฉันออกแบบตัวยึดเหล่านี้บน fusion360 เพื่อให้เหมาะกับตัวเข้ารหัสและรางที่ฉันเลือก เพลาของตัวเข้ารหัสมีปลอกยางหนังสติ๊กแบบสั้น เพื่อช่วยให้จับเพลาสแตนเลสได้ดียิ่งขึ้น

คุณต้องการให้ก้านเลื่อนได้อย่างอิสระและตกลงมาผ่านตัวเรือนเมื่อถือในแนวตั้ง แต่ต้องออกแรงกดที่เพียงพอบนตัวเข้ารหัสเพื่อไม่ให้ลื่นไถล สิ่งที่ได้ผลสำหรับฉันคือการปล่อยให้สไลด์สำหรับเพลาทับซ้อนกับเพลาตัวเข้ารหัส 0.5 มม. ยางหนังสติ๊กนุ่มพอที่จะทำให้เสียรูปตามปริมาณนั้นและให้การยึดเกาะที่ดี

ขั้นตอนที่ 3: แผนภาพการเดินสายไฟ

แผนภาพการเดินสายไฟ
แผนภาพการเดินสายไฟ

วงจรนั้นง่ายมาก ออปโตเซนเซอร์ต้องการกระแสไฟบางส่วนสำหรับไดโอดอีมิตเตอร์อินฟราเรด ตัวต้านทานกราวด์และตัวต้านทานแบบดึงขึ้นสำหรับโฟโต้ไดโอด

ฉันตัดสินใจเลือก 5mA สำหรับไดโอดอีมิตเตอร์ในซีรีส์ โดยในตัวเข้ารหัสนี้ แรงดันไฟฟ้าตกคร่อมไดโอดคือ 3.65V ฉันใช้แหล่งจ่ายไฟ 5V จาก Arduino ซึ่งเหลือ 1.35V สำหรับตัวต้านทาน ที่ 5mA ผลลัพธ์ที่ได้คือ 270 โอห์ม

10k ohm ถูกเลือกสำหรับการดึงขึ้นเนื่องจากโฟโตไดโอดสามารถจมกระแสไฟเพียงเล็กน้อยเท่านั้น 10k ohm ยังใช้สำหรับปุ่มกดด้วย มีปุ่มสำหรับใช้งานบนบอร์ดต้นแบบที่เชื่อมต่อกับกราวด์แล้ว เพียงแค่ให้ตัวต้านทานแบบดึงขึ้นและต่อเข้ากับพินอินพุตที่ต้องการ

ขั้นตอนที่ 4: รหัส Arduino

รหัส Arduino
รหัส Arduino
รหัส Arduino
รหัส Arduino
รหัส Arduino
รหัส 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 และแสดงวัตถุ เสร็จแล้ว!!

แนะนำ: