Pendahuluan
Sejak muda, ketika kami memiliki DeskJet tua, saya tertarik pada kartrid printer inkjet. Kartrid ini tampak sangat menarik dan segera setelah kehabisan tinta, saya langsung membawanya ke diri saya sendiri. Pada saat itu, saya tidak bisa melakukan apa-apa dengan mereka, kecuali membongkar dan mengotori tangan saya ... Meskipun saya tahu ada semacam elektronik yang rumit di dalamnya, tetapi ketika kontak menyentuh baterai, tidak ada yang menarik terjadi, dan pengetahuan saya tentang elektronik lebih tidak cukup.
Beberapa saat kemudian, ketika saya menjadi mahasiswa, saya berhasil mendapatkan printer inkjet lama. Pada waktu itu, saya sendiri menggunakan printer laser, jadi saya tidak terlalu tertarik, tetapi menarik untuk memeriksa kartrid dan mencoba merekayasa baliknya. Saya benar-benar
menulis artikel tentang mengelola kartrid ini, dan meskipun mereka bekerja dengan sangat baik, ada juga kekurangannya: Saya masih tidak bisa mengetahui urutan nozel yang tepat, kartrid itu hanya monokrom (dicetak dengan magenta), dan juga cukup tua, dan karena itu resolusinya ternyata cukup rendah.
Baru-baru ini, pacar saya mulai melukis, jadi ini adalah alasan yang baik untuk kembali ke kartrid tinta dengan harapan bahwa saya akan dapat menggambar sesuatu di atas kanvas. Kali ini saya beruntung: Saya berhasil menemukan cara untuk mengikat semua nozel dengan sinyal yang benar. Selain itu, hari ini kartrid printer mengontrol lebih banyak nozel menggunakan sinyal lebih sedikit, yang menyederhanakan manajemen kartrid dan meningkatkan permukaan yang dapat dicakup dalam satu lintasan.
Saya akhirnya berhasil mengendalikan kartrid tiga warna dan mencetak dalam warna penuh!
Jika Anda ingin pergi bersama saya dari tumpukan printer untuk sepenuhnya mengendalikan kartrid printer, saya membuat laporan tentang hal itu di Hackaday Supercon 2018. Rekaman video pidato ditambahkan di bawah ini. Jika Anda tertarik dengan detail rekayasa terbalik, maka periksa. Dalam artikel ini, saya akan berbicara tentang rincian teknis elektronik yang saya buat, serta detail spesifik untuk mengendalikan kartrid sehingga Anda sendiri dapat menggambar Nyancat menggunakan ESP32 atau mikrokontroler lain.
Lampiran Presentasi
Jika Anda belum menonton video, berikut ini ringkasan singkatnya: Saya membongkar kartrid warna untuk printer HP1112 (di Cina ini adalah kartrid HP 803, tetapi nomor artikel tergantung pada wilayah), mengambil gambar kristal dan mencoba mencari cara kerjanya. Ketika saya tidak dapat menemukan banyak hal, saya mulai membaca sinyal yang dikirimkan antara printer dan kartrid, mencari tahu sinyal yang harus dikirim agar cartridge mematuhi perintah saya, dan kemudian mencetak Nyancat dan hal-hal lucu lainnya.
Bagian waktu sinyal dari penelitian ini terutama proses percobaan dan kesalahan. Saya hanya bisa menebak jenis koneksi apa yang ada di antara sinyal, sehingga cukup sulit untuk mengetahui urutan antara tepi dan sinyal mana yang dapat ditunda dan mana yang harus dikirim tepat waktu. Saya mempelajari kartrid silikon untuk informasi ini. Ternyata saya benar-benar berhasil mendapatkannya dengan meletakkan cartridge di bawah mikroskop, tetapi tidak sama sekali seperti yang saya harapkan.
Sebelum berbicara di Supercon, saya mempelajari kartrid warna karena menurut saya itu yang paling menarik. Setelah kembali dari Supercon, saya ingin merekayasa ulang kartrid hitam: print head-nya lebih besar daripada kartrid warna, jadi saya bisa mencetak lebih banyak sekaligus. Mungkin tidak terlalu sulit untuk menambahkan dukungan untuk kartrij ini: pengaturan pin tampaknya sama, dan saya tahu protokolnya kemungkinan besar akan serupa, karena saya sudah mencoba menghubungkan kartrij hitam ke perangkat keras saya. Meskipun perangkat lunak mengirimkan gambar berwarna, masih berhasil mencetak sesuatu.
Inilah yang saya lakukan dengan kartrij warna: Saya menaruhnya di bawah mikroskop, melepaskan lapisan silikon dari kontak, dan bersiap untuk menggabungkan beberapa pemotretan menjadi satu gambar besar. Namun, kartrij hitam berbeda dari warna di mana terdapat lebih banyak prasasti pada pelat logamnya dengan nozel: di bawah lapisan silikon terdapat nama sinyal tersembunyi untuk semua kontak!
(Omong-omong, jika Anda ingin melihat gambar mikroskop penuh di semua kemegahan 40 megapiksel, inilah
pelindung dan
silikon dari kartrij warna! Kagumi kerumitan
nozel dan
gambar kristal kartrij hitam!)
Meskipun mungkin tidak tampak banyak, di lautan papan sirkuit cetak yang tidak ditandai, chip tanpa bahan referensi dan artikel yang tidak mengarah ke mana pun, nama-nama beberapa sinyal adalah temuan nyata. Pada firasat, saya mengendarai nama sinyal individu dengan nama "Hewlett Packard" ke
Google Patents dan menemukan
paten tertentu (dan yang lain, yang
lebih tua dirujuk oleh yang pertama) dengan deskripsi yang jelas tentang teknologi dan sinyal yang digunakan dalam kartrid. Itu akan menghemat banyak waktu saya ketika saya berjuang dengan timing cartridge ... oh well. Saya dengan tulus dapat mengatakan bahwa petunjuk ini sangat sulit ditemukan: sinyal tidak hanya ditutupi dengan film silikon, tetapi juga ternyata kecil: ukuran hurufnya hanya 30 mikrometer, dan ini kurang dari ketebalan rambut manusia.
Paten menggambarkan operasi internal kartrid dan layak dibaca (jika Anda dapat mengetahui jargon hukum yang digunakan di sana) hanya untuk memahami bagaimana logika aneh yang kadang-kadang digunakan HP untuk mengontrol semua nozel. Paten itu sendiri berguna, tetapi tidak cukup untuk mengontrol kartrid; setidaknya sebagian besar pekerjaan rekayasa terbalik yang saya lakukan masih diperlukan, bahkan jika saya memiliki paten ini.
Di sini dan di bawah saya akan menggunakan nama-nama sinyal dan kontak yang digunakan dalam paten. Harap dicatat bahwa dalam kode, nama sinyal saya sendiri masih dapat ditemukan; Saya akan menyertakan tabel terjemahan beserta dokumentasinya.
Pengkodean data
Jadi, inilah yang terlihat seperti kartrid yang sedang dipelajari. Sepintas dangkal, ini adalah perangkat yang cukup sederhana: di dalam, mereka hampir seluruhnya terdiri dari spons yang direndam tinta. Dalam hal kartrid yang disertakan dengan printer, ada sangat sedikit tinta: hanya setengah ruang dalam kartrid ditempati oleh spons, dan spons itu sendiri juga setengah kosong:
Di samping ada 16 kontak dari bagian bawah tempat print head berada. Seperti yang bisa Anda lihat di mikroskop, ada sekitar 336 nozel di print head kartrid hitam, dan 612 nozel di cartridge warna. Nosel diatur dalam baris vertikal pada print head, dan setiap nosel dapat dikontrol secara elektronik sehingga akan memuntahkan setetes tinta ke arah sisi kertas yang dimasukkan ke dalam printer. Dengan menggerakkan kepala secara vertikal, printer dapat mencetak "strip" atau gambar lain; dalam hal kartrij hitam, strip ini panjangnya sekitar 15 mm dan 8 mm untuk kartrij warna.
Jelas, nozel dapat dikontrol menggunakan kontak. Menurut prasasti kepala cetak mungil, kontak berisi sinyal berikut:
Karena hanya ada 16 kontak, harus ada semacam skema multiplexing untuk mengendalikan semua nozel. Paten menjelaskan cara kerjanya: kontrol nozzle dibagi menjadi 14 kelompok terpisah. Grup-grup ini dipicu secara berurutan: pertama menerima datanya dan memicu grup 1, kemudian grup 2, dan seterusnya. Setiap grup mengontrol maksimal 24 nozel, dan data untuknya dikirimkan melalui tiga bus data. Dalam hal kartrij warna, data dalam tiga bus sesuai dengan warna: D1 adalah data kuning, D2 adalah data magenta, dan D3 mengontrol nozel cyan.
Dalam paten, pekerjaan dijelaskan secara rinci menggunakan satu bus data sebagai contoh. Angka dari paten ini menunjukkan sinyal yang digunakan:
Bus data berisi delapan byte, 0-7. Bahkan byte dikendalikan oleh trailing edge DCLK, byte aneh dikontrol oleh trailing edge S1-S4. Nozel yang datanya dikendalikan oleh empat byte pertama dapat dihidupkan dengan memasok daya melalui bus daya F3; nozel yang terkait dengan empat bit terakhir dihidupkan oleh bus F5.
Saya tidak tahu mengapa HP memutuskan untuk menggunakan sirkuit yang sedemikian rumit untuk mengelola data nozzle. Kita dapat mengatakan bahwa sesuatu yang jelas, seperti register geser, akan bekerja secara normal di sini. Saya mengerti bahwa HP menggunakan patennya sebagai senjata melawan perusahaan pengisian ulang kartrid; mungkin seseorang telah mematenkan solusi yang lebih sederhana, dan mereka harus membuat solusi yang lebih kompleks ini menjadi unik.
Pada grafik ini, yang dibuat oleh saya pada penganalisa logika, tidak sulit untuk menemukan sinyal yang dijelaskan dalam paten:
Selain mengendalikan nozel, kartrid juga memerlukan sinyal (csync) untuk pergi ke grup nozel berikutnya atau mengatur ulang dan kembali ke grup pertama. Hal ini dapat dilihat pada gambar dari penganalisa logis: ini menunjukkan kelompok kedua dari belakang dan terakhir dari 14, dan sinyal csync memiliki bentuk yang dapat dikenali pada kelompok terakhir; ia melakukan "reset" kartrid sehingga grup pertama menerima data berikutnya. Sinyal ini juga dapat digunakan untuk memotong kelompok nozel dalam urutan terbalik; ini berguna saat kepala cetak bergerak dari kiri ke kanan, dan dari kanan ke kiri. Meskipun paten kedua menjelaskan cara kerjanya, saya memutuskan untuk menyandikan transisi ke grup berikutnya dan mengatur ulang sinyal yang ditunjukkan dalam gambar saya oleh garis csync.
Perhatikan bahwa semua ini terjadi pada kecepatan yang cukup tinggi; penundaan antara dua ujung depan sinyal DCLK adalah sekitar 0,4 Ξs, dan jarak antara kelompok adalah sekitar 4 Ξs.
Sekarang kita tahu bahwa setiap bit dalam tiga bus data 14 byte ini berisi perintah operasi untuk satu nozzle. Jika bitnya 0, maka nozzle yang sesuai terpicu; jika sama dengan 1, maka nosel tidak berfungsi. Yang tidak kami ketahui adalah korespondensi antara bit dan nozel. Jika Anda menonton presentasi, maka Anda tahu bagaimana saya berhasil mengetahuinya: Saya mencetak pola yang diketahui pada printer yang berfungsi, memotong sinyal menggunakan penganalisis logika, dan kemudian saya mencari tahu urutan urutan sinyal yang harus dilakukan untuk mendekode kembali sinyal ke gambar aslinya.
.
Sayangnya, pencocokan bit ke nozel tampaknya cukup konstan, tetapi tidak sepenuhnya logis. Tampaknya hal ini terutama disebabkan oleh kebutuhan untuk secara fisik memindahkan nozel secara bersamaan pada jarak yang cukup (untuk menghindari panas berlebih atau terjadinya kekosongan lokal dalam tangki tinta). Selain itu, saya juga menemukan bahwa kemudahan sinyal routing dalam cartridge dapat membuat pencocokan bit dan nozzle cukup membingungkan. Dalam firmware saya, saya hanya mengimplementasikan pemetaan ini sebagai satu set tabel pencarian.
Elektronik
Sekarang kita tahu bagaimana sinyal bekerja, kita dapat mengontrol kartrid printer dengan mikrokontroler sederhana, bukan? Ya, tidak langsung. Kartrid printer tidak menggunakan logika 5 V atau 3.3 V sederhana. Bus data dikendalikan oleh bus 16 V atau 9 V. Bus listrik juga dikendalikan oleh 16 V dan pada kenyataannya, tergantung pada jumlah nozel yang dipicu, mereka dapat ditarik ke arus catu daya . Kita perlu melakukan konversi level.
Sebagai konverter level, saya memilih MC14504. Ini adalah chip konversi tingkat heksadesimal searah lama yang dapat meningkatkan tegangan menjadi 18 V. Meskipun chip ini juga berfungsi, menoleh ke belakang, saya dapat mengatakan bahwa ini bukan pilihan terbaik: ia hanya dapat menghasilkan beberapa mA dan memiliki penundaan propagasi yang agak besar. Saya pikir ini memberikan penundaan beberapa sinyal output tergantung pada kartrid dan beban yang diterapkan pada output chip. Saya memiliki setidaknya satu kartrid yang perlu sedikit penyesuaian waktu agar sinyal berfungsi, dan saya pikir itulah alasannya. Sayangnya, konverter level 16V yang sudah jadi tidak dapat diakses hari ini, jadi saya tidak dapat menggantinya dengan sesuatu yang lebih baik. Namun, chip klasik ini dengan sedikit penyesuaian sudah cukup.
Dengan bus listrik, segalanya menjadi sedikit lebih rumit. Selain fakta bahwa kontak ini mengambil bagian besar dari arus, mereka juga langsung terhubung ke resistor nozel yang disertakan: jika karena alasan daya dipasok terlalu lama, resistor kecil ini akan terbakar dan nozzle akan sepenuhnya gagal. Selain itu, "terlalu lama" ini cukup sederhana untuk dicapai: cukup untuk menghidupkan nozel hanya beberapa mikrodetik, dan jika Anda memasok daya hanya untuk satu milidetik, mereka akan menguap, benar-benar menghancurkan nosel. Untuk mencegah hal ini terjadi karena bug perangkat lunak atau koneksi yang buruk, saya menambahkan logika perangkat keras yang memastikan bahwa pulsa terbatas pada kelipatan kecil 10 Ξs.

Dalam prototipe pertama, saya meninggalkan beberapa konverter tingkat dan tidak tahu bagaimana perangkat lunak akan bekerja, jadi saya memecahkan masalah dengan multivibrator siklus tunggal yang nyata. Di sirkuit ini, dua multivibrator digunakan dalam 74HC123, menghasilkan pulsa, yang lebarnya diatur oleh kombinasi R / C yang terhubung ke pin RCExt. Pulsa yang dihasilkan dihasilkan hanya dengan sinyal input yang meningkat, sehingga sinyal yang terus-menerus tinggi tidak akan mengarah ke apa pun selain pulsa output yang ditentukan secara tepat, tetapi palsu. Setelah itu, saluran MC14504 digunakan sebagai konverter tingkat untuk menaikkan tegangan ke +16 V, dan transistor MOS saluran-P menyediakan arus yang diperlukan.

Pada papan sirkuit tercetak kedua, saya menyadari bahwa jika saya mengubah logika kontak daya sehingga mereka tidak menggunakan dua saluran dari sirkuit level shift, maka hanya dua chip MC14504 yang akan cukup. Sekarang saya memiliki kontrol terprogram yang cukup baik atas lebar pulsa, tetapi saya masih ingin memiliki perlindungan terhadap sinyal kontak input yang terus-menerus tinggi. Inilah diagram yang saya datangi. Ia bekerja seperti ini: dalam keadaan normal dengan PWRB_IN sinyal rendah, kapasitor C28 kosong, karena setiap tegangan di dalamnya mengalir perlahan-lahan di sepanjang R20 dan R21: gerbang transistor Q4 tinggi, dan PWRB_OUT terputus dari bus listrik 16 V. Segera setelah PWRB_IN tinggi muncul tinggi sinyal, Q6 menghubungkan satu ujung C28; karena tegangan yang melintasi 0 V, awalnya ini juga menarik ke bawah sisi lainnya, yang terhubung ke gerbang Q4. Menarik rana Q4 ke bawah membuatnya konduktif, dan ini memungkinkan arus mengalir dari +16 V ke PWRB_OUT. Dalam kondisi normal, PWRB_IN beralih kembali ke kondisi rendah dengan cukup cepat, menutup gerbang Q4 dan mengganggu arus. Namun, sementara PWRB_IN rendah, C28 perlahan mengisi daya: satu sisi di-ground ke Q6, dan yang lain terhubung ke 16 V melalui R21 dan R31. Ketika kapasitor terisi cukup, Q4 "melihat" tingkat tinggi di gerbangnya dan mematikan arus dalam PWRB_OUT, bahkan jika PWRB_IN masih dalam kondisi sinyal tinggi. Mekanisme ini memastikan bahwa PWRB_OUT hanya memasok daya untuk waktu terbatas.
Rangkaian ini juga memiliki resistor kecil yang terhubung secara seri dengan bus daya 16 V (R31), serta kapasitor kecil yang terhubung secara paralel dengan sinyal output (C15). Mereka diperlukan untuk "meringankan tegangan" dari sinyal daya: tanpa mereka, Q4 yang tajam dan mematikan akan menyebabkan sekelompok gangguan elektromagnetik, mendistorsi sinyal yang dikirim ke kartrid.
Selain logika ini, tidak ada lagi yang dibutuhkan. Jelas, diperlukan konverter tingkat +9 V dan +16. Catu daya +9 V harus cukup sederhana: Saya tidak melihat bahwa bus-bus ini umumnya menggunakan lebih dari beberapa mA. Karena memberi makan resistor nozzle, sumber 16 V harus sedikit lebih kuat: Saya membuatnya sehingga tambang dapat menyediakan setidaknya 400 mA terus menerus, dan juga menambahkan cukup banyak kapasitansi decoupling.
Akhirnya, beban paling penting dari pemrosesan gambar dan pembuatan sinyal terletak pada mikrokontroler. Untuk tujuan ini saya memilih ESP32, terutama karena saya mengambil beberapa bagian dari pekerjaan, tetapi juga karena ia memiliki pengontrol I2S yang agak kuat yang menggunakan mode paralel yang sangat nyaman: pada kenyataannya, kami hanya dapat mengatur frekuensi jam, tentukan area memori untuk pengontrol I2S dan akan menampilkan byte-byte ini secara paralel. Berkat ini, sangat ideal untuk menghasilkan sinyal kontrol yang diperlukan; Fakta bahwa ia memiliki dua inti 240 MHz yang kuat juga membantu dalam pemrosesan gambar.
Prototipe
Tentu saja, beberapa konverter dan transistor MOS saja tidak dapat menjadi pengontrol kartrid printer yang berfungsi. Oleh karena itu, saya membuat perangkat terpisah, dirancang sebagai platform untuk bereksperimen dengan kartrid dan kemampuannya. Ini memiliki modul ESP32, logika yang diperlukan untuk mengontrol kartrid, dan beberapa catu daya untuk bekerja dari sel lithium-ion. Ini juga dilengkapi dengan beberapa sensor yang dirancang untuk mengimbangi gerakan tangan seseorang yang tidak sempurna, serta tombol dan layar yang memberikan umpan balik pada gambar yang dicetak. Mari kita lihat komponen-komponennya, mungkin bagi seseorang itu akan menjadi inspirasi untuk peretasan kartrid:
Mari kita mulai dengan sumber listrik. Daya disuplai dari sel lithium-ion dan dikonversi ke 3,3 V, 16 V dan 9 V. Tegangan 3,3 V diperlukan untuk sensor dan ESP32; itu dihasilkan menggunakan regulator LD78 sederhana HT7833.
Tegangan 9 V dan 16 V dihasilkan oleh dua konverter boost berdasarkan chip konverter boost XR2203. Harap dicatat bahwa catu daya 16 V harus bekerja lebih keras daripada catu daya 9 V; cartridge mengkonsumsi dari 9 V hanya beberapa milliamps. Dua konverter boost dibuat pada chip yang sama hanya karena itu cukup bagi saya untuk membeli satu jenis komponen untuk keduanya.Karena seluruh perangkat ini ditenagai oleh sel lithium-ion, kita perlu mengisinya entah bagaimana. Saya memiliki sedikit ruang tersisa, jadi saya menambahkan pengisi baterai lithium-ion berbasis TP4056 sehingga saya dapat mengisi ulang baterai dari sumber daya USB apa pun.Kecerdasan perangkat disediakan oleh modul ESP-Wrover32. Saya menggunakan opsi dengan 8 MiB memori flash dan 8 MiB RAM SPI; cukup cukup untuk melakukan pemrosesan gambar yang kompleks. Modul ini juga memiliki konektor 5-pin yang memungkinkan Anda untuk memprogram dan men-debug firmware, serta dua tombol yang dapat digunakan untuk memilih opsi dan mulai render ketika firmware sedang berjalan.Pilihan yang dipilih ditampilkan pada layar LCD kecil berwarna 160x80 kecil. Layar memiliki koneksi SPI dan dapat dikontrol langsung oleh salah satu konektor SPI periferal yang tersedia di ESP32.Ini adalah antarmuka kartrid. Seperti yang dinyatakan di atas, ini tidak terlalu rumit. Tingkat semua sinyal dikonversi oleh pasangan MC14504, satu untuk sinyal 9 V dan satu untuk 16 V.Berikut adalah tiga jenis sensor yang saya gunakan. Semuanya terhubung menggunakan satu bus I2C, yaitu, dalam ESP32 mereka hanya menempati dua GPIO. Ini adalah unit sensor inersia MPU9250 (akselerometer, giroskop, dan kompas digital) untuk mengukur gerakan, tiga sensor jarak laser VL53L0X (hanya satu yang ditampilkan), diarahkan ke atas, kiri dan kanan. Idenya adalah bahwa dengan menggabungkan informasi ini, secara teori dimungkinkan untuk menentukan posisi absolut kartrid. Ini berguna, misalnya, saat menggambar gambar besar dengan gerakan tangan bebas. Yang terakhir adalah sensor warna TCS3472. Sensor warna terletak di sebelah LED putih; itu dapat digunakan untuk "menyalin" warna dari subjek atau untuk mengkompensasi warna media yang kita cetak.
Karena saya membutuhkan GPIO tambahan, saya menghubungkan expander GPIO ke bus. Ini mengontrol bus reset untuk sensor jarak tiga, bus reset untuk layar LCD, dimasukkannya boost converter dan dua transistor MOS (tidak ditampilkan) yang mengontrol LED putih yang digunakan untuk menerangi target sensor warna, dan cahaya latar layar LCD. Sensor jarak memerlukan reset bus terpisah, karena mereka akan menyala di alamat I2C yang sama. Namun, mereka memiliki perintah yang mengubah alamat I2C setelah dihidupkan. Dengan menyalakannya dan memindahkannya satu per satu ke alamat I2C yang berbeda, saya dapat mengontrol ketiganya di bus I2C yang sama.
Berikut adalah papan sirkuit yang saya rancang berdasarkan sirkuit. Ini memiliki bentuk yang aneh, karena harus dibagi menjadi empat papan yang terpisah dan "mengelilingi" kartrid printer. Mereka terhubung secara elektrik dan fisik; keuntungan dari ini adalah bahwa produsen papan sirkuit cetak tidak menganggap sirkuit seperti itu sebagai empat papan terpisah dan Anda hanya perlu membayar untuk satu.Keuntungan lain adalah bahwa saya dapat merakit papan sebagai satu elemen, dan kemudian mengujinya ketika semua komponen berada di bidang yang sama. Ini memungkinkan saya untuk tidak menyeimbangkan perangkat yang dikumpulkan dengan hati-hati selama debugging. Catatan kecil: sensor VL53L0X menggunakan sinar laser inframerah; Tampaknya cukup kuat untuk menembus filter perlindungan terhadap radiasi inframerah di "cermin" saya dan muncul di bingkai sebagai bintik-bintik kecil cahaya ungu.Dan apa yang akan menjadi hasil akhir setelah pertemuan. Perhatikan bahwa ketika papan dipisahkan, koneksi di antara mereka terputus. Papan memiliki bantalan solder kecil di mana Anda dapat menyolder sepotong kecil kawat dan menekuknya. Jelas, untuk tingkat produksi, Anda perlu menggunakan teknologi seperti FPC PCB atau PCB fleksibel, tetapi untuk prototipe murah ini akan berfungsi.Jika Anda ingin menggunakan prototipe ini untuk referensi atau bereksperimen dengannya, Anda dapat mengunduh file proyek KiCad (ada juga diagram pdf dan gerber di tempat yang sama) dan merakitnya sendiri, atau menggunakan subsistemnya.Karena ini adalah prototipe, perangkat lunaknya agak ... heterogen. Saya akan memberikan tautan ke repositori tempat itu dikembangkan, tetapi perlu diingat bahwa ini adalah snapshot dari hampir seluruh siklus pengembangan, sehingga berisi segala sesuatu secara berurutan, mulai dari rekaman sinyal oleh penganalisa logika hingga dicetak Nyancat dan Mona Lisa. Sayangnya, itu sebabnya kode kekacauan hampir tidak berdokumen dengan jalur setengah jadi dan sisa-sisa kode lama. Jika Anda masih ingin mempelajarinya, Anda dapat mengkloning URL ini di git .Namun, jika Anda lebih tertarik pada perangkat lunak yang dapat dengan mudah mengelola kartrid printer menggunakan ESP32 (dan berisi prosedur yang berguna untuk mengendalikannya melalui mikrokontroler lain), kemudian lanjutkan membaca.Versi kerja minimum
Untuk memudahkan pengrajin lain untuk menggunakan kartrid printer di proyek mereka sendiri, saya juga membuat versi minimal driver. Tidak memiliki dukungan untuk semua periferal dan peretasan dari kode prototipe, tetapi arsitektur dibersihkan dan karenanya dapat menjadi dasar yang kuat untuk pengembangan lebih lanjut. Pengemudi memiliki contoh sederhana dari program yang mencetak ketika Tombol HELLO! Ditekan warna atau kartrid hitam.Saya tidak membuat peralatan khusus untuk itu, tetapi sebenarnya Anda dapat menggunakan kembali perangkat keras dari bagian sebelumnya: cukup ambil catu daya , ESP32 ,dan konverter leveldan menerapkannya dalam skema Anda sendiri. Anda juga dapat sepenuhnya menggunakan prototipe yang dijelaskan di bagian sebelumnya: cukup dengan memberikan sinyal tinggi BOOST_EN yang konstan sehingga konverter penambah 9 V / 16 V selalu aktif. (Dengan cara ini saya mendebug kode.)Kode itu sendiri dapat ditemukan di Github , terstruktur secara standar untuk proyek ESP-IDF. Kode driver utama ada di komponen / printcart ; kode tombol membaca dan memutuskan kapan untuk mengaktifkan nosel, serta kode inisialisasi yang terkandung dalam utama / main.c . Pada contoh, data nozzle dibaca dari gambar rgb yang disematkan.Sistem memiliki arsitektur berikut: printcart_i2s.cberisi driver sederhana untuk mode paralel dari konektor periferal I2S dari pengontrol ESP32. Ini memilih dua buffer dan transfer dari buffer 16-bit kata dengan frekuensi 3,3 MHz ke kontak GPIO (maksimum 16 kontak). (Di sini, pin GPIO ini terhubung ke konverter level yang mengontrol kartrid.) Setiap kali buffer kosong, driver mengeksekusi event handler untuk mengisi buffer.Pengatur kejadian terletak di printcart_buffer_filler.c . Ia menerima data nozzle dari antrian data nozzle dan meneruskannya ke fungsi di printcart_genwaveform.c , yang oleh template mengubah data nozzle ini menjadi sinyal. Templat tergantung pada jenis kartrid (warna atau hitam), dan Anda dapat mengubahnya dengan memuat alat / waveform_editor.html ke dalam browser .Di sisi lain, antrian data nozzle adalah prosedur loop di main.c. Itu menunggu tombol untuk ditekan, dan ketika ditekan, itu menghasilkan data nozzle dengan mengurai file gambar sederhana yang diubah menjadi data rgb mentah dan tertanam ke dalam file biner yang dijahit, memindai data dari kiri ke kanan. Berkat ini, Anda dapat menekan tombol, menyapu kartrid di atas kertas, dan mencetak isi gambar dalam bentuk strip tinta.Hasil akhirnya terlihat seperti ini:Sangat terlihat di sini bahwa kartrid hitam mencetak tinggi dua kali lebih banyak daripada warnanya (0,7 cm dan 1,5 cm), jadi jika Anda tidak membutuhkan warna dan Anda memerlukan visibilitas yang baik, maka lebih baik memilih kartrid hitam. Perlu juga dicatat bahwa di main.c ada yang menetapkan bahwa beralih antara dua kartrid; kode dapat bekerja dengan keduanya. Tidak sepenuhnya jelas mengapa ada garis-garis buram pada gambar hitam: mungkin ada kesalahan dalam sinyal saya, atau mungkin kartrid sedikit lelah untuk pengujian. Bagaimanapun, data yang dicetak itu indah dan mudah dikenali.Kesimpulannya
Rekayasa terbalik dari kartrid printer ini adalah petualangan yang panjang, tetapi pada akhirnya pekerjaan saya membuahkan hasil; meskipun ada beberapa teka-teki yang tersisa (misalnya: apa yang dilakukan kontak ID?), saya pikir saya telah memahami teka-teki dari sinyal yang digunakan dalam kartrid. Saya berharap bahwa dengan menerbitkan kode dan diagram proyek ini, saya akan menambahkan penggunaan kartrid printer ke toolkit pengrajin, peretas, dan pembuat. Saya tidak sabar untuk melihat contoh penggunaan menarik yang akan dihasilkan komunitas. Jika Anda berhasil melakukan sesuatu yang menarik dengan pekerjaan saya, pastikan untuk mengirim saya pesan .Adapun niat saya untuk menciptakan seni ... umm ... dapatkah ini disebut demikian?