Syringe pump

A syringe pump is a device typically used in medicine to delivery drugs at a steady rate. These devices are also pretty handy rheological test equipment. This syringe pump is an old hospital one, which has been adapted for control from a laptop.

## Relevance

Syringe pumps provide controlled flow of a fluid through a pipe with restriction; an interesting flow scheme to rheologists.

## Principles of Operation

The syringe pump consists of a motor geared to a threaded rod which has a runner attached via a rack so that as the motor turns, the runner moves backwards or forwards. The runner is used to compress an attached syringe, providing the basis for the syringe pump. Speed is measured using an optical encoder, and applied force is obtain using a load cell. In addition to speed and force, position along the track is recorded using a linear potentiometer. These readings are logged to a CSV file, which can be read by a spreadsheet program (Excel, LibreOffice...) or whatever your preferred method of data processing is.

The existing control hardware was removed and replaced with an Arduino and new electronics to allow the pump to be controlled in a bespoke manner. The Arduino connects to any computer via USB, which allows the pump to be controlled, and flow data to be logged.

## Software Resources

As mentioned in the previous section; the pump contains an Arduino, and is controlled from a PC. There are therefore two pieces of software involved: the **firmware** for the Arduino, and the **control software** on the PC. These software packages are available on GitHub. Check out the releases section for a download for your operating system, or download the repository and build from source (works well on GNU systems, macOS seems to work well too, windows is a nightmare).

### Arduino Firmware

The firmware is responsible for setting up the sensors on the Arduino, and receiving control information from the PC. Sensor data (speed from the optical encoder, force from load cell, position from linear potentiometer) is output over the USB along with the time the readings were taken at.

#### Compiling

Arduino software is written in a stripped back version of C++ and compiled using their toolchain; a process normally done within their Arduino IDE application, however this can be done in a more open manner. If you want to compile the Arduino from the command line, you need to ... [TODO]

### Control software

The control software is not as "smart" as it sounds, it only needs to take parameters from the user, and send it to the Arduino, and record any data it receives.

This software was written in C to be portable and user friendly, with a (hopefully) well laid out GUI.

## Hardware Resources

The hardware, briefly mentioned previously, consists of a mixture of new and original components. The original components are what were in the pump originally, and are mostly intact apart from the main control board and battery being removed. New components were added to allow the remaining original hardware to be controlled. An Arduino microcontroller is used to control the operation of the pump, with various driver electronics used to take readings in.

### Measurements

A loadcell is used to measure the force acting on the plunger of the syringe. The original loadcell used in the device was unfortunately broken, so a mount was 3D printed and a new loadcell was fitted. Readings are taken from the loadcell using an HX711 Analogue to Digital Converter (ADC).
Position is obtained from a simple linear potentiometer which gives the position as a voltage read by the Arduino's built in ADC.

Flow rate is found from the rotational velocity of the motor via the gear ratios connecting the runner to the motor. This is measured using an optical encoder.