Daftar Isi:
- Perlengkapan
- Langkah 1: Pilih Rotary Encoder
- Langkah 2: Tambahkan Katrol dan Pemalas
- Langkah 3: Pengkodean
- Langkah 4: Pengkabelan
- Langkah 5: Cetak Bagian
Video: Penghitung Filamen Printer 3D Cerdas: 5 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
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
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
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
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
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
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:
Lampu LED Meja Cerdas - Pencahayaan Cerdas Dengan Arduino - Ruang Kerja Neopiksel: 10 Langkah (dengan Gambar)
Lampu LED Meja Cerdas | Pencahayaan Cerdas Dengan Arduino | Ruang Kerja Neopiksel: Saat ini kita menghabiskan banyak waktu di rumah, belajar dan bekerja secara virtual, jadi mengapa tidak membuat ruang kerja kita lebih luas dengan sistem pencahayaan khusus dan cerdas berbasis Arduino dan LED Ws2812b. Di sini saya tunjukkan cara membangun Smart Anda Lampu LED Meja yang
Penghitung Frekuensi Dengan Arduino: 8 Langkah (dengan Gambar)
Penghitung Frekuensi Dengan Arduino: Ini adalah Penghitung frekuensi berbasis arduino yang sederhana dan murah dengan biaya kurang dari $ 4 itu sangat berguna untuk mengukur sirkuit kecil
Jam Alarm Cerdas: Jam Alarm Cerdas Dibuat Dengan Raspberry Pi: 10 Langkah (dengan Gambar)
Jam Alarm Cerdas: Jam Alarm Cerdas yang Dibuat Dengan Raspberry Pi: Pernahkah Anda menginginkan jam pintar? Jika iya, ini solusinya untuk Anda! Saya membuat Smart Alarm Clock, ini adalah jam yang bisa Anda ubah waktu alarmnya sesuai dengan website. Saat alarm berbunyi, akan ada suara (buzzer) dan 2 lampu akan
Jam Filamen LED Gaya "Charlotte's Web": 10 Langkah (dengan Gambar)
Jam Filamen LED Gaya "Charlotte's Web": Sejak pertama kali saya melihat bola lampu filamen LED, saya berpikir bahwa filamen itu pasti bagus untuk sesuatu, tetapi butuh waktu hingga penutupan penjualan toko suku cadang elektronik lokal untuk saya untuk membeli beberapa bohlam dengan maksud untuk menghancurkan
Dispenser Filamen Robot untuk Arduino: 8 Langkah (dengan Gambar)
Dispenser Filamen Robot untuk Arduino: Mengapa filamen printer 3D alat bermotor - biasanya hampir kuat - ditarik oleh ekstruder sementara gulungan ditempatkan di dekat printer, bebas berputar. Saya telah mengamati perbedaan yang berarti dalam perilaku material tergantung pada tingkat penggunaan