Using axidraw with a syringe pump?

Home Evil Mad Scientist Forums AxiDraw Using axidraw with a syringe pump?

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
  • #28087

    I recently purchased an Axidraw v3 and it works great. I’ve done a good bit of testing using standard pens, but my real interest is in using the Axidraw to deposit various chemical solutions on paper as part of a research project. My plan right now is to use technical pens to deposit my own ink formulations using the Axidraw.

    However, I think there may be a better approach. The Axidraw seems ideal for integrating with a syringe pump to control ink flow. I am posting this to ask if anyone has already done this, knows someone who has done this, or can suggest a good way to do this? I think that the syringe pump would simply need to be turned on when the pen is in the down position, and off when in the up position. I think a glass capillary could be used to deposit liquid, and the capillary should glide over the paper if the tip is polished and rounded.

    I came across an “Axipaint” project on hackaday, which seems similar to what I am thinking of. The project used a pneumatic syringe instead of a pump. I am somewhat familiar with Python programming and microelectronics fabrication. I could probably figure out a way to make it work with one of the syringe pumps I already own. I just don’t want to re-invent the wheel. If it has already been done, it would save time to just reproduce it.

    Windell Oskay

    A few people have done similar things. Technical pens are easy.

    Syringe dispensers controlled by air pressure are a common way to go as well. Beware that there is a response time for air pressure to turn on or off, particularly with viscous or thixotropic substances. (You can add air pressure to the channel, but it takes time for the substance to move.)

    One good precedent for glass capillary tubes is that some technical pens use sapphire tips. Beware that glass does wear down; paper is abrasive.

    There is a “secret” provision in the software for controlling a digital output pin that is high whenever the pen is commanded down. Open up (in the Inkscape or CLI or python API) and look for B3 in the code. It appears on three lines. Uncomment those lines, and then digital I/O pin B3 will be configured this way. B3 is set up as a “servo connector” with ground, +5 V (very little current capacity), and the I/O pin. That’s the highest set of 3 pins above the regular servo connector.

    You can disable the servo moving by unplugging its cable or setting the pen-up and pen-down positions to be the same.


    Thanks for the reply and the additional information. I placed an order for some parts. If/when I get it working, I will post what I did here to help anyone else who is interested in the same thing.

    I have several syringe pumps, a couple of Harvard Apparatus pump 11 models and a few New Era 1000 models. I discovered that a Python library (called “pumpy”) has been created for RS-232 control of Harvard pumps. The NE-1000 pumps can also be controlled using the pyserial Python library for RS-232 communication. The simplest thing would be a completely software approach, which is what I plan to try first. I’ll try to modify the Axidraw control software Python code so that the dropping the pen down simultaneously sends an RS-232 command to start the pump, and lifting the pen stops it. It is possible to program in a pump delay if needed.

    An alternative method is to use the B3 pins on the Axidraw board. The NE-1000 pump has a DB9 port on the back that is not used for RS-232 communication. It is instead used to monitor triggers as would be received from a foot pedal controller. Unfortunately, the high/low signal is 5 V, not 3.3 V. The NE-1000 documentation indicates that 3.5 V is the minimum high logic signal. Therefore, I would have to do some logic shifting, or perhaps use a transistor or relay to draw off the 5V pin on the B3 connector to send the high signal.

    Digging through the design files for the Axidraw board, it appears that there is zero room for drawing more current from the 5V pin on the B3 connector. It appears that the servo can draw up to 500 mA, and the board has a 500 mA limit for that 5V line. I’m worried that I might overload something. It will be a lot simpler if the Python software pump control works. The only thing needed will be some cables that plug into existing ports.

    Windell Oskay

    A 5 V level shifter needn’t draw substantial current– should be fine.

    Obviously, an all-software solution is quite clean as well.


    I made some progress on this. Below is some additional information for anyone else interested in doing something similar. I will try and post some pictures once everything is assembled and working.

    1. Instead of a glass capillary, it is far easier to use stainless steel. The nibs on technical pens are stainless steel tubes with a needle in the center. You can find pre-cut stainless steel tubing from suppliers of HPLC equipment that can be used to make a custom “nib” connected to a pump.

    Stainless tubing is available as small as 0.36 mm OD in size. The ends of this type of tubing can be electrolytically cut and polished by the supplier. It is not terribly expensive. I bought some 0.8 mm OD (1/32″) tubing, and the polished end glides across the paper smoothly. The tubing that I purchased has a 0.25 mm (0.01″) ID.

    2. If you use 1/32″ tubing, as I am doing, the OD of the tubing is close to that of a 22 gauge needle. You can get a 22 gauge needle, cut off the sharp tip and join it to a 1/32″ tubing using a standard tube union with 1/32″ fittings and ferrules. That way, you can link the syringe output to tubing that goes to the plotter.

    3. PEEK plastic tubing is also available in 1/32″ OD size. This tubing is quite flexible and is what I am using to join the syringe pump to the plotter. It can flex easily as the plotter arm moves around.

    4. I am joining the PEEK tubing to a stainless steel “nib” tip using a 1/32″ bulkhead union. That bulkhead will be mounted on a bracket that replaces the bracket on the Axidraw that holds the pen. I’m waiting for my bracket to be 3D printed. I decided to use plastic to make it as light as possible. My bulkhead union weighs 12 grams, and I do not want to overload the servo on the Axidraw.

    5. I found some information on the flow rate coming out of a technical pen. These guys wrote long lines on paper and used a gravimetric method to determine how much ink is being put down:

    For a 0.5 mm technical pen drawn across paper at a speed of 2 cm/s (this corresponds to 25% speed on the Axidraw if I am not mistaken), the flow rate is about 500 nanoliters per second. Syringe pumps are easily capable of these types of flow rates.

    I have yet to assemble everything and test it. Syringe pumps use stepper motors, so pulsing may be a problem at very low flow rates. I have some ideas to get around that if it is a problem, though.

    • This reply was modified 2 years ago by Matt.

    Getting closer. Here is the custom holder with the 1/32″ bulkhead union:


    Now I just need to plumb everything to the syringe pump and start testing.

    Windell Oskay

    Looks great!


    This is fantastic thank you for sharing your progress. Please keep updating!


    I have this working well now. If anyone else is interested in doing this, here is what I recommend:

    1) I guess any syringe pump will do, but the cheapest new one that I know of is the NE-300 from for $275. This is the model pump I used. This syringe pump cannot be controlled by a computer, but that is where the next step comes in.

    2) Purchase a Pololu Tic stepper motor controller to be used to control the syringe pump. Several Pololu Tic models are available that cost between $30 to $50. You need to get one that is capable of handling the DC power supply you intend to use. The power supply for the NE-300 pump I have is 12 V. The Pololu Tic models T825 and T249 have both been tested by me and work. You will need to open up the syringe pump case, disconnect the stepper motor wiring, and connect the wiring to to Tic controller. The syringe pump can now be controlled through a USB connection from the Tic controller to the same computer used to control the Axidraw.

    3) You need a good glass syringe for accurate deposition. I am using Hamilton gas tight syringes (1000 or 1700 series models) that cost $40-$60 each. Get one with a Luer-lock connection so that needles can be swapped out. The barrel walls of cheap plastic syringes are too flexible. With plastic syringes, the barrel walls expand slightly under pressure and it makes deposition of small volumes impossible to do accurately.

    4) You need tubing from the syringe to the axidraw. This tubing must be flexible, yet have rigid walls. I have tested PEEK and stainless steel and both work. I have also test silicone tubing and it does NOT work. This silicone tubing walls are too flexible, causing it to expand under pressure. The tubing that I am using right now is part number 8988K58 from McMaster. It is 0.032 inches (0.8 mm) outer diameter, which is about the smallest possible line width you will get drawing with this tube. I am using 3 feet (900 mm) of this tubing between the syringe pump and the axidraw.

    5) To connect the tubing to the syringe, you need a 20 gauge blunt end needle. The 20 gauge is about the same size as 1/32 inch, or 0.8 mm O.D. tubing. You can use a 1/32 inch tubing union (available from Valco) to join the two together. A cheaper option is to 3D print your own union as a simple cylindrical sleeve that the tubing and needle ends can slide into. The 3D printed union can be sealed with epoxy.

    6) A “pen” is needed for writing. I abandoned my initial idea of using a bulkhead union (posted above). Instead, I just 3D printed a simple cylinder 95 mm in length and 10 mm in diameter. In the center of this cylinder is a hole big enough for the tubing to slide in. The tubing can be held in place with epoxy after sliding it into the “pen”. The reason I chose this approach is that I want to be able to manually adjust height like what is done with a normal pen on the axidraw.

    Here is a picture of my Pen:


    7) I am controlling everything with a Python script. Here is an example:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import subprocess
    import numpy as np
    from pyaxidraw import axidraw
    def ticcmd(*args):
        return subprocess.check_output(['ticcmd'] + list(args))
    ticcmd('--reset') # reset motor settings
    ticcmd('--step-mode', str(int(8))) # microstepping mode
    ticcmd('--max-accel', str(int(1500000))) # acceleration in microsteps/100 s^2
    ticcmd('--max-decel', str(int(1500000))) # decceleration in microsteps/100 s^2
    ticcmd('--max-speed', str(int(20000000))) # microsteps per 10000 seconds
    ticcmd('--current', str(int(320))) # current limit in mA
    flowrate = 0.5 # target flow rate rate in microliters per second
    steps_rev = 400*8 # full steps multiplied by microsteps
    diameter = 7.29 # syringe inner diameter in mm
    area = np.pi*(diameter/2)**2 # cross sectional area of syringe
    lead = 1.27 # mm travel per revolution of lead screw
    gearing = 15.0/28.0 # reduction gearing from motot to lead screw 
    steps_sec = ((flowrate/area)/lead)*(steps_rev/gearing)
    vel = int(steps_sec*10000)
    ad = axidraw.AxiDraw()
    ad.plot_setup("FileToPrint.svg") # svg file to print
    ticcmd('--exit-safe-start', '--velocity', str(vel)) # set target velocity

    The above code prints the svg file using the syring pump to apply 0.5 mcroliters per second of whatever liquid you are applying.

    Hope this helps others who have a similar idea.



Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.