İçindekiler:

Kurtarılan Döner Kodlayıcıları Kullanan XYZ Nokta Tarayıcı: 5 Adım
Kurtarılan Döner Kodlayıcıları Kullanan XYZ Nokta Tarayıcı: 5 Adım

Video: Kurtarılan Döner Kodlayıcıları Kullanan XYZ Nokta Tarayıcı: 5 Adım

Video: Kurtarılan Döner Kodlayıcıları Kullanan XYZ Nokta Tarayıcı: 5 Adım
Video: OSMAN ÜNLÜ HOCA 2024, Temmuz
Anonim
Kurtarılan Döner Kodlayıcıları Kullanan XYZ Nokta Tarayıcı
Kurtarılan Döner Kodlayıcıları Kullanan XYZ Nokta Tarayıcı

İş yerimden oldukça fazla sayıda atılmış döner optik kodlayıcı edindikten sonra sonunda onlarla eğlenceli/faydalı bir şeyler yapmaya karar verdim.

Yakın zamanda evim için yeni bir 3D yazıcı satın aldım ve onu 3D tarayıcıdan daha iyi ne tamamlayabilir! Bu proje aynı zamanda gerekli parçaları üretmek için 3D yazıcımı kullanmam için bana mükemmel bir fırsat sağladı.

Gereçler

Optik kodlayıcılar ve ilgili optik sensörler

Arduino UNO'su

isteğe bağlı prototipleme kalkanı

çelik çubuk raylar

3D yazıcıya erişim

Adı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

Size mm başına nispeten yüksek sayıda 'tıklama' sağladığı sürece, bu proje için hemen hemen her döner kodlayıcı kullanılabilir. Açıkçası, farklı kodlayıcılar uygun bir montaj çözümü gerektirecektir.

Fotosensörlerin kablo şemasının izini sürmek için bir süreklilik ölçer kullandım.

2. Adım: 3D Basılı Parçalar

3D Baskılı Parçalar
3D Baskılı Parçalar
3D Baskılı Parçalar
3D Baskılı Parçalar

Bu parçalar, döner kodlayıcıları barındırır ve ray için bir kızak sağlar. Tek kodlayıcı muhafazasının arkasında çapraz rayların monte edilmesi için iki delik vardır. Çift kodlayıcı muhafazası, dik açılarda birbirine kaynaşmış iki tekli muhafazadır.

Bu montaj parçalarını fusion360 üzerinde benim yaptığım kodlayıcı ve raylara uyacak şekilde tasarladım, kodlayıcının şaftında paslanmaz çelik şaftı daha iyi kavramasına yardımcı olmak için kısa bir sapan kauçuk kılıf parçası var.

Şaftın serbestçe kaymasını ve dikey olarak tutulduğunda mahfazadan düşmesini istiyorsunuz, ancak enkoderin kaymaması için yeterli basınç uygulamalıdır. Benim için işe yarayan şey, şaftın sürgüsünün enkoder şaftı ile 0,5 mm örtüşmesine izin vermekti. Sapan kauçuğu, bu miktarda deforme olacak kadar yumuşaktır ve iyi çekiş sağlar.

Adım 3: Kablo Şeması

Bağlantı şeması
Bağlantı şeması

Devre çok basit. Opto-sensörler, IR yayıcı diyotlar için bir miktar akım, foto diyotlar için bir topraklama ve çekme dirençleri gerektirir.

Seri yayıcı diyotlar için 5mA'ya karar verdim, bu özel kodlayıcıda diyotlar arasındaki voltaj düşüşü 3.65V. Arduino'dan direnç için 1,35V bırakan 5V'luk bir besleme kullanıyorum, 5mA'da bu 270 ohm olarak çıkıyor.

Foto diyotlar sadece küçük bir akım çekebildiğinden, pull-up'lar için 10k ohm seçildi, basma düğmesi için de 10k ohm kullanıldı. Zaten toprağa bağlı olan prototip kartında kullanım için bir düğme var, sadece bir çekme direnci sağlayın ve istenen giriş pinine bağlayın.

Adım 4: Arduino Kodu

Arduino Kodu
Arduino Kodu
Arduino Kodu
Arduino Kodu
Arduino Kodu
Arduino Kodu

İşlemi hemen belli olmayabileceğinden kodun küçük bir açıklamaya ihtiyacı var, ancak 3 kodlayıcıyı yeterince hızlı bir şekilde işleyebilmek için bu şekilde optimize edilmesi gerekiyordu.

İlk olarak, enkoder pozisyonunda bir değişiklik olmuşsa yön verilerini işlemek istiyoruz.

değişiklikler = yeni_değer ^ saklanan değer;

Kodlayıcılarımdan daha fazla çözünürlük elde etmek için hem yükselen hem de düşen kenarları işlemem gerekiyordu.

Kurulumumda çözünürlüğüm 1 cm başına 24 tıklama.

Bu bize birkaç senaryo bırakıyor.

S1 sabit 0 ve S2 0'dan 1'e değiştirildi

S1 sabit 0 ve S2 1'den 0'a değiştirildi

S1 sabit 1'dir ve S2 0'dan 1'e geçiş yapar

S1 sabit 1'dir ve S2 1'den 0'a geçiş yapar

S2 sabit 0 ve S1 0'dan 1'e değiştirildi

S2 sabit 0 ve S1 1'den 0'a değiştirildi

S2 sabit 1'dir ve S1 0'dan 1'e geçiş yapar

S2 sabit 1'dir ve S1 1'den 0'a geçiş yapar

Bu koşullar yukarıdaki doğruluk tablolarında daha iyi anlaşılır, ayrıca her koşul isteğe bağlı olarak 0 veya 1 olarak adlandırılan bir 'yön' verir.

Grafikler bize iki hayati ipucu veriyor:

1) bir grafik diğerinin tam tersidir, bu nedenle eğer elimizde varsa, çıktıyı tersine çevirerek diğerini kolayca hesaplayabiliriz. Çıktıyı yalnızca bir pin değişiyorsa ve diğerini değiştirmiyorsa tersine çeviririz, birini keyfi olarak seçebiliriz.

2) grafiğin kendisi basitçe S1 ve S2 sinyallerinin XOR'sidir. (diğer grafik bunun DEĞİLDİR).

Şimdi kodu anlamak basittir.

// PORT'ta paralel olarak oku//aynı kodlayıcı durumuna ait bitişik çiftleri hatırla = PINB & 0x3f; // varsa hangi pinler değişti diff = hold ^ durum; // Doğruluk tablosunu elde etmek için XOR bitişik S1 ve S2 sinyalleri // en kolay yol mevcut durumun bir kopyasını oluşturmaktır // ve onu bir bitlik arama ile sağa kaydırmak = durum >> 1; // şimdi bitler XOR için hizalandı dir = arama ^ durum; // unutmayın, girdilerden biri sabit kaldıysa tablonun ters çevrilmesi gerekir, bunun için bir IF // ifadesine ihtiyacımız yok. Şu anda istenen yön biti // 'dir' değişkenindeki her çiftin sağ bitidir // soldaki bit anlamsızdır // 'diff' değişkeni 'set'i değiştiren bit'e sahiptir // yani biz de '01' veya '10' // 'dir' baytı ile XOR, anlamlı biti // tersine çevirir veya çevirmez. dizin ^= fark; // şimdi tutma değişkenini güncelle tutma = durum; // bu kodlayıcı için herhangi bir bit değiştiyse if(diff & 0x03) { // yönü belirle if(dir & 0x01) { // donanım ve kablolamanıza göre ++ veya -- --z; } başka { ++z; } } // geri kalanı için aynen if(diff & 0x0c) { if(dir & 0x04) { ++y; } başka { --y; } } if(fark & 0x30) { if(dir & 0x10) { --x; } başka { ++x; } }

Butona basıldığında mevcut XYZ değerini bir terminal programına gönderiyoruz.

Seri veriler yavaştır, ancak normal çalışma sırasında kodlayıcıların konumları bu süre boyunca zaten değişmeyecektir.

Veriler ham sayımlar olarak gönderilir. Matematiği yapabilir ve verileri mm veya inç olarak gönderebilirsin. Ham değerlerin de aynı derecede iyi olduğunu düşünüyorum çünkü nesneyi daha sonra yazılımda ölçekleyebiliriz.

Adım 5: İlk Tarama

İlk tarama
İlk tarama
İlk tarama
İlk tarama
İlk tarama
İlk tarama
İlk tarama
İlk tarama

Puanları toplamak yavaş bir işlemdir, probu sol üst köşeye yerleştirip Arduino'yu sıfırlarım.

Bu, konumu ev olarak sıfırlar.

Ardından sondayı hedef üzerindeki konuma hareket ettirin, sabit tutun ve 'anlık görüntü' düğmesine basın.

Bu oldukça büyük örnek parça için sadece ~ 140 puan aldım, bu nedenle nihai üründe detay çok iyi değil.

Verileri bir. PCD dosyasına kaydedin ve başlığı ekleyin

#. PCD v.7 - Nokta Bulutu Veri dosya formatıSÜRÜM.7 ALANLAR x y z BOYUT 4 4 4 TYPE F F F SAYISI 1 1 1 GENİŞLİK (puan sayınız) YÜKSEKLİK 1 GÖRÜŞ NOKTASI 0 0 0 1 0 0 0 PUAN (puan sayınız)

Başlığa puan sayınızı koyun, bu size satır numaraları sağlayan herhangi bir düzenleyicide kolaydır.

Yukarıdaki noktalar freeCad'de görülebilir, daha sonra freeCad'den. PLY dosyası olarak dışa aktarılırlar.

MeshLab üzerinde. PLY'yi açın ve nesneyi yüzeye çıkarın. Tamamlandı!!

Önerilen: