Reply To: Using axidraw with a syringe pump?

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


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.