Daftar Isi:

XYZ Point Scanner Menggunakan Salvaged Rotary Encoder: 5 Langkah
XYZ Point Scanner Menggunakan Salvaged Rotary Encoder: 5 Langkah

Video: XYZ Point Scanner Menggunakan Salvaged Rotary Encoder: 5 Langkah

Video: XYZ Point Scanner Menggunakan Salvaged Rotary Encoder: 5 Langkah
Video: Как использовать линейные энкодеры с Arduino. оборудование, код и демо. 2024, November
Anonim
Pemindai Titik XYZ Menggunakan Encoder Rotary yang Diselamatkan
Pemindai Titik XYZ Menggunakan Encoder Rotary yang Diselamatkan

Setelah memperoleh cukup banyak encoder optik putar yang dibuang dari tempat kerja saya, saya akhirnya memutuskan untuk melakukan sesuatu yang menyenangkan/berguna dengan mereka.

Saya baru saja membeli printer 3D baru untuk rumah saya dan apa yang bisa melengkapinya dengan lebih baik daripada pemindai 3D! Proyek ini juga memberi saya kesempatan sempurna untuk menggunakan printer 3D saya untuk memproduksi suku cadang yang diperlukan.

Perlengkapan

Encoder optik dan sensor optik yang sesuai

Arduino UNO

perisai prototipe opsional

rel batang baja

akses ke printer 3D

Langkah 1: Encoder Optik

Encoder Optik
Encoder Optik
Encoder Optik
Encoder Optik
Encoder Optik
Encoder Optik

Hampir semua rotary encoder dapat digunakan untuk proyek ini, selama itu memberi Anda jumlah 'klik' per mm yang relatif tinggi. Jelas pembuat enkode yang berbeda akan membutuhkan solusi pemasangan yang sesuai.

Saya menggunakan pengukur kontinuitas untuk melacak diagram pengkabelan untuk sensor foto.

Langkah 2: Bagian Cetakan 3D

Bagian Cetak 3D
Bagian Cetak 3D
Bagian Cetak 3D
Bagian Cetak 3D

Bagian-bagian ini menampung encoder putar dan menyediakan slide untuk rel. Rumah pembuat enkode tunggal memiliki dua lubang di bagian belakang untuk memasang rel silang. Rumah enkoder ganda hanyalah dua rumahan tunggal yang disatukan pada sudut yang tepat.

Saya merancang dudukan ini pada fusion360 agar sesuai dengan encoder dan rel pilihan saya, poros encoder memiliki bagian pendek selubung karet katapel, untuk membantunya mencengkeram poros baja tahan karat dengan lebih baik.

Anda ingin poros meluncur bebas dan jatuh melalui rumahan saat dipegang secara vertikal, namun poros harus memberikan tekanan yang cukup pada enkoder agar tidak tergelincir. Apa yang berhasil bagi saya adalah membiarkan slide untuk poros tumpang tindih dengan poros encoder sebesar 0,5 mm. Karet katapel cukup lunak untuk berubah bentuk dengan jumlah tersebut dan memberikan traksi yang baik.

Langkah 3: Diagram Pengkabelan

Diagram pengkabelan
Diagram pengkabelan

Sirkuitnya sangat sederhana. Opto-sensor membutuhkan arus untuk dioda emitor IR, resistor ground dan resistor pull-up untuk dioda foto.

Saya memutuskan 5mA untuk dioda emitor seri, dalam encoder khusus ini penurunan tegangan melintasi dioda adalah 3,65V. Saya menggunakan pasokan 5V dari Arduino, yang menyisakan 1,35V untuk resistor, pada 5mA ini berhasil menjadi 270 ohm.

10k ohm dipilih untuk pull-up karena foto-dioda hanya dapat menenggelamkan arus kecil, 10k ohm juga digunakan untuk tombol tekan. Ada tombol yang tersedia untuk digunakan pada papan prototipe yang sudah terhubung ke ground, cukup sediakan resistor pull-up dan sambungkan ke pin input yang diinginkan.

Langkah 4: Kode Arduino

Kode Arduino
Kode Arduino
Kode Arduino
Kode Arduino
Kode Arduino
Kode Arduino

Kode tersebut memerlukan sedikit penjelasan karena pengoperasiannya mungkin tidak langsung terlihat, namun harus dioptimalkan dengan cara ini agar dapat memproses 3 encoder dengan cukup cepat.

Pertama kita hanya ingin mengolah data arah JIKA telah terjadi perubahan posisi encoder.

perubahan = nilai_baru ^ nilai tersimpan;

Untuk mendapatkan lebih banyak resolusi dari encoder saya, saya harus memproses tepi naik dan turun.

Pada pengaturan saya, resolusi saya adalah 24 klik per 1cm.

Ini meninggalkan kita dengan beberapa skenario.

S1 konstan 0 dan S2 beralih dari 0 ke 1

S1 konstan 0 dan S2 beralih dari 1 ke 0

S1 adalah konstan 1 dan S2 beralih dari 0 ke 1

S1 adalah konstan 1 dan S2 beralih dari 1 ke 0

S2 konstan 0 dan S1 beralih dari 0 ke 1

S2 konstan 0 dan S1 beralih dari 1 ke 0

S2 adalah konstan 1 dan S1 beralih dari 0 ke 1

S2 adalah konstan 1 dan S1 beralih dari 1 ke 0

Kondisi ini lebih baik dipahami dalam tabel kebenaran di atas, juga setiap kondisi menghasilkan 'arah', yang diberi nama 0 atau 1.

Grafik memberi kita dua petunjuk penting:

1) satu grafik adalah kebalikan dari yang lain, jadi jika kita memilikinya, kita dapat dengan mudah menghitung yang lain hanya dengan membalikkan output. Kami membalikkan output hanya jika satu pin berubah dan bukan yang lain, kami dapat memilih satu secara sewenang-wenang.

2) grafik itu sendiri hanyalah XOR dari sinyal S1 dan S2. (bagan lainnya BUKAN dari ini).

Sekarang memahami kode itu sederhana.

// baca di PORT secara paralel // ingat pasangan yang berdekatan memiliki status encoder yang sama = PINB & 0x3f; // pin apa yang telah berubah jika ada diff = hold ^ state; // XOR sinyal S1 dan S2 yang berdekatan untuk mendapatkan tabel kebenaran // cara termudah adalah dengan membuat salinan status saat ini // dan menggesernya ke kanan satu bit lookup = state >> 1; // sekarang bit disejajarkan untuk XOR dir = lookup ^ state; // ingat, tabel perlu dibalik jika salah satu // input tetap, kita tidak memerlukan pernyataan IF // untuk ini. Saat ini bit arah yang diinginkan // adalah bit kanan dari setiap pasangan dalam variabel 'dir' // bit kiri tidak berarti // variabel 'diff' memiliki bit yang mengubah 'set' // jadi kita memiliki '01' atau '10' // XOR ini dengan byte 'dir' akan // membalikkan atau tidak bit yang berarti. dir ^= beda; // sekarang perbarui terus variabel tahan = status; // jika salah satu bit telah berubah untuk encoder ini if(diff & 0x03) { // tentukan arah if(dir & 0x01) { // berdasarkan hadware dan wiring Anda baik ++ atau -- --z; } lain { ++z; } } // sama untuk sisanya if(diff & 0x0c) { if(dir & 0x04) { ++y; } lain { --y; } } jika(beda & 0x30) { jika(dir & 0x10) { --x; } lain { ++x; } }

Ketika tombol ditekan, kami mengirim nilai XYZ saat ini ke program terminal.

Data serial lambat, tetapi selama operasi normal, posisi enkoder tidak akan berubah selama waktu ini.

Data dikirim sebagai jumlah mentah. Anda dapat menghitung dan mengirim data dalam mm atau inci dll. Saya menemukan nilai mentah sama baiknya karena kita dapat menskalakan objek nanti dalam perangkat lunak.

Langkah 5: Pemindaian Pertama

Pemindaian Pertama
Pemindaian Pertama
Pemindaian Pertama
Pemindaian Pertama
Pemindaian Pertama
Pemindaian Pertama
Pemindaian Pertama
Pemindaian Pertama

Mengumpulkan poin adalah proses yang lambat, saya meletakkan probe di sudut kiri atas dan mengatur ulang Arduino.

Ini nol posisi sebagai rumah.

Kemudian pindahkan probe ke lokasi pada target, tahan dengan stabil dan tekan tombol 'snapshot'.

Untuk potongan sampel yang agak besar ini saya hanya mengambil ~140 poin, jadi detailnya tidak terlalu bagus pada produk akhir.

Simpan data ke dalam file. PCD, dan tambahkan header

#. PCD v.7 - Format file Point Cloud DataVERSI.7 BIDANG x y z UKURAN 4 4 4 TYPE F F F COUNT 1 1 1 WIDTH (jumlah poin Anda) TINGGI 1 VIEWPOINT 0 0 0 1 0 0 0 POIN (jumlah poin Anda)

Tempatkan hitungan poin Anda di header, ini mudah di editor mana pun yang memberi Anda nomor baris.

Di atas titik-titik dapat dilihat di freeCad, mereka kemudian diekspor dari freeCad sebagai file. PLY.

Buka. PLY di MeshLab dan permukaan objek. Selesai!!

Direkomendasikan: