Mündəricat:

Qurtarılan Rotary Kodlayıcılardan istifadə edən XYZ Noktası Skaneri: 5 addım
Qurtarılan Rotary Kodlayıcılardan istifadə edən XYZ Noktası Skaneri: 5 addım

Video: Qurtarılan Rotary Kodlayıcılardan istifadə edən XYZ Noktası Skaneri: 5 addım

Video: Qurtarılan Rotary Kodlayıcılardan istifadə edən XYZ Noktası Skaneri: 5 addım
Video: Əsirlikdən qurtarılan azərbaycanlı hərbçilər ailəsinə təhvil verilib 2024, Iyul
Anonim
Qurtarılan Rotary Enkoderlərdən istifadə edən XYZ Noktası Skaneri
Qurtarılan Rotary Enkoderlərdən istifadə edən XYZ Noktası Skaneri

İş yerimdən çoxlu atılmış fırlanan optik kodlayıcılar əldə edərək, nəhayət onlarla əyləncəli/faydalı bir şey etməyə qərar verdim.

Bu yaxınlarda evim üçün yeni bir 3D printer aldım və bunu 3D skanerdən daha yaxşı nə tərifləyə bilər! Bu layihə mənə lazım olan hissələri istehsal etmək üçün 3D printerimi işə salmaq üçün mükəmməl bir fürsət verdi.

Təchizat

Optik kodlayıcılar və müvafiq optik sensorlar

Arduino UNO

isteğe bağlı prototip qalxan

polad çubuqlar

3D printerə giriş

Addım 1: Optik Kodlayıcılar

Optik kodlayıcılar
Optik kodlayıcılar
Optik kodlayıcılar
Optik kodlayıcılar
Optik kodlayıcılar
Optik kodlayıcılar

Sizə mm başına nisbətən çox sayda 'klik' təmin etdiyi müddətcə bu layihə üçün demək olar ki, hər hansı bir dönər kodlayıcı istifadə edilə bilər. Aydındır ki, fərqli kodlayıcılar uyğun bir montaj həlli tələb edir.

Fotosensorların naqillərinin diaqramını izləmək üçün davamlılıq sayğacından istifadə etdim.

Addım 2: 3D çaplı hissələr

3D çaplı hissələr
3D çaplı hissələr
3D çaplı hissələr
3D çaplı hissələr

Bu hissələr döner kodlayıcıları yerləşdirir və dəmir yolu üçün bir sürüşmə təmin edir. Tək enkoder korpusunun arxa tərəfində çarpaz rayların quraşdırılması üçün iki deşik var. İkiqat kodlayıcı korpusu, düzgün açılarda bir -birinə bağlanmış iki tək yuvadan ibarətdir.

Bu bağlayıcıları fusion360 üzərindəki kodlayıcı və ray seçimimə uyğun dizayn etdim, enkoderin şaftı paslanmayan polad mili daha yaxşı tutmasına kömək etmək üçün qısa bir azmış rezin kılıfdan ibarətdir.

Şaftın sərbəst sürüşməsini və şaquli tutulduqda gövdədən düşməsini istəyirsiniz, ancaq sürüşməmək üçün kodlayıcıya kifayət qədər təzyiq göstərməlidir. Mənim üçün işləyən şey, milin sürüşməsinin enkoder şaftı ilə 0,5 mm üst -üstə düşməsinə icazə vermək idi. Sapan kauçuk, bu miqdarda deformasiya oluna biləcək və yaxşı dartma təmin edəcək qədər yumşaqdır.

Addım 3: Bağlama Şeması

Kabel diaqramı
Kabel diaqramı

Dövrə çox sadədir. Opto-sensorlar, İQ yayıcı diodlar üçün bir az cərəyan, foto diodlar üçün torpaq və çəkmə rezistorları tələb edir.

Seriyalı emitter diodları üçün 5mA qərar verdim, bu xüsusi kodlayıcıda diodlar arasındakı gərginlik düşməsi 3.65V-dir. Rezistor üçün 1.35V buraxan Arduino -dan 5V təchizatı istifadə edirəm, 5mA -da bu 270 ohm olacaq.

Fotodiodlar kiçik bir cərəyanı batıra bildiyi üçün çəkmələr üçün 10k ohm seçildi, düymə üçün 10k ohm da istifadə edildi. Artıq yerə bağlı olan prototip lövhəsində istifadə etmək üçün bir düymə var, onu bir çəkmə rezistoru ilə təmin edin və istədiyiniz giriş pininə bağlayın.

Addım 4: Arduino Kodu

Arduino kodu
Arduino kodu
Arduino kodu
Arduino kodu
Arduino kodu
Arduino kodu

Kodun bir az izahına ehtiyacı var, çünki onun işləməsi dərhal aydın olmaya bilər, lakin 3 kodlayıcının kifayət qədər tez işlənməsi üçün bu şəkildə optimallaşdırılmalı idi.

Birincisi, yalnız kodlayıcı mövqeyində bir dəyişiklik olarsa istiqamət məlumatlarını işləmək istəyirik.

dəyişikliklər = new_value ^ saxlanılan dəyər;

Enkoderlərimdən daha çox qətnamə əldə etmək üçün həm yüksələn, həm də düşən kənarları emal etməli oldum.

Quraşdırma zamanı qətnaməm 1 sm başına 24 klikdir.

Bu, bizə bir neçə ssenari qoyur.

S1 sabitdir 0 və S2 0 -dan 1 -ə keçir

S1 sabitdir 0 və S2 1 -dən 0 -a keçdi

S1 sabitdir 1 və S2 0 -dan 1 -ə keçir

S1 sabitdir 1 və S2 1 -dən 0 -a keçir

S2 sabitdir 0 və S1 0 -dan 1 -ə keçir

S2 sabitdir 0 və S1 1 -dən 0 -a keçdi

S2 sabitdir 1 və S1 0 -dan 1 -ə keçir

S2 sabitdir 1 və S1 1 -dən 0 -a keçir

Bu şərtlər yuxarıdakı həqiqət cədvəllərində daha yaxşı başa düşülür, eyni zamanda hər bir şərt özbaşına 0 və ya 1 olaraq adlandırılan 'istiqamət' verir.

Qrafiklər bizə iki həyati ipucu verir:

1) bir diaqram digərinin tam tərsidir, buna görə də birimiz varsa, çıxışı sadəcə ters çevirərək digərini asanlıqla hesablaya bilərik. Çıxışı yalnız bir pin dəyişirsə, digərini dəyişdiririk, özbaşına birini seçə bilərik.

2) qrafikin özü sadəcə S1 və S2 siqnallarının XOR -dur. (digər qrafik bu deyil).

İndi kodu anlamaq çox sadədir.

// paralel olaraq PORT -da oxuyun // bitişik cütlərin eyni kodlayıcı vəziyyətinə aid olduğunu xatırlayın = PINB & 0x3f; // hansı sancaqlar dəyişsə, hansı pinlər dəyişir = hold ^ state; // XOR bitişik S1 və S2 siqnalları həqiqət cədvəlini almaq üçün // ən asan yol cari vəziyyətin bir nüsxəsini çıxarmaqdır // bir az axtarıb sağa çevirmək = vəziyyət >> 1; // indi bitlər XOR dir = search ^ state üçün hizalanır; // unutmayın ki, girişlərdən biri sabit qalsa cədvəli tərs çevirmək lazımdır, bunun üçün IF // ifadəsinə ehtiyacımız yoxdur. Hal -hazırda istədiyiniz istiqamət biti 'dir' dəyişənindəki hər cütün sağ əl bitidir // sol əlin mənası yoxdur // 'diff' dəyişəninin 'dəsti' dəyişdirən biti var // buna görə də '01' və ya '10' // XOR 'dir' baytı ilə ya // ters çevirəcək, ya da mənalı bit olmayacaq. dir ^= fərq; // indi hold dəyişən hold = vəziyyətini yeniləyin; // əgər bu kodlayıcı üçün hər hansı bir bit dəyişərsə, əgər (diff & 0x03) {// istiqaməti müəyyən edərsə (dir & 0x01) {// + və ya + -və ya --zz proqramına əsaslanaraq; } başqa {++ z; }} // qalanları üçün də əgər (dif & 0x0c) {if (dir & 0x04) {++ y; } başqa { -y; }} if (dif & 0x30) {if (dir & 0x10) {--x; } başqa {++ x; }}

Düymə basıldığında, mövcud XYZ dəyərini bir terminal proqramına göndəririk.

Seriya məlumatları yavaşdır, lakin normal işləyərkən kodlayıcıların mövqeləri bu müddət ərzində dəyişməyəcək.

Məlumatlar xam say kimi göndərilir. Riyazi hesablamalar apara və məlumatları mm və ya düymlə göndərə bilərəm. Xam dəyərlərin eyni dərəcədə yaxşı olduğunu görürük, çünki obyekti daha sonra proqramlaşdıra bilərik.

Addım 5: İlk Tarama

İlk Tarama
İlk Tarama
İlk Tarama
İlk Tarama
İlk Tarama
İlk Tarama
İlk Tarama
İlk Tarama

Xal toplamaq yavaş bir prosesdir, probu sol üst küncdə yerə qoyuram və Arduino'yu sıfırlayıram.

Bu, evin mövqeyini sıfıra endirir.

Sonra zondu hədəfdəki yerə aparın, sabit saxlayın və 'anlıq' düyməsini basın.

Bu olduqca böyük nümunə parçası üçün cəmi ~ 140 xal aldım, buna görə detal son məhsulda böyük deyil.

Veriləri bir. PCD faylına qeyd edin və başlığı əlavə edin

#. PCD v.7 - Point Cloud Data fayl formatı VERSİYA.7 SAHƏLƏR x y z ÖLÇÜ 4 4 4 TİP F F F SAYI 1 1 1 GENİŞLİK (nöqtə sayınız) YÜKSEKLİK 1 GÖRÜNÜM 0 0 0 0 1 0 0 0 XALLAR (xal sayınız)

Başlıqdakı nöqtə sayınızı qoyun, bu sizə satır nömrələri verən hər hansı bir redaktorda asandır.

Yuxarıdakı nöqtələr freeCad -də görünə bilər, sonra freeCad -dan. PLY faylı olaraq ixrac olunur.

MeshLab -da. PLY açın və obyekti üzə çıxarın. Bitti !!

Tövsiyə: