DIY Inkjet Printer

by nicholasclewis, published

DIY Inkjet Printer by nicholasclewis May 17, 2011

Featured Thing!



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

Thing Statistics

81588Views 17180Downloads


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 www.parallax.com/dl/docs/prod/robo/InkjetKitDocs-v1.0.pdf. This kit is no longer made and the book http://www.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: http://www.youtube.com/watch?v=fYeYeTGkvJM
There are additional pictures here: http://www.flickr.com/photos/nicholasclewis/sets/72157626730985822/

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


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.

All Apps

Upgrade this Thing with Thingiverse Apps

Tools and Utilities

Repair, slice, or enhance this Thing

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App


I have few questions:
is this suitable for printing graphics (it seems that answer is yes but anyway)?
is possible to modify for using by hand (and if yes comes the following)?
what is the reasonable distance between nozzles and surface to print?
what is the horizontal speed (if too fast image may be broken, if too slow image maybe overlapped / overprinted)?

Yes, you can print graphics. You should watch https://youtu.be/dzTCDMRv8bY and read the info on my website http://nerdcreationlab.com/projects/inkshield/

Are these kits still available? If so I would like to purchase one.

Yes, they are available on my website.

which printers use the C6602A cartridge?

Hi. At present, we have assembled the ink shield and connected the cartridge and the Arduino.
Here, we are trying to upload a file using the Arduino program.
However, we do not know which one of the two site files you uploaded.

  1. firmware.pde << From. https://www.thingiverse.com/thing:8542/#files
  2. Inkshieldmegalibrary.zip << From. https://www.thingiverse.com/thing:11907/#files Inkshieldmegalibrary.zip
DIY Inkjet Printer

hello ! this is chris kim from south korea

i wonder if this diy kit can apply to full color cartridge.

thank you! if you have please make a comment please ! you r so genius!

Currently this only works with the C6602 heads which are monochrome.


Hi. I recently purchased one of your shields and I am going to integrate it to a makeblock xy plotter (driving with arduino mega). Have you found out how to use some of the new cartridges?, are you going to persuit it or you just consider it finished with this ones?. The use of multicolor cartridges will open the door to a lot of oportunities, because if you are doing a powder printing, you can use maybe an epoxic material or a catalist (also another color if desired).

And about the adderfab, are you or your group still working with it? There is not a lot of information about it.

Thanks and great Job

This design can only work with the current head. I have thought some about trying to use a newer higher res head but have not had much time to spend researching it.

Adderfab was a school project and I have done no other work on it, however I know pwdr is based on that work and has more recent documentation.


I am trying to build my own DIY inkjet printer and I don't understand how did you pyhsically connect the printhead to your arduino?
Is there a special shield?
what interface (serial, digital, other) did you use to comunicate with the printhead?

Appreciate your help,

For this project we assembled a control circuit on a breadboard and connected it to the Arduino with jumper wires. Since then I made a shield that can control the head. They are available to buy in my store http://nerdcreationlab.com/store/

I have tried to contact you through your store site in order to expedite the shipment but I got no response.
I will appriciate if you can contact me at: [email protected]

I'm Really Inspired by your idea..
i want to know that can we increase the dpi for maximum resolution i.e to get a very clear high resolution.
to get a very detailed & Neat Printing ?????

You would have to use a different ink head. This is the only head I know how to drive at this time. I think there are a few promising options for a higher dpi head but I have not had time to figure out what it would take to drive them.

arrangement of the nozzles is in line or a rectangle?

how long is it?

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

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.

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?

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.

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.

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/nicholasclewis/6142938466/in/set-72157627228983496http://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/projects/inkshield/theory/http://nicholasclewis.com/proj...

And another question - do you have some "pre-heat" time, when printing? I mean, I didn't see any ink on paper after one impulse. And head became spraying after some seconds of impulses "5-800"

"Pre-heating" is not required, if you send a single pulse you should get a single dot.

Thank you for reply.

So, it means that I'm on right way. I'll try different distances and, if it needs, time when nozzle is off.

I know your "Theory" nearly by heart.:) Just need more experiments.

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/Comergent//fci/drawing/slw01lf.pdf)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 !

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!!

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!

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


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 !

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

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,

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.

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.

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

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.

Thank you so much for your reply sir

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??

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)

thank you for your information sir, it really helps me...how can i know that it is fit 96dpi??

If your bitmap is 500 pixels by 400 pixels than @96 dpi it will be 500/96=5.21 inches by 400/96=4.17 inches.

sir plz reply....

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

We did try that, although we did not release much detail about it: http://open3dp.me.washington.edu/?s=adderfabhttp://open3dp.me.washington.e...


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.



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.

Hey Nicholas

I have tried all of the LCD example sketches and rewired and and changed pins but it keeps on giving me random words. I tried setcursor to place the words at certian positions, but even desregard that and will start a word at any point and any of the two rows. I have tried so many deffirent ways w
ith no luck, but I will keep trying. I saw on one of the many forums (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1288735441)http://www.arduino.cc/cgi-bin/... that the Mega 2560 needs an upgraded gcc and I have downloaded the version the guys had linked there but no luck. Anyway thanks for your reply Nicholas.



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

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

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. :)

Excellent implementation...

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

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?

Everything is open source and currently uses Arduino and http://Processing.orgProcessing.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. :)

Hello Nicholas, I'd like to help you guys releasing some generic driver for linux based on python/C , i'm very interested in your Free Hardware project, can you contact me at capiscuas AT gmail DOT COM?

I am not sure exactly what you mean by "driver." At the moment the Arduino drives the head without the need for a host PC. The host PC just performs a conversion from a BMP file to a custom DAT file which the Arduino reads.

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.

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.

How about loading the printer with ordinary writing utensils?

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.

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.

That makes more sense. You could also try adding a laser to it and make a laser cutter. Already got the hard part out of the way.

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

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

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

You should look at this ping pong ball printer: http://www.youtube.com/watch?v=8Ep5OC3E02Ihttp://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.

facepalm Thank you!

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

Hello, direct-EtchResist PCBs! 8-)

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


Full color ABS/PLA objects here we come!

What ink and printhead are you using?

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"

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.

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

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

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


Oh wow... I didn't realize this project and that project were one in the same. No wonder I thought of powder based 3d printing immediately.

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

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

Interesting, but that one has a CC-By-NC license.

what's wrong with attribution, share-alike, and non commercial without contacting the author first? :)

How many more ways can I "like" this?