DIY Inkjet Printer

by nicholasclewis, published

DIY Inkjet Printer by nicholasclewis May 17, 2011

Featured Thing!


The goal of this project was to develop a low cost, open source inkjet printer utilizing standard inkjet technology, for personal use. This project was partly in response to the fact that there are no DIY inkjet kits available. There was a kit available from Parallax parallax.com/dl/docs/prod/robo/InkjetKitDocs-v1.0.pdf. This kit is no longer made and the book amazon.com/Inkjet-Applications-Matt-Gilliland/dp/0972015930 that was written to use that kit is now out of print.
The prototype design used a carriage assembly constructed from steel rods that were assembled using connectors that can be printed on an FDM machine. The entire carriage system is driven along the x-axis by a belt attached to a stepper motor. The print cartridge, taken from an HP point of sale printer, is driven along the y-axis by another stepper motor belt drive. The electronic controls use an Arduino Mega to run all of the printing systems.
The design resulted in a working prototype that fulfills all of the design constraints. The rod frame carriage design is lightweight, easy to assemble and easy to integrate with the other systems. The Arduino used in the electronics has a large library of resources available to perform things like LCD, SD card, and stepper control.
Areas where future work should be focused include making molds and casting printable parts to bring down the overall cost, developing host side software, and optimizing the speed.

There is a video of this working here: youtube.com/watch?v=fYeYeTGkvJM
There are additional pictures here: flickr.com/photos/nicholasclewis/sets/72157626730985822/

This was a group project involving:
Patrick Hannan
Jared Knutzen
Nicholas C Lewis
Joy Markham

Recent Comments

view all

They are in a line 1 dot wide and 12 dots high.
It is 96dpi so 1/96" wide and 1/8" high.

arrangement of the nozzles is in line or a rectangle?

how long is it?

This is a great proof of concept. I just wish someone similar to Paloau/Arduino/RasberryPI group would design an open source print head with hose connectors so hobbyists can build any desired printer around it. 3d printer builders should be able to work out the mechanics/arduino programming. We need a Joseph Prusa of 2D printing. :-) Great job nicholasclewis.

Liked By

view all


Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag. Print Thing Tag


Print the parts contained in the "Mechanical.zip" file and assemble them as shown in the "DIY Inkjet Printer.pdf".
Assemble the electrical components as shown in the "Circuit.zip" & "DIY Inkjet Printer.pdf".
Flash your Arduino Mega with the firmware from "Firmware.zip".
Use Processing.org to run the script in "Preprocessor.zip" and create a 'print.dat' file. Copy the file onto the SD card and print using the DIY Inkjet Printer.

Optionally don't build the x-y carriages and just mount the print head to other robots for mobile printing applications.


You must be logged in to post a comment.

lucke on Feb 20, 2014 said:

arrangement of the nozzles is in line or a rectangle?

how long is it?

nicholasclewis on Feb 23, 2014 said:

They are in a line 1 dot wide and 12 dots high.
It is 96dpi so 1/96" wide and 1/8" high.

foxpup on Oct 6, 2013 said:

This is a great proof of concept. I just wish someone similar to Paloau/Arduino/RasberryPI group would design an open source print head with hose connectors so hobbyists can build any desired printer around it. 3d printer builders should be able to work out the mechanics/arduino programming. We need a Joseph Prusa of 2D printing. :-) Great job nicholasclewis.

martygwilliams on May 19, 2013 said:

Is there any reason that anyone can think of that this couldn't be modified to print signs on windows? Vacuum cups to hold it to the window and off we go?

glen on Jun 5, 2013 said:

The inks used don't set. I want to replace the HP ink cartridges with UV setting CYNK inks. I'd be grateful if anyone would like to help me with this.

erinwolf on Apr 5, 2013 said:

Hi, Nicholas!

If you remember, I asked about theory of printhead in "inkshield topic", but haven't succeed in finding better printhead. So, I tried to repeat your experience by myself and have a "problem" with prithead.

Now I made "power part" of my printer and it has 20V 300mA for printhead nozzles. But when I trying to test just one nozzle with 5us pulses through 800us, it works strange:

It heating some seconds and then begin to spray some ink, but not like drops - like aerosol. So, is it normal? And how far I should place surface for painting in this case to have good resolution (and which is achievable?)?

Maybe, it's not good to paint permanently through one nozzle, but what time I should give it to cool? Maybe, I should to try another timing?

Thank you.

nicholasclewis on Apr 6, 2013 said:

Typically you want the inkhead around 2-4mm from the print surface. I have a picture with the head various distances from the paper here: http://www.flickr.com/photos/n...

You should be on for ~5us then off for at least 800us and that should be fine for a single nozzle continuously.

There is some additional detail about driving the head here: http://nicholasclewis.com/proj...

lezell on Jan 17, 2013 said:

Hi Nicholas,

I'm a french student in an computer school and we are currently building a mobile robot (that prints). We based our work on your Inkjet Printer.

We currently have a problem linking the carriage to our board. You used the CONN_16_HP_Q2347A connector. On the data-sheet (http://portal.fciconnect.com/C... we can't see where pin are connected to the Q2347A HP Carriage Assembly.

In your documentation (DIY_Inkjet_Printer.pdf), the first link you wrote in your bibliography is to InkjetKitDocs-v1.0.pdf.

Is the electric circuit schematics for linking the carriage is the same as yours? (without the connector)
The main problem we saw is that on your picture where we can see the CONN_16_HP_Q2347A, the 2 NC (not connected) pins are not on the side as there are on the carriage.
Do we miss something here ?

Subsidiary question: is the carriage they use (HP 51604A) is used/controlled the same as yours (HP C6602) ?

Thanks !

aishiqi on Jan 7, 2013 said:

Cool!!! i also want to make one .i will buy this cartridge later.sounds easy to drive! although i have not comprehend the time sequence exactly. thank you for you shareing!!

Keavon on May 25, 2012 said:

Wow! Cool!

Three questions:

1) What is the powder print material?

2) How do you interface with/control the print head?

3) Can it print in full color? I would assume you could, but if you hacked the print head, you may not be able to. So that's why I'm asking.

This information is probably in the report, but I'd rather not read through 20 pages of writing. And it's late and I'm tired.

Thank you, and congratulations on your success! I'm going to try hacking an inkjet printer to print on powder this summer too!

nicholasclewis on May 28, 2012 said:

Thank you,

your answers:

1) This is not printing in powder (although other versions have)

2) An Arduino is controlling the print head directly

3) No, the C6602 ink heads are single color

tiphaine on Apr 30, 2012 said:


I read your datasheet and I would have more information about the cartridge. I would use the cartridge with any card, not only the Arduino.

- The voltage of the 2 pins "com" is 24V. What about the current intensity ?

- What are the voltage and the intensity for the others pins of the cartridge ?

- Why the pins 2 and 7 are not used ?

- What generator did you use to have 24V ?

Thank you !

nicholasclewis on Apr 30, 2012 said:

- It is not 24v at the ink head. The head needs around 20v @ ~300mA.

- The other pis are pulled to ground to fire each nozzle. I strongly suggest re-reading pages 14-15 as they describe the voltage and timing for the head.

- Pins 2
amp; 7 have no connection to the head and are just connected together in the cable. They can be used for cable detection.

- If you look at the circuit diagram there is a LM317 regulator between the 24v and the head. This is what regulates the 20v.

tiphaine on Apr 22, 2012 said:

Hi Nicholas,

I'm currently a computer science engineering student and I have to realize my final-year project. Actually, I
’m working on a printer robot and I found your inkjet printer firmware very interesting.
I want to buy the HP carriage assembly but there are two different references: HP Q2299A and HP Q2347A:
I would like to know if theses references are both compatible with your firmware, or if your firmware is specific to an only one carriage.
It will be very nice of you to help me.
With my frenchy best regards,

nicholasclewis on Apr 22, 2012 said:

Either one will work. The only difference is the Q2299 has a 10" cable while the Q2347 has an 18" one. I would recommend the Q2347 because the extra length can be useful.

kesava_kkr on Mar 21, 2012 said:

Sir do you have the book "Inkjet applications by matt gilliland", if so please send to my email. because i don't have a source here, i am a student not able to purchase through online. so only asking you.

kesava_kkr on Mar 21, 2012 said:

my mail id is [email protected]

kesava_kkr on Mar 11, 2012 said:

Sir i don't have the hp print head you used in this project. and i have a print head that from CANON(BJC-2100), but it has more nozzles(resolution is 720*360 dpi), how i can interface that print head with the Arduino mega? and as you told that programming will become more complex, what should i do for that, and also i don't have any reference book to proceed further to wright program.. help me please..thank you..

nicholasclewis on Mar 11, 2012 said:

I don't have any information about other heads at this time. One option is to use an oscilloscope with a working printer to analyze the communication to the head.

kesava_kkr on Feb 14, 2012 said:

hi..i wanna change the printing image which you uploaded in the preprocessor.zip, how can i convert some new image to .DAT format and will this work with the same printer to print??

nicholasclewis on Feb 20, 2012 said:

Sorry for the delay.

The very first line of preprocessor.pde is:

// open a file and read its binary data

byte b[] = loadBytes("g3784.bmp");

change the "g3784.bmp" to the name of your new file. It should be a black and white bitmap that is scaled to fit on your printbed (@96dpi)

kesava_kkr on Feb 20, 2012 said:

sir plz reply....

kesava_kkr on Feb 14, 2012 said:

and is possible to add 3rd dimension to this project...have you tried that?

pietvr on Jan 21, 2012 said:


Great project. I have built the circuit, but I can not get the LCD to display coorectly. The words are placed random and not full words and sometimes just gibbarage are displayed and words are typed over the previous word. Is there anything else I have to load with the firmware for the lcd to disp
lay correctly? Any help much appreciated.



nicholasclewis on Jan 21, 2012 said:

You should not need anything else as the LCD Library is included with the Arduino IDE. I would double check your LCD wiring and then try loading one of the LCD test sketches onto your Arduino.

4ndy on Jul 23, 2011 said:

I love the effort and intention, but one thing kills this project's final product stone dead.

In the specification/'functional requirements', you missed the most common expectation of anyone with a modern inkjet printer, and that is for it to print more than one page at a time unattended.
By not including that you went on to design the printer with an x-axis assembly that moved along the y
-axis, instead of using the proven method of guiding paper through rollers to the x-axis. Consequently, you have to change each page that you want printed individually by hand.
This gives the machine the overall effect of a self-plating printing press - combining levels of tech from completely diffe
rent centuries. :'(

I hope someone else can now develop on this work so that we can, for instance, easily print a hundred posters cheaply and easily with an open-source machine.
Just throw over 9000 rollers at it... then we jammin', an' I hope you like jammin' too. :-E

orzo on Mar 8, 2012 said:

Not using rollers makes the machine more convenient for printing onto ridgid surfaces (cd blanks?).

nicholasclewis on Jul 27, 2011 said:

That was intentionally NOT one of the "functional requirements.' As others have pointed out this printer is a poor replacement for a commercial inkjet printer and was never designed as one.

Although not explicitly stated in the report it has been stated before that the primary goals were to release an open source a method of:
1. connecting a inkjet head to an microcontroller
2. converting picture/text data to a format the microcontroller/inkjet could easily handle

If you are interes
ted in having a printer that can print to sheet after sheet please build on what we did, as that is why we shared this work. :)

Anonymous on Jul 13, 2011 said:

Excellent implementation...

Could be interesting a new version, vertical, with 2meters carriage, able to paint on the walls...

Anonymous on Jun 22, 2011 said:

OK, but what about drivers? For linux. ;-)

I believe it can be the best option for PCB printing, but ... have I to have 3d printer to build it? really?

nicholasclewis on Jun 22, 2011 said:

Everything is open source and currently uses Arduino and Processing.org. It will work fine on any platform that supports those tools. Additionally the code should be adaptable to any other platform/language you may want.

You don't have to use a 3D printer to make it if you have other tools that you can use to build a basic x-y frame. Once again it is open source, use it, adapt it, and improve it. :)

ccotter247 on Jun 12, 2011 said:

When do we get a DIY Laser Printer??? :)

Anonymous on Jun 5, 2011 said:

How hard would it be to adapt this thing for a large variety of cartridges? I am imagining a testing application for a wide variety of refilled cartridges.

nicholasclewis on Jun 5, 2011 said:

Other cartridges are typically more complex to drive. This cartridge was selected because of it's simplicity, available documentation, and the availability of the carrier. I am currently exploring other, higher resolution, cartridges.

naporter on Jun 4, 2011 said:

Nice work. Definitely a cool project. I often think of re-inventing the wheel. I must admit it would be much cooler if the parts to make it were actually cheaper than going out and buying a REAL inkjet printer. I'm sure you used parts from one as well.

Its neat that you have the ability to re-invent the inkjet printer, but its simply not practical. There are new ones on the internet, if you look hard enough, for as little as $10. My hats off for the hard work, but I would suggest a more productive area of development.

nicholasclewis on Jun 5, 2011 said:

This project uses no parts from a commercial printer. Currently everything can be purchased individually. The attached PDF has a detailed BOM with sources.

I agree that it is impractical to re-invent the inkjet printer and this is not a re-invention. This project is to open the door to applications of inkjet printing that would be difficult or impossible with a commercial printer. One of these, a sphere printer, is suggested below by dave_menninger
, another is 3D powder printing as also mentioned below.

adsimpson85 on Jun 3, 2011 said:

I wonder if anyone can help me... I'm struggling to find these .zip files made reference to. Complete n00b here I know, but where are they? :-E

nicholasclewis on Jun 3, 2011 said:

Scroll all the wey to the bottom, below the comments. :)

MarcusWolschon on May 29, 2011 said:

Great thing!

dave_menninger on May 26, 2011 said:

I'm going to attempt to adapt this to an eggbot / spherebot. Thanks for the great documentation!!

nicholasclewis on May 26, 2011 said:

You should look at this ping pong ball printer: http://www.youtube.com/watch?v... This was one of the things we looked at early on in our project. It uses the old Parallax kit to drive the print head.

PhillyDee on May 23, 2011 said:


Make it as cool as this:


chris_hy88 on May 22, 2011 said:

You're guys did a very good jobs. Keep going and make 3D printer more powerful. :)

WarrantyVoider on May 19, 2011 said:

Hello, direct-EtchResist PCBs! 8-)

EverydayInventors on May 23, 2011 said:

Or direct-print resistors and, perhaps with a little experimenting, semiconductors:


eranglr on May 19, 2011 said:


NickAmes on May 19, 2011 said:

Full color ABS/PLA objects here we come!

Mike77 on May 19, 2011 said:

What ink and printhead are you using?

nicholasclewis on May 21, 2011 said:

We are currently using stock HP C6602 printheads with stock ink. They are available in black, blue, red,
amp; green. There is more detail about the printhead and printhead holder in the "DIY Inkjet Printer.pdf"

PolygonPusher on May 18, 2011 said:

It is great to see that you good people are working to make an open inkjet printer. It's about time! :) I'll follow this with joy and anticipation.

emili on May 18, 2011 said:

Thanks man!! I was waiting something like that :D

MaskedRetriever on May 18, 2011 said:


shay1978 on May 18, 2011 said:

That will help alot to the open 3d powder printer projects.

shay1978 on May 18, 2011 said:

And i see they already built an open 3d powder printe whit this:


Renosis on May 18, 2011 said:

lol, I was just about to say this exact thing.

This is just one step away from a powder based 3d printer.

moleofproduction on May 18, 2011 said:

How many more ways can I "like" this?