
İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-23 15:13

İş 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



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


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ı

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



İş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




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:
Lityum İyon Pil Paketi Oluşturmak için Araba Aküsü Kullanan Basit Nokta Kaynakçısı: 6 Adım

Lityum İyon Pil Paketi Oluşturmak için Araç Aküsü Kullanan Basit Nokta Kaynakçısı: Lityum İyon (Li-ion) Pil Paketleri oluşturmak için yararlı olan araç akülü bir Nokta kaynak makinesini bu şekilde yaptım. Bu punta kaynak makinesiyle 3S10P Paketi ve birçok kaynak yapmayı başardım. Bu Punta Kaynakçı talimatı şunları içerir: Fonksiyonel Blok Çapı
PA1 DIY Tüp Preamp: Kurtarılan Bileşenlerle Verimli Bir Şekilde Oluşturuldu: 13 Adım

PA1 DIY Tüplü Preamp: Kurtarılan Bileşenlerle Verimli Bir Şekilde İnşa Edildi: Web'de ve basılı olarak tüplü preamplar oluşturmakla ilgili birçok kaynak var, bu yüzden biraz farklı bir şey paylaşacağımı düşündüm. Bu talimat, tasarımımın açık kaynaklı bir tüp ön amplifikatörünün yapımını kapsar ve bu sadece bir u değil
Kurtarılan LED Ekranlı Mikro Oyun: 13 Adım

Kurtarılan LED Ekranlı Mikro Oyun: İyi haber! Az önce LED ekranlı, atılmış bir VCR buldum. Bu, ekranı kurtarmanın ve ondan bir proje çıkarmanın zamanı geldiği anlamına geliyor. Standart 7 segmentli ekranlar hakkında çok fazla bilgi var, ancak cihaz ve elektronik ekranlar özeldir,
Arduino ve Led Nokta Vuruşlu Ekran Kullanan Dijital Saat: 6 Adım

Arduino ve Led Dot Matrix Display Kullanan Dijital Saat: Günümüzde, Yapımcılar, Geliştiriciler, projelerin prototiplerinin hızlı bir şekilde geliştirilmesi için Arduino'yu tercih ediyor. Arduino, kullanımı kolay donanım ve yazılıma dayalı açık kaynaklı bir elektronik platformdur. Arduino'nun çok iyi bir kullanıcı topluluğu var. Bu projede
Arduino Kullanan DIY LED Nokta Vuruşlu Kaydırmalı Ekran: 6 Adım

Arduino Kullanan DIY LED Nokta Vuruşlu Kaydırma Ekranı: Merhaba InstruBu benim İlk Eğitilebilir Dosyam. Bu Eğitilebilir Kitapta, Arduino'yu MCU olarak kullanarak bir DIY LED Nokta Vuruşlu Kaydırmalı Ekranı nasıl yaptığımı göstereceğim. Bu tür ekranlar Tren İstasyonu, Otogar, Sokaklar ve daha birçok yerde yer almaktadır. Orası