Forum Replies Created
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.
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.
Thanks for the info. The Pilot Precise works fantastically without rubber bands. The one that I had trouble with is an Ohto Fude Ball. It writes super-wide 1.5 mm lines, and I was experimenting with it. The Fude pen requires a lot of downward pressure to get the ball rolling and doesn’t work 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 1 year ago by Matt.
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.