I graduated from the University of Chicago in 2013 with a degree in Chemistry. My honors research project was designing, building, and using a nanosecond transient absorption instrument to investigate photo-catalytic compounds for use in solar carbon dioxide reduction.
Since 2013 I have been working in the UofC Physics Department for Prof. David Biron as a lab tech building behavioral recording devices for the nematode C. elegans with an eye towards educational applications. The setup uses Raspberry Pi's and inexpensive Celestron microscopes coupled with custom software. I also have significant experience with Arduino, both hardware and software. I built a 3d printer and have used it in many research projects. I have a fair amount of experience with the RepRap project and derivative machines. My printer is a RigidBot which is functionally a Prusa i3 running Marlin firmware. I've authored a book chapter that's currently being reviewed on rapid prototyping use in research environments, specifically laser cutting and 3d printing.
Project[edit | edit source]
Open Source Syringe Pump modifications:
Several modifications to the Open-source syringe pump project that make the pump more similar to commercially sold syringe pumps. These modifications add marginal cost to the basic pump and are open source.
STL files: 
- Escape mechanism to move pusher block without running the motor.
The current pump design requires one to run the motor in order to load a syringe. Commercial pumps have the ability to disengage the drive screw in order to load the syringe. This modification uses a thin 3d printed blade to engage the drive screw. The blade fits into a slot printed in the pusher block and uses force provided by a rubber band to keep contact with the screw.
The drawback is that the blade can more easily slip on the drive screw. This means the pump may not be suitable for higher pumping forces encountered with thick fluids. This might be fixed by using half a nut on a blade that can be disengaged. Using a screw with a smaller thread angle (such as an ACME drivescrew) could also prevent slipping.
- Open syringe clamp to allow easy removal
Removing the syringe and loading a new one requires the removal of four bolts. Commercial pumps feature drop-in syringe holders and these new parts facilitate that functionality. The four bolts only need to be loosened and the syringe can slide in and out. When tight they provide enough friction to prevent the syringe from pushing upward.
- Arduino Control with EasyDriver
Using the EasyDriver is a low-cost, open source alternative to using a full motor shield with several motor controllers. The EasyDriver is compatible with the AccelStepper library for Arduino to smooth the stepper operation.
Software[edit | edit source]
AccelStepper library: 
Arduino program with Matlab examples: 
Upload syringe_pump_control.ino to your Arduino of choice (tested with Uno R3)
The serial protocol used to communicate is detailed in the README. Example programs written in Matlab are provided (should work in Octave too). It's worth noting that it assumes a little endian architecture when sending the floats. It also assumes a 4-byte float and a 2-byte int. The serial reads are blocking so the pump won't step while commands are being sent. This isn't a problem if commands are sent quickly, but if entering the bytes manually through a terminal it can stop the motor while waiting for subsequent bytes.
The Syringe Pump works to dispense a specific volume given in ml at a rate given in ml/min. To do this is needs an accurate steps per mm and the internal diameter of the syringe. Values are not stored in EEPROM so they'll need to be resent on each reset.