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.

Latest test of Multi Nozzle Setup

Latest test of Single Nozzle Setup

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

You can get the Arduino Sketch and Python Script from my Github Repo:

(I'm a beginner in writing code, so it could be a bit unprofessional.)

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 fluid level block and the 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 and fittings could possibly be cleaned up or sterilised to be food grade.

Standard Tesselated Geometry - 28.40 kB - 06/07/2021 at 01:18


Standard Tesselated Geometry - 3.20 MB - 06/07/2021 at 00:56


Standard Tesselated Geometry - 933.87 kB - 06/07/2021 at 00:56


Standard Tesselated Geometry - 40.90 kB - 06/07/2021 at 00:56


Standard Tesselated Geometry - 45.98 kB - 06/07/2021 at 00:56


View all 11 files

  • 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.

  • Testing and further plans

    Dominik Meffert12/07/2019 at 15:52 5 comments

    I tried to print a few pictures using water mixed with color. Since the last test with color I've increased the speed by optimizing the software and driver electronics and I solved the issue of continuous ink supply with a closed ink supply cycle and a peristaltic pump.

    The resolution has not changed since then.

    The next thing I will try is building a better printer design for 4 color/cmyk printing and writing the software for it.

    Some things to add/test in the future:

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

    - Simplifying the piezo driver electronics

    - Building a system to print with melted wax like: 

    - Continue working on a multi nozzle design for increased printing speed.

  • Closed Cycle Material Supply System

    Dominik Meffert12/01/2019 at 14:52 3 comments

    I've added a Closed Cycle Material Supply System in form of a T fitting with some hose connectors, a Nema 17 stepper motor driven peristaltic pump, an extern stepper driver, a check valve and some silicon tubes to solve the problem of continuous material supply.

    The pump pumps the material to the T fitting, which is mounted in the correct hight, so that the printhead neither leaks nor runs dry. In the top of the T fitting is a hole drilled, so that the pump not influences the pressure between the T fitting and the printhead. A small amount of the material is used for printing, but the majority of it flows back to the tank.

    This way there is always enough material in the T fitting to print until the tank is empty and besides of once setting up the right hight of the T fitting and refilling the tank when it's empty there is no additional maintenance needed.

    I use a peristaltic pump, because that way the pump has no direct contact with the material which maybe could damage the pump or contaminate the material.

    I changed the stepper motor pump to a 12V DC motor pump & speed controller from amazon because a stepper motor is not necessary for just pumping the fluid continuous through the system.

  • Test with 3600mm/min and Offset

    Dominik Meffert11/19/2019 at 15:41 0 comments

    Here is a test with all 10 nozzles online and speed optimized post processing script.

    I noticed an offset in the Y direction and missing drops in the middle of the star.

    I will check the software whether it can be fixed but maybe a single CNC machined/ laser cut nozzle plate, at which each offset is exactly the same could be better for a multi nozzle setup.

    I've tested a single nozzle setup and the offset is still there. Must be a issue in the post processing script.

    I think I've found the issue.

    In the picture above the printhead is only moved to the positions where it should print and not "raster-moving" the whole area.

    I think that way should be better and saves time too.

    A short video of the single nozzle setup.

  • Short Test

    Dominik Meffert11/11/2019 at 11:10 0 comments

    A short test of my DIY Inkjet Printer to test the function of the printer, software and toolhead.

    Nozzle 9 and 10 are offline in this test because I ran out of pins on the Arduino UNO .
    The Nozzles are 0.4mm 3D printer nozzles which are maybe too big. I will later test smaller ones.

    Now printing with 3600mm/min.

  • Ready for Testing

    Dominik Meffert11/06/2019 at 18:44 0 comments

    YES, the printer and all 10 printheads are working. Now it's time to work on the software.

    I have almost no coding experience besides of Arduino and the python script I wrote. So maybe it could take some time...

  • New Toolhead

    Dominik Meffert11/03/2019 at 01:42 0 comments

    Here is a new 10 nozzle toolhead based on the new SLA 3D printed design. The dimensions are 105*55*50mm + nozzles and push-in fitting. The nozzle to nozzle distance is 8mm and at its back is a 4020 aluminium profile for easy attachment.

View all 20 project logs

  • 1
    Instructions for building the CMYK / Four Color SLA Printed Version

    The last time I worked on this project was two years ago, but I never added building instructions. 

    Now I would like to make up for that.

  • 2
    Printing the SLA Printhead Part

    Starting with the printhead - First thing you have to do is printing the water tight part of the printhead with a SLA printer.

    I used transparent resin, so that you can see if there is air in the ink chamber or flow channels.

    It's important to flush all air out of the printhead to get it to work.
  • 3
    Printing the FDM Printhead Part

    Next, you have to print the printhead backplate. I printed it in PLA, but you could also print it in SLA resin if you have a high strength resin. I tried it with my resin, but it was too soft (even after curing), so that it got bend while tightening the screws.

    (have to upload the v3 with M5 nuts first).

View all 16 instructions

Enjoy this project?



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