Low-cost, scalable, and automated fluid sampling for fluidics applications

Graphical abstract


Hardware in context
Fraction collectors that sample from a microfluidic stream [1], are preferable to manual collection that can be tedious and introduce human error [2]. Commonly used in fast protein liquid chromatography (FPLC), typical fraction collectors consist of a rotating rack loaded with containers and a distributing arm for collecting fixed volumes of fluid [3,4]. Most laboratories currently rely on commercial fraction collectors, which are expensive and difficult to customize (Supplementary Table 1). To reduce cost and facilitate custom applications, a number of open-source fraction collectors have been developed, e.g. [5,6]. These devices, while less expensive, continue to rely on complex engineering designs and parts that may be difficult to source and manufacture, thus driving costs higher, lengthening the assembly process, and complicating operation.
We have designed and built a simple, low-cost, and modular fraction collector that is easy to assemble and use. This opensource fraction collector, which we call colosseum, is based on design principles for modular, robust, open-source hardware [7], and offers advantages to commercial systems by virtue of being significantly less expensive and easily customizable Table Specifications table. The colosseum fraction collector can be assembled in less than an hour and costs $67.02. Unlike the micrIO [6], which is built from parts of a salvaged Illumina Genome Analyzer that costs $1500, the colosseum fraction collector uses off-the-shelf and 3D-printed parts (Supplementary Table 2). The LEGO MINDSTORM fraction collector [5] costs $500, and while it uses more commonly available components, it still requires cutting and bending of steel C-channel. Furthermore, most fraction collectors require the use of multiple axes to position a dispenser head over a reservoir. Control of such a system can require communicating with and driving up to three separate motors in tandem. The colosseum fraction collector is based on a simpler design where a mechanical coupling between the motor, the tube rack, and the dispenser arm enables rotation of the rack and position of the arm with only one motor. Designing around a single motor simplifies operation, and reduces cost, complexity, and assembly time.

Hardware description
The colosseum fraction collector consists of four 3D-printed components, two rotary shafts, five rubber feet, one stepper motor, an Arduino, and a motor controller (Fig. 1a,b). We chose the spiral tube layout (Fig. 1c) instead of the rectangular tube layout of previously published fraction collectors as it enables serial fraction collection with only one motor. By coupling the dispenser arm to the tube rack with a slot-cam mechanical coupling (Fig. 1d) we constrained the rotation of the tube rack and movement of the dispenser arm to rotation of a single stepper motor located in the base of the fraction collector (Fig. 1e).
The device is modular: each component can be developed, tested, and fabricated separately using mutually compatible interfaces. The tube rack fits 1.5 mL Eppendorf tubes and can easily be modified to accept tubes of varying sizes under the constraint that they follow the spiral pattern (Fig. 2a). The tube rack fits 88 tubes with a packing efficiency of 60.2% relative to the optimal packing of 146 tubes on a circular disk of the same size as the tube rack (Supplementary Fig. 1; [8]). In addition, the dispenser arm can be modified to accept connectors and tubing of various sizes to enable parallel dispensing.
The device is controlled by a graphical user interface (GUI) that communicates with an Arduino, CNC motor shield, stepper motor driver, and software adapted from the poseidon syringe pump ( Supplementary Fig. 2a,b); [7]. Experiment parameters such as flow rate, total volume, total time, volume per fraction, and number of fractions are input by the user in the GUI (Supplementary Table 3) and the Python or JavaScript back-end structures and sends Arduino-interpretable commands to the Arduino for execution. The GUI can be installed with the pip package-management tool and run with a single command on Mac, Linux, or Windows, or it can be run directly in a web browser at https://pachterlab.github.io/colosseum/. The webbrowser implementation takes advantage of the web serial specification [9] and the browser-serial API [10] to read and write from the serial port within a web browser environment.
To ensure that commands set by the GUI correctly align the dispenser arm with each collection tube, we measured and converted the angle between pairs of tubes to motor steps, and programmed this list of angular displacements into the control software (Methods). We also used a simple iterative scheme to approximate the position of equally spaced points along an Archimedean spiral and compared it to our measurements. We found high concordance in the angular displacements (Fig. 2b,c). This allows us to programmatically generate arbitrary spiral motor displacements based on the distances between successive tubes and distances between successive arms of the spiral.
In order to characterize collection errors across a range of flow rates commonly used in microfluidics and FPLC [11,12], we sampled 180 fractions over six flow rates ranging from 22.5 mL/hr to 720 mL/hr. We found that the collection errors were within ±6.5%, with one sample having À10.6% error due it being the first fraction collected. These data suggest that the use of the colosseum system with the poseidon syringe pump results in accurately collected fractions (Fig. 2d). Next, we sought to assess the fraction collecting performance over an increasing amount of sample volume, as is commonly performed in gradient elution series [4]. For a fixed flow rate, we collected 20 fractions with 12-second increments in collection time per tube over the course of 42 min in three replicates (Fig. 2e). We found that the collected fractions closely followed the expected fraction amount with a Spearman correlation of 0.997, showing that the colosseum fraction collector can be used to accurately collect gradient elution series.

Discussion
We have demonstrated a low-cost, modular, and automated fraction collector that uses 3D-printed parts and off-the-shelf components, can be built in an hour, and is simple to run. We show how colosseum samples fluid accurately over a widerange of flow rates making it useful for microfluidics experiments and FPLC. The low cost of our device could enable several instruments to run in parallel. For example a single control board can in principle run multiple fraction collectors and syringe pumps thus facilitating large-scale experiments (Fig. 2f). We have also thoroughly documented the build process with instructional README's and videos ( Supplementary Fig. 3), and we have made all of the results described in this paper reproducible on Google Colab.

Methods
We designed the colosseum fraction collector by following basic principles of open-source hardware design [7].

Part design
The fraction collector consists of four 3D-printed parts: a base, base plate, dispenser arm, and tube rack. The base holds the base plate, dispenser arm, and tube rack in place with additional hardware. The base plate acts as a horizontal support for the main rotary shaft, with rotational bearings that support the shaft in two places. The dispenser arm consists of two connected parts: the top part of the arm holds the fluid tubing and the bottom part acts as a cam follower that follows the spiral track on the bottom of the tube rack. Collection tubes are placed in the tube rack and are organized in a spiral pattern that mirrors the pattern the dispenser arm follows during rotation. The tube rack is constrained to the shaft with a flange coupling set screw and is mechanically coupled to the motor with a timing belt so that rotation of the motor results in rotation of the tube rack and the dispenser arm. After numerous sketch iterations, we used Fusion 360 [13] to generate a 3D model of the device and added dimensional tolerances of + 3-5% to all parts to account for variance in 3D printing.

Part fabrication
STL files were generated using the 3D part models from Fusion 360. To prepare the appropriate files for 3D printing, Sim-plify3D [14] was used to slice the STL model and generate GCode with 10% infill and 0.2 mm layer height. Parts were printed on a Prusa i3 Mk3 3D printer [15]. GCode was loaded onto an SD card and the parts were printed using 1.75 mm diameter PLA filament with a nozzle temperature of 215°C and a bed temperature of 60°C. All parts were printed at 10% infill. STL files for all parts can be found in the GitHub repository (https://doi.org/10.5281/zenodo.4677604). The time to print all parts separately was approximately 73 h, but may vary depending on the printer model used and the print settings (Supplementary Table 2). All parts required to assemble the colosseum fraction collector can be found in the bill of materials (https://doi.org/ 10.5281/zenodo.4677604).

Device assembly
A complete guide on how to assemble the colosseum fraction collector can be found on YouTube (https://www.youtube. com/watch?v=yG7ECh5GO0o) (Supplementary Fig. 3). A step-by-step assembly guide is also available on protocols.io [16].
The assembly of the device starts with the base. Five rubber feet are screwed onto the bottom of the base to stabilize the device and to ensure that the timing pulleys on the motor and the tube rack shaft are elevated and free of obstruction. A timing belt pulley is secured to the shaft of a NEMA 17 motor and the motor is then screwed onto the floor of the base. The tube-rack shaft is also inserted into the floor of the base along with a bearing that acts to stabilize the shaft. A timing belt pulley is secured to the shaft and couples its rotation with that of the motor. The motor and the shaft are connected by a timing belt of length 120 mm. The mounting holes in the base for the motor are designed so that the user can adjust the distance between the two timing pulleys in order to prevent slippage of the timing belt. Additionally, washers are inserted in between the base floor and the screws holding the motors so that the plastic of the base does not get worn out over time.
The base plate is then screwed onto the floor of the base using M5 screws and nuts. The dispenser arm, which is secured to a shaft with an M3 set screw, is placed into the base plate along with a bearing. A torsion spring is placed on the shaft, between the dispenser arm and the base plate to lessen slack between the dispenser cam follower and the tube rack spiral groove. The tube rack shaft is then inserted into the tube rack and secured in place with a flange coupling set screw.
The motor cables are routed through the side of the base and connected to the Arduino. The Arduino is connected to a CNC shield and DRV8825 Pololu motor controller [17]. The Arduino is also connected to a computer. This allows the user to send and receive signals to the motor via serial commands. Power is supplied to the stepper motor driver via terminals on the CNC motor shield. We supply the stepper motor driver with 12 V DC at 3.0 A. The DRV8825 has a maximum current rating of 2.2 A per phase and the bipolar NEMA 17 stepper motor has a rated current of 2.0 A per phase. The stepper motor driver limits the amount of current that can be delivered to the stepper motor via a potentiometer.

User interface
The GUI translates the parameters set by the user into motor commands sent to the Arduino. The Arduino runs our custom firmware, pegasus https://github.com/pachterlab/pegasus, which sends command strings to the motor controller which in turn sends pulse-width-modulated signals to the motor. The GUI is written in Python using Qt, an open-source, crossplatform GUI framework ( Supplementary Fig. 2a). All packages related to the GUI are pip-installable and the GUI can be launched with a single command from the command line. The web-browser GUI is written in JavaScript, requires no installation, and can be run by simply navigating to a website ( Supplementary Fig. 2b). The GUI consists of two parts: parameter inputs and a status monitor, the latter of which displays the total volume dispensed, time elapsed, and current tube location. Upon opening the GUI, users are prompted to connect to an Arduino. To run the colosseum fraction collector, users must specify three parameters: the flow rate, total time or total volume, and volume per fraction or number of fractions (Supplementary Table 3). The remaining parameters are calculated using the ones provided. In addition to these parameters, users must also specify the tube size to ensure that the fraction size will not be greater than the capacity of the tube. Users can operate the colosseum by pressing the run, pause, resume, and stop buttons in the GUI. All software required to run the colosseum fraction collector is freely available on Github under an open source BSD-2-Clause License. Python 3.6 and JavaScript code is used on the back end to interpret user input from the GUI and send custom commands to the Arduino, accordingly. The Python implementation uses the pyserial package [18] to interface with the serial port and the web-browser implementation uses the browser-serial package [10]. Parameters from the GUI are translated into dwell time per tube and number of tubes to fill. The angle between each tube in the spiral was measured on Fusion 360 using the Inspect tool, saved as a csv file (Supplementary Table 4), and specified in the Python backend. These angles are then converted into the number of steps the motor must rotate. The motor stops rotating at each tube location for a specified amount of time in order to dispense the fluid into the tube. The motor then moves a set number of steps to reach the next tube. The status monitor displays the amount of total volume dispensed, how much time has elapsed since the start of the experiment and which tube the fraction is being dispensed into.

Testing and validation
We tested the functionality of the device with numerous experiments where tap water is flown in at a set flow rate, or varying flow rate. We used the poseidon syringe pump, a 60 mL syringe, microfluidic tygon tubing and 1.5 mL Eppendorf tubes to pump fluid to the colosseum. The poseidon syringe pump was controlled with the pegasus software. For a varying number of flow rates and a set dwell time per tube for each flow rate (Supplementary Table 5), we collected 30 fractions and compared the fraction sizes to the predicted fraction size of 1 mL by weighing each tube before and after collection (Fig. 2d). We used a 200x 1 mg analytical scale manufactured by Yae First Trading Co., ltd part number TEK-AB-0392 to measure the amount of collected fluid. In order to properly fit the Eppendorf tubes on the tube rack, we cut off the caps from the Eppendorf tubes before collecting fractions in them and put them back on for the final measurement making sure that the cap corresponded to the tube from which it was removed.
In follow up experiments we fixed the flow rate and linearly increased the collection time. For a fixed flow rate of 22.5 mL/ hr and 20 fractions with 12-second increments in collection time per tube, we collected fractions and compared the observed fraction sizes to the predicted fraction sizes (Fig. 2e). We used pegasus to run the colosseum with varying dwell times per tube.
We estimated the cost and time for using k fraction collectors to show that these devices, when used in parallel, can reduce the experimentation time. For example, if we collect n fractions on each of k fraction collectors with a volume per fraction v and a constant flow rate f per collector then the time it takes to run this collection is t = n/k*v/f.
To test the accuracy of the measured angles between two successive tubes we used an iterative scheme to estimate the radius and angular position based of the polar form of Archimedean spiral of r = b*h for a constant b. The radius and the arc length are used to update the angular position and then the angular position is used to update the radius.
Optimal packing was calculated with the ''best known packings of equal circles in a circle" online tool [8] with the outermost disk corresponding to the diameter of the area available for tube placement and the packing disks corresponding to the distance between tubes along the arc.

Data analysis
All data analysis was performed with Python 3.7. Jupyter notebooks that run in Google Colab and all experimental data to reproduce Fig. 2 can be found on our GitHub repository https://github.com/pachterlab/BKMGP_2021.

Design files
Design file name File type Open source license Location of the file colosseum_arm CAD file BSD-2 Available in repository colosseum_base CAD file BSD-2 Available in repository colosseum_baseplate CAD file BSD-2 Available in repository colosseum_tubebed CAD file BSD-2 Available in repository

Bill of materials
The bill of materials can be found in the GitHub repository.

Build instructions
Please refer to Device Assembly under the Methods section in Hardware description.

Operation instructions
Please refer to User Interface under the Methods section in Hardware description. A video guide to operating the device can also be found in this YouTube video (https://www.youtube.com/watch?v=yG7ECh5GO0o).

Validation and characterization
Please refer to Testing and Validation under the Methods section in Hardware description.
Author contributions ASB, YK, and LP designed the fraction collector. JG helped set instrument specifications. YK assembled and built the fraction collector and performed the experiments. ASB, YK, and KHM designed the GUI. KHM coded the installable GUI and YK, KHM, and ASB coded the web-browser GUI. ASB coded the browser-serial package. ASB, YK, and KHM wrote the documentation. ASB and YK analyzed the data and made figures. ASB, YK, and LP wrote the manuscript.

Data & software availability
All data and software to reproduce the results in this manuscript can be found in Zenodo: https://doi.org/10.5281/zenodo. 4677604. The project can be found in the GitHub repository: https://github.com/pachterlab/colosseum.

Declaration of Competing Interest
The authors declare that they have no known competing financial interests or personal relationships that could have appeared to influence the work reported in this paper.