Mục lục:

Máy quét điểm XYZ sử dụng bộ mã hóa quay Salvaged: 5 bước
Máy quét điểm XYZ sử dụng bộ mã hóa quay Salvaged: 5 bước

Video: Máy quét điểm XYZ sử dụng bộ mã hóa quay Salvaged: 5 bước

Video: Máy quét điểm XYZ sử dụng bộ mã hóa quay Salvaged: 5 bước
Video: How To Play Star Atlas Part 5: Ship classes and Specs 2024, Tháng bảy
Anonim
Máy quét điểm XYZ sử dụng bộ mã hóa quay Salvaged
Máy quét điểm XYZ sử dụng bộ mã hóa quay Salvaged

Sau khi mua được một số lượng lớn các bộ mã hóa quang quay bị loại bỏ từ nơi làm việc của mình, cuối cùng tôi đã quyết định làm một điều gì đó thú vị / hữu ích với chúng.

Gần đây tôi đã mua một máy in 3D mới cho ngôi nhà của mình và điều gì có thể khen nó tốt hơn một máy quét 3D! Dự án này cũng cho tôi cơ hội hoàn hảo để sử dụng máy in 3D của mình để sản xuất các bộ phận cần thiết.

Quân nhu

Bộ mã hóa quang học và cảm biến quang học tương ứng

Arduino UNO

lá chắn tạo mẫu tùy chọn

thanh thép thanh

truy cập vào máy in 3D

Bước 1: Bộ mã hóa quang học

Bộ mã hóa quang học
Bộ mã hóa quang học
Bộ mã hóa quang học
Bộ mã hóa quang học
Bộ mã hóa quang học
Bộ mã hóa quang học

Hầu hết mọi bộ mã hóa quay đều có thể được sử dụng cho dự án này, miễn là nó cung cấp cho bạn số lượng 'nhấp chuột' tương đối cao trên mỗi mm. Rõ ràng là các bộ mã hóa khác nhau sẽ yêu cầu một giải pháp gắn kết phù hợp.

Tôi đã sử dụng một máy đo độ liên tục để tìm ra sơ đồ đi dây cho các cảm biến quang.

Bước 2: Các bộ phận in 3D

Bộ phận in 3D
Bộ phận in 3D
Bộ phận in 3D
Bộ phận in 3D

Các bộ phận này chứa các bộ mã hóa quay và cung cấp một đường trượt cho thanh ray. Vỏ bộ mã hóa đơn có hai lỗ ở phía sau để gắn các thanh ray chéo vào. Vỏ bộ mã hóa kép chỉ đơn giản là hai vỏ đơn được hợp nhất với nhau ở các góc vuông.

Tôi đã thiết kế các ngàm này trên fusion360 để phù hợp với sự lựa chọn của tôi về bộ mã hóa và đường ray, trục của bộ mã hóa có một đoạn ngắn của vỏ bọc cao su súng cao su, để giúp nó bám vào trục thép không gỉ tốt hơn.

Bạn muốn trục trượt tự do và rơi qua vỏ khi được giữ thẳng đứng, nhưng nó phải tạo đủ áp lực để bộ mã hóa không bị trượt. Điều phù hợp với tôi là cho phép trượt cho trục chồng lên trục bộ mã hóa 0,5mm. Cao su của súng cao su đủ mềm để biến dạng theo lượng đó và cung cấp lực kéo tốt.

Bước 3: Sơ đồ đấu dây

Sơ đồ hệ thống dây điện
Sơ đồ hệ thống dây điện

Mạch rất đơn giản. Các cảm biến quang yêu cầu một số dòng điện cho các điốt phát IR, một điện trở nối đất và kéo lên cho các điốt quang.

Tôi quyết định chọn 5mA cho các điốt phát nối tiếp, trong bộ mã hóa cụ thể này, điện áp giảm trên các điốt là 3,65V. Tôi đang sử dụng nguồn cung cấp 5V từ Arduino, để lại 1,35V cho điện trở, ở 5mA, mức này hoạt động là 270 ohm.

10k ohm đã được chọn cho pull-up vì điốt quang chỉ có thể làm chìm một dòng điện nhỏ, 10k ohm cũng được sử dụng cho nút nhấn. Có một nút có sẵn để sử dụng trên bảng nguyên mẫu đã được kết nối với đất, chỉ cần cung cấp cho nó một điện trở kéo lên và đấu dây vào chân đầu vào mong muốn.

Bước 4: Mã Arduino

Mã Arduino
Mã Arduino
Mã Arduino
Mã Arduino
Mã Arduino
Mã Arduino

Mã cần giải thích một chút vì hoạt động của nó có thể không rõ ràng ngay lập tức, nhưng nó phải được tối ưu hóa theo cách này để có thể xử lý 3 bộ mã hóa đủ nhanh.

Đầu tiên, chúng tôi chỉ muốn xử lý dữ liệu hướng NẾU có sự thay đổi về vị trí bộ mã hóa.

changes = new_value ^ giá trị được lưu trữ;

Để có được độ phân giải cao hơn từ các bộ mã hóa của mình, tôi đã phải xử lý cả các cạnh tăng và giảm.

Trên thiết lập của tôi, độ phân giải của tôi là 24 lần nhấp trên mỗi 1 cm.

Điều này để lại cho chúng ta một vài tình huống.

S1 là hằng số 0 và S2 được chuyển từ 0 thành 1

S1 là hằng số 0 và S2 được chuyển từ 1 thành 0

S1 là hằng số 1 và S2 chuyển đổi từ 0 đến 1

S1 là hằng số 1 và S2 chuyển đổi từ 1 đến 0

S2 là hằng số 0 và S1 được chuyển từ 0 thành 1

S2 là hằng số 0 và S1 được chuyển đổi từ 1 đến 0

S2 là hằng số 1 và S1 chuyển đổi từ 0 đến 1

S2 là hằng số 1 và S1 chuyển đổi từ 1 đến 0

Các điều kiện này được hiểu rõ hơn trong bảng sự thật ở trên, mỗi điều kiện mang lại một 'hướng', được đặt tên tùy ý là 0 hoặc 1.

Các biểu đồ cung cấp cho chúng ta hai manh mối quan trọng:

1) một biểu đồ là nghịch đảo hoàn toàn của biểu đồ kia, vì vậy nếu chúng ta có một biểu đồ, chúng ta có thể dễ dàng tính toán biểu đồ kia bằng cách đảo ngược đầu ra một cách đơn giản. Chúng tôi đảo đầu ra chỉ khi một chân thay đổi chứ không phải chân kia, chúng tôi có thể chọn một chân tùy ý.

2) bản thân biểu đồ chỉ đơn giản là XOR của các tín hiệu S1 và S2. (biểu đồ khác KHÔNG phải của điều này).

Bây giờ hiểu mã thật đơn giản.

// đọc song song trong PORT // nhớ các cặp liền kề thuộc cùng một trạng thái bộ mã hóa = PINB & 0x3f; // những chân nào đã thay đổi nếu có trạng thái diff = hold ^; // XOR các tín hiệu S1 và S2 liền kề để lấy bảng sự thật // cách tốt nhất là tạo một bản sao của trạng thái hiện tại // và chuyển nó sang phải bằng một bit lookup = state >> 1; // bây giờ các bit được căn chỉnh cho trạng thái XOR dir = lookup ^; // hãy nhớ rằng bảng cần được đảo ngược nếu một // trong số các đầu vào không đổi, chúng ta không cần câu lệnh IF // cho điều này. Hiện tại, bit hướng mong muốn // là bit bên phải của mọi cặp trong biến 'dir' // bit bên trái là vô nghĩa // biến 'diff' có bit đã thay đổi 'set' // nên chúng ta có '01' hoặc '10' // XOR điều này với byte 'dir' sẽ // đảo ngược hoặc không phải là bit có nghĩa. dir ^ = khác biệt; // bây giờ cập nhật biến hold hold = state; // nếu một trong hai bit đã thay đổi đối với bộ mã hóa này if (diff & 0x03) {// xác định hướng if (dir & 0x01) {// dựa trên phần mềm và hệ thống dây của bạn ++ hoặc - --z; } else {++ z; }} // ditto cho phần còn lại if (diff & 0x0c) {if (dir & 0x04) {++ y; } khác {--y; }} if (diff & 0x30) {if (dir & 0x10) {--x; } else {++ x; }}

Khi nhấn nút, chúng tôi gửi giá trị XYZ hiện tại đến một chương trình đầu cuối.

Dữ liệu nối tiếp chậm, nhưng trong quá trình hoạt động bình thường, vị trí của các bộ mã hóa sẽ không thay đổi trong thời gian này.

Dữ liệu được gửi dưới dạng số lượng thô. Bạn có thể làm các phép toán và gửi dữ liệu theo mm hoặc inch, v.v. Tôi thấy các giá trị thô cũng tốt vì chúng ta có thể chia tỷ lệ đối tượng sau này trong phần mềm.

Bước 5: Quét đầu tiên

Quét đầu tiên
Quét đầu tiên
Quét đầu tiên
Quét đầu tiên
Quét đầu tiên
Quét đầu tiên
Quét đầu tiên
Quét đầu tiên

Thu thập các điểm là một quá trình chậm, tôi đặt đầu dò ở góc trên cùng bên trái và đặt lại Arduino.

Vị trí này là nhà riêng.

Sau đó di chuyển đầu dò đến vị trí trên mục tiêu, giữ cố định và nhấn nút 'chụp nhanh'.

Đối với phần mẫu khá lớn này, tôi chỉ lấy ~ 140 điểm, vì vậy độ chi tiết của sản phẩm cuối cùng không được tốt.

Lưu dữ liệu vào tệp. PCD và thêm tiêu đề

#. PCD v.7 - Định dạng tệp Dữ liệu Đám mây Điểm

Đưa số điểm của bạn vào tiêu đề, điều này rất dễ dàng trên bất kỳ trình soạn thảo nào cung cấp cho bạn số dòng.

Các dấu chấm phía trên có thể được nhìn thấy trong freeCad, sau đó chúng được xuất từ freeCad dưới dạng tệp. PLY.

Mở. PLY trên MeshLab và tạo bề mặt đối tượng. Xong!!

Đề xuất: