İçindekiler:

Akıllı 3D Yazıcı Filament Sayacı: 5 Adım (Resimlerle)
Akıllı 3D Yazıcı Filament Sayacı: 5 Adım (Resimlerle)
Anonim
Akıllı 3D Yazıcı Filament Sayacı
Akıllı 3D Yazıcı Filament Sayacı

Neden filamenti saymakla uğraşıyorsun? Birkaç neden:

Başarılı baskılar, uygun şekilde kalibre edilmiş bir ekstrüder gerektirir: gcode ekstrüdere filamenti 2 mm hareket ettirmesini söylediğinde, tam olarak 2 mm hareket etmesi gerekir. Aşırı sıkılırsa veya az sıkılırsa kötü şeyler olur. İyi kalibre edilmiş bir sayaç, bir ekstrüderi dürüst tutabilir

Dilimleyiciler, belirli bir baskının ne kadar toplam filament alacağını (hem uzunluk hem de ağırlık olarak) tahmin eder ve bu değerleri kontrol etmek istiyorum

Filamentin hareketini ölçmek, baskının ne zaman başladığını ve ne zaman durduğunu da bana bildirir

Yazıcımın önündeki çirkin dev logonun kaldırılmasıyla kalan boşluğu kapatacak bir şeye ihtiyacım vardı

Serin

Eski bir PS/2 fareyi bir 3D Yazıcı için bir filament sayacı olarak yeniden kullanan bu talimattan ilham aldım. Sadece bir 3D yazıcıya faydalı bir özellik eklemekle kalmadı, aksi takdirde çöplükte bitecek olan eski bir cihazı yeniden tasarladı. Ancak bu proje, farenin gereksiz yere hantal görünen PS/2 arabirimi etrafında inşa edildi. Bu yüzden bunu tek temel bileşen hakkında bilgi edinme fırsatı olarak değerlendirdim: döner kodlayıcı.

Gereçler

Döner kodlayıcı

ESP32 tabanlı geliştirme kartı

I2C OLED ekran (iki renkli ünite özellikle harika görünüyor)

Küçük anlık buton

Yağdan arındırılmış 608ZZ yatak

Hırdavatçıdan iki o-ring (~33mm ID x ~1.5mm profil çapı - yorumlara bakın)

Muhafaza için iki adet 2,5 mm kendinden diş açan vida

Bağlantıyı yazıcınıza takmak için iki adet 4 mm vida, somun ve pul

demet tel

3D Yazıcı ve biraz filament

Adım 1: Bir Döner Kodlayıcı Seçin

Döner Kodlayıcı Seçin
Döner Kodlayıcı Seçin
Döner Kodlayıcı Seçin
Döner Kodlayıcı Seçin

Döner kodlayıcılar, dönme hareketini elektrik darbelerine çevirir. Tüm eski okul fareleri onları yuvarlanan topun hareketini ölçmek için kullandı ve daha modern (ha ha) optik fareler hala onları kaydırma tekerleği için kullanıyordu, ki bu benim ilk deney için kullandığım şeydi. Ne yazık ki, benimki bariz bir bağlama noktası sunmadı ve çözünürlüğü zayıftı.

Yapmaya değerse, aşırı yapmaya değer. Bu yüzden büyük, dost canlısı, 360 darbeli devir başına kodlayıcı satın aldım ve projemi bunun üzerine kurdum. Seçtiğim, LPD3806-360BM-G5-24C tipi bir Signswise Artımlı Optik Döner Kodlayıcı idi. Ancak herhangi bir iyi kodlayıcı yapacaktır.

Adım 2: Bir Kasnak ve Avara Ekleyin

Bir Kasnak ve Avara Ekle
Bir Kasnak ve Avara Ekle

Filamentin doğrusal hareketi, bir kasnak tarafından kodlayıcının dönme hareketine çevrilir. Ve filament bir avara tarafından kasnağa karşı tutulur.

Kasnağın iki oluğu vardır, her biri gerilmiş bir o-ringi tutar, böylece kayma olmaz, Avara, filamenti kodlayıcı kasnağı üzerinde merkezde tutmak için tek bir v-oluğuna sahiptir. Yerleştirdiğim bir 608ZZ yatağın üzerine oturuyor ve bu, projemin ana gövdesinde basılmış bir spiral yay üzerine monte edilmiş. (STL dosyaları aşağıda eklenmiştir.)

Bu, doğru olması için biraz deneme yanılma gerektirdi, ancak tasarımım, filamentin bir baskının başından sonuna kadar makaranın herhangi bir kısmından gevşemesine izin vererek çeşitli açıları ve makara yarıçaplarını barındırmalı. Ve baskılı yay, bobinleri değiştirirken filamenti içeri veya dışarı çıkarmayı kolaylaştırır.

Adım 3: Kodlama

Image
Image

Sadece filamenti saymak için, iki dijital girişe sahip herhangi bir geliştirme kartı yeterli olacaktır. Seçtiğim kodlayıcının dört pimi var: Vcc, toprak ve iki kodlayıcı pimi. İşte döner kodlayıcıların nasıl çalıştığını ve bunların Arduino ile nasıl arayüzleneceğini açıklayan gerçekten güzel bir yazı. (Ayrıca: 3 pinli kodlayıcılarla ilgili bu makale.)

Temel sayma basittir: iki giriş - harici dirençlerin Vcc'ye lehimlenmesine gerek kalmaması için dahili olarak yukarı çekilecek şekilde ayarlanmıştır - ve bir kesme. Ayrıca bir tane daha giriş ve kesinti gerektiren bir sıfır/sıfırlama düğmesi ekledim:

geçersiz setUpPins() {

pinMode(ENCODER_PIN_1, INPUT_PULLUP); pinMode(ENCODER_PIN_2, INPUT_PULLUP); pinMode(ZERO_BTN_PIN, INPUT_PULLUP); AttachInterrupt(ENCODER_PIN_1, encoderPinDidChange, CHANGE); AttachInterrupt(ZERO_BTN_PIN, zeroButtonPressed, CHANGE); } void IRAM_ATTR encoderPinDidChange() { if (digitalRead(ENCODER_PIN_1) == digitalRead(ENCODER_PIN_2)) { pozisyon += 1; } başka { konum -= 1; } } void IRAM_ATTR zeroButtonPressed() { // sıfırı işleme ve sıfırlama }

Ama ben aptal bir sayaçtan fazlasını istiyordum. Bir ESP32 (veya ESP8266) ve yerleşik WiFi ile, topladığım verilerle gerçekten bir şeyler yapabilirim. Basit bir zaman aşımı kodu kullanarak (aşağıda açıklanmıştır), yazdırmanın ne zaman başlayıp ne zaman biteceğini belirleyebilir ve bu olayları bildirim olarak telefonuma gönderebilirim. Gelecekte, bir tükenme sensörü ekleyebilir ve ilgilenmem gerektiğinde kendimi bilgilendirebilirim (ve yazıcımı duraklatabilirim).

Kodun tamamı Github'da.

Kodla ilgili birkaç not:

Bunu yapınıza göre özelleştirmek için tek ihtiyacınız olan çözünürlük (kodlayıcıPPR) - devir başına darbelerde, ki bu genellikle belirtilen spesifikasyonun iki katıdır - ve kasnağın yarıçapı (tekerlek Yarıçapı). Bu değerlerin yanı sıra kablosuz ağınızın ssid ve şifresi ile düğmeye, kodlayıcıya ve OLED ekranına bağlı belirli pinlerin tümü config.h dosyasına girer

Sıfır düğmesi aynı zamanda sıfırlama işlevi görür - hata ayıklama için yararlı olan kartı yeniden başlatmak için basılı tutun

Kesintiler güçlüdür - bazen çok güçlüdür. Sıfır düğmesine tek bir dokunuş, zeroButtonPressed() işlevinin 10-20 kez çağrılmasına neden olabilir, bu yüzden biraz geri dönme mantığı ekledim. Optik kodlayıcımın buna ihtiyacı yoktu, ama YMMV

Kesintiler girdilerle eşzamansız olarak ilgilenirken, loop() yordamı defter tutmayı yönetir. Beslenebilen, geri çekilebilen veya durdurulabilen bir numaralandırma olan encoderState, kodlayıcının konumundaki değişiklikle güncellenir. Zaman aşımları, yazıcının ne zaman yazdırmaya başladığını ve ne zaman bitirdiğini belirler. Ancak işin zor yanı, 3D yazıcıların sıklıkla hareketi başlatması ve durdurmasıdır, bu nedenle en iyi sonuç, en az 5 saniye boyunca sürekli olarak durdurulan "baskı tamamlandı" olayını tanımlamaktı. Herhangi bir hareket, yalnızca 15 saniyelik bir zaman çerçevesinde hiçbir "yazdırma tamamlandı" olayı meydana gelmezse, "yazdırma başladı" olayını tanımlayan ikinci bir zamanlayıcıyı tetikler. Uygulamada, bu yüzerek çalışır

Böylece ana döngü() kodu engellenmeden çalışabilir, geri dönme kodu bir RTOS görev döngüsünde çalışır. Benzer şekilde, bildirim göndermeye yönelik http istekleri eşzamanlıdır ve bu nedenle arka plandadır. Böylece animasyonlar sorunsuz çalışır ve sayım hiç durmaz

Örneğimde (A) WiFi ve mDNS ile bir ağ bağlantısı kurmak ve sürdürmek, (B) zamanı bir NTC sunucusundan almak için bir sürü ek kod var, böylece başlangıç ve bitiş bildirimlerime zaman damgası vurabilir ve neşeli bir saat görüntüleyebilirim OLED'imde ve (C) OTA güncellemelerini yönetiyor, böylece kod güncellemeleri için panomu fiziksel olarak Mac'ime bağlamam gerekmiyor. Şu anda hepsi tek bir C++ dosyasında, çünkü onu daha iyi organize etmek için zaman ayırmadım

Harika (ve ücretsiz) Prowl iOS uygulamasını, HTTP Get yöntemlerinden başka bir şey olmadan telefonuma push bildirimleri göndermek için kullandım

Kodu geliştirmek ve kartı flash etmek için, her ikisi de ücretsiz olan Visual Studio Code üzerinde çalışan muhteşem PlatformIO'yu kullandım

Projem için şu kütüphaneleri kullandım: Oliver'dan u8g2, Paul Stoffregen'den elapsedMillis ve Espressif ESP32 platformuyla birlikte gelen Markus Sattler'dan HTTPClient. Diğer her şey ya Arduino kütüphanesi ya da PlatformIO'daki ESP32 platformu ile birlikte gelir

Son olarak, ana kasnağımın farklı açılardan altı basit bitmap'ini oluşturdum, böylece tezgahın arkasındaki OLED'de küçük, düzgün bir çıkrık animasyonu gösterebildim. Daha dramatik bir etki için çok daha hızlı olmasına rağmen, kodlayıcı ile uygun yönde hareket eder

Adım 4: Kablolama

kablolama
kablolama

Bunu, kablolamanın son derece basit olması için tasarladım, çoğunlukla kasam küçük olabilir, ancak aynı zamanda hata ayıklama da kolay olurdu. Küçük kutumdaki sıkışık koşullara dikkat edin.:)

İlk gereksinim, döner kodlayıcımın 5V besleme voltajıydı. Depomda bulunan çeşitli ESP32 geliştirme kartlarından yalnızca birkaçı, USB ile çalıştırıldığında Vcc pininde gerçek 5V sağladı. (Diğerleri 4.5-4.8V ölçtü, bu da matematiğinizin kötü olması durumunda 5V'tan düşük.) Kullandığım tahta bir Wemos Lolin32 idi.

Ardından, iki döner kodlayıcı sinyal pimi gelir. Kesintiler kullandığım için asıl endişe, kullandığım pinlerin hiçbir şeye müdahale etmemesidir. ESP32 belgeleri, ADC2'nin WiFi ile aynı anda kullanılamayacağını belirtir, bu nedenle maalesef ADC2 GPIO pinlerinden hiçbirini kullanamayacağım anlamına gelir: 0, 2, 4, 12, 13, 14, 15, 25, 26 veya 27. 16 ve 17'yi seçtim.

Profesyonel ipucu: Tüm bunları bir araya getirdikten sonra kodlayıcınız geriye doğru sayıyor gibi görünüyorsa, iki pin atamasını config.h'de değiştirebilirsiniz.

Son olarak, döner kodlayıcı topraklama kablosunu… tambur rulosu… topraklama pimine bağlayın.

Ardından, sıfır/sıfırlama düğmesi toprak ile başka bir serbest pin arasına bağlanır (GPIO 18'i seçtim).

Kullandığım düğme, yukarıda bahsedilen bilgisayar faresinden kurtardığım küçük bir anlık anahtardı, ancak etraftaki herhangi bir düğme işinizi görecektir. Tahtanın hemen üzerinde onun için yaptığım küçük bir binekte durduğunu görebilirsiniz.

Son olarak, OLED, kartınıza bağlı değilse, yalnızca dört pime ihtiyaç duyar: 3V3, toprak, i2c saati ve i2c verileri. Geliştirme panomda saat ve veriler sırasıyla 22 ve 21'dir.

Adım 5: Parçaları Yazdırın

Parçaları Yazdır
Parçaları Yazdır

Bu yapı için yedi parça tasarladım:

Doğrudan döner kodlayıcının miline monte edilen kasnak

608ZZ yatağın üzerine oturan avara (serbestçe dönmesi için koruyucuları çıkarın ve WD40 ile yağdan arındırın)

İki çarkın ve kodlayıcının monte edildiği tutucu - avara için spiral yayı not edin

Tutucuyu sabitlemek için bir braket. Bu adımdaki fotoğraf, braketin tutucuya nasıl takıldığını gösterir

ESP32 dev kartımı tutan muhafaza (altta), yan tarafta USB kablosu için bir boşluk ve kodlayıcı kablolarıma eklediğim konektör için üstte bir boşluk var. Bu, Wemos Lolin32'ye uyacak şekilde tasarlanmıştır, bu nedenle bu tasarımı farklı bir tahtaya sığdırmak için biraz değiştirmeniz gerekebilir

OLED ekranını tutmak için muhafaza (üstte), sıfırlama / sıfırlama düğmesi için başka bir spiral

Alt muhafazanın içindeki iki raf arasında duracak şekilde tasarlanmış, sahip olduğum küçük anahtar için özelleştirilmiş bir düğme tutucu. Anahtarı tutucuya "yapıştırmak" için bir havya kullandım; bir fotoğraf için önceki adıma bakın

Her şey desteksiz basılmak üzere tasarlanmıştır. Tek ihtiyacınız olan, seçtiğiniz renkteki normal PLA.

Hepsini bir araya getirin, yazıcınıza takın (burada biraz yaratıcılık gerekebilir) ve hazırsınız.

Önerilen: