Team:Sheffield/Software


User Experience

When we were designing our plate reader, we wanted to make it accessible to as many people as possible. This meant writing our software so that it could run on nearly any device, at any time, without any complicated installation or compatibility requirements. As a result, to use OPENLUX, all you need is a web browser and an internet connection.

Figure 1- OPENLUX running on a variety of devices. If it can surf the web, it can read a plate.

The interface is straight-forward. At its heart is a graphical representation of the microplate where wells can be selected and preliminary results can be seen. Wells can either be selected one at a time or using a click and drag for a rectangle select. Once all of the wells have been selected, the start button can be pressed, setting the device in motion. The interface shows the progress of the read by colouring in the wells as it goes.

Figure 2- A typical view of the OPENLUX UI with some wells selected

Once the read is complete, the data can be downloaded using the “Download Data” button. This saves the data as a CSV file which can be easily imported into any spreadsheet program.

Less common functions are stashed within the drop-down arrow menu. Here you can home the device (a calibration that ensures the reader is in the correct position), in addition to clearing the current selection, and clearing the stored data.

  • Start/Stop
  • Select Wells
  • Clear Selection
  • Download Data

Source Code

In keeping with our focus on accessibility, we have decided to open source all of our code. By making the inner workings of our device visible to everyone, we are opening the door for others to improve and build upon our base. All of the code is available on our Github here: https://github.com/Sheffield-iGEM/OPENLUX.

Behind the Scenes

The device itself is driven by an ESP32 that has been programmed using Espressif’s ESP-IDF C toolchain, which can be found here: https://docs.espressif.com/projects/esp-idf/en/latest/. This C code is responsible for handling the low-level details of the device and also hosts the web-server that the rest of the application is built atop. The C code contains functions for moving the sensor to a given well and for returning the current sensor value which it exposes via a web API.

The rest of the application logic is done on the client-side in JavaScript. The web application handles the well selection, data retrieval and storage, and CSV export. It’s the JS that finds the shortest path between wells and handles the reading of several wells one after another. While it hasn’t made it into the UI yet, there is beta support for automated readings at a given time interval (one reading every 20 minutes, for example).