CIJ Printer

A CIJ Printer that you can build at home by yourself

Public Chat
Similar projects worth following
Here I'm trying to build a CIJ Printer by myself from common parts that you can buy online and in your local hardware store.

In my last inkjet project I built a piezo inkjet printer from scratch made of cheap electronics, pneumatic and 3D printed parts. I could get it to work, but I had a few problems with the reliability. The drop size was quite large, keeping the ink supply pressure steady was quite difficult and sometimes there formed drops on the nozzle or air got sucked into the printhead what both prevented the printhead from working. There also was a problem with clogging of the nozzle when not in use.

So I looked for a more reliable printing method and choosed Continuous Inkjet Printing.

CIJ printing is (as far as I know) only used in industrial or production applications and therefore super reliable. CIJ printers are working for years 24/7 with only minor maintenance. 

Even though CIJ printers have much more parts than piezo or thermal inkjet printers, all parts have a decent size - no sub millimeter dimension like piezo and thermal inkjet nozzles, so working on them, fixing problems and maybe also manufacturing them will be a lot easier.

How CIJ Printing works:

Here I will describe you in my own words based on my experience with my printer model how CIJ Printing works. The printer I have is an older model that uses pressurized air and vacuum instead of a special ink pump, what I think is really cool because it keeps everything simple and you can use any air and vacuum supply that you want.

Animation from Wikipedia

CIJ printers need two different fluids to work - Ink and Make Up Fluid. 

Both fluids get mixed by the printer to reach the right viscosity. The make up fluid is essentially a solvent to dilute the ink.

My printer has an ink mixing assembly in which the ink get mixed and also the not used ink returns to. The chamber of it is set under vacuum and the adding of ink and make up fluid is controlled by two pneumatic driven rubber valves.

From the ink mixing chamber the ink gets transfered to a viscosity measuring cylinder by a pneumatic rubber pump. The ink cylinder is pressurized and connected to the nozzle which has a valve that stays closed until it reaches a certain pressure to prevent the ink from dripping from the nozzle when not under the right pressure. The pneumatic driven rubber pump is driven with 1 bar above set ink pressure to be able to pump the ink into the cylinder through an ink filter. The pump also has check valves at the in and outlet.

The cylinder has a floating magnet in it and multiple reed switches to detect the ink level. For measuring the viscosity the printer measures the time that it takes to empty the cylinder and according to the set flow time the printer adds ink or make up to the ink chamber - or nothing if everything fits and the ink level in the ink mixing chamber is high enough (it also has a floating magnet and reed switches). The viscosity is measured to get the same print quality at all times during operation.

The next step in the cycle is the printhead.

The "low pressure limit valve" at the printhead is connected to the nozzle which contains a piezo crystal that is driven with a frequency that breaks the ink stream up into dropplets using the Plateau–Rayleigh Instability. 

After the nozzle there follows a tunnel that is driven by a high voltage to charge the dropplet and after this there follows a high voltage deflection plate to kick dropplets out of the stream to form pattern on the printed surface.

The unused ink streams right into an ink return block which is connected to a sensor that prooves whether the charging has worked and from there it get sucked back into the ink mixing chamber by vacuum to close the cycle.

I think the pneumatics, hydraulics and their control circuits are quite simple and would not be very complicated to build for an open source system.

The electrical control of the printhead at the other hand, like the nozzle piezo drive, charging, deflection and sensing signal are more complicated, so that I will likely...

Read more »

  • Signal Generator and LED Strobe

    Dominik Meffert12/22/2022 at 20:16 0 comments

    For the last weeks, I was searching for a way to generate a sine wave signal for driving the piezo and a 0-5V square wave signal for driving the LED strobe with the same timing to prevent a "moving droplet effect". 

    After trying out many things that didn't work I have to thank @Paulo Campos for the great help and for pointing me out that I can use a comparator to turn the sine wave signal into a square wave signal with the same timing. 

    Since this project requires dealing with electrical circuits more intensively, I thought of using LTspice for drawing and simulating the circuits that I want to build.

    While the electronics that I used for my former projects were mostly simple, based on Arduino projects or based on other open source projects, the CIJ printer project will be a bit more complicated, because there is not much information about the electronics of CIJ printers available and so I have to figure it out by myself.

    So with the tip of using a comparator, I ordered some ICs, including the LM339 and LM393 comparators, and searched the internet for circuits that I can test out, modify and simulate in LTspice.

    It took me a while, but I came up with a circuit that had the desired output in the simulation.

    After simulating it, I tried to build it on a breadboard and measure the real circuit with an oscilloscope.

    The spikes in the sine wave were caused by the notebook's power supply.

    I got the desired output and so I drew the layout for a perf board and soldered it together.

    After that, I connected everything for doing some testing with it.

    The setup for testing looked a bit messy.

    I tested out different piezos from ultrasonic cleaners. I heard that the optimal frequency for a 0.1mm nozzle at 40psi is around 48kHz to 50kHz and because of that, I bought ultrasonic cleaners that claimed to run at 50kHz. Unfortunately, there is no guarantee that the ultrasonic cleaners contain piezos that can run on the claimed frequency and so you have to be lucky to get a good one.

    The piezo from the second ultrasonic cleaner that I tried contained a piezo that could run at 48kHz even though it was not its resonance frequency.

    I tested the vibration of the piezo by sticking another smaller piezo on top of them and measuring its output with an oscilloscope. After sticking the smaller piezo on top and connecting the oscilloscope I tried out different frequencies from 40kHz to 50kHz to see at which frequency I can measure the highest voltage reading on the small piezo. This frequency should then be the piezo's resonance frequency. The first piezo that I tried worked best at 43kHz and the second one worked best at 47kHz, but it also worked not that bad at 48kHz, so I used it for further testing.

    I carefully clamped it on top of the nozzle and looked at the ink stream under the LED strobe.

    And it worked: Visible ink stream separation under the LED strobe at 48kHz.

    Finally, I mounted the AD9833 + LM393 and also the LM386 amplifier on the printer frame next to the other electronics to keep everything relatively clean.

    I still have to redesign the printhead to fit the flat piezo disc to the nozzle, but the next thing I want to work on is building a high-voltage power supply, like this one from an old CIJ printer, to power the charging/phasing and deflecting circuit.

    Thanks for your interest in my project, until then.

  • Update on Ink Stream Splitting

    Dominik Meffert11/15/2022 at 20:00 0 comments

    I did some testing and tried some things out and decided to stay with the 40kHz for now.

    I assume that the 40kHz 60W ultrasonic transducer is optimized for this frequency and so it's bad at moving at frequencies above and below 40kHz. There are also ultrasonic transducers available that are rated for other frequencies and I think the limited frequency range of the 40 kHz transducers is the reason why they exist.

    While other transducers exist they are not quite common and so you have to buy them in china with long shipping times - and for this reason, I will not use them for now.

    I will also live with the quite long distance that the stream needs before it splits into droplets. While it's wasting some space it's also no problem to move the ink return tube some more centimeters away from the nozzle.

    And by doing so you get a nice line of droplets after a few centimeters even with 40kHz. Time will tell if they are suitable for charging and deflecting, but at the first glance, they look quite OK.

    For driving the piezo rings I used a small LM386 amplifier. I also tried another more powerful amplifier and it worked well, too. It was even possible to drive the piezo and split the stream with the signal generator on its own and "tune" the stream by adjusting the output voltage.

    I connected the amplifier to CH1 and an LED to CH2 and set both channels to 40kHz sine wave. While being a diode the LED should only turn on at one side of the curve and therefore blink with just 20kHz - I also tried a 40kHz non-zero crossing square wave and it worked, but it seems like the droplets look a bit different. Driving the piezo rings with the same square wave also worked, but I guess driving them with a sine wave will be better because by doing so they can flex back and forth instead of just flexing between the resting and bend positions.

    Next, I want to drive the LED directly from an Arduino pin and use an AD9833 to generate the sine wave for the LM386 amplifier.

  • Printhead Design

    Dominik Meffert11/13/2022 at 21:18 0 comments

    I 3D printed some parts to mount everything in a fixed position. The part that holds the nozzle can be rotated in the X and Y axis to aim the ink stream at the copper tube.

    For now, the printhead contains a 0.1mm nozzle with a check valve to prevent ink from leaking out when not pressurized, two piezo rings, a LED in a sealed tube to protect it from ink, and the ink return line.

    The start of the return line is made of copper so that it can be later used for detecting charged ink drops.

    A charging electrode and a high voltage deflecting electrode are missing at the moment because I first have to get the ink stream splitting right before I can go to the charging and deflecting.

    Here you can see a first test of the ink stream splitting. While it's not working as intended, yet, you can see the ink stream splitting just before entering the tube.

    At the first glance there are two problems:

    One is a "shifting" of the ink stream when the timer pipe gets loaded with new ink. The normal pressure of the timer is 40 psi and it gets loaded with 60 psi so that loading does not take too long. The problem is that while loading the pressure in the timer rises to around 50 psi until loading is finished. Because of that, the position of illuminated droplets changes with the increasing and later decreasing ink stream speed. I guess like said in a previous build log, that this behavior will likely cause problems at some point. Maybe a better pressure regulator could solve this problem 🤔. I will ask a pneumatics hardware dealer or some expert about this...

    The other one is the "late" splitting of the ink stream - I want the ink stream to split as early as possible after exiting the nozzle.

    For this test, I used the two piezo rings from an ultrasonic transducer which are rated for 60W 40kHz. I read before that the optimal frequency for ink stream splitting should be around 64kHz. I tried 64kHz with the piezo rings but with seemingly no effect and so I tried 40kHz and got the result that you can see in the photo - which is something, but not the result I'm looking for.

    At the moment I don't know what I need to do to get my desired result, so I will try things out until I get closer to my goal of a nice split ink stream.

  • Stainless Steel - No more Rust

    Dominik Meffert11/10/2022 at 14:25 0 comments

    I replaced all 1 1/4" pipes and caps with new pipes and caps made of stainless steel to prevent contamination of the ink with rust which was a problem before. 

    Now the ink is only flowing through stainless steel pipes and caps, 

    brass + plastic fittings,

    polyamide tubes

    and aluminum valves. 

    I will keep an eye on contamination of the ink by the other materials that are in contact with it and maybe replace more of them with stainless steel parts if needed.

    Next up is designing and 3D printing a printhead with a LED and wiring for the piezo rings (which I could separate from the metal parts of the ultrasonic transducer) and repeating the ink-splitting experiment.

  • Ink Cycle finished, what's next?

    Dominik Meffert11/01/2022 at 18:19 0 comments

    With the auto mode and all the work on hard and software until now, I have finished the ink cycle so that the ink can be pumped around over and over again.

    So, what's next to do?

    - The 1 1/4 tubes are made of rusting steel and need to be replaced by another material, likely stainless steel with caps made of plastic or also stainless steel.

    - I need to build/buy a more portable driver for the piezo nozzle + LED that can split the ink stream into droplets and make them visible under a strobe light. Everything should be grounded and waterproofed.

    - Designing a 3D printed case for the printhead.

    This will likely take some time and I will keep you updated.

  • Auto Mode

    Dominik Meffert11/01/2022 at 17:01 0 comments

    I added an automatic mode to the code so that the printer can now run on its own without user interaction.

    When the auto mode is turned on the printer turns on ink pressure and vacuum, and waits for the ink level of the timer to drop below its lower sensor.

    When the ink level of the timer drops below its lower sensor the printer checks the ink level of the reservoir.

    If the reservoir's ink level is below its lower sensor the printer adds ink. I will later add more code to either add ink or makeup or nothing to adjust the viscosity to a set value, but for now, it only adds ink. 

    When the ink level of the reservoir rises above its lower sensor, the printer stops adding ink and checks the ink level of the pump.

    If the pump's ink level is below its upper sensor the printer closes the vacuum valve of the reservoir and opens the vacuum valve of the pump to fill up the pump. 

    When the ink level of the pump rises above its upper sensor the printer closes the vacuum valve of the pump, opens the vacuum valve of the reservoir, and checks the ink level of the timer.

    If the timer's ink level is below its upper sensor the printer adds pressure to the pump to fill up the timer.

    When the ink level of the timer rises above its upper sensor the printer turns off pump pressure and waits until the ink level drops below its upper sensor.

    When the ink level of the timer drops below its upper sensor the printer starts counting the time until the ink level drops below its lower sensor. When that happens it prints the counted time to serial and repeats the cycle.

    Here is the Code that I'm using for it:

  • Some more Overflow Protection

    Dominik Meffert11/01/2022 at 10:57 0 comments

    I added another 1 1/4 pipe as an overflow tank, that can catch the ink that exceeds the volume of the timer if something prevents the timer filling action from stopping so that the ink will not leak out of the ink pressure regulator in case of a fault.

    With this pipe and the sensor in the vacuum line, the machine should be prepared for all sorts of faults that can be caused by stuck sensors.

    Other faults may occur like failing check valves or relays, but I guess preparing the machine for such faults would be too much, especially because they may never occur at all.

  • Flyback Diode for Solenoid Valves

    Dominik Meffert10/28/2022 at 21:11 0 comments

    While building everything, I hadn't thought about the voltage spike that occurs when shutting off the solenoid valves, what was causing bad sensor readings, and sometimes even a restart of the Arduino. Because of that, I had to replace all the solenoid blocks of the solenoid valves with another sort of solenoid block which has screw terminals and space for installing a 1N4007 diode.

    So, I replaced all the solenoid blocks and also changed the wiring so that the wires of the valves no longer cross the wires of the sensors which solved the problem.

    I also replaced the brass valves that I intended to use for switching the ink because getting rid of the voltage spikes is essential for operation. 

    The new valves are made of aluminum and I guess that they can also handle the ink that I want to use. For now, I'm using just water and later I want to try isopropanol and acetone mixed with some additives.

  • 0.1mm Nozzle

    Dominik Meffert10/27/2022 at 13:42 0 comments

    Real CIJ printers use nozzle sizes like 0.06mm and 0.075mm.

    Because of that, I replaced the 0.2mm nozzle with a 0.1mm nozzle which is closer to that. 

    0.1mm is also ( as far as I know ) the smallest size of 3D printer nozzles that you can buy and I really want to prevent the use of specialized CIJ printer nozzles to keep the design cheap and only made out of easily accessible parts.

    With the new nozzle, the timer chamber takes way longer to run out of ink so it has to be filled less often and the viscosity is also measured less often - changed from around one minute to a few minutes.

    I doubt that the viscosity will increase much in that time so a reading like every 5 minutes should also be ok

    For testing, I set the ink pressure to 40 psi and the pump pressure to 60 psi so that the ink exiting the nozzle at 40 psi and the timer is filled with 60 psi - which causes a short increase of ink pressure while filling from 40 psi to 60 psi and with that also a short increase of ink stream velocity from 23.5 m/s to 28.8 m/s. At the moment I don't know if that's a problem but I assume that I will later have to build a circuit that measures the frequency of the charged ink drops entering the return block and with that a feature that can adjust the point in time when it has to charge a particular ink drop to the increasing and later decreasing ink stream velocity. This will be a challenge in the future, but for now, I have to spend my time writing the Arduino and Python code for the ink cycle.

  • Handling Faults

    Dominik Meffert10/26/2022 at 20:15 0 comments

    Next, I want to add an automatic mode to the code so that the machine can pump the ink around on its own by reading the sensors and switching the valves. 

    The machine should be able to run on its own unattended without overflowing and flooding the bottom with ink.

    To prevent this, it needs to be able to detect faults.

    So I added a float switch to the vacuum tank for detecting an overflow of the system and turning off the machine in case of such a fault. I also want to add timeouts to the code to shut the machine down if an operation takes too long because something is wrong with the machine - like a valve not closing properly or so.

    Here are some pictures of it:

View all 26 project logs

Enjoy this project?



Paulo Campos wrote 01/17/2022 at 00:29 point

I have worked with CIJ printers at least 18 years with projects and fluids. i'm impressed with your audacity and progress. Certainly the nozzle is not a big challenge, you can buy in Swiss (ruby) and assembly in a laser cutted plate, the diameter of the jet is governed by the size of droplet we want, 75 microns is most recommended. This give a wavelength of

  = 4.51x 75= 331 microns.

Also, the jet velocity at 40 Psi is 20~22 metres per second. If this is divided by the wavelength, it gives the optimum frequency.

  =22 m/s / 331microns= 64000.Hz

In practice, other frequency / nozzle sizes can be used that are not 'optimum', for example 60 micron/ 64kHz, but these still work, they are simply less efficient.

 I recomend you 75u  as we can get the best resonancy for drops in 64Khz with around 2800mBar/40psi, but till 100u we sill can get some workarounds. At past I worked in my 'hobby time' with some PCBs and HV PS for CIJs and I can say you there is no chance of success without phasing control and for do it you will need add one FPGA to your project. I have the PCB and HV Power project  ready without firmware, I can share you and share experience., I got success in many things .   Have a nice week! 

  Are you sure? yes | no

Paulo Campos wrote 01/16/2022 at 23:57 point

Awesome progress Dominik! Congratulations! 

  Are you sure? yes | no

Dominik Meffert wrote 10/29/2022 at 07:28 point

Thank you very much :)

Sorry for the late reply. I paused the project for over a year and just read your comment.

Interesting insight. I'm planning to use a 100micron 3D printer nozzle, because they are cheap and available everywhere. 

I would really like to read more about your PCB and HV power project.

  Are you sure? yes | no

srbin25 wrote 10/27/2021 at 19:56 point

how connect CIJ print head with Arduino if it is possible?

  Are you sure? yes | no

Dominik Meffert wrote 11/02/2021 at 15:38 point

My current plan is to control everything with a Raspberry Pi so that I can write a python script with GUI for all the settings and infos. I think it will also take more time until I can get the project to an usable stage because I'm currently working on another project which I want to use for creating the printhead parts.

  Are you sure? yes | no

Hexastorm wrote 06/10/2021 at 08:36 point

Great to see you are still up with inkjet printing. In the past, I did some research into this topic.
What I would recommend is the book (inkjet technology for digital fabrication). A pdf can be found online.
TNO, a research institute from the Dutch State, also build one setup see .  I was not involved but building it took a crazy amount of time. The CIJ head used air for droplet selection instead of electricity.
This gave it the ability to print high viscous non conductive fluids.
A problem encountered was the wavy-ness in the final result and low through put. You can see it in the image (3D graded product made of three high viscousmaterials) in the linked pdf.  Dr. René Jos Houben did most of the work and use this as a query term to find out more.  I think some of the patents, if any, got transferred to a company called Nordson.
What I would recommend;

 - do research in the field of laser induced forward transfer

   This is a very active area of research and from what I understand relatively easy.
   It requires a coated glass plate and a laser to heat and release a droplet.

 - think of applications

Crazy applications I heard of is injecting droplets in chicken meat.  This preserves the dead meat longer. Also, some people were active in the making of perfume. This required making well defined mixtures.  Some chemicals are extremely expensive so if you can deliver small dosages or make small mixes that could be nice.

- make images of droplet formation with a stroboscopic camera

Everyone in this field does this. It's real easy and allows you to understand the process much better. Ideally you use global shutter camera with LED

Anyhow, good to see you are making so much progress :-)..

Also, the TNO project was not a commercial success.  Which must have been frustrating for those involved.

  Are you sure? yes | no

Paulo Campos wrote 01/17/2022 at 00:36 point

Dear Hexastorm, TNO project is really interesting! Thanks. Increase the ink viscosity is a good way to printing over difficult adhesion substrates, like polyolefins. CIJs printers has this limitation.

  Are you sure? yes | no

heinz wrote 05/28/2021 at 06:21 point

Wow 😍 This already looks too professional to be built by me for some precision dispensing.

Very cool, thanks for sharing.

  Are you sure? yes | no

Dominik Meffert wrote 05/28/2021 at 15:54 point

Thank you very much :)

If I can find out how to build the CIJ nozzle there will be more progress, soon.

  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