Feedback on Our eVOLVER

Hi everyone! I’m Marielle, a Research Assistant and I’ve been working on getting the eVOLVER running and ready for experiments ove the past months took thorough notes on my process. We thought it might be useful to provide feedback, which I have compiled here. In addition, I intend to compile a “Quick Start” and Troubleshooting guide for our lab. This is my current Quick Start guide; so far, I have only written out the protocols for OD and temperature calibration but will be adding more.

I was also wondering if there is any interest for a structured directory in the GitHub or a central Google Doc/neat well-maintained thread where labs could post their protocols (and get feedback on them!), ideally linking to forum posts, the original paper, or the supplement for reasoning where applicable. Something similar could also be done with a structured directory or just a large python script for user-defined functions/modules that users can copy into the custom script as needed. I think that these would be incredibly useful and beneficial as the number of labs using eVOLVERs increases, especially for more novice users.


Smart Sleeve Assembly
Overall, for a relatively novice builder, this was somewhat difficult. Instructions on forum aided considerably but were somewhat out of date and not fully optimized.

Unpacking of Smart Sleeve Parts
o Packaged well
o Instructions at time of writing did not include installation of second OD135 photodiode
o Including just a few extra of the modular parts (screws, LEDs, vial caps, photodiodes, thermistors, and a couple fans) would be best practice
o If nylon caps are autoclavable, please state this somewhere clearly. There were some posts in the forum that led me to think they might be autoclaveable but my research has indicated nylon is not. I have been disinfecting by spraying with EtOH which has seemed to work fine, but a more thorough sterilization would be ideal

o Aligning the placement on the aluminum sleeve and then threading through the PCB was difficult, and for myself was the longest step of assembly
o Etched outline or other indicator on sleeve would help immensely for placement

Heating Element
o Not curved, unlike sleeve, so not full contact
o We addressed this by adding significant amounts of thermal paste to the connectors before screwing them into the aluminum

o To have wires taut, we noticed the serial sticker should face the same side as the connectors on the PCB
 Said another way the arrows on the fan should face the side with the ribbon port
o Red to + black to – vs PWR/GND in original instructions

Photodiode and LED
o Installation of OD135 diode not included in current instructions

Screw locations
o We found screwing at the spare B, IR LED corners minimized the contortions of the PCB
o It was also easier to secure the final screw if one first puts the screws all the way through the board and sleeve chassis and then pushes the remaining parts up over the screw.

Incorporating some sort of auto check at initial startup could greatly assist with troubleshooting
o There are standard ranges of expected values for thermistors, from photodiodes, etc. So, if values received consistently are considerably outside that range, it could return to user which vial and which part need to be troubleshot. Even just providing a table with expected ranges could be helpful

Computer and Tray Set-up

The computer and tray set-up were relatively easy, but initial troubleshooting of the instrument was more frustrating to work out.

Installing the needed repositories on Mac OS Catalina worked as on the GitHub except in some key ways.

  • Setting IP on router
    • Instructions seem to indicate you should somehow set the same IP address on the eVOLVER and lab computer, but this did not seem possible. Setting the eVOLVER IP to static as instructed seems to work fine.
  • brew install of openssl (at least on Mac OS Catalina) required updating python to python 3.8 with no solutions findable that still allowed for python 3.6 to remain installed . Even with python 3.8 though, we have not run into any framework breaking bugs to our knowledge.

UPDATE: python 3.6 is no longer required have raised issue on GitHub

  • Getting the eVOLVER electron GUI on lab computer (was not clear this could interface with the eVOLVER the same way as the touch screen from the getting started guide) required a fair amount of work to get node.js and yarn installed and running properly on Catalina. It also pulls up errors in HTML in the electron shell whenever starting up but seems to interface correctly from what we have been able to tell.
    • Getting node.js installed was confusing as one of the instructions sets on the yarn/node.js GitHub, linked to on the eVOLVER repository debugging guide, specified OS Catalina as having a special set of instructions, which it does. One of the links to this instruction set jumps to a section that is out of date/not relevant for us though.
  • Terminal directory and privileges matter:
    • Running evolver.py consistently :
      There were several aspects of getting things to run that contrasted with the provided commands in the GitHub readme’s.
      • Would not run consistently, and could never overwrite previous experiments, without admin/root privileges & first cd’ing into the experiment directory
      • Commands input (from home directory):
        • cd Documents/dpu-master/experiment/expt-dir
          • my experiment directory that contains copies of evolver.py and custom script. Including an experiment directory within the dpu folder with the scripts pre-copied in might not be a bad idea, and then the template scripts can have “#TEMPLATE (FOR COPYING ONLY)” or a similar message repeated at the top
        • sudo python3 evolver.py
    • Graphing Utility
      • As with eVOLVER.py, rather than calling the script from the parent directory, I had to cd in first and then call the script.
  • Electron Utility
    • Unclear that this is to be set up on desktop and still interface with eVOLVERs, just like the touchscreen, at least from the overview
    • Inputting “yarn dev” in a terminal nested inside the evolver electron folder does let it run on desktop. Although it returns errors, it still opens electron and seems to work fine, besides the occasional white screen bug others have also reported on the forum
  • Installing Smart Sleeves
    • Specifying attaching ribbons first to the eVOLVER facilitates screwing and tray assembly
    • Turning on 12V without any new input seemed to put everything to maximum initially, which is good to know
  • Lay out of overall architecture
    • the supplement is very helpful for this, but is somewhat out of date (7 vs 8 SA slots, etc)
    • even with the paper and supplement, many elements of this were unclear to me, but I am relatively novice and was wholly uninitated with respect to Arduino.



Easy enough to set-up. Time consuming to do. Methods included in QuickStart guide work well.
Following my initial (not great) calibration I had to do several troubleshooting steps:

  • Ensure LED and photodiodes are in proper positions
  • Verify LED and photodiodes leads are in the proper +/- conformation (we had a few that were accidentally swapped during assembly)
  • Finally, make sure the leads are not making contact with wires, tape, etc
  • Shipping with vial aligners would be good practice
  • very recently found full speed spin and stopping the fan in between moving vials gives very clean OD calibration and measurements for E. coli. I need to do additional work to verify this though but I intend to try and get this integrated directly into the eVOLVER electron code.

Very easy to set up*, although I had to carefully review the GitHub code to see what I was really supposed to do.

  • Important to state somewhere how to interpret the orange circle around each vial on the electron display (basically that it is a measure of equilibrium)

*Super time consuming if using an alcohol or mercury-based thermometer, we used ThermoPop (with precision to 1 C) initially and then another thermistor-based commercial ThermPro thermometer which has a precision to 0.1 C. Comparison can quickly verify alcohol based and commercial thermistor accuracy alignment. Significantly faster with instant reads, so probably worth directly specifying this in the instructions. Supplying recommendations may also be wise, as determining if a commercial instant read thermometer is thermistor-based (ideal) or thermocouple-based (not ideal as magnetic field can impact measurements) can be difficult.

Getting it started the first time was a little tricky, but altogether not too hard or time consuming to figure out. That said, having the previous notes on computer and tray set up before I started could have saved considerable time. Integrating some short code that combines vial x od, temp, etc. data into a single csv at the experiment’s end (and keep the existing singular ones in their respective folders as well) might be useful for some analysis and is something I am looking into doing.

Graphing Utility
o See previous notes
o Very early stages but currently exploring deploying dash html + plotly to set up a graphing utility that can display any selection of vials and could have toggled visualization of when media was pumped in, etc.

plain language guides for the custom script could be very helpful. While I found the notes inside the script enough for me, this could reduce the chance of misunderstandings and help those newer to code or trying to get things running fast:

o Example: provide a table of evolver.py functions with plain language explanation of what they do
o Explaining how time_in, time_out, MESSAGE, etc work
o server_test.py has good examples, so more clearly delineating it as an example (rather than a check) how to announce via python outside of the script itself would be helpful

May want to integrate into the standard custom scripts a no-fluidics function for initial trials. We did this is a first step to verify the OD detection was working correctly before trying a turbidostat run.
o My custom test function for growth trials, adapted from the existing turbidostatic code:
def test(eVOLVER, input_data, vials, elapsed_time):
OD_data = input_data[‘transformed’][‘od’]
save_path = os.path.dirname(os.path.realpath(file))
other_vials = vials
MESSAGE = [’–’] * 48
for x in other_vials: #main loop through each vial

        # Update other configuration files for each vial
        # initialize OD and find OD path

        file_name =  "vial{0}_ODset.txt".format(x)
        ODset_path = os.path.join(save_path, EXP_NAME, 'ODset', file_name)
        data = np.genfromtxt(ODset_path, delimiter=',')
        ODset = data[len(data)-1][1]
        ODsettime = data[len(data)-1][0]

        file_name =  "vial{0}_OD.txt".format(x)
        OD_path = os.path.join(save_path, EXP_NAME, 'OD', file_name)
        data = np.genfromtxt(OD_path, delimiter=',')

OD can get a little messy at times still, even with good calibrations. If existing posts on the forum and supplemental information could be adapted to a more clear advisory on the dynamic range of calibration conditions (ambient light, temperature) and more data the robustness of calibrations using the current 3D method that would be very useful (I understand this is sort of a WIP).

Fluidics Set-up
Provided labels made set up very easy. Suggested influx needles on forum are not LuerLok though (is that supposed to be that way?).

Clarified set up on using septa and needle would be beneficial:
o Are we supposed to pierce septa, or try and have alongside needle?
o Silicone sleeves (autoclavable) for the “arms” of the vial cap with a septa covering the ports might be a better option for full reusability and ease of use compared to try and cut pyramids of silicone septa and stuff them in as I have been doing
o Process for safely reusing needles

Vial caps are brittle and one arm broke off of one.

Cord detangling objects/suggestions would be helpful

Taped to secure influx efflux of same color together and not entangled
Is there something I need to do for pump calibration? Not clear anywhere but I already have a pump cal in expt-dir

Guidance on best applications of the vial cap ports readily accessible would be good


Setting this up is not too bad, just need a little bit of a pre-launch checklist that includes setting a new name, verifying the IP and port are correct, the folder names are correct, and which function has been selected.

It is not unusual for OD to drop to approximately -1 on some vials after dilutions for reasons that are not very clear. Generally, we have had some issues on occasion with the OD scale “sliding” down.
Spills happened

  • Vials overflow
    • Overflow did go onto tray
    • The way overflow goes out is down the sides of the inside of the sleeve
    • Looking at using paraffin or foil or something to have the flow redirected if it starts accumulating
    • Generally, some of the efflux needles seem to run into problems for reasons I have not yet determined.
  • I have coded in auto redilution at a specified time point and/or interval (either through pumps or by pausing and manually switching vials)
  • Similarly, I have coded in an auto stop that can incorporate time, OD, and other variables to act as a threshold for pump action to stop.
    • I want to integrate media consumption (recently integrated into graphing utility), rudimentary spill detection (such as if raw temp resistance sees a sudden change of >1000), time between pumps, level of dilution following pump, etc.

I am very glad our lab can beta test this framework and hope this feedback can help with the continued development. Hopefully we’ll be getting some exciting work under way soon and can really employ the full potential of this system!


Thanks for the frank and thorough feedback! The overall success of the platform really relies on this. A bit swamped right now but I’ll go through this more thoroughly and make comments at a later time.


This is great, thanks for all the feedback. You are totally right that there’s been a lot of development that has left some of the documentation out of date.

I think it’d be great to have a directory of protocols, I think this would be really helpful to new users and for experienced users to receive feedback. It’s something we’ve discussed before, the main question is where and by whom. Github seems like a logical choice for code and protocols, and though it is a little daunting for new users, that’s a skill that will be critical for updates. Google docs are a little smoother to comment on, so for protocols might make more sense to go there. I’ve also considered protocols.io which seems pretty slick for commenting line by line, though less revision friendly.