New to Arduino, guidance on a simple syringe pump for my lab. HELP! FOR SCIENCE!

Hi all,

I work in an addiction research lab where we give automatic infusions of cocaine to catheterized rats inside an operant chamber. The trouble is that our syringe pumps cost around $700 a piece and they dont even come with variable speed capability (Yeah, $700 dollars for a motor that turns a screw that pushes in a syringe...at one speed). As you would imagine however syringes come in all sorts of sizes, and drugs are mixed in all sorts of concentrations; so speed is a relevant variable. I assume that I could fabricate something for FAR less. I was wondering if anyone would have any suggestions as to where to start looking for suitable actuators and so on. I know linear actuators are pretty expensive, but I assume there are myriad ways to achieve a similar motion. All I need is to be able to adjust the rate the plunger on the syringe is pushed in, and have a button to stop and start it...simple right? I would think even the arduino would be unnecessary, but I've been itching for a chance to get my hands dirty with one for a couple of years now.

Thanks very much!
Cameron

Well the simplest solution I can think of is to use a servo. Just convert the rotary action to a linear action through appropriate linkage/bell crank type thingee. Your software can control the depth of travel and the rate. Servos come in all sizes and torque ratings with optional quality metal gear trains etc. It should be a cheap project (relative to your $700 pump, no wonder why my health care costs are so high :wink: ) and a great excuse to have an arduino board work for a living.

Lefty

Wow, that was fast. God Arduino is a beautiful thing.

So my next question would be, where does the informed maker shop for these sorts of things? Sparkfun and the Makershed seem pretty limited, but when I google things like actuator and servo I end up surfing through all these terrible industrial websites and catalogs with vague descriptions and bulk pricing.

How about this - get a long screw with a flat sided nut on it that will sit inside a square column such that the screw is held in place and turning it back & forth causes the nut to move up & down the screw.
One wall has slot down its length, and eyelet attached to the nut (or sandwiched between 2 nuts) then moves up & down as screw is turned.
Attach a motor to the screwhead - or mount a cordless screw driver over the head of the screw and have the arduino control the screwdriver.
http://www.blackanddecker.com/power-tools/9074CTN%20A.aspx $15 if look around

CrossRoads:
How about this - get a long screw with a flat sided nut on it that will sit inside a square column such that the screw is held in place and turning it back & forth causes the nut to move up & down the screw.
One wall has slot down its length, and eyelet attached to the nut (or sandwiched between 2 nuts) then moves up & down as screw is turned.
Attach a motor to the screwhead - or mount a cordless screw driver over the head of the screw and have the arduino control the screwdriver.
http://www.blackanddecker.com/power-tools/9074CTN%20A.aspx $15 if look around

Another great suggestion. Running with that idea it occurs to me that we have tons of extra pumps around, they run on a 120V wall outlet, but are triggered on and off by our computer hardware. How hard might it be to modify the motor on those to get some sort of variable speed?

I suspect I would just need to tap into the circuit and insert the arduino in such a way as to do PWM of the voltage going to the motor?

How hard might it be to modify the motor on those to get some sort of variable speed?

Variable speed drive to AC motors is a difficult thing to do correctly. Just wiring them to light dimmers will not cut it. Use a servo, you will have better and easier control for both stroke length and speed. Here is one source of servos:

http://www.hobby-lobby.com/servos_241_ctg.htm

Lefty

I hope you're being careful... One misplaced zero and you've got a lab full of exploded coke fueled mutant rats!

"I suspect I would just need to tap into the circuit and insert the arduino in such a way as to do PWM of the voltage going to the motor?"
Yeah, probably something along those lines.
Any part numbers on those or a link to a spec?

Syringe pumps deliver their contents VERY slowly (in the range 10ml per hour; probably less for rats?) and hopefully very regularly. Picture one of those 4 RPM timing motors driving a precision ball screw, pushing the plunger. Just the thing for keeping your wife painless during baby delivery :slight_smile: Servos don't have enough resolution.

A geared stepper motor driving some sort of screw arrangement is probably a good start. In fact, you might start with a computer's CD drive; they usually have a stepper driving a ball screw to move the heads (over 30mm or so of travel distance.) Insert a bunch of gearing in between the stepper and the screw, afix some sort of lever to the head to push the plunger, and you'd be pretty close. You'd even have a sturdy platform to mount things on.

Hmm. They seem to also get used in rep-rap like machines (extruding polymers for 3d-printing.) And they show up on eBay quite a lot. (Some broken. Although adding arduino-based electronics to existing mechanics might be a viable strategy.)

http://blog.reprap.org/2005_03_01_archive.html

I don't know how publishable research is when it's made using "questionable" equipment. It may divide into two catagories: "Your homemade XXX is very clever!" and "Your use of homemade YYY completely invalidates everything you've done!" (There was a recent study done of "software quality" in lab equipment of the sort made by people who studied, you know, biology or chemistry or one of those other real sciences rather than spending a decade or so in the software industry figuring out the many reasons that SW breaks all the time. It wasn't flattering... (sorta like: "people who studied computers and spent their careers writing SW still produce crap. What did you expect from people who took two CS classes in college and went into lab research?" Ouch.)

Yeah, that looks like a Much improved version of what I was describing :slight_smile: :slight_smile:

westfw:
Syringe pumps deliver their contents VERY slowly (in the range 10ml per hour; probably less for rats?) and hopefully very regularly. Picture one of those 4 RPM timing motors driving a precision ball screw, pushing the plunger. Just the thing for keeping your wife painless during baby delivery :slight_smile: Servos don't have enough resolution.

A geared stepper motor driving some sort of screw arrangement is probably a good start. In fact, you might start with a computer's CD drive; they usually have a stepper driving a ball screw to move the heads (over 30mm or so of travel distance.) Insert a bunch of gearing in between the stepper and the screw, afix some sort of lever to the head to push the plunger, and you'd be pretty close. You'd even have a sturdy platform to mount things on.

Hmm. They seem to also get used in rep-rap like machines (extruding polymers for 3d-printing.) And they show up on eBay quite a lot. (Some broken. Although adding arduino-based electronics to existing mechanics might be a viable strategy.)

RepRap: Blog: March 2005
DIY Syringe Pump Fix - YouTube

I don't know how publishable research is when it's made using "questionable" equipment. It may divide into two catagories: "Your homemade XXX is very clever!" and "Your use of homemade YYY completely invalidates everything you've done!" (There was a recent study done of "software quality" in lab equipment of the sort made by people who studied, you know, biology or chemistry or one of those other real sciences rather than spending a decade or so in the software industry figuring out the many reasons that SW breaks all the time. It wasn't flattering... (sorta like: "people who studied computers and spent their careers writing SW still produce crap. What did you expect from people who took two CS classes in college and went into lab research?" Ouch.)

Thanks for the thorough reply, I'll look into that cd drive idea. I think I may have mislead you with regard to the resolution I would need. I need to move the plunger a distance of about 3 inches over a period of roughly 20 seconds, one time at the start of a session. Normally we infuse by hand counting the seconds off as best we can (which has been accepted on our past publications). For this experiment though we're interested in seeing a behavioral effect that should onset around 30 seconds after infusion, so it would be nice to be fully infused within +-2 seconds of our target. (The pumps we own already are for experiments where the rats self administer with a lever)

"(There was a recent study done of "software quality...."

P.S. - I'm no stranger to that sort of thing, believe me haha. No lie, I have seen PhDs cover screws in modeling clay to try to keep them from backing out....Thankfully I come from a long line of carpenters and machinists, and though I didn't follow in the footsteps, I did learn that nothing is worth building if its not done absolutely right. I just happen to think this one is in my league.

I've seen a TV documentary where the rats are given a choice of food or cocaine and end up dead of malnutrition. Amazing thing addition.

Lefty

retrolefty:
I've seen a TV documentary where the rats are given a choice of food or cocaine and end up dead of malnutrition. Amazing thing addition.

Lefty

Ohh yeah, we study it with cocaine, amphetamine, MDMA, alcohol, food...sex, all that good stuff. Its amazing how many people still think it's a simple matter of willpower.

You could use the below modified servo to turn a threaded shaft, and connect the now external pot to the moving plunger via linkage to have plunger position control.

http://www.lynxmotion.com/images/html/smodh2.htm

"(There was a recent study done of "software quality...."
I just happen to think this one is in my league.

Oh sure; I didn't mean to imply that it wasn't, or even that the lab software that "doesn't meet modern coding standards" didn't work or wasn't suitable for that environment. You can improve software reliability quite a lot if you have intelligent users that follow instructions, and a lot of "modern practices" are aimed at preventing bad behavior in the face of intentional abuse... And the truth is that there are a lot of useful things one can do with software that don't require much in the way of "computer science" (or "computer engineering") to create. (otherwise, Arduino wouldn't work...)

Thats what I'm hoping. I also hope that last comment didn't sound retaliatory. I'm just very green when it comes to programming, electricity... all of this stuff (heck I'm a behaviorist haha). I just meant it as a sort of disclaimer that I'm aware of my extreme lack of knowledge and that I dont expect easy answers(though I might hope for them), but I'm committed to the dig and doing it right :).

I really appreciate your input, I actually scavenged an old cd rom today to start tinkering with over the next few weeks. Im hoping to learn, first of all, how to find the operating voltage and all that on them...and then to start learning about how to implement pwm (though ill likely play with that on an LED first).

Came across the post a bit late, so maybe you have found a solution. Here's an example of one I built to dispense fluids from a syringe very accurately at a wide range of speeds.

A non-captive linear actuator (a stepper motor where the shaft is threaded and moves up and down) works quite well in this application. You can get a driver card for $20 from sparkfun.com EasyDriver - Stepper Motor Driver - ROB-12779 - SparkFun Electronics for bi-polar steppers which will save you trouble if you're unfamiliar with the hardware. All you'd need is an arduino, the motor, and the driver. You just have to wire the step and direction pins to the Arduino and write a bit of code to move the stepper up and down. If you get a stepper with 20 threads per inch and with 200 steps per revolution you can move the syringe in .00025" increments for fine dispensing.

Sample code with a button for up and down:

#define stepPin 3
#define dirPin 4
#define up 5
#define down 6

void setup() {
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(up, INPUT);
  pinMode(down, INPUT);
}

void loop() {
  if(digitalRead(up) == HIGH)
    {
      digitalWrite(dirPin, HIGH);
      while(digitalRead(up) == HIGH)
        {
          digitalWrite(stepPin,LOW);
          delayMicroseconds(2);
          digitalWrite(stepPin,HIGH);
          delayMicroseconds(800);  //adjust this value for dispense speed
        }
    }
  if(digitalRead(down) == HIGH)
    {
      digitalWrite(dirPin,LOW);
      while(digitalRead(down) == HIGH)
        {
          digitalWrite(stepPin,LOW);
          delayMicroseconds(2);
          digitalWrite(stepPin,HIGH);
          delayMicroseconds(800);  //adjust this value for dispense speed
        }
    }
}

You'd most likely want to flesh out the code to keep track of the steps moved, and hence how much is dispensed. You can add in an LCD screen for about $20 for a nice interface to select dispense speeds, etc. if you want a more robust system.

This might help

http://www.mpja.com/prodinfo.asp?number=17265+MD

smaller one

http://www.mpja.com/prodinfo.asp?number=17284+MS