DIY Inkjet Printer

A piezo inkjet printer built from scratch

Public Chat
Similar projects worth following
This is my attempt to build an open source inkjet printer by myself without industrial manufacturing.
The printhead can later be used as add-on for CNC machines eg. for part labeling, binder jetting 3D printing or other applications where an inkjet printhead could be useful.
The printhead is controlled by an Arduino which can be controlled directly via i2c or via GCODE (M260) if you use RAMPS or another board which supports i2c.

This is my attempt to build an open source inkjet printer by myself. I started this project because I wanted to build a binder jetting 3D printer but could not find any open source inkjet printer designs for this. So I started trying to build one.

The toolhead design is a piezo printhead inspired by,52959,page=1 and

Possible applications for this printer or parts of it could be:

- Single Color Printing

- Grayscale Printing

- Multicolor Printing

- CMYK Printing

- RGB Printing

- Part Labeling

- Binder Jetting

- Printing on Food*

- Bio Printing*

*The piezo pumps and printhead are currently made of SLA resin which is not food grade and must be replaced for these applications. The sealings and silicon tubes should be food grade and the piezo disc could possibly be cleaned up or sterilised to be food grade.

ino - 4.05 kB - 08/15/2021 at 17:03


Standard Tesselated Geometry - 500.86 kB - 07/17/2021 at 15:26


Standard Tesselated Geometry - 145.00 kB - 07/17/2021 at 15:26


Standard Tesselated Geometry - 41.29 kB - 07/17/2021 at 15:26


Standard Tesselated Geometry - 62.00 kB - 07/17/2021 at 15:26


View all 8 files

  • Instructions added and Project completed

    Dominik Meffert09/01/2021 at 08:57 0 comments

    Hi there,

    I added building instructions to the project for those who are interested in building the printer.

    With that, the design goal is reached and the project is completed.

    Maybe I will test out binder jetting with this sort of printer in the future.

    I'm also currently working on a DIY CIJ printer project:

    So, thank you very much for your interest in my project :)

  • Auto Drop Feature Update

    Dominik Meffert08/15/2021 at 16:18 0 comments

    I added some lines to the Arduino Sketch, so that the first four bits of the i2c message are used for Drop on Demand / shooting single drops for dot matrix printing and the last four bits are used for shooting drops at set frequency for printing along paths.

    Maybe this could be useful because you can create the gcode for it very easily with every CAM software and it can also be a bit faster than dot matrix printing.

  • Latest Design Update

    Dominik Meffert07/16/2021 at 20:10 0 comments

    Here are some pictures of my latest printer design. It's not so different from the last design. The only changes are:

    - New printhead which has a vacuum duct around the nozzles to suck in the excess ink.

    - New driver electronics for switching the piezo discs - four IRFP460 that switch around 170VDC.

    - Less 3D printed parts and cleaner look, because I placed the electronics in two boxes.

    That's about it.

    I tested it out and it works reliable even after not being in use for a day or two. After a short priming it is ejecting droplets again.

    I'm currently using 0.2mm nozzles and the ejected droplets are quite large. Maybe I can change that by changing the switching time or by using even smaller nozzles.

    But at least it's working now and should be usable for some test prints.

    I uploaded the .stl files for it and will write building instructions for it as soon as possible.

  • More work on the Nozzles

    Dominik Meffert07/12/2021 at 18:21 3 comments

    Hi there,

    I got the new electronics and all four pumps running, did some testing with it and besides one thing everything seems to work ok.

    The remaining problem is, that by mounting the nozzles in a horizontal arrangement, they often eject not only one droplet, but rather one lage and multiple small satellite droplets, which is a bad thing.

    If the nozzles would be mounted in a vertical arrangement, all droplets and satellite droplets would hit the paper at roughly the same spot so that they would merge together, but in the horizontal arrangement they hit the paper at the entire flight path of the main droplet.

    So mounting the nozzles in a vertical arrangement would be good, but by doing so there would be forming of ink drops on the nozzle again which would block the nozzle orifice until they fall down on the paper.

    The satellite droplet appear more often when there is some air in the lines.

    Another thing is using the 6mm OD / 4mm ID tube in the case that air can get inside the tube it can happen sometimes that the ink forms a channel inside the air bubble so that the ink can flow through the bubble instead of pushing it out of the line.

    Maybe lines with a smaller inner diameter could help.

    So, I have an idea how I could prevent drops from forming in the vertical orientation - will try it out later.

    Here is another printhead prototype with a vacuum duct at the nozzle to prevent any drops from forming at the nozzle. This is the best drop preventing design that I built so far, because it does not just collect the drops, but can completely prevent them from forming at all.

    I will design another one for all four colors for more testing. It looks like (I hope) I'm on a good way with this design :)

    So, here is another printhead for all four colors.

    It looks like I have finally build a working printhead, pump and driver setup. Even though there are some unwanted satellite droplets, which I think are caused by a partially clogged nozzle or a bit unprecise alingment while assembling the printhead, I'm really happy with the result because the machine is basically working as expected. The ink is drawn by the piezo pumps from ink containers through check valves to the printhead and can be ejected in a drop on demand method. That's what I wanted and now it works. In terms of reliability it works a lot better than the design from two years ago, that I could not get to work with four colors at all and with one color only if everything was 100% tuned right in terms of air in the lines and water level. The new design can work with some air in the lines and can also force larger bubbles out of the nozzle again in some cases.

    Now I can write building instructions for it and upload all files and infos.

    I also want to work on a software for it to do more testing in the future.

  • Another Improvement needed

    Dominik Meffert06/30/2021 at 12:56 4 comments

    Today I tested out to print something with the new design, but it did not really work as expected.

    The good things are:

    - The pumps can pump the ink up to the printhead and can eject ink out of the nozzles.

    - If the pumps have enough power (when using two piezo discs) there is no problem with making bubbles.

    - It's reliable. As long as there is no air in the lines it works without problems even after days of being not in use.

    The only bad, but unfortunately essential thing is:

    - It works good for streams of ink but not good for drops unlike the last design which, however did not work reliable.

    So I have to find a way to get it more suitable for ejecting drops, somehow...

    My first idea would be using DC again instead of AC.

    I think the relatively slow rise of the voltage in the 50Hz mains sine wave could be the problem. With a DC square wave the voltage rise and therefore the piezo movement and ink pressure change would happen almost instantaneously what should be better for creating droplets.

    The problem with using DC would be, that the piezo needs AC to move in both directions to perform not only a change in ink pressure, but a pumping action.

    So the best should be a high voltage AC square wave.

    At the moment I only have the parts to switch high voltage (up to 500V) DC.

    I will try that out later, but it will likely not work and so I have to find or build something that can create a high voltage AC square wave....

    I just figured out that the DC SSRs are really bad for switching the piezo disc compared to the IRFP460, so I will rather use these.

    I built another printhead that has a drain directly underneath the nozzles to suck up the excess ink drops. It is mounted at an angle, so that ink drops do not form at the tip of the nozzle - what would block the nozzle -  but instead form on the side of the nozzle until they drip into the drain.

    For this printhead I used 0.1mm nozzles. With two piezos in the pump the amount of ink per drop is a bit high what I think leads to the drops that are forming on the nozzle, but using only one piezo in turn is too less ink what leads to no droplets at all.

    I think the new printhead in combination with a PCB with four IRFP460 and a rectifier should make the design ready for first printing tests.

    New electronics for the piezos.

    A transformer, rectifier, 12VDC power supply for the optocouplers and a board with four IRFP460 and 47k 1W resistors for switching and discharging the piezos.

    Placed the electronics in two boxes for a cleaner look.

  • New Printer Design based on Piezo Pumps

    Dominik Meffert06/27/2021 at 15:29 0 comments

    To improve the reliability of the printer I build another printer design that is based on the piezo pumps. The new design does no longer need a level block and ink cycle because the piezo pumps are powerful enough to pump the ink up to the printhead to eject ink in continuous streams or pulsed drops. 

    The pumps are connected to check valves and 6mm silicone tubing and they have a smaller gazoline filter at the tube input to replace the large inline gazoline filters.

    There is also no longer a piezo disc required in the printhead to eject ink, so that the printhead can be build more compact.

    The printhead can be rotated to change the drops' flight parth. It's no longer aligned straight to the bottom but rather aligned at an angle to collect and suck in excess ink with vacuum that in some cases could form a drop that would then drop on the paper.

    Included in the SLA printed printhead are channels that guide the ink to the bottom and then again to the top, so that the nozzle is at the highest point on top of a small chamber to prevent it from sucking in air bubbles what would lead to ejecting bubbles from the nozzle instead of ink drops.

    On top of the printhead is a SLA printed plate in which I drilled small holes per hand. This plate can also be laser cut or cnc milled to create even smaller nozzle holes.

    In terms of the electronics I also changed some things. The printer now has a 230VAC IEC input

    that powers an 12VDC power supply for the RAMPS and

    a small step down converter

    that powers a small vacuum pump with a low voltage (set the voltage that flow rate and noise level is comfortable) which guides excess ink to a container.

    The 230VAC also powers a small transformer that transforms 230V to 2x 115V (In reality I measured 131VAC at the output without a load).

    The transformer's output is connected to a 4 channel SSR which switches the piezo pumps.


    The connections are distributed via WAGO terminals. The backside of the piezo pumps are also printed in transparent SLA resin to make sure that every part sits on the right position and there is no ink leaking what would short out and destroy the piezo disc.

    A part of the printer that looks likely a bit weird are the lightbulbs on the right which are used as dummy load which is needed to guide the leakage current of the SSRs around the piezos, because otherwise they would not fully turn off even when the SSR is not active and so there would always be a bit of ink leaking out of the nozzle.

    They could be replaced by power resistors, but I had not the right value resistors at hand and so I used 15W light bulps.

    I think using SSRs for switching the piezo pumps should be the easiest solution, but probably not the most precise in terms of controlling the piezo motion and therefore the exact amount of ink, but if it would work with the SSRs I will likely keep them to keep the build simple and easy to rebuild.

    So, here is the new design and I hope it will be more reliable, because I fixed some problems that I had with the old design.

  • Piezo Pumps

    Dominik Meffert06/11/2021 at 12:46 0 comments

    Because the current design with hydrostatic pressure fed prindhead has some reliability problems - sometimes one of the four heads starts dripping or sucking in air before or during printing - I'm working on a possible solution right now.

    My plan is to build SLA 3D printed Piezo Micropumps to either feed ink to the printhead according to ejected drop count or integrate the pump directly into the printhead, so that the printhead can draw ink form the ink container.

    I designed and assembled a pump and later today I want to test it.

    I also bought flexible resin for printing the check valves in the pump which are currently printed from the transparent resin that I used for the printhead.

    Update .... Success

    After a week of failing on building all piezo micropump designs that I found on the internet I finally got something to work. I tried out pumps with 3D printed valves and valveless diffuser nozzle and channel design, but they did not work. The last thing I tried was using the latest inner channel pump design, connecting two duckbill valves to it, priming it and - because of the lack of a 100V+ piezo driver or parts to build one - connecting a 115V AC transformer to it.

    And out of a sudden after days of failing - It worked!

    I guess it's actually really simple you could for example if you stay with the 50Hz from mains use a small transformer and some SSRs to control the flow by the ON time to precisely dose the ink. It could work by counting the ejected drops, like after some amount of drops let the pump run for some amount of time or pump run time per drop in milliseconds.

    Until now the printheads were fed by hydrostatic pressure and I have not tried out if they would also work when they are feed by pump, so I need to test it first.

    The former ink cycle could likely be replaced by the pumps if you don't need mixing or want to use a big ink container.

    If you would use the same driver setup it would likely replace the four pumps and step down converter with a small transformer, four SSRs and four piezo pumps.

    I also tested out to run the pump with just one piezo instead of two. It did also work, but the flow rate was really low and so I think it would be better to use two piezos and limit their On time instead.

    I tried out to switch the pump with a SSR because I had some concern that because of the piezos being a really small (as far as I know) capacitive load it would not work, but it seemed to work. Because of the SSRs leakage current they do not entirely turn off, but in the off state the pump has not enough power to lift the liquid so that it should not be a problem.

    I also ordered an 8 channel SSR module to try the 115AC for the printheads, too.

    New more compact pump design

    I changed the pump design to be more compact and also replaced the 4mm PU tube + M6 fittings by 6mm silicone tube + tube connector integrated into the part.

    I did not integrate the duckbill valves into the part, so that you don't have to find the right sized one and can instead buy check valves that fit the tube diameter if you want to build the pump.

    I think for the connections it would be the best to secure them with a small zip tie or something similar to make them more seal and to prevent them from getting loose.

    I tested the new pump and it worked very well. And I also ordered different filter which are placed at the end of the tube in the ink container - the ones for chainsaws and lawnmowers.


    The pump in the picture had a height of 5mm and also a tube connector with 5mm diameter. Because of the printing process one side of the tube connector got a bit flat/not perfectly round and therefore the tube connector got a bit leaky.

    So, I'm currently printing one with a height and tube connector diameter of 6mm to get a tighter fit and hopefully get a sealed connection.

    I also thought about designing a pump which would have the in and outlet at the top to get it even more compact.

    Two Chamber...

    Read more »

  • Redesign for Building Instructions

    Dominik Meffert06/05/2021 at 15:52 0 comments

    It's been more than a year since I last worked on this project, but for writing building instructions I redesigned it to be a printer add on, so that you can fit it on your own 3D printer, plotter or CNC machine.

    I again fitted it to an Ender 3 3D printer.

    On the pictures you can see that the build is made of the tubing for four colors, two SLA printed parts, four pumps, four filters and some electronics.

    The machine is powered by an external 36V power supply which is directly wired to the H bridges, stepped down to 4V for the pumps and stepped down to 12V for the printer controller.

    The printer controller controls two stepper motors and sends i2c commands to the Arduino UNO. The UNO sends signals (and 5V power to power their logic circuits) to the H bridges to drive the piezo discs in the printhead which eject ink droplets.

    Hope this pictures help you, if you are interested in the project and want to build it.

    I will also write step by step building instructions soon™.

  • Ideas for Software

    Dominik Meffert01/17/2020 at 00:40 0 comments

    Here I want to write down some ideas for the printer software.

    I think besides CMYK printing it should have a mode for assigning a color to a printhead. E.g. if you have a svg graphic with areas in RGB Colors, black areas are assigned to printhead 0, pure red areas are assigned to printhead 1, pure green areas are assigned to printhead 2 and blue areas are assigned to printhead 3.

    It should also have an option to print black and white with all four printheads for faster printing like I planned before for the 10 nozzle printhead instead of CMYK. 

    More ideas will follow.

  • CMYK

    Dominik Meffert01/05/2020 at 12:05 0 comments

    The last few weeks I changed a few things on the printer so that I can try CMYK printing. It would be a dream if it works out.

    I removed the 36V power supply, 3 L298Ns, the step down converter, the shift register, the WAGO clamps and the pump speed controller and added a 12V power supply, 3 more pumps, a much heavier speed controller and a step up converter.

    The printhead is now a 4 nozzle, single piece, height adjustable printhead for 4 different colors.

    The T fitting has been replaced by a SLA printed block for 4 different colors.

    I ordered cheap inkjet ink which I would mix with water for testing, but today I saw there is even cheaper ink out there which I could use without mixing it with water.

    The printer is now ready for testing, but I don't have any software to create the GCODE yet.

    I will try to write one in Python with a GUI so that you can select a picture and the settings and it will create a preview and the GCODE.

    This maybe take a while because I haven't done something like that before.

View all 26 project logs

  • 1
    About the Project

    In the following steps I will tell you how to build my DIY Inkjet Printer, but first I want to tell you a bit about this project.

    Back in 2019 after reading through the build logs of the Oasis 3DP I was searching on the internet if someone has ever tried to build an inkjet printer from scratch, at home, with simple electronics and without access to industrial production lines. I found something about that at the Reprap Forum and on thingiverse and tried to build their projects. After successfully building the projects I started the work on this project.

    The design goal of the project is to build a piezo inkjet printer from scratch. The first working build had a PMMA printhead and could if everything was aligned perfectly print with black ink (water + paint color). After that I started printing the printhead with a SLA 3D printer to be able to create internal channels for flushing the air out of the printhead through the nozzle. After some testing with it and building single and multi printhead builds I wanted to try printing in four colors or CMYK. I designed the needed parts for that, but I never tried them out until I recently attempted to write building instructions for that. For writing the instructions I redesigned the project to fit it on an Ender 3 and while doing that I figured out that the machine was far to unreliable to get it working at all. So I had to find a way to make it more reliable. For that I designed SLA 3D printed piezo pumps instead of the piezo printheads, used MOSFETs and higher voltage for switching the piezos instead of the H bridges and used a vacuum duct to carry away the excess ink that would otherwise block the nozzle with a large ink drop. With these changes the printer should be ready to do hour long prints whitout failing due to design based problems.

    You can use the printer for:

    • Printing Dot Matrix images (with dot matrix software or CAM software)
    • Printing CMYK images (with the right software – could not find one for that )
    • Printing along paths ( with any CAM software )
    • Printing with four different colors or materials
    • Maybe you can use it for binder jetting or even bio printing with low viscosity materials.
    • You can also modify it to match your desired application.

    If you like the project and want to build it, read the following steps in which I tell you how to build it. Thank you for the interest in my project :)

  • 2
    Machine ​Parts Description

    The machine consists of the following parts:

    • Machine frame with mechanics and stepper motors
    • Printer controller with stepper drivers, 12V power supply and vacuum pump + Step Down Converter
    • Piezo driver with Arduino Nano, transformer, 12V power supply, rectifier, MOSFET switch, fuses and WAGO terminals
    • Piezo pumps with silicone tubing, check valves, ink and excess ink container, ink filters and printhead
  • 3
    Machine Frame

    You can start by choosing the machine frame that you want to use for your DIY Inkjet Printer. I used an Ender 3 from which I removed all electronics besides the stepper motors, but you can also use any other machine frame. The machine needs no Z axis and endstops are also optional.

View all 14 instructions

Enjoy this project?



Hacks wrote 11/17/2023 at 21:10 point

This printer looks amazing, and I'm considering it for tattoo printing. However, I've seen various machines on this page ( Will they be suitable, or is it possible that they won't work? I am confused. 

  Are you sure? yes | no

John D.K. wrote 12/20/2022 at 10:16 point

@Dominik Meffert I tried responding in our dm conversation but Hackaday isn't loading any chats for me, I don't even know if you got my last message, in any case, I opened an issue on your GitHub page, let's talk there if you don't mind.

  Are you sure? yes | no

technical.jw wrote 03/12/2022 at 12:12 point

Sorry to bombard you, but just remembered, a commercial machine I once worked on had an arbitrary waveform generator with a dip after the square wave pulse, this seemed critical for deposition.


  Are you sure? yes | no

technical.jw wrote 03/12/2022 at 11:56 point

Forgot to sign my post.


  Are you sure? yes | no

technical.jw wrote 03/12/2022 at 11:53 point

Although a regular reader of hackaday, I have just seen this project, I am delighted that my crude efforts on reprap may have inspired your work, you have achieved excellent results, I did write software, a long time ago, that takes images, extracts CMY and outputs gcode, you can have the source code if you can make use of it.

When mist makers first appeared, I bought one to experiment with, I realised that a mist could be tapped off and deposited through a fine nozzle, another avenue to consider.

I shall keep watch on your projects, but am off grid most of the time so please be patient with any responses.

  Are you sure? yes | no

tringmrk wrote 12/14/2021 at 09:34 point

This printer is looking very amazing can we use it for some labeling purpose because I am looking for a printer for product Labeling and I think it will be a perfect choice.

  Are you sure? yes | no

zied wrote 08/30/2020 at 21:41 point

this project is awsome! congratulations!

coming to the points you mentioned for further optimizations, here is a bit of brainstorming, I hope this helps progressing further:

- Increase the resolution with the use of a smaller nozzle and optimized piezo control

if the nozzle of the 3d printer can be removed then the width of a single printhead can be reduced, this will enable stacking more printheads in smaller space. what do you think about drilling the nozzle on the printhead? 0.1 mm drill bits are available (on ebay for example) and can be used without breaking them using a proxxon or dremel with a drill stand. this should allow a spacing between nozzles below 3mm

- Simplifying the piezo driver electronics
I am thinking about using one single L298 to drive all piezos. this can be achieved if we can connect/disconnect the piezos pins from the L298 on demand. An easy way for realizing this, is to use relays. 16 channels relays are available. we can even think about reducing the number of pins by using the parallel interface of a shift register (such as 74HC595) instead of using arduino pins directly. From arduino side SR can be controlled using SPI (CLK to srclk and MOSI to ser) and  a gpio pin to rclk. this shift registers can command the relays. it can even be cascaded for a bigger number of nozzles.

  Are you sure? yes | no

alejandrolugoojeda wrote 07/10/2020 at 23:31 point

Dominik Meffert how are you brother, here is the only communication or contact they can have? sincerely and seriously, I am involved in a project, I would like to involve you, it is an own and individual project, we will not get a team, and I have seen it as one of the greatest potentials for this type of project, 2D-3D. I have questions without answers yet, and very dizzy. Is there a chance you can help me? , or is there any possibility of being in contact and entering my project not yet published on hackaday, but what I have when I have progress. But I need to resolve that question. Thank you very much brother.

  Are you sure? yes | no

PropellerGraph wrote 09/12/2019 at 03:48 point

I like how this has gone full-circle--using a 3D printer to make a 2D printer! The dot-matrix prints almost look like pointillist paintings!

  Are you sure? yes | no

Dan Maloney wrote 09/06/2019 at 17:50 point

Reminds me a little of the inkjet heads used to print on packaging as it goes down a conveyor. Even sounds a little like it.

  Are you sure? yes | no

Krzysztof wrote 09/03/2019 at 17:40 point

Nice! Have you considered using mobile phone speakers?

  Are you sure? yes | no

Dominik Meffert wrote 09/03/2019 at 20:34 point

Thank you. 

Not yet, maybe in the future for a smaller toolhead.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates