Inkjet Cartridge Integration

I am interested in using an inkjet cartridge in my 3D printer in place of a typical extruder.

I want to integrate this setup into my RPi/Klipper system. I am wondering if anyone has ventured into programming the GCODE/Klipper/MCU to control something like this. The MCU would replace the Arduino being used in the Inkshield setup.

1 Like

I am working with @phillutz… and to give some additional background on this…

We have been trying to standardize the open-source polyjets (e.g. Plan B) to a 3d printing firmware for longer support and better integration. We originally started on Marlin but ran into issues controlling all the motors (which Klipper magically solved).

We have been able to successfully build the unit and wire the motors into the system with them running; however, my next big hurdle is getting the RepRap HP inkshield working.

Right now we have a Raspberry PI 3B+ connected to a Megatronics v3. We are looking for some direction on the appropriate response; originally I was looking to control the board from a stepper motor but that is more “hacky” than I would like to go.

We need to control the inkshield with five pins; which right now is designed for the Arduino. I will say we are looking to keep this code in the public domain and have seen A TON of people trying to get this to work but with no dice.

I can only post two links in a post but here is some sources we were looking at when on Marlin:


Interesting. I’m not aware of anyone currently working on inkjet support for Klipper.

Given your tight timing requirements, it seems you would need to implement micro-controller code. You can take a look at src/stepper.c, src/gpiocmds.c, and src/lcd_hd44780.c as examples of micro-controller code that maps Klipper’s mcu commands to particular actions. After implementing the micro-controller code, you would also need to implement a host python module to schedule and transmit those new mcu commands.

In theory, if there wasn’t a demultiplexer on the inkshield, you might be able to control the nozzle bursts using Klipper’s existing PWM/GPIO system. However, currently the Klipper high-level code only schedules changes to pins with 100ms granularity. There’s been discussions on changing that (eg, see [WIP] sync channel for fast move_queue population by Cirromulus · Pull Request #4128 · KevinOConnor/klipper · GitHub ).



Thank you for the update and info! We are planning and working through this now.

We’ll post updates as we go.

cc @phillutz