Daftar Isi:

Penghitung Filamen Printer 3D Cerdas: 5 Langkah (dengan Gambar)
Penghitung Filamen Printer 3D Cerdas: 5 Langkah (dengan Gambar)

Video: Penghitung Filamen Printer 3D Cerdas: 5 Langkah (dengan Gambar)

Video: Penghitung Filamen Printer 3D Cerdas: 5 Langkah (dengan Gambar)
Video: Cara menggunakan aplikasi Ultimake CURA untuk mesin 3D printing 2024, Juni
Anonim
Penghitung Filamen Printer 3D Cerdas
Penghitung Filamen Printer 3D Cerdas

Mengapa repot-repot menghitung filamen? Beberapa alasan:

Pencetakan yang berhasil memerlukan ekstruder yang dikalibrasi dengan benar: ketika gcode memberi tahu ekstruder untuk memindahkan filamen 2mm, ia harus bergerak tepat 2mm. Hal-hal buruk terjadi jika over-extrudes atau under-extrudes. Penghitung yang dikalibrasi dengan baik dapat menjaga ekstruder tetap jujur

Pemotong memperkirakan berapa banyak filamen total yang akan diambil oleh cetakan tertentu (baik panjang dan berat) dan saya ingin memeriksa nilai-nilai itu

Mengukur pergerakan filamen juga memberi tahu saya kapan pencetakan telah dimulai dan kapan berhenti

Saya membutuhkan sesuatu untuk menutupi ruang yang ditinggalkan oleh penghapusan logo raksasa jelek di bagian depan printer saya

Itu keren

Saya terinspirasi oleh instruksi ini, yang menggunakan kembali mouse PS/2 lama sebagai penghitung filamen untuk Printer 3D. Tidak hanya menambahkan fitur yang berguna ke printer 3D, tetapi juga mengubah perangkat lama yang seharusnya berakhir di tempat pembuangan sampah. Tetapi proyek itu dibangun di sekitar antarmuka PS/2 mouse, yang tampaknya tidak praktis. Jadi saya mengambil ini sebagai kesempatan untuk belajar tentang satu-satunya komponen penting: encoder putar.

Perlengkapan

Enkoder putar

Papan pengembang berbasis ESP32

Layar OLED I2C (unit dua warna terlihat sangat keren)

Tombol tekan kecil sesaat

Bantalan 608ZZ yang dihilangkan gemuknya

Dua o-ring dari toko perangkat keras (~33mm ID x ~1.5mm profil diameter - lihat komentar)

Dua sekrup self-tapping 2.5mm untuk enklosur

Dua sekrup, mur, dan ring 4mm untuk memasang dudukan ke printer Anda

Sekelompok kabel

Printer 3D dan beberapa filamen

Langkah 1: Pilih Rotary Encoder

Pilih Rotary Encoder
Pilih Rotary Encoder
Pilih Rotary Encoder
Pilih Rotary Encoder

Rotary encoder menerjemahkan gerakan rotasi menjadi pulsa listrik. Semua tikus jadul menggunakannya untuk mengukur pergerakan bola yang bergulir, dan tikus optik yang lebih modern (ha ha) masih menggunakannya untuk roda gulir, yang telah saya letakkan dan gunakan untuk eksperimen awal. Sayangnya, milik saya tidak menawarkan titik pemasangan yang jelas dan resolusinya buruk.

Jika itu layak dilakukan, itu layak dilakukan secara berlebihan. Jadi saya membeli encoder 360-pulse per revolusi yang besar, ramah, dan membangun proyek saya di sekitarnya. Yang saya pilih adalah Signswise Incremental Optical Rotary Encoder, tipe LPD3806-360BM-G5-24C. Tetapi setiap pembuat enkode yang layak akan melakukannya.

Langkah 2: Tambahkan Katrol dan Pemalas

Tambahkan Katrol dan Pemalas
Tambahkan Katrol dan Pemalas

Gerakan linier filamen diterjemahkan ke dalam gerakan rotasi encoder oleh katrol. Dan filamen ditahan terhadap katrol oleh pemalas.

Katrol memiliki dua alur, masing-masing memegang o-ring yang diregangkan sehingga tidak tergelincir, Idler memiliki v-groove tunggal untuk menjaga filamen tetap terpusat pada katrol encoder. Itu duduk di bantalan 608ZZ yang saya letakkan di sekitar, dan itu dipasang pada pegas spiral yang dicetak tepat di badan utama proyek saya. (File STL terlampir di bawah.)

Ini membutuhkan beberapa percobaan dan kesalahan untuk mendapatkan yang benar, tetapi desain saya harus mengakomodasi berbagai sudut dan jari-jari spool, memungkinkan filamen terlepas dari bagian mana pun dari spool, mulai dari awal hingga akhir cetakan. Dan pegas yang dicetak memudahkan untuk memasukkan atau mengeluarkan filamen saat mengganti gulungan.

Langkah 3: Pengkodean

Image
Image

Untuk menghitung filamen saja, papan dev apa pun dengan dua input digital dapat digunakan. Encoder yang saya pilih memiliki empat pin: Vcc, ground, dan dua pin encoder. Berikut adalah artikel yang sangat bagus yang menjelaskan cara kerja rotary encoder dan cara menghubungkannya dengan Arduino. (Juga: artikel ini tentang encoder 3-pin.)

Penghitungan dasarnya sederhana: dua input - diatur untuk ditarik secara internal sehingga resistor eksternal tidak perlu disolder ke Vcc - dan satu interupsi. Saya juga menambahkan tombol nol/reset, membutuhkan satu input dan interupsi lagi:

batalkan 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)) { posisi += 1; } else { posisi -= 1; } } void IRAM_ATTR zeroButtonPressed() { // menangani nol & reset }

Tapi aku ingin lebih dari sekedar counter bodoh. Dengan ESP32 (atau ESP8266) dan WiFi bawaannya, saya benar-benar dapat melakukan sesuatu dengan data yang saya kumpulkan. Menggunakan beberapa kode batas waktu sederhana (dijelaskan di bawah), saya dapat menentukan kapan pencetakan dimulai dan berakhir, dan mengirim acara tersebut sebagai pemberitahuan ke ponsel saya. Di masa mendatang, saya dapat menambahkan sensor run-out dan memberi tahu diri saya sendiri (dan menjeda printer saya) ketika perhatian saya diperlukan.

Kode lengkapnya ada di Github.

Beberapa catatan tentang kode:

Untuk menyesuaikan ini dengan build Anda, yang Anda butuhkan hanyalah resolusi (encoderPPR) -- dalam pulsa per putaran, yang biasanya dua kali spesifikasi yang disebutkan -- dan radius pulley (wheelRadius). Nilai-nilai ini, ditambah ssid dan kata sandi wifi Anda dan pin spesifik yang terhubung ke tombol, encoder, dan layar OLED, semuanya masuk config.h

Tombol nol juga berfungsi sebagai reset - tahan untuk mem-boot ulang papan, yang berguna untuk debugging

Interupsi sangat kuat - terkadang terlalu kuat. Satu ketukan tombol nol dapat menyebabkan fungsi zeroButtonPressed() dipanggil 10-20 kali, jadi saya menambahkan beberapa logika debounce. Encoder optik saya tidak membutuhkannya, tetapi YMMV

Sementara interupsi menangani input secara asinkron, rutin loop() menangani pembukuan. EncoderState -- enum yang dapat dimasukkan, ditarik, atau dihentikan -- diperbarui dengan perubahan posisi encoder. Batas waktu kemudian menentukan kapan printer telah memulai dan menyelesaikan pencetakan. Tetapi bagian yang sulit adalah bahwa printer 3D sering memulai dan menghentikan gerakan, jadi yang paling berhasil adalah menentukan acara "cetak selesai" yang terus berhenti selama setidaknya 5 detik. Setiap gerakan memicu timer kedua yang menentukan peristiwa "pencetakan dimulai" hanya jika tidak ada peristiwa "pencetakan selesai" yang terjadi dalam jangka waktu 15 detik. Dalam praktiknya, ini bekerja dengan baik

Jadi kode loop() utama dapat berjalan tanpa beban, kode debounce berjalan dalam loop tugas RTOS. Demikian juga, permintaan http untuk mengirim pemberitahuan bersifat sinkron dan oleh karena itu dilatar belakangi. Dengan demikian animasi berjalan dengan lancar dan penghitungan tidak pernah berhenti

Ada banyak kode tambahan dalam contoh saya untuk (A) membangun dan memelihara koneksi jaringan dengan WiFi dan mDNS, (B) mengambil waktu dari server NTC sehingga saya dapat menandai waktu mulai dan mengakhiri pemberitahuan saya dan menampilkan jam riang pada OLED saya, dan (C) menangani pembaruan OTA jadi saya tidak perlu menghubungkan papan saya secara fisik ke Mac saya untuk pembaruan kode. Saat ini, semuanya ada dalam satu file C++ monolitik, hanya karena saya belum meluangkan waktu untuk mengaturnya dengan lebih baik

Saya menggunakan aplikasi Prowl iOS yang luar biasa (dan gratis) untuk mengirim pemberitahuan push ke ponsel saya dengan tidak lebih dari metode HTTP Get

Untuk mengembangkan kode dan mem-flash board, saya menggunakan PlatformIO spektakuler yang berjalan di Visual Studio Code, keduanya gratis

Untuk proyek saya, saya menggunakan perpustakaan ini: u8g2 oleh Oliver, elapsedMillis oleh Paul Stoffregen, dan HTTPClient oleh Markus Sattler, yang hadir dengan platform Espressif ESP32. Segala sesuatu yang lain datang dengan perpustakaan Arduino atau platform ESP32 di PlatformIO

Akhirnya, saya membuat enam bitmap sederhana dari katrol utama saya pada sudut yang berbeda, sehingga saya bisa menunjukkan animasi roda berputar kecil yang rapi pada OLED di belakang meja. Ini bergerak ke arah yang sesuai dengan encoder, meskipun jauh lebih cepat untuk efek yang lebih dramatis

Langkah 4: Pengkabelan

Pengkabelan
Pengkabelan

Saya merancang ini sehingga pengkabelan akan menjadi sangat sederhana, sebagian besar agar penutup saya bisa kecil, tetapi juga agar debugging akan lurus ke depan. Perhatikan kondisi sempit di kotak kecil saya.:)

Persyaratan pertama adalah tegangan suplai 5V dari rotary encoder saya. Dari berbagai papan dev ESP32 yang saya miliki di simpanan saya, hanya sedikit yang memasok 5V sejati pada pin Vcc saat ditenagai oleh USB. (Yang lain mengukur 4,5-4.8V, yang, jika matematika Anda buruk, lebih rendah dari 5V.) Papan yang saya gunakan adalah Wemos Lolin32.

Selanjutnya, datang dua pin sinyal rotary encoder. Karena saya menggunakan interupsi, perhatian utama adalah bahwa pin yang saya gunakan tidak mengganggu apa pun. Dokumen ESP32 menyatakan bahwa ADC2 tidak dapat digunakan bersamaan dengan WiFi, sehingga sayangnya saya tidak dapat menggunakan salah satu pin GPIO ADC2: 0, 2, 4, 12, 13, 14, 15, 25, 26, atau 27. Saya memilih 16 dan 17.

Kiat pro: jika, setelah menyatukan semua ini, pembuat enkode Anda tampaknya menghitung mundur, Anda dapat menukar dua tugas pin di config.h.

Terakhir, sambungkan kabel ground rotary encoder ke… drum roll… pin ground.

Selanjutnya, tombol tekan nol/reset akan terhubung antara ground dan pin bebas lainnya (saya memilih GPIO 18).

Tombol yang saya gunakan adalah sakelar kecil sesaat yang saya selamatkan dari mouse komputer yang disebutkan di atas, tetapi tombol apa pun yang Anda letakkan akan berfungsi. Anda dapat melihatnya beristirahat di tunggangan kecil yang saya buat tepat di atas papan.

Terakhir, OLED, jika belum terhubung ke board Anda, hanya membutuhkan empat pin: 3V3, ground, i2c clock, dan data i2c. Di papan dev saya, jam dan data masing-masing adalah 22 dan 21.

Langkah 5: Cetak Bagian

Cetak Bagiannya
Cetak Bagiannya

Saya merancang tujuh bagian untuk bangunan ini:

Katrol, yang dipasang langsung pada poros rotary encoder

Pemalas, yang cocok dengan bantalan 608ZZ (lepaskan pelindung dan degrease dengan WD40 sehingga berputar dengan bebas)

Dudukan, tempat kedua weel dan encoder dipasang - perhatikan pegas spiral untuk idler

Braket untuk menstabilkan dudukan. Foto pada langkah ini menunjukkan bagaimana braket menempel pada dudukannya

Enklosur (bawah) untuk menahan papan dev ESP32 saya, dengan ruang untuk kabel USB di samping dan satu lagi di atas untuk konektor yang saya tambahkan ke kabel encoder saya. Yang ini dirancang agar sesuai dengan Wemos Lolin32, jadi Anda mungkin harus sedikit memodifikasi desain ini agar sesuai dengan papan yang berbeda

Enklosur (atas) untuk menahan layar OLED, spiral lain untuk tombol nol / reset

Tempat kancing yang disesuaikan untuk sakelar kecil yang saya miliki, dirancang untuk diletakkan di antara dua rak di dalam penutup bawah. Saya menggunakan besi solder untuk "merekatkan" sakelar ke dudukannya; lihat langkah sebelumnya untuk foto

Semuanya dirancang untuk dicetak tanpa penyangga. PLA normal dalam warna pilihan Anda adalah semua yang Anda butuhkan.

Gabungkan semuanya, lampirkan ke printer Anda (beberapa kreativitas mungkin diperlukan di sini), dan Anda siap melakukannya.

Direkomendasikan: