Team:NTNU Trondheim/Hardware


Hardware has been central to our project this year. Our goal was to make a chemostat system (consisting of three connected chemostats) that would allow us to evolve phage against phage-resistant bacteria. We were given a set of old peristaltic pumps, a water heating/pumping unit and some tubing. We developed an Arduino-DUE-based system, which controls five chemostats through RS232 ports, getting inputs from five self-designed scales (we constructed them from load cells, aluminum plates and electric amplifiers) and three self-designed 3D-printed OD600 photometers. The system controls the liquid volume within and the flow rate through each chemostat using a PID controller. The liquid volume, flow and OD data it acquires is transferred to a PC, logged and plotted in real time on a graphical user interface (also self-written), with the possibility of controlling chemostat parameters from the PC itself. This made the whole of our hardware/software system (the pumps excluded) quite user-friendly and cheaper than a single lab-scale! Below we describe each developed piece of hardware in detail.

Click here for video of the setup.

OD reader

The OD reader was designed to allow real time measurement of OD600 in a chemostat culture. It consisted of a core scaffold into which a flow-through cuvette, a LED module and a sensor module could be slid. All parts where 3D-modeled from scratch and prited using a PLA-based 3D-printer. We made our own flow-through cuvettes by gluing 3D-printed tubing connectors on each end of a normal spectrophotometry cuvette. When everything is attached light is passed from the LED module (we used a standard yellow 10p LED for this) through a narrow slit in the core scaffold, the cuvette, a new slit and onto the sensor. For the light sensor we used the $7 Adafruit TSL2591 high dynamic range sensor, in total $7.10. The sensor could yield an accuracy of about 0.05%. In order to be able to control all three OD sensors from the only I2C port on the Arduino, we used two CD4066 bilateral switches both on the signal and on the clock lines.

Reader scaffold module (3D-printed).

Modified cuvette attached to tubing taken out from the reader scaffold.

Three OD readers in an array (one for each chemostat).


To make a fully controllable chemostat setup we needed a total of five scales whose readings we could record on an Arduino board. There were not enough available scientific scales in the lab, while common scales (<$1000) do not come with external communication buses. So we decided to make our own cheap alternative, consisting of a SparkFun TAL220 load cell ($7) with an HX711 load cell amplifier ($10), two aluminium plates and screws. The production of plates amounted to about $10 per plate, giving a total of $37 expenses per scale. The scale could measure up to 10kg of load with <0.5g accuracy. Given that the load was dynamic due to pumping, the accuracy of the weight readings was similar to an $2000 lab scale, which we tried as an alternative! 

Self-designed scale overview.

Side view of scale. The load cell can be seen in the middle. The screws to the left correspond to the ones in the middle of the plate on the previous picture.


In addition to the electronic hardware, we designed and printed lids for the chemostats and medium tanks, which made it easier to use tubing and take samples from the chemostats. We hope to be able to print whole chemostats in the future.

A chemostat lid from above. Holes for air intake and input/output tubes can be seen, as well as the lid on top of an opening for taking samples of the culture.

The same lid from beneath.


We used an Arudino Due to control the 5 scales, 5 pumps and 3 OD sensors. A set of classes was written for calibration and simplified use of the hardware. A PID regulator was constructed and shown to be able to stably control the flows and volumes in each chemostat over any tested period of time (16 hours in our case). In order to make the system user friendly, a graphical C++ based interface module was written for the computer. The interface could perform bidirectional communication with the Arduino, visualizing ODs, chemostat weights and flows in real time, and sending back user defined targets for flows and weights (pausing and flushing buttons were also implemented). Additionally the software logged all the data read in from the Arduino into spreadsheet files.

An overview of the Arduino pinout.

The general setup of the three-chemostat system. Printed locks can be seen on the medium tanks to the right and left as well as on the chemostats.

A screenshot of the self-written chemostat control GUI.

A plot of the OD measurements of a three chemostat system for a 13 hour experiment.