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 syringepump.com 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 ticcmd('--energize') 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 ad.plot_run() ticcmd('--enter-safe-start') ticcmd('--deenergize')
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.